@toshicloud/sdk 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +82 -40
  2. package/dist/client.d.ts +33 -2
  3. package/dist/client.js +28 -3
  4. package/dist/errors.d.ts +74 -22
  5. package/dist/errors.js +99 -27
  6. package/dist/gen/toshi/permission_pb.d.ts +207 -2
  7. package/dist/gen/toshi/permission_pb.js +54 -2
  8. package/dist/gen/toshi/workspace/v1/account_pb.d.ts +590 -0
  9. package/dist/gen/toshi/workspace/v1/account_pb.js +75 -0
  10. package/dist/gen/toshi/workspace/v1/artifacts_pb.d.ts +14 -8
  11. package/dist/gen/toshi/workspace/v1/artifacts_pb.js +9 -7
  12. package/dist/gen/toshi/workspace/v1/audit_events_pb.d.ts +191 -6
  13. package/dist/gen/toshi/workspace/v1/audit_events_pb.js +11 -1
  14. package/dist/gen/toshi/workspace/v1/channels_pb.d.ts +1194 -21
  15. package/dist/gen/toshi/workspace/v1/channels_pb.js +185 -39
  16. package/dist/gen/toshi/workspace/v1/connections_pb.d.ts +1481 -0
  17. package/dist/gen/toshi/workspace/v1/connections_pb.js +208 -0
  18. package/dist/gen/toshi/workspace/v1/discovery_pb.d.ts +291 -43
  19. package/dist/gen/toshi/workspace/v1/discovery_pb.js +79 -30
  20. package/dist/gen/toshi/workspace/v1/display_pb.d.ts +198 -15
  21. package/dist/gen/toshi/workspace/v1/display_pb.js +52 -2
  22. package/dist/gen/toshi/workspace/v1/domains_pb.d.ts +864 -0
  23. package/dist/gen/toshi/workspace/v1/domains_pb.js +152 -0
  24. package/dist/gen/toshi/workspace/v1/fillers_pb.d.ts +12 -4
  25. package/dist/gen/toshi/workspace/v1/fillers_pb.js +1 -1
  26. package/dist/gen/toshi/workspace/v1/grants_pb.d.ts +1297 -0
  27. package/dist/gen/toshi/workspace/v1/grants_pb.js +271 -0
  28. package/dist/gen/toshi/workspace/v1/hostjobs_pb.d.ts +315 -15
  29. package/dist/gen/toshi/workspace/v1/hostjobs_pb.js +10 -5
  30. package/dist/gen/toshi/workspace/v1/hosts_pb.d.ts +196 -7
  31. package/dist/gen/toshi/workspace/v1/hosts_pb.js +12 -7
  32. package/dist/gen/toshi/workspace/v1/images_pb.d.ts +1463 -0
  33. package/dist/gen/toshi/workspace/v1/images_pb.js +263 -0
  34. package/dist/gen/toshi/workspace/v1/products_pb.d.ts +99 -296
  35. package/dist/gen/toshi/workspace/v1/products_pb.js +7 -53
  36. package/dist/gen/toshi/workspace/v1/projects_pb.d.ts +1474 -99
  37. package/dist/gen/toshi/workspace/v1/projects_pb.js +150 -33
  38. package/dist/gen/toshi/workspace/v1/recordings_pb.d.ts +181 -14
  39. package/dist/gen/toshi/workspace/v1/recordings_pb.js +54 -14
  40. package/dist/gen/toshi/workspace/v1/roles_pb.d.ts +1994 -0
  41. package/dist/gen/toshi/workspace/v1/roles_pb.js +355 -0
  42. package/dist/gen/toshi/workspace/v1/secrets_pb.d.ts +314 -8
  43. package/dist/gen/toshi/workspace/v1/secrets_pb.js +42 -18
  44. package/dist/gen/toshi/workspace/v1/storage_providers_pb.d.ts +14 -0
  45. package/dist/gen/toshi/workspace/v1/storage_providers_pb.js +1 -1
  46. package/dist/gen/toshi/workspace/v1/tokens_pb.d.ts +434 -5
  47. package/dist/gen/toshi/workspace/v1/tokens_pb.js +65 -8
  48. package/dist/gen/toshi/workspace/v1/triggers_pb.d.ts +1099 -0
  49. package/dist/gen/toshi/workspace/v1/triggers_pb.js +185 -0
  50. package/dist/gen/toshi/workspace/v1/volumes_pb.d.ts +1052 -33
  51. package/dist/gen/toshi/workspace/v1/volumes_pb.js +169 -11
  52. package/dist/gen/toshi/workspace/v1/webhook_pb.d.ts +66 -8
  53. package/dist/gen/toshi/workspace/v1/webhook_pb.js +4 -4
  54. package/dist/gen/toshi/workspace/v1/workloads_pb.d.ts +2043 -54
  55. package/dist/gen/toshi/workspace/v1/workloads_pb.js +204 -54
  56. package/dist/gen/toshi/workspace/v1/workspace_pb.d.ts +6290 -937
  57. package/dist/gen/toshi/workspace/v1/workspace_pb.js +801 -88
  58. package/dist/gen/toshi/workspace/v1/workspace_service_pb.d.ts +2176 -630
  59. package/dist/gen/toshi/workspace/v1/workspace_service_pb.js +191 -74
  60. package/dist/index.d.ts +8 -1
  61. package/dist/index.js +8 -1
  62. package/dist/interceptors.d.ts +6 -2
  63. package/dist/interceptors.js +13 -8
  64. package/dist/retry.d.ts +18 -0
  65. package/dist/retry.js +225 -23
  66. package/dist/test/procedures.js +100 -5
  67. package/dist/version.d.ts +1 -1
  68. package/dist/version.js +1 -1
  69. package/dist/wait.d.ts +4 -0
  70. package/dist/wait.js +24 -1
  71. package/package.json +3 -2
@@ -1,6 +1,8 @@
1
- import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
2
- import type { Timestamp, TimestampJson } from "@bufbuild/protobuf/wkt";
1
+ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
2
+ import type { FieldMask, FieldMaskJson, Timestamp, TimestampJson } from "@bufbuild/protobuf/wkt";
3
+ import type { FeatureSource, FeatureSourceJson } from "./discovery_pb.js";
3
4
  import type { HostEgress, HostEgressJson } from "./hosts_pb.js";
5
+ import type { Subject, SubjectJson } from "./roles_pb.js";
4
6
  import type { Message } from "@bufbuild/protobuf";
5
7
  /**
6
8
  * Describes the file toshi/workspace/v1/workspace_service.proto.
@@ -47,207 +49,254 @@ export declare const GetWorkspaceResponseSchema: GenMessage<GetWorkspaceResponse
47
49
  jsonType: GetWorkspaceResponseJson;
48
50
  }>;
49
51
  /**
50
- * @generated from message toshi.workspace.v1.ListWorkspacesRequest
52
+ * @generated from message toshi.workspace.v1.DeleteWorkspaceRequest
51
53
  */
52
- export type ListWorkspacesRequest = Message<"toshi.workspace.v1.ListWorkspacesRequest"> & {
54
+ export type DeleteWorkspaceRequest = Message<"toshi.workspace.v1.DeleteWorkspaceRequest"> & {
53
55
  /**
54
- * The most workspaces in one page; zero lets the server choose.
56
+ * The workspace's name, as GetWorkspace returns it.
55
57
  *
56
- * @generated from field: int32 page_size = 1;
58
+ * @generated from field: string confirm = 1;
57
59
  */
58
- pageSize: number;
60
+ confirm: string;
59
61
  /**
60
- * From an earlier response's next_page_token; empty for the first page.
62
+ * Why the workspace is deleted; kept as its state_reason.
61
63
  *
62
- * @generated from field: string page_token = 2;
64
+ * @generated from field: string reason = 2;
63
65
  */
64
- pageToken: string;
66
+ reason: string;
65
67
  };
66
68
  /**
67
- * @generated from message toshi.workspace.v1.ListWorkspacesRequest
69
+ * @generated from message toshi.workspace.v1.DeleteWorkspaceRequest
68
70
  */
69
- export type ListWorkspacesRequestJson = {
71
+ export type DeleteWorkspaceRequestJson = {
70
72
  /**
71
- * The most workspaces in one page; zero lets the server choose.
73
+ * The workspace's name, as GetWorkspace returns it.
72
74
  *
73
- * @generated from field: int32 page_size = 1;
75
+ * @generated from field: string confirm = 1;
74
76
  */
75
- pageSize?: number;
77
+ confirm?: string;
76
78
  /**
77
- * From an earlier response's next_page_token; empty for the first page.
79
+ * Why the workspace is deleted; kept as its state_reason.
78
80
  *
79
- * @generated from field: string page_token = 2;
81
+ * @generated from field: string reason = 2;
80
82
  */
81
- pageToken?: string;
83
+ reason?: string;
82
84
  };
83
85
  /**
84
- * Describes the message toshi.workspace.v1.ListWorkspacesRequest.
85
- * Use `create(ListWorkspacesRequestSchema)` to create a new message.
86
+ * Describes the message toshi.workspace.v1.DeleteWorkspaceRequest.
87
+ * Use `create(DeleteWorkspaceRequestSchema)` to create a new message.
86
88
  */
87
- export declare const ListWorkspacesRequestSchema: GenMessage<ListWorkspacesRequest, {
88
- jsonType: ListWorkspacesRequestJson;
89
+ export declare const DeleteWorkspaceRequestSchema: GenMessage<DeleteWorkspaceRequest, {
90
+ jsonType: DeleteWorkspaceRequestJson;
89
91
  }>;
90
92
  /**
91
- * @generated from message toshi.workspace.v1.ListWorkspacesResponse
93
+ * @generated from message toshi.workspace.v1.DeleteWorkspaceResponse
92
94
  */
93
- export type ListWorkspacesResponse = Message<"toshi.workspace.v1.ListWorkspacesResponse"> & {
95
+ export type DeleteWorkspaceResponse = Message<"toshi.workspace.v1.DeleteWorkspaceResponse"> & {
94
96
  /**
95
- * @generated from field: repeated toshi.workspace.v1.Workspace workspaces = 1;
96
- */
97
- workspaces: Workspace[];
98
- /**
99
- * Empty on the last page.
100
- *
101
- * @generated from field: string next_page_token = 2;
97
+ * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
102
98
  */
103
- nextPageToken: string;
99
+ workspace?: Workspace | undefined;
104
100
  };
105
101
  /**
106
- * @generated from message toshi.workspace.v1.ListWorkspacesResponse
102
+ * @generated from message toshi.workspace.v1.DeleteWorkspaceResponse
107
103
  */
108
- export type ListWorkspacesResponseJson = {
109
- /**
110
- * @generated from field: repeated toshi.workspace.v1.Workspace workspaces = 1;
111
- */
112
- workspaces?: WorkspaceJson[];
104
+ export type DeleteWorkspaceResponseJson = {
113
105
  /**
114
- * Empty on the last page.
115
- *
116
- * @generated from field: string next_page_token = 2;
106
+ * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
117
107
  */
118
- nextPageToken?: string;
108
+ workspace?: WorkspaceJson;
119
109
  };
120
110
  /**
121
- * Describes the message toshi.workspace.v1.ListWorkspacesResponse.
122
- * Use `create(ListWorkspacesResponseSchema)` to create a new message.
111
+ * Describes the message toshi.workspace.v1.DeleteWorkspaceResponse.
112
+ * Use `create(DeleteWorkspaceResponseSchema)` to create a new message.
123
113
  */
124
- export declare const ListWorkspacesResponseSchema: GenMessage<ListWorkspacesResponse, {
125
- jsonType: ListWorkspacesResponseJson;
114
+ export declare const DeleteWorkspaceResponseSchema: GenMessage<DeleteWorkspaceResponse, {
115
+ jsonType: DeleteWorkspaceResponseJson;
116
+ }>;
117
+ /**
118
+ * @generated from message toshi.workspace.v1.CancelWorkspaceDeletionRequest
119
+ */
120
+ export type CancelWorkspaceDeletionRequest = Message<"toshi.workspace.v1.CancelWorkspaceDeletionRequest"> & {};
121
+ /**
122
+ * @generated from message toshi.workspace.v1.CancelWorkspaceDeletionRequest
123
+ */
124
+ export type CancelWorkspaceDeletionRequestJson = {};
125
+ /**
126
+ * Describes the message toshi.workspace.v1.CancelWorkspaceDeletionRequest.
127
+ * Use `create(CancelWorkspaceDeletionRequestSchema)` to create a new message.
128
+ */
129
+ export declare const CancelWorkspaceDeletionRequestSchema: GenMessage<CancelWorkspaceDeletionRequest, {
130
+ jsonType: CancelWorkspaceDeletionRequestJson;
126
131
  }>;
127
132
  /**
128
- * @generated from message toshi.workspace.v1.SetWorkspaceOwnHostsOnlyResponse
133
+ * @generated from message toshi.workspace.v1.CancelWorkspaceDeletionResponse
129
134
  */
130
- export type SetWorkspaceOwnHostsOnlyResponse = Message<"toshi.workspace.v1.SetWorkspaceOwnHostsOnlyResponse"> & {
135
+ export type CancelWorkspaceDeletionResponse = Message<"toshi.workspace.v1.CancelWorkspaceDeletionResponse"> & {
131
136
  /**
132
137
  * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
133
138
  */
134
139
  workspace?: Workspace | undefined;
135
140
  };
136
141
  /**
137
- * @generated from message toshi.workspace.v1.SetWorkspaceOwnHostsOnlyResponse
142
+ * @generated from message toshi.workspace.v1.CancelWorkspaceDeletionResponse
138
143
  */
139
- export type SetWorkspaceOwnHostsOnlyResponseJson = {
144
+ export type CancelWorkspaceDeletionResponseJson = {
140
145
  /**
141
146
  * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
142
147
  */
143
148
  workspace?: WorkspaceJson;
144
149
  };
145
150
  /**
146
- * Describes the message toshi.workspace.v1.SetWorkspaceOwnHostsOnlyResponse.
147
- * Use `create(SetWorkspaceOwnHostsOnlyResponseSchema)` to create a new message.
151
+ * Describes the message toshi.workspace.v1.CancelWorkspaceDeletionResponse.
152
+ * Use `create(CancelWorkspaceDeletionResponseSchema)` to create a new message.
148
153
  */
149
- export declare const SetWorkspaceOwnHostsOnlyResponseSchema: GenMessage<SetWorkspaceOwnHostsOnlyResponse, {
150
- jsonType: SetWorkspaceOwnHostsOnlyResponseJson;
154
+ export declare const CancelWorkspaceDeletionResponseSchema: GenMessage<CancelWorkspaceDeletionResponse, {
155
+ jsonType: CancelWorkspaceDeletionResponseJson;
151
156
  }>;
152
157
  /**
153
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowOverflowResponse
158
+ * @generated from message toshi.workspace.v1.UpdateWorkspaceRequest
154
159
  */
155
- export type SetWorkspaceAllowOverflowResponse = Message<"toshi.workspace.v1.SetWorkspaceAllowOverflowResponse"> & {
160
+ export type UpdateWorkspaceRequest = Message<"toshi.workspace.v1.UpdateWorkspaceRequest"> & {
156
161
  /**
162
+ * Carries the new values of the fields update_mask names, and the etag
163
+ * the caller read, when it wants the change refused if another landed
164
+ * since.
165
+ *
157
166
  * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
158
167
  */
159
168
  workspace?: Workspace | undefined;
169
+ /**
170
+ * @generated from field: google.protobuf.FieldMask update_mask = 2;
171
+ */
172
+ updateMask?: FieldMask | undefined;
160
173
  };
161
174
  /**
162
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowOverflowResponse
175
+ * @generated from message toshi.workspace.v1.UpdateWorkspaceRequest
163
176
  */
164
- export type SetWorkspaceAllowOverflowResponseJson = {
177
+ export type UpdateWorkspaceRequestJson = {
165
178
  /**
179
+ * Carries the new values of the fields update_mask names, and the etag
180
+ * the caller read, when it wants the change refused if another landed
181
+ * since.
182
+ *
166
183
  * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
167
184
  */
168
185
  workspace?: WorkspaceJson;
186
+ /**
187
+ * @generated from field: google.protobuf.FieldMask update_mask = 2;
188
+ */
189
+ updateMask?: FieldMaskJson;
169
190
  };
170
191
  /**
171
- * Describes the message toshi.workspace.v1.SetWorkspaceAllowOverflowResponse.
172
- * Use `create(SetWorkspaceAllowOverflowResponseSchema)` to create a new message.
192
+ * Describes the message toshi.workspace.v1.UpdateWorkspaceRequest.
193
+ * Use `create(UpdateWorkspaceRequestSchema)` to create a new message.
173
194
  */
174
- export declare const SetWorkspaceAllowOverflowResponseSchema: GenMessage<SetWorkspaceAllowOverflowResponse, {
175
- jsonType: SetWorkspaceAllowOverflowResponseJson;
195
+ export declare const UpdateWorkspaceRequestSchema: GenMessage<UpdateWorkspaceRequest, {
196
+ jsonType: UpdateWorkspaceRequestJson;
176
197
  }>;
177
198
  /**
178
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowCacheWarmResponse
199
+ * @generated from message toshi.workspace.v1.UpdateWorkspaceResponse
179
200
  */
180
- export type SetWorkspaceAllowCacheWarmResponse = Message<"toshi.workspace.v1.SetWorkspaceAllowCacheWarmResponse"> & {
201
+ export type UpdateWorkspaceResponse = Message<"toshi.workspace.v1.UpdateWorkspaceResponse"> & {
181
202
  /**
182
203
  * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
183
204
  */
184
205
  workspace?: Workspace | undefined;
185
206
  };
186
207
  /**
187
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowCacheWarmResponse
208
+ * @generated from message toshi.workspace.v1.UpdateWorkspaceResponse
188
209
  */
189
- export type SetWorkspaceAllowCacheWarmResponseJson = {
210
+ export type UpdateWorkspaceResponseJson = {
190
211
  /**
191
212
  * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
192
213
  */
193
214
  workspace?: WorkspaceJson;
194
215
  };
195
216
  /**
196
- * Describes the message toshi.workspace.v1.SetWorkspaceAllowCacheWarmResponse.
197
- * Use `create(SetWorkspaceAllowCacheWarmResponseSchema)` to create a new message.
217
+ * Describes the message toshi.workspace.v1.UpdateWorkspaceResponse.
218
+ * Use `create(UpdateWorkspaceResponseSchema)` to create a new message.
198
219
  */
199
- export declare const SetWorkspaceAllowCacheWarmResponseSchema: GenMessage<SetWorkspaceAllowCacheWarmResponse, {
200
- jsonType: SetWorkspaceAllowCacheWarmResponseJson;
220
+ export declare const UpdateWorkspaceResponseSchema: GenMessage<UpdateWorkspaceResponse, {
221
+ jsonType: UpdateWorkspaceResponseJson;
201
222
  }>;
202
223
  /**
203
- * @generated from message toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathResponse
224
+ * @generated from message toshi.workspace.v1.ListWorkspacesRequest
204
225
  */
205
- export type SetWorkspaceCancelRunOnVmDeathResponse = Message<"toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathResponse"> & {
226
+ export type ListWorkspacesRequest = Message<"toshi.workspace.v1.ListWorkspacesRequest"> & {
206
227
  /**
207
- * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
228
+ * The most workspaces in one page; zero lets the server choose.
229
+ *
230
+ * @generated from field: int32 page_size = 1;
208
231
  */
209
- workspace?: Workspace | undefined;
232
+ pageSize: number;
233
+ /**
234
+ * From an earlier response's next_page_token; empty for the first page.
235
+ *
236
+ * @generated from field: string page_token = 2;
237
+ */
238
+ pageToken: string;
210
239
  };
211
240
  /**
212
- * @generated from message toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathResponse
241
+ * @generated from message toshi.workspace.v1.ListWorkspacesRequest
213
242
  */
214
- export type SetWorkspaceCancelRunOnVmDeathResponseJson = {
243
+ export type ListWorkspacesRequestJson = {
215
244
  /**
216
- * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
245
+ * The most workspaces in one page; zero lets the server choose.
246
+ *
247
+ * @generated from field: int32 page_size = 1;
217
248
  */
218
- workspace?: WorkspaceJson;
249
+ pageSize?: number;
250
+ /**
251
+ * From an earlier response's next_page_token; empty for the first page.
252
+ *
253
+ * @generated from field: string page_token = 2;
254
+ */
255
+ pageToken?: string;
219
256
  };
220
257
  /**
221
- * Describes the message toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathResponse.
222
- * Use `create(SetWorkspaceCancelRunOnVmDeathResponseSchema)` to create a new message.
258
+ * Describes the message toshi.workspace.v1.ListWorkspacesRequest.
259
+ * Use `create(ListWorkspacesRequestSchema)` to create a new message.
223
260
  */
224
- export declare const SetWorkspaceCancelRunOnVmDeathResponseSchema: GenMessage<SetWorkspaceCancelRunOnVmDeathResponse, {
225
- jsonType: SetWorkspaceCancelRunOnVmDeathResponseJson;
261
+ export declare const ListWorkspacesRequestSchema: GenMessage<ListWorkspacesRequest, {
262
+ jsonType: ListWorkspacesRequestJson;
226
263
  }>;
227
264
  /**
228
- * @generated from message toshi.workspace.v1.SetWorkspaceSpendLimitsResponse
265
+ * @generated from message toshi.workspace.v1.ListWorkspacesResponse
229
266
  */
230
- export type SetWorkspaceSpendLimitsResponse = Message<"toshi.workspace.v1.SetWorkspaceSpendLimitsResponse"> & {
267
+ export type ListWorkspacesResponse = Message<"toshi.workspace.v1.ListWorkspacesResponse"> & {
231
268
  /**
232
- * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
269
+ * @generated from field: repeated toshi.workspace.v1.Workspace workspaces = 1;
233
270
  */
234
- workspace?: Workspace | undefined;
271
+ workspaces: Workspace[];
272
+ /**
273
+ * Empty on the last page.
274
+ *
275
+ * @generated from field: string next_page_token = 2;
276
+ */
277
+ nextPageToken: string;
235
278
  };
236
279
  /**
237
- * @generated from message toshi.workspace.v1.SetWorkspaceSpendLimitsResponse
280
+ * @generated from message toshi.workspace.v1.ListWorkspacesResponse
238
281
  */
239
- export type SetWorkspaceSpendLimitsResponseJson = {
282
+ export type ListWorkspacesResponseJson = {
240
283
  /**
241
- * @generated from field: toshi.workspace.v1.Workspace workspace = 1;
284
+ * @generated from field: repeated toshi.workspace.v1.Workspace workspaces = 1;
242
285
  */
243
- workspace?: WorkspaceJson;
286
+ workspaces?: WorkspaceJson[];
287
+ /**
288
+ * Empty on the last page.
289
+ *
290
+ * @generated from field: string next_page_token = 2;
291
+ */
292
+ nextPageToken?: string;
244
293
  };
245
294
  /**
246
- * Describes the message toshi.workspace.v1.SetWorkspaceSpendLimitsResponse.
247
- * Use `create(SetWorkspaceSpendLimitsResponseSchema)` to create a new message.
295
+ * Describes the message toshi.workspace.v1.ListWorkspacesResponse.
296
+ * Use `create(ListWorkspacesResponseSchema)` to create a new message.
248
297
  */
249
- export declare const SetWorkspaceSpendLimitsResponseSchema: GenMessage<SetWorkspaceSpendLimitsResponse, {
250
- jsonType: SetWorkspaceSpendLimitsResponseJson;
298
+ export declare const ListWorkspacesResponseSchema: GenMessage<ListWorkspacesResponse, {
299
+ jsonType: ListWorkspacesResponseJson;
251
300
  }>;
252
301
  /**
253
302
  * @generated from message toshi.workspace.v1.GetWorkspaceBillingRequest
@@ -384,145 +433,283 @@ export declare const GetWorkspaceStatementResponseSchema: GenMessage<GetWorkspac
384
433
  jsonType: GetWorkspaceStatementResponseJson;
385
434
  }>;
386
435
  /**
387
- * @generated from message toshi.workspace.v1.SetWorkspaceOwnHostsOnlyRequest
436
+ * Seat is one assignment of a desktop seat to a person.
437
+ *
438
+ * @generated from message toshi.workspace.v1.Seat
388
439
  */
389
- export type SetWorkspaceOwnHostsOnlyRequest = Message<"toshi.workspace.v1.SetWorkspaceOwnHostsOnlyRequest"> & {
440
+ export type Seat = Message<"toshi.workspace.v1.Seat"> & {
390
441
  /**
391
- * @generated from field: bool own_hosts_only = 1;
442
+ * The seat's id, such as "seat-0f1e2d3c4b5a69788796a5b4".
443
+ *
444
+ * @generated from field: string id = 1;
392
445
  */
393
- ownHostsOnly: boolean;
446
+ id: string;
447
+ /**
448
+ * The Toshi user id of the person it is assigned to.
449
+ *
450
+ * @generated from field: string user_id = 2;
451
+ */
452
+ userId: string;
453
+ /**
454
+ * @generated from field: google.protobuf.Timestamp assigned_at = 3;
455
+ */
456
+ assignedAt?: Timestamp | undefined;
457
+ /**
458
+ * Who assigned it: a person, or the system for an operator's
459
+ * reassignment.
460
+ *
461
+ * @generated from field: toshi.workspace.v1.Subject assigned_by = 4;
462
+ */
463
+ assignedBy?: Subject | undefined;
464
+ /**
465
+ * When it was removed; unset while the seat is live.
466
+ *
467
+ * @generated from field: google.protobuf.Timestamp removed_at = 5;
468
+ */
469
+ removedAt?: Timestamp | undefined;
470
+ /**
471
+ * Who removed it; unset while the seat is live.
472
+ *
473
+ * @generated from field: toshi.workspace.v1.Subject removed_by = 6;
474
+ */
475
+ removedBy?: Subject | undefined;
476
+ /**
477
+ * The seat this one replaces when an operator moved a seat to this
478
+ * person within a month, and why: "hardware_failure" or
479
+ * "temporary_absence". Both are empty for an assigned seat, and the two
480
+ * seats are billed as one for that month.
481
+ *
482
+ * @generated from field: string replaces = 7;
483
+ */
484
+ replaces: string;
485
+ /**
486
+ * @generated from field: string replace_reason = 8;
487
+ */
488
+ replaceReason: string;
394
489
  };
395
490
  /**
396
- * @generated from message toshi.workspace.v1.SetWorkspaceOwnHostsOnlyRequest
491
+ * Seat is one assignment of a desktop seat to a person.
492
+ *
493
+ * @generated from message toshi.workspace.v1.Seat
397
494
  */
398
- export type SetWorkspaceOwnHostsOnlyRequestJson = {
495
+ export type SeatJson = {
399
496
  /**
400
- * @generated from field: bool own_hosts_only = 1;
497
+ * The seat's id, such as "seat-0f1e2d3c4b5a69788796a5b4".
498
+ *
499
+ * @generated from field: string id = 1;
401
500
  */
402
- ownHostsOnly?: boolean;
501
+ id?: string;
502
+ /**
503
+ * The Toshi user id of the person it is assigned to.
504
+ *
505
+ * @generated from field: string user_id = 2;
506
+ */
507
+ userId?: string;
508
+ /**
509
+ * @generated from field: google.protobuf.Timestamp assigned_at = 3;
510
+ */
511
+ assignedAt?: TimestampJson;
512
+ /**
513
+ * Who assigned it: a person, or the system for an operator's
514
+ * reassignment.
515
+ *
516
+ * @generated from field: toshi.workspace.v1.Subject assigned_by = 4;
517
+ */
518
+ assignedBy?: SubjectJson;
519
+ /**
520
+ * When it was removed; unset while the seat is live.
521
+ *
522
+ * @generated from field: google.protobuf.Timestamp removed_at = 5;
523
+ */
524
+ removedAt?: TimestampJson;
525
+ /**
526
+ * Who removed it; unset while the seat is live.
527
+ *
528
+ * @generated from field: toshi.workspace.v1.Subject removed_by = 6;
529
+ */
530
+ removedBy?: SubjectJson;
531
+ /**
532
+ * The seat this one replaces when an operator moved a seat to this
533
+ * person within a month, and why: "hardware_failure" or
534
+ * "temporary_absence". Both are empty for an assigned seat, and the two
535
+ * seats are billed as one for that month.
536
+ *
537
+ * @generated from field: string replaces = 7;
538
+ */
539
+ replaces?: string;
540
+ /**
541
+ * @generated from field: string replace_reason = 8;
542
+ */
543
+ replaceReason?: string;
403
544
  };
404
545
  /**
405
- * Describes the message toshi.workspace.v1.SetWorkspaceOwnHostsOnlyRequest.
406
- * Use `create(SetWorkspaceOwnHostsOnlyRequestSchema)` to create a new message.
546
+ * Describes the message toshi.workspace.v1.Seat.
547
+ * Use `create(SeatSchema)` to create a new message.
407
548
  */
408
- export declare const SetWorkspaceOwnHostsOnlyRequestSchema: GenMessage<SetWorkspaceOwnHostsOnlyRequest, {
409
- jsonType: SetWorkspaceOwnHostsOnlyRequestJson;
549
+ export declare const SeatSchema: GenMessage<Seat, {
550
+ jsonType: SeatJson;
410
551
  }>;
411
552
  /**
412
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowOverflowRequest
553
+ * @generated from message toshi.workspace.v1.ListSeatsRequest
413
554
  */
414
- export type SetWorkspaceAllowOverflowRequest = Message<"toshi.workspace.v1.SetWorkspaceAllowOverflowRequest"> & {
555
+ export type ListSeatsRequest = Message<"toshi.workspace.v1.ListSeatsRequest"> & {
415
556
  /**
416
- * @generated from field: bool allow_overflow = 1;
557
+ * The UTC month as YYYY-MM. Empty: the current month.
558
+ *
559
+ * @generated from field: string month = 1;
417
560
  */
418
- allowOverflow: boolean;
561
+ month: string;
419
562
  };
420
563
  /**
421
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowOverflowRequest
564
+ * @generated from message toshi.workspace.v1.ListSeatsRequest
422
565
  */
423
- export type SetWorkspaceAllowOverflowRequestJson = {
566
+ export type ListSeatsRequestJson = {
424
567
  /**
425
- * @generated from field: bool allow_overflow = 1;
568
+ * The UTC month as YYYY-MM. Empty: the current month.
569
+ *
570
+ * @generated from field: string month = 1;
426
571
  */
427
- allowOverflow?: boolean;
572
+ month?: string;
428
573
  };
429
574
  /**
430
- * Describes the message toshi.workspace.v1.SetWorkspaceAllowOverflowRequest.
431
- * Use `create(SetWorkspaceAllowOverflowRequestSchema)` to create a new message.
575
+ * Describes the message toshi.workspace.v1.ListSeatsRequest.
576
+ * Use `create(ListSeatsRequestSchema)` to create a new message.
432
577
  */
433
- export declare const SetWorkspaceAllowOverflowRequestSchema: GenMessage<SetWorkspaceAllowOverflowRequest, {
434
- jsonType: SetWorkspaceAllowOverflowRequestJson;
578
+ export declare const ListSeatsRequestSchema: GenMessage<ListSeatsRequest, {
579
+ jsonType: ListSeatsRequestJson;
435
580
  }>;
436
581
  /**
437
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowCacheWarmRequest
582
+ * @generated from message toshi.workspace.v1.ListSeatsResponse
438
583
  */
439
- export type SetWorkspaceAllowCacheWarmRequest = Message<"toshi.workspace.v1.SetWorkspaceAllowCacheWarmRequest"> & {
584
+ export type ListSeatsResponse = Message<"toshi.workspace.v1.ListSeatsResponse"> & {
440
585
  /**
441
- * @generated from field: bool allow_cache_warm = 1;
586
+ * @generated from field: repeated toshi.workspace.v1.Seat seats = 1;
442
587
  */
443
- allowCacheWarm: boolean;
588
+ seats: Seat[];
444
589
  };
445
590
  /**
446
- * @generated from message toshi.workspace.v1.SetWorkspaceAllowCacheWarmRequest
591
+ * @generated from message toshi.workspace.v1.ListSeatsResponse
447
592
  */
448
- export type SetWorkspaceAllowCacheWarmRequestJson = {
593
+ export type ListSeatsResponseJson = {
449
594
  /**
450
- * @generated from field: bool allow_cache_warm = 1;
595
+ * @generated from field: repeated toshi.workspace.v1.Seat seats = 1;
451
596
  */
452
- allowCacheWarm?: boolean;
597
+ seats?: SeatJson[];
453
598
  };
454
599
  /**
455
- * Describes the message toshi.workspace.v1.SetWorkspaceAllowCacheWarmRequest.
456
- * Use `create(SetWorkspaceAllowCacheWarmRequestSchema)` to create a new message.
600
+ * Describes the message toshi.workspace.v1.ListSeatsResponse.
601
+ * Use `create(ListSeatsResponseSchema)` to create a new message.
457
602
  */
458
- export declare const SetWorkspaceAllowCacheWarmRequestSchema: GenMessage<SetWorkspaceAllowCacheWarmRequest, {
459
- jsonType: SetWorkspaceAllowCacheWarmRequestJson;
603
+ export declare const ListSeatsResponseSchema: GenMessage<ListSeatsResponse, {
604
+ jsonType: ListSeatsResponseJson;
460
605
  }>;
461
606
  /**
462
- * @generated from message toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathRequest
607
+ * @generated from message toshi.workspace.v1.AssignSeatRequest
463
608
  */
464
- export type SetWorkspaceCancelRunOnVmDeathRequest = Message<"toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathRequest"> & {
609
+ export type AssignSeatRequest = Message<"toshi.workspace.v1.AssignSeatRequest"> & {
465
610
  /**
466
- * @generated from field: bool cancel_run_on_vm_death = 1;
611
+ * The Toshi user id of the member to assign a seat to.
612
+ *
613
+ * @generated from field: string user_id = 1;
467
614
  */
468
- cancelRunOnVmDeath: boolean;
615
+ userId: string;
469
616
  };
470
617
  /**
471
- * @generated from message toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathRequest
618
+ * @generated from message toshi.workspace.v1.AssignSeatRequest
472
619
  */
473
- export type SetWorkspaceCancelRunOnVmDeathRequestJson = {
620
+ export type AssignSeatRequestJson = {
474
621
  /**
475
- * @generated from field: bool cancel_run_on_vm_death = 1;
622
+ * The Toshi user id of the member to assign a seat to.
623
+ *
624
+ * @generated from field: string user_id = 1;
476
625
  */
477
- cancelRunOnVmDeath?: boolean;
626
+ userId?: string;
478
627
  };
479
628
  /**
480
- * Describes the message toshi.workspace.v1.SetWorkspaceCancelRunOnVmDeathRequest.
481
- * Use `create(SetWorkspaceCancelRunOnVmDeathRequestSchema)` to create a new message.
629
+ * Describes the message toshi.workspace.v1.AssignSeatRequest.
630
+ * Use `create(AssignSeatRequestSchema)` to create a new message.
482
631
  */
483
- export declare const SetWorkspaceCancelRunOnVmDeathRequestSchema: GenMessage<SetWorkspaceCancelRunOnVmDeathRequest, {
484
- jsonType: SetWorkspaceCancelRunOnVmDeathRequestJson;
632
+ export declare const AssignSeatRequestSchema: GenMessage<AssignSeatRequest, {
633
+ jsonType: AssignSeatRequestJson;
485
634
  }>;
486
635
  /**
487
- * @generated from message toshi.workspace.v1.SetWorkspaceSpendLimitsRequest
636
+ * @generated from message toshi.workspace.v1.AssignSeatResponse
488
637
  */
489
- export type SetWorkspaceSpendLimitsRequest = Message<"toshi.workspace.v1.SetWorkspaceSpendLimitsRequest"> & {
638
+ export type AssignSeatResponse = Message<"toshi.workspace.v1.AssignSeatResponse"> & {
490
639
  /**
491
- * Unset leaves the cap; 0 clears it.
492
- *
493
- * @generated from field: optional int64 spend_cap_cents = 1;
640
+ * @generated from field: toshi.workspace.v1.Seat seat = 1;
494
641
  */
495
- spendCapCents?: bigint | undefined;
642
+ seat?: Seat | undefined;
643
+ };
644
+ /**
645
+ * @generated from message toshi.workspace.v1.AssignSeatResponse
646
+ */
647
+ export type AssignSeatResponseJson = {
496
648
  /**
497
- * Unset leaves the limit; 0 clears the workspace's own limit.
498
- *
499
- * @generated from field: optional int32 max_jobs_per_hour = 2;
649
+ * @generated from field: toshi.workspace.v1.Seat seat = 1;
500
650
  */
501
- maxJobsPerHour?: number | undefined;
651
+ seat?: SeatJson;
502
652
  };
503
653
  /**
504
- * @generated from message toshi.workspace.v1.SetWorkspaceSpendLimitsRequest
654
+ * Describes the message toshi.workspace.v1.AssignSeatResponse.
655
+ * Use `create(AssignSeatResponseSchema)` to create a new message.
505
656
  */
506
- export type SetWorkspaceSpendLimitsRequestJson = {
657
+ export declare const AssignSeatResponseSchema: GenMessage<AssignSeatResponse, {
658
+ jsonType: AssignSeatResponseJson;
659
+ }>;
660
+ /**
661
+ * @generated from message toshi.workspace.v1.RemoveSeatRequest
662
+ */
663
+ export type RemoveSeatRequest = Message<"toshi.workspace.v1.RemoveSeatRequest"> & {
664
+ /**
665
+ * @generated from field: string seat_id = 1;
666
+ */
667
+ seatId: string;
668
+ };
669
+ /**
670
+ * @generated from message toshi.workspace.v1.RemoveSeatRequest
671
+ */
672
+ export type RemoveSeatRequestJson = {
673
+ /**
674
+ * @generated from field: string seat_id = 1;
675
+ */
676
+ seatId?: string;
677
+ };
678
+ /**
679
+ * Describes the message toshi.workspace.v1.RemoveSeatRequest.
680
+ * Use `create(RemoveSeatRequestSchema)` to create a new message.
681
+ */
682
+ export declare const RemoveSeatRequestSchema: GenMessage<RemoveSeatRequest, {
683
+ jsonType: RemoveSeatRequestJson;
684
+ }>;
685
+ /**
686
+ * @generated from message toshi.workspace.v1.RemoveSeatResponse
687
+ */
688
+ export type RemoveSeatResponse = Message<"toshi.workspace.v1.RemoveSeatResponse"> & {
507
689
  /**
508
- * Unset leaves the cap; 0 clears it.
690
+ * The seat as removed.
509
691
  *
510
- * @generated from field: optional int64 spend_cap_cents = 1;
692
+ * @generated from field: toshi.workspace.v1.Seat seat = 1;
511
693
  */
512
- spendCapCents?: string;
694
+ seat?: Seat | undefined;
695
+ };
696
+ /**
697
+ * @generated from message toshi.workspace.v1.RemoveSeatResponse
698
+ */
699
+ export type RemoveSeatResponseJson = {
513
700
  /**
514
- * Unset leaves the limit; 0 clears the workspace's own limit.
701
+ * The seat as removed.
515
702
  *
516
- * @generated from field: optional int32 max_jobs_per_hour = 2;
703
+ * @generated from field: toshi.workspace.v1.Seat seat = 1;
517
704
  */
518
- maxJobsPerHour?: number;
705
+ seat?: SeatJson;
519
706
  };
520
707
  /**
521
- * Describes the message toshi.workspace.v1.SetWorkspaceSpendLimitsRequest.
522
- * Use `create(SetWorkspaceSpendLimitsRequestSchema)` to create a new message.
708
+ * Describes the message toshi.workspace.v1.RemoveSeatResponse.
709
+ * Use `create(RemoveSeatResponseSchema)` to create a new message.
523
710
  */
524
- export declare const SetWorkspaceSpendLimitsRequestSchema: GenMessage<SetWorkspaceSpendLimitsRequest, {
525
- jsonType: SetWorkspaceSpendLimitsRequestJson;
711
+ export declare const RemoveSeatResponseSchema: GenMessage<RemoveSeatResponse, {
712
+ jsonType: RemoveSeatResponseJson;
526
713
  }>;
527
714
  /**
528
715
  * @generated from message toshi.workspace.v1.ListEgressIPsRequest
@@ -717,6 +904,13 @@ export type GetUsageResponse = Message<"toshi.workspace.v1.GetUsageResponse"> &
717
904
  * @generated from field: toshi.workspace.v1.FillerUsage filler = 4;
718
905
  */
719
906
  filler?: FillerUsage | undefined;
907
+ /**
908
+ * Stored data per UTC day and kind in the window, ordered by day, then
909
+ * kind. A day with no sampled hour has no rows.
910
+ *
911
+ * @generated from field: repeated toshi.workspace.v1.StorageUsageRow storage = 5;
912
+ */
913
+ storage: StorageUsageRow[];
720
914
  };
721
915
  /**
722
916
  * @generated from message toshi.workspace.v1.GetUsageResponse
@@ -746,6 +940,13 @@ export type GetUsageResponseJson = {
746
940
  * @generated from field: toshi.workspace.v1.FillerUsage filler = 4;
747
941
  */
748
942
  filler?: FillerUsageJson;
943
+ /**
944
+ * Stored data per UTC day and kind in the window, ordered by day, then
945
+ * kind. A day with no sampled hour has no rows.
946
+ *
947
+ * @generated from field: repeated toshi.workspace.v1.StorageUsageRow storage = 5;
948
+ */
949
+ storage?: StorageUsageRowJson[];
749
950
  };
750
951
  /**
751
952
  * Describes the message toshi.workspace.v1.GetUsageResponse.
@@ -1094,6 +1295,17 @@ export type CreateCheckoutSessionRequest = Message<"toshi.workspace.v1.CreateChe
1094
1295
  * @generated from field: string plan = 1;
1095
1296
  */
1096
1297
  plan: string;
1298
+ /**
1299
+ * Where the browser goes back to when checkout finishes or is cancelled.
1300
+ * The workspace id rides on it as the tenant query parameter, and billing
1301
+ * as checkout-done or checkout-cancelled; its own query is kept. Its
1302
+ * origin must be the control plane's public URL or a redirect URI origin
1303
+ * of a client declared in [[oauth.clients]]. Empty returns to the
1304
+ * control plane's dashboard.
1305
+ *
1306
+ * @generated from field: string return_url = 2;
1307
+ */
1308
+ returnUrl: string;
1097
1309
  };
1098
1310
  /**
1099
1311
  * @generated from message toshi.workspace.v1.CreateCheckoutSessionRequest
@@ -1103,6 +1315,17 @@ export type CreateCheckoutSessionRequestJson = {
1103
1315
  * @generated from field: string plan = 1;
1104
1316
  */
1105
1317
  plan?: string;
1318
+ /**
1319
+ * Where the browser goes back to when checkout finishes or is cancelled.
1320
+ * The workspace id rides on it as the tenant query parameter, and billing
1321
+ * as checkout-done or checkout-cancelled; its own query is kept. Its
1322
+ * origin must be the control plane's public URL or a redirect URI origin
1323
+ * of a client declared in [[oauth.clients]]. Empty returns to the
1324
+ * control plane's dashboard.
1325
+ *
1326
+ * @generated from field: string return_url = 2;
1327
+ */
1328
+ returnUrl?: string;
1106
1329
  };
1107
1330
  /**
1108
1331
  * Describes the message toshi.workspace.v1.CreateCheckoutSessionRequest.
@@ -1143,11 +1366,31 @@ export declare const CreateCheckoutSessionResponseSchema: GenMessage<CreateCheck
1143
1366
  /**
1144
1367
  * @generated from message toshi.workspace.v1.CreateBillingPortalSessionRequest
1145
1368
  */
1146
- export type CreateBillingPortalSessionRequest = Message<"toshi.workspace.v1.CreateBillingPortalSessionRequest"> & {};
1369
+ export type CreateBillingPortalSessionRequest = Message<"toshi.workspace.v1.CreateBillingPortalSessionRequest"> & {
1370
+ /**
1371
+ * Where the browser goes back to from the portal, with the workspace id as
1372
+ * the tenant query parameter; its own query is kept. The same origins as
1373
+ * CreateCheckoutSessionRequest.return_url are allowed. Empty returns to the
1374
+ * control plane's dashboard.
1375
+ *
1376
+ * @generated from field: string return_url = 1;
1377
+ */
1378
+ returnUrl: string;
1379
+ };
1147
1380
  /**
1148
1381
  * @generated from message toshi.workspace.v1.CreateBillingPortalSessionRequest
1149
1382
  */
1150
- export type CreateBillingPortalSessionRequestJson = {};
1383
+ export type CreateBillingPortalSessionRequestJson = {
1384
+ /**
1385
+ * Where the browser goes back to from the portal, with the workspace id as
1386
+ * the tenant query parameter; its own query is kept. The same origins as
1387
+ * CreateCheckoutSessionRequest.return_url are allowed. Empty returns to the
1388
+ * control plane's dashboard.
1389
+ *
1390
+ * @generated from field: string return_url = 1;
1391
+ */
1392
+ returnUrl?: string;
1393
+ };
1151
1394
  /**
1152
1395
  * Describes the message toshi.workspace.v1.CreateBillingPortalSessionRequest.
1153
1396
  * Use `create(CreateBillingPortalSessionRequestSchema)` to create a new message.
@@ -1297,25 +1540,6 @@ export type Workspace = Message<"toshi.workspace.v1.Workspace"> & {
1297
1540
  * @generated from field: string status = 7;
1298
1541
  */
1299
1542
  status: string;
1300
- /**
1301
- * The workspace's jobs wait for its own hosts and never run on shared ones.
1302
- *
1303
- * @generated from field: bool own_hosts_only = 8;
1304
- */
1305
- ownHostsOnly: boolean;
1306
- /**
1307
- * Monthly spending cap in the smallest unit of the billing currency; 0
1308
- * means none.
1309
- *
1310
- * @generated from field: int64 spend_cap_cents = 9;
1311
- */
1312
- spendCapCents: bigint;
1313
- /**
1314
- * The workspace's own jobs-per-hour limit; 0 means the plan's applies.
1315
- *
1316
- * @generated from field: int32 max_jobs_per_hour = 10;
1317
- */
1318
- maxJobsPerHour: number;
1319
1543
  /**
1320
1544
  * The limit the scheduler enforces: the lower of the workspace's and the
1321
1545
  * plan's; 0 means none.
@@ -1333,20 +1557,6 @@ export type Workspace = Message<"toshi.workspace.v1.Workspace"> & {
1333
1557
  * @generated from field: google.protobuf.Timestamp starter_credit_granted_at = 13;
1334
1558
  */
1335
1559
  starterCreditGrantedAt?: Timestamp | undefined;
1336
- /**
1337
- * Shared overflow hosts may take the workspace's jobs; its own overflow hosts
1338
- * always may.
1339
- *
1340
- * @generated from field: bool allow_overflow = 14;
1341
- */
1342
- allowOverflow: boolean;
1343
- /**
1344
- * Whether the workspace's dispatch fillers, its cache-warming workflows,
1345
- * run on idle capacity.
1346
- *
1347
- * @generated from field: bool allow_cache_warm = 15;
1348
- */
1349
- allowCacheWarm: boolean;
1350
1560
  /**
1351
1561
  * The workspace's effective reservations on shared hosts, ordered
1352
1562
  * by size: its own rows, and its plan's entries where it has none.
@@ -1364,7 +1574,8 @@ export type Workspace = Message<"toshi.workspace.v1.Workspace"> & {
1364
1574
  */
1365
1575
  state: string;
1366
1576
  /**
1367
- * Why the operator suspended or deleted the workspace; empty when active.
1577
+ * Why the operator suspended the workspace, or why it is deleted; empty
1578
+ * when active.
1368
1579
  *
1369
1580
  * @generated from field: string state_reason = 18;
1370
1581
  */
@@ -1382,12 +1593,13 @@ export type Workspace = Message<"toshi.workspace.v1.Workspace"> & {
1382
1593
  */
1383
1594
  purgeAfter?: Timestamp | undefined;
1384
1595
  /**
1385
- * Days of finished job history the workspace keeps; unset when the plan's
1386
- * applies. 0 keeps forever.
1596
+ * Who scheduled the deletion: "owner" for one of the workspace's Owners,
1597
+ * which an Owner may cancel with CancelWorkspaceDeletion, or "operator";
1598
+ * empty when none is scheduled.
1387
1599
  *
1388
- * @generated from field: optional int32 history_days = 21;
1600
+ * @generated from field: string deletion_by = 39;
1389
1601
  */
1390
- historyDays?: number | undefined;
1602
+ deletionBy: string;
1391
1603
  /**
1392
1604
  * The period the retention pass uses: the workspace's value when set, else
1393
1605
  * its plan's.
@@ -1395,14 +1607,6 @@ export type Workspace = Message<"toshi.workspace.v1.Workspace"> & {
1395
1607
  * @generated from field: int32 history_days_effective = 22;
1396
1608
  */
1397
1609
  historyDaysEffective: number;
1398
- /**
1399
- * Whether Toshi cancels the workflow run of a job whose VM is gone, so
1400
- * GitHub shows it within seconds as cancelled; off keeps GitHub's own
1401
- * failure, about 10 minutes later.
1402
- *
1403
- * @generated from field: bool cancel_run_on_vm_death = 23;
1404
- */
1405
- cancelRunOnVmDeath: boolean;
1406
1610
  /**
1407
1611
  * The workspace's own limits; unset when its plan's applies. 0 is no cap.
1408
1612
  *
@@ -1440,6 +1644,67 @@ export type Workspace = Message<"toshi.workspace.v1.Workspace"> & {
1440
1644
  * @generated from field: int32 preview_max_ports_effective = 31;
1441
1645
  */
1442
1646
  previewMaxPortsEffective: number;
1647
+ /**
1648
+ * What the workspace's members choose; UpdateWorkspace changes it.
1649
+ *
1650
+ * @generated from field: toshi.workspace.v1.WorkspaceSettings settings = 33;
1651
+ */
1652
+ settings?: WorkspaceSettings | undefined;
1653
+ /**
1654
+ * A hash of the name and the settings, which changes whenever they do.
1655
+ * UpdateWorkspace refuses a workspace that carries another one.
1656
+ *
1657
+ * @generated from field: string etag = 34;
1658
+ */
1659
+ etag: string;
1660
+ /**
1661
+ * The wildcard certificate of its services' provided names; unset when
1662
+ * it never hosted one.
1663
+ *
1664
+ * @generated from field: toshi.workspace.v1.HostingCertificate hosting_certificate = 35;
1665
+ */
1666
+ hostingCertificate?: HostingCertificate | undefined;
1667
+ /**
1668
+ * How many kept VMs the workspace may hold at once on its own hosts: its
1669
+ * plan's keep_vm.max, or the operator's override. 0 means keep_vm is
1670
+ * refused.
1671
+ *
1672
+ * @generated from field: int32 keep_vm_max_effective = 36;
1673
+ */
1674
+ keepVmMaxEffective: number;
1675
+ /**
1676
+ * Where keep_vm_max_effective comes from: the operator's override for the
1677
+ * workspace, its plan's keep_vm.max, or the default, 0, when the plan sets
1678
+ * none.
1679
+ *
1680
+ * @generated from field: toshi.workspace.v1.FeatureSource keep_vm_max_source = 41;
1681
+ */
1682
+ keepVmMaxSource: FeatureSource;
1683
+ /**
1684
+ * The workspace's kept VMs, and how many of them have been stopped for
1685
+ * over 30 days.
1686
+ *
1687
+ * @generated from field: int32 keep_vm_count = 37;
1688
+ */
1689
+ keepVmCount: number;
1690
+ /**
1691
+ * @generated from field: int32 keep_vm_stopped_long_count = 38;
1692
+ */
1693
+ keepVmStoppedLongCount: number;
1694
+ /**
1695
+ * Who last changed settings.recording, and when; unset while it was never
1696
+ * changed. Set by Toshi.
1697
+ *
1698
+ * @generated from field: toshi.workspace.v1.WorkspaceSettingChange recording_changed = 40;
1699
+ */
1700
+ recordingChanged?: WorkspaceSettingChange | undefined;
1701
+ /**
1702
+ * Who last changed settings.recording_human_spans, and when; unset while it
1703
+ * was never changed. Set by Toshi.
1704
+ *
1705
+ * @generated from field: toshi.workspace.v1.WorkspaceSettingChange recording_human_spans_changed = 42;
1706
+ */
1707
+ recordingHumanSpansChanged?: WorkspaceSettingChange | undefined;
1443
1708
  };
1444
1709
  /**
1445
1710
  * Workspace owns a plan, an optional concurrency override, and its GitHub
@@ -1482,25 +1747,6 @@ export type WorkspaceJson = {
1482
1747
  * @generated from field: string status = 7;
1483
1748
  */
1484
1749
  status?: string;
1485
- /**
1486
- * The workspace's jobs wait for its own hosts and never run on shared ones.
1487
- *
1488
- * @generated from field: bool own_hosts_only = 8;
1489
- */
1490
- ownHostsOnly?: boolean;
1491
- /**
1492
- * Monthly spending cap in the smallest unit of the billing currency; 0
1493
- * means none.
1494
- *
1495
- * @generated from field: int64 spend_cap_cents = 9;
1496
- */
1497
- spendCapCents?: string;
1498
- /**
1499
- * The workspace's own jobs-per-hour limit; 0 means the plan's applies.
1500
- *
1501
- * @generated from field: int32 max_jobs_per_hour = 10;
1502
- */
1503
- maxJobsPerHour?: number;
1504
1750
  /**
1505
1751
  * The limit the scheduler enforces: the lower of the workspace's and the
1506
1752
  * plan's; 0 means none.
@@ -1518,20 +1764,6 @@ export type WorkspaceJson = {
1518
1764
  * @generated from field: google.protobuf.Timestamp starter_credit_granted_at = 13;
1519
1765
  */
1520
1766
  starterCreditGrantedAt?: TimestampJson;
1521
- /**
1522
- * Shared overflow hosts may take the workspace's jobs; its own overflow hosts
1523
- * always may.
1524
- *
1525
- * @generated from field: bool allow_overflow = 14;
1526
- */
1527
- allowOverflow?: boolean;
1528
- /**
1529
- * Whether the workspace's dispatch fillers, its cache-warming workflows,
1530
- * run on idle capacity.
1531
- *
1532
- * @generated from field: bool allow_cache_warm = 15;
1533
- */
1534
- allowCacheWarm?: boolean;
1535
1767
  /**
1536
1768
  * The workspace's effective reservations on shared hosts, ordered
1537
1769
  * by size: its own rows, and its plan's entries where it has none.
@@ -1549,7 +1781,8 @@ export type WorkspaceJson = {
1549
1781
  */
1550
1782
  state?: string;
1551
1783
  /**
1552
- * Why the operator suspended or deleted the workspace; empty when active.
1784
+ * Why the operator suspended the workspace, or why it is deleted; empty
1785
+ * when active.
1553
1786
  *
1554
1787
  * @generated from field: string state_reason = 18;
1555
1788
  */
@@ -1567,12 +1800,13 @@ export type WorkspaceJson = {
1567
1800
  */
1568
1801
  purgeAfter?: TimestampJson;
1569
1802
  /**
1570
- * Days of finished job history the workspace keeps; unset when the plan's
1571
- * applies. 0 keeps forever.
1803
+ * Who scheduled the deletion: "owner" for one of the workspace's Owners,
1804
+ * which an Owner may cancel with CancelWorkspaceDeletion, or "operator";
1805
+ * empty when none is scheduled.
1572
1806
  *
1573
- * @generated from field: optional int32 history_days = 21;
1807
+ * @generated from field: string deletion_by = 39;
1574
1808
  */
1575
- historyDays?: number;
1809
+ deletionBy?: string;
1576
1810
  /**
1577
1811
  * The period the retention pass uses: the workspace's value when set, else
1578
1812
  * its plan's.
@@ -1580,14 +1814,6 @@ export type WorkspaceJson = {
1580
1814
  * @generated from field: int32 history_days_effective = 22;
1581
1815
  */
1582
1816
  historyDaysEffective?: number;
1583
- /**
1584
- * Whether Toshi cancels the workflow run of a job whose VM is gone, so
1585
- * GitHub shows it within seconds as cancelled; off keeps GitHub's own
1586
- * failure, about 10 minutes later.
1587
- *
1588
- * @generated from field: bool cancel_run_on_vm_death = 23;
1589
- */
1590
- cancelRunOnVmDeath?: boolean;
1591
1817
  /**
1592
1818
  * The workspace's own limits; unset when its plan's applies. 0 is no cap.
1593
1819
  *
@@ -1625,6 +1851,67 @@ export type WorkspaceJson = {
1625
1851
  * @generated from field: int32 preview_max_ports_effective = 31;
1626
1852
  */
1627
1853
  previewMaxPortsEffective?: number;
1854
+ /**
1855
+ * What the workspace's members choose; UpdateWorkspace changes it.
1856
+ *
1857
+ * @generated from field: toshi.workspace.v1.WorkspaceSettings settings = 33;
1858
+ */
1859
+ settings?: WorkspaceSettingsJson;
1860
+ /**
1861
+ * A hash of the name and the settings, which changes whenever they do.
1862
+ * UpdateWorkspace refuses a workspace that carries another one.
1863
+ *
1864
+ * @generated from field: string etag = 34;
1865
+ */
1866
+ etag?: string;
1867
+ /**
1868
+ * The wildcard certificate of its services' provided names; unset when
1869
+ * it never hosted one.
1870
+ *
1871
+ * @generated from field: toshi.workspace.v1.HostingCertificate hosting_certificate = 35;
1872
+ */
1873
+ hostingCertificate?: HostingCertificateJson;
1874
+ /**
1875
+ * How many kept VMs the workspace may hold at once on its own hosts: its
1876
+ * plan's keep_vm.max, or the operator's override. 0 means keep_vm is
1877
+ * refused.
1878
+ *
1879
+ * @generated from field: int32 keep_vm_max_effective = 36;
1880
+ */
1881
+ keepVmMaxEffective?: number;
1882
+ /**
1883
+ * Where keep_vm_max_effective comes from: the operator's override for the
1884
+ * workspace, its plan's keep_vm.max, or the default, 0, when the plan sets
1885
+ * none.
1886
+ *
1887
+ * @generated from field: toshi.workspace.v1.FeatureSource keep_vm_max_source = 41;
1888
+ */
1889
+ keepVmMaxSource?: FeatureSourceJson;
1890
+ /**
1891
+ * The workspace's kept VMs, and how many of them have been stopped for
1892
+ * over 30 days.
1893
+ *
1894
+ * @generated from field: int32 keep_vm_count = 37;
1895
+ */
1896
+ keepVmCount?: number;
1897
+ /**
1898
+ * @generated from field: int32 keep_vm_stopped_long_count = 38;
1899
+ */
1900
+ keepVmStoppedLongCount?: number;
1901
+ /**
1902
+ * Who last changed settings.recording, and when; unset while it was never
1903
+ * changed. Set by Toshi.
1904
+ *
1905
+ * @generated from field: toshi.workspace.v1.WorkspaceSettingChange recording_changed = 40;
1906
+ */
1907
+ recordingChanged?: WorkspaceSettingChangeJson;
1908
+ /**
1909
+ * Who last changed settings.recording_human_spans, and when; unset while it
1910
+ * was never changed. Set by Toshi.
1911
+ *
1912
+ * @generated from field: toshi.workspace.v1.WorkspaceSettingChange recording_human_spans_changed = 42;
1913
+ */
1914
+ recordingHumanSpansChanged?: WorkspaceSettingChangeJson;
1628
1915
  };
1629
1916
  /**
1630
1917
  * Describes the message toshi.workspace.v1.Workspace.
@@ -1634,279 +1921,583 @@ export declare const WorkspaceSchema: GenMessage<Workspace, {
1634
1921
  jsonType: WorkspaceJson;
1635
1922
  }>;
1636
1923
  /**
1637
- * Reservation is a workspace's floor of slots jobs of one runner size on shared
1638
- * hosts, warm of them on warm VMs.
1924
+ * HostingCertificate is a workspace's wildcard certificate for its
1925
+ * services' provided names. Toshi orders it when the workspace first
1926
+ * hosts a service with an http channel and renews it before it expires.
1639
1927
  *
1640
- * @generated from message toshi.workspace.v1.Reservation
1928
+ * @generated from message toshi.workspace.v1.HostingCertificate
1641
1929
  */
1642
- export type Reservation = Message<"toshi.workspace.v1.Reservation"> & {
1930
+ export type HostingCertificate = Message<"toshi.workspace.v1.HostingCertificate"> & {
1643
1931
  /**
1644
- * A runner size, as a runs-on label.
1932
+ * The wildcard name, *.<workspace id>.svc.<domain>.
1645
1933
  *
1646
- * @generated from field: string size = 1;
1934
+ * @generated from field: string name = 1;
1647
1935
  */
1648
- size: string;
1936
+ name: string;
1649
1937
  /**
1650
- * How many slots are reserved; at least 1.
1938
+ * @generated from field: toshi.workspace.v1.HostingCertificateState state = 2;
1939
+ */
1940
+ state: HostingCertificateState;
1941
+ /**
1942
+ * When the certificate in use expires; unset before the first one.
1651
1943
  *
1652
- * @generated from field: int32 slots = 2;
1944
+ * @generated from field: google.protobuf.Timestamp not_after = 3;
1653
1945
  */
1654
- slots: number;
1946
+ notAfter?: Timestamp | undefined;
1655
1947
  /**
1656
- * How many of the slots are kept on warm VMs; 0 when none.
1948
+ * When Toshi renews it; unset before the first one.
1657
1949
  *
1658
- * @generated from field: int32 warm = 3;
1950
+ * @generated from field: google.protobuf.Timestamp renew_at = 4;
1659
1951
  */
1660
- warm: number;
1952
+ renewAt?: Timestamp | undefined;
1661
1953
  /**
1662
- * "tenant" when the workspace's own row set it, "plan" when its plan did.
1954
+ * When Toshi tries again after a failure or a rate limit; unset when
1955
+ * nothing failed.
1663
1956
  *
1664
- * @generated from field: string source = 4;
1957
+ * @generated from field: google.protobuf.Timestamp retry_at = 5;
1665
1958
  */
1666
- source: string;
1959
+ retryAt?: Timestamp | undefined;
1960
+ /**
1961
+ * Why the last order or renewal failed; empty when the last one
1962
+ * succeeded.
1963
+ *
1964
+ * @generated from field: string error = 6;
1965
+ */
1966
+ error: string;
1667
1967
  };
1668
1968
  /**
1669
- * Reservation is a workspace's floor of slots jobs of one runner size on shared
1670
- * hosts, warm of them on warm VMs.
1969
+ * HostingCertificate is a workspace's wildcard certificate for its
1970
+ * services' provided names. Toshi orders it when the workspace first
1971
+ * hosts a service with an http channel and renews it before it expires.
1671
1972
  *
1672
- * @generated from message toshi.workspace.v1.Reservation
1973
+ * @generated from message toshi.workspace.v1.HostingCertificate
1673
1974
  */
1674
- export type ReservationJson = {
1975
+ export type HostingCertificateJson = {
1675
1976
  /**
1676
- * A runner size, as a runs-on label.
1977
+ * The wildcard name, *.<workspace id>.svc.<domain>.
1677
1978
  *
1678
- * @generated from field: string size = 1;
1979
+ * @generated from field: string name = 1;
1679
1980
  */
1680
- size?: string;
1981
+ name?: string;
1681
1982
  /**
1682
- * How many slots are reserved; at least 1.
1983
+ * @generated from field: toshi.workspace.v1.HostingCertificateState state = 2;
1984
+ */
1985
+ state?: HostingCertificateStateJson;
1986
+ /**
1987
+ * When the certificate in use expires; unset before the first one.
1683
1988
  *
1684
- * @generated from field: int32 slots = 2;
1989
+ * @generated from field: google.protobuf.Timestamp not_after = 3;
1685
1990
  */
1686
- slots?: number;
1991
+ notAfter?: TimestampJson;
1687
1992
  /**
1688
- * How many of the slots are kept on warm VMs; 0 when none.
1993
+ * When Toshi renews it; unset before the first one.
1689
1994
  *
1690
- * @generated from field: int32 warm = 3;
1995
+ * @generated from field: google.protobuf.Timestamp renew_at = 4;
1691
1996
  */
1692
- warm?: number;
1997
+ renewAt?: TimestampJson;
1693
1998
  /**
1694
- * "tenant" when the workspace's own row set it, "plan" when its plan did.
1999
+ * When Toshi tries again after a failure or a rate limit; unset when
2000
+ * nothing failed.
1695
2001
  *
1696
- * @generated from field: string source = 4;
2002
+ * @generated from field: google.protobuf.Timestamp retry_at = 5;
1697
2003
  */
1698
- source?: string;
2004
+ retryAt?: TimestampJson;
2005
+ /**
2006
+ * Why the last order or renewal failed; empty when the last one
2007
+ * succeeded.
2008
+ *
2009
+ * @generated from field: string error = 6;
2010
+ */
2011
+ error?: string;
1699
2012
  };
1700
2013
  /**
1701
- * Describes the message toshi.workspace.v1.Reservation.
1702
- * Use `create(ReservationSchema)` to create a new message.
2014
+ * Describes the message toshi.workspace.v1.HostingCertificate.
2015
+ * Use `create(HostingCertificateSchema)` to create a new message.
1703
2016
  */
1704
- export declare const ReservationSchema: GenMessage<Reservation, {
1705
- jsonType: ReservationJson;
2017
+ export declare const HostingCertificateSchema: GenMessage<HostingCertificate, {
2018
+ jsonType: HostingCertificateJson;
1706
2019
  }>;
1707
2020
  /**
1708
- * WorkspaceBilling is the workspace's billing link, its subscription's
1709
- * status and the usage reported to the billing provider.
2021
+ * WorkspaceSettings is everything a workspace's members choose about it,
2022
+ * each a field UpdateWorkspace names as "settings.<field>".
1710
2023
  *
1711
- * @generated from message toshi.workspace.v1.WorkspaceBilling
2024
+ * @generated from message toshi.workspace.v1.WorkspaceSettings
1712
2025
  */
1713
- export type WorkspaceBilling = Message<"toshi.workspace.v1.WorkspaceBilling"> & {
2026
+ export type WorkspaceSettings = Message<"toshi.workspace.v1.WorkspaceSettings"> & {
1714
2027
  /**
1715
- * Empty when the workspace is not linked to a customer.
2028
+ * Who may join the workspace through its GitHub App installation on an
2029
+ * organisation without an invitation: "off", nobody (the default);
2030
+ * "approve", a member of the organisation who signs in waits for a
2031
+ * workspace admin to approve them; "open", such a member joins at once.
2032
+ * Joining grants no role. Another value fails with INVALID_ARGUMENT.
2033
+ * Turning it off removes no member and leaves the people waiting for
2034
+ * approval listed and approvable.
1716
2035
  *
1717
- * @generated from field: string customer_id = 1;
2036
+ * @generated from field: string member_join = 1;
1718
2037
  */
1719
- customerId: string;
2038
+ memberJoin: string;
1720
2039
  /**
1721
- * Empty when no subscription has set the plan.
2040
+ * The sign-in provider the workspace requires of its people; unset when it
2041
+ * requires none. Setting it names an OpenID Connect provider entry the
2042
+ * control plane has (GET /auth/providers lists them) and needs a person
2043
+ * whose own session or token was signed in through it, so it is known to
2044
+ * work before it is enforced; otherwise FAILED_PRECONDITION with the
2045
+ * reason SIGNIN_UNTESTED. A name the control plane does not have fails
2046
+ * with INVALID_ARGUMENT. A workspace token can only clear it, by naming
2047
+ * the path with no provider; one that sets it fails with
2048
+ * PERMISSION_DENIED. Members with no identity at the provider
2049
+ * lose the workspace until they link one; nothing is deleted.
1722
2050
  *
1723
- * @generated from field: string subscription_id = 2;
2051
+ * @generated from field: toshi.workspace.v1.WorkspaceSignIn sign_in = 2;
1724
2052
  */
1725
- subscriptionId: string;
2053
+ signIn?: WorkspaceSignIn | undefined;
1726
2054
  /**
1727
- * When billable usage begins; unset when the workspace is not billed.
2055
+ * Days of finished job history the workspace keeps; unset when the plan's
2056
+ * applies, and 0 keeps forever. A member may set it from 1 up to the
2057
+ * plan's period, and 0 only on a plan that keeps forever; a longer one
2058
+ * fails with INVALID_ARGUMENT. Naming it in the update mask with no value
2059
+ * clears it, so the plan's applies again.
1728
2060
  *
1729
- * @generated from field: google.protobuf.Timestamp billing_started_at = 3;
2061
+ * @generated from field: optional int32 history_days = 3;
1730
2062
  */
1731
- billingStartedAt?: Timestamp | undefined;
2063
+ historyDays?: number | undefined;
1732
2064
  /**
1733
- * The provider's status of the subscription from the last event applied,
1734
- * such as active or past_due; empty when no event has been applied.
2065
+ * The workspace's jobs wait for its own hosts and never run on shared ones.
1735
2066
  *
1736
- * @generated from field: string subscription_status = 4;
2067
+ * @generated from field: bool own_hosts_only = 4;
1737
2068
  */
1738
- subscriptionStatus: string;
2069
+ ownHostsOnly: boolean;
1739
2070
  /**
1740
- * When the subscription entered subscription_status.
2071
+ * Shared overflow hosts may take the workspace's jobs; its own overflow
2072
+ * hosts always may.
1741
2073
  *
1742
- * @generated from field: google.protobuf.Timestamp subscription_status_since = 5;
2074
+ * @generated from field: bool allow_overflow = 5;
1743
2075
  */
1744
- subscriptionStatusSince?: Timestamp | undefined;
2076
+ allowOverflow: boolean;
1745
2077
  /**
1746
- * Meter events per UTC month and runner size, newest month first.
2078
+ * Whether the workspace's dispatch fillers, its cache-warming workflows,
2079
+ * run on idle capacity. Off by default.
1747
2080
  *
1748
- * @generated from field: repeated toshi.workspace.v1.BillingTotals totals = 6;
2081
+ * @generated from field: bool allow_cache_warm = 6;
1749
2082
  */
1750
- totals: BillingTotals[];
2083
+ allowCacheWarm: boolean;
1751
2084
  /**
1752
- * The workspace's failed meter events, most recently failed first, at
1753
- * most 50.
2085
+ * Whether Toshi cancels the workflow run of a job whose VM is gone, so
2086
+ * GitHub shows it within seconds as cancelled; off keeps GitHub's own
2087
+ * failure, about 10 minutes later. On by default.
1754
2088
  *
1755
- * @generated from field: repeated toshi.workspace.v1.BillingEventFailure failed_events = 7;
2089
+ * @generated from field: bool cancel_run_on_vm_death = 7;
1756
2090
  */
1757
- failedEvents: BillingEventFailure[];
2091
+ cancelRunOnVmDeath: boolean;
1758
2092
  /**
1759
- * Minutes of the workspace's jobs that finished this UTC calendar month, as
1760
- * its statement counts them. The free allowance counts these, with or
1761
- * without a billing customer.
2093
+ * Monthly spending cap in the smallest unit of the billing currency; 0
2094
+ * means none. At most 2^50; a new cap while billing is off, or on a
2095
+ * workspace with no billing customer, fails with FAILED_PRECONDITION.
1762
2096
  *
1763
- * @generated from field: int64 minutes_this_month = 8;
2097
+ * @generated from field: int64 spend_cap_cents = 8;
1764
2098
  */
1765
- minutesThisMonth: bigint;
2099
+ spendCapCents: bigint;
1766
2100
  /**
1767
- * The free minutes per UTC calendar month of the workspace's plan; 0 when the
1768
- * plan has none.
2101
+ * The workspace's own jobs-per-hour limit; 0 means the plan's applies. It
2102
+ * may only lower the plan's limit: a higher one fails with
2103
+ * INVALID_ARGUMENT.
1769
2104
  *
1770
- * @generated from field: int64 free_minutes_per_month = 9;
2105
+ * @generated from field: int32 max_jobs_per_hour = 9;
1771
2106
  */
1772
- freeMinutesPerMonth: bigint;
2107
+ maxJobsPerHour: number;
1773
2108
  /**
1774
- * Whether the billing customer has a payment method.
2109
+ * Whether the workspace's services and sandboxes may set keep_vm, which
2110
+ * keeps a workload's VM on one of the workspace's own hosts across its
2111
+ * stops and sleeps. Off by default; keep_vm_max_effective must be above 0
2112
+ * too.
1775
2113
  *
1776
- * @generated from field: bool card_verified = 10;
2114
+ * @generated from field: bool keep_vm = 10;
1777
2115
  */
1778
- cardVerified: boolean;
2116
+ keepVm: boolean;
1779
2117
  /**
1780
- * When Toshi first saw a payment method on the billing customer; unset
1781
- * without one.
2118
+ * Whether the workspace's hosts record its jobs' screens; left out is on.
2119
+ * While it is off, a job create that names a strip or a video fails with
2120
+ * FAILED_PRECONDITION, one that names none records nothing, and
2121
+ * RECORDING_POLICY_OFF is always accepted. Switching it off stops every
2122
+ * strip and video of the workspace being captured, within one of its
2123
+ * host's heartbeats: each becomes ready, truncated, with the reason
2124
+ * "recording was switched off for the workspace", when its run ends, and
2125
+ * no new one starts. Switching it on applies to jobs created after it. It
2126
+ * does not cover the recordings a run uploads itself.
1782
2127
  *
1783
- * @generated from field: google.protobuf.Timestamp card_verified_at = 11;
2128
+ * @generated from field: optional bool recording = 11;
1784
2129
  */
1785
- cardVerifiedAt?: Timestamp | undefined;
2130
+ recording?: boolean | undefined;
1786
2131
  /**
1787
- * The spending cap; 0 when none.
2132
+ * Whether a sandbox's strips keep the screenshots of a person's control
2133
+ * through a viewer with input; left out is off, and a person's span is left
2134
+ * out of the strip as a gap. Switching it applies to the person's next
2135
+ * control, and switching it off stops an open span's screenshots within one
2136
+ * interval.
1788
2137
  *
1789
- * @generated from field: int64 spend_cap_cents = 12;
2138
+ * @generated from field: optional bool recording_human_spans = 12;
1790
2139
  */
1791
- spendCapCents: bigint;
2140
+ recordingHumanSpans?: boolean | undefined;
2141
+ };
2142
+ /**
2143
+ * WorkspaceSettings is everything a workspace's members choose about it,
2144
+ * each a field UpdateWorkspace names as "settings.<field>".
2145
+ *
2146
+ * @generated from message toshi.workspace.v1.WorkspaceSettings
2147
+ */
2148
+ export type WorkspaceSettingsJson = {
1792
2149
  /**
1793
- * Estimated metered spend this UTC month, rounded up: finished jobs plus
1794
- * what running ones have run so far, at the plan's current prices.
2150
+ * Who may join the workspace through its GitHub App installation on an
2151
+ * organisation without an invitation: "off", nobody (the default);
2152
+ * "approve", a member of the organisation who signs in waits for a
2153
+ * workspace admin to approve them; "open", such a member joins at once.
2154
+ * Joining grants no role. Another value fails with INVALID_ARGUMENT.
2155
+ * Turning it off removes no member and leaves the people waiting for
2156
+ * approval listed and approvable.
1795
2157
  *
1796
- * @generated from field: int64 spend_cents = 13;
2158
+ * @generated from field: string member_join = 1;
1797
2159
  */
1798
- spendCents: bigint;
2160
+ memberJoin?: string;
1799
2161
  /**
1800
- * 0, 80 or 100: the share of the cap spend_cents has reached.
2162
+ * The sign-in provider the workspace requires of its people; unset when it
2163
+ * requires none. Setting it names an OpenID Connect provider entry the
2164
+ * control plane has (GET /auth/providers lists them) and needs a person
2165
+ * whose own session or token was signed in through it, so it is known to
2166
+ * work before it is enforced; otherwise FAILED_PRECONDITION with the
2167
+ * reason SIGNIN_UNTESTED. A name the control plane does not have fails
2168
+ * with INVALID_ARGUMENT. A workspace token can only clear it, by naming
2169
+ * the path with no provider; one that sets it fails with
2170
+ * PERMISSION_DENIED. Members with no identity at the provider
2171
+ * lose the workspace until they link one; nothing is deleted.
1801
2172
  *
1802
- * @generated from field: int32 spend_level = 14;
2173
+ * @generated from field: toshi.workspace.v1.WorkspaceSignIn sign_in = 2;
1803
2174
  */
1804
- spendLevel: number;
2175
+ signIn?: WorkspaceSignInJson;
1805
2176
  /**
1806
- * The currency of the plan's prices, lower case; empty when unknown.
2177
+ * Days of finished job history the workspace keeps; unset when the plan's
2178
+ * applies, and 0 keeps forever. A member may set it from 1 up to the
2179
+ * plan's period, and 0 only on a plan that keeps forever; a longer one
2180
+ * fails with INVALID_ARGUMENT. Naming it in the update mask with no value
2181
+ * clears it, so the plan's applies again.
1807
2182
  *
1808
- * @generated from field: string currency = 15;
2183
+ * @generated from field: optional int32 history_days = 3;
1809
2184
  */
1810
- currency: string;
2185
+ historyDays?: number;
1811
2186
  /**
1812
- * False when the billing provider's prices are not known yet, so
1813
- * spend_cents means nothing.
2187
+ * The workspace's jobs wait for its own hosts and never run on shared ones.
1814
2188
  *
1815
- * @generated from field: bool spend_known = 16;
2189
+ * @generated from field: bool own_hosts_only = 4;
1816
2190
  */
1817
- spendKnown: boolean;
2191
+ ownHostsOnly?: boolean;
1818
2192
  /**
1819
- * Starter credit granted, and an estimate of what is left: the credit
1820
- * less the metered spend since billing started.
2193
+ * Shared overflow hosts may take the workspace's jobs; its own overflow
2194
+ * hosts always may.
1821
2195
  *
1822
- * @generated from field: int64 starter_credit_cents = 17;
2196
+ * @generated from field: bool allow_overflow = 5;
1823
2197
  */
1824
- starterCreditCents: bigint;
2198
+ allowOverflow?: boolean;
1825
2199
  /**
1826
- * @generated from field: int64 starter_credit_left_cents = 18;
2200
+ * Whether the workspace's dispatch fillers, its cache-warming workflows,
2201
+ * run on idle capacity. Off by default.
2202
+ *
2203
+ * @generated from field: bool allow_cache_warm = 6;
1827
2204
  */
1828
- starterCreditLeftCents: bigint;
2205
+ allowCacheWarm?: boolean;
1829
2206
  /**
1830
- * When the credit reached the billing customer; unset before.
2207
+ * Whether Toshi cancels the workflow run of a job whose VM is gone, so
2208
+ * GitHub shows it within seconds as cancelled; off keeps GitHub's own
2209
+ * failure, about 10 minutes later. On by default.
1831
2210
  *
1832
- * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 19;
2211
+ * @generated from field: bool cancel_run_on_vm_death = 7;
1833
2212
  */
1834
- starterCreditAppliedAt?: Timestamp | undefined;
2213
+ cancelRunOnVmDeath?: boolean;
1835
2214
  /**
1836
- * True when a billing provider is configured; false means nothing is metered or charged.
2215
+ * Monthly spending cap in the smallest unit of the billing currency; 0
2216
+ * means none. At most 2^50; a new cap while billing is off, or on a
2217
+ * workspace with no billing customer, fails with FAILED_PRECONDITION.
1837
2218
  *
1838
- * @generated from field: bool billing_enabled = 20;
2219
+ * @generated from field: int64 spend_cap_cents = 8;
1839
2220
  */
1840
- billingEnabled: boolean;
2221
+ spendCapCents?: string;
1841
2222
  /**
1842
- * The workspace's jobs held now, by reason, in the order GetQueueTimes lists
1843
- * the reasons.
2223
+ * The workspace's own jobs-per-hour limit; 0 means the plan's applies. It
2224
+ * may only lower the plan's limit: a higher one fails with
2225
+ * INVALID_ARGUMENT.
1844
2226
  *
1845
- * @generated from field: repeated toshi.workspace.v1.WorkspaceBilling.HeldJobs held_now = 21;
2227
+ * @generated from field: int32 max_jobs_per_hour = 9;
1846
2228
  */
1847
- heldNow: WorkspaceBilling_HeldJobs[];
2229
+ maxJobsPerHour?: number;
1848
2230
  /**
1849
- * The workspace's jobs that count against its plan concurrency now: assigned,
1850
- * starting, running or debugging, on Toshi's hosts rather than its own, and
1851
- * neither a dispatch filler's job nor an open-source job. This is the count
1852
- * the scheduler checks against the workspace's limit,
1853
- * Workspace.effective_concurrency.
2231
+ * Whether the workspace's services and sandboxes may set keep_vm, which
2232
+ * keeps a workload's VM on one of the workspace's own hosts across its
2233
+ * stops and sleeps. Off by default; keep_vm_max_effective must be above 0
2234
+ * too.
1854
2235
  *
1855
- * @generated from field: int64 concurrency_used = 22;
2236
+ * @generated from field: bool keep_vm = 10;
1856
2237
  */
1857
- concurrencyUsed: bigint;
2238
+ keepVm?: boolean;
2239
+ /**
2240
+ * Whether the workspace's hosts record its jobs' screens; left out is on.
2241
+ * While it is off, a job create that names a strip or a video fails with
2242
+ * FAILED_PRECONDITION, one that names none records nothing, and
2243
+ * RECORDING_POLICY_OFF is always accepted. Switching it off stops every
2244
+ * strip and video of the workspace being captured, within one of its
2245
+ * host's heartbeats: each becomes ready, truncated, with the reason
2246
+ * "recording was switched off for the workspace", when its run ends, and
2247
+ * no new one starts. Switching it on applies to jobs created after it. It
2248
+ * does not cover the recordings a run uploads itself.
2249
+ *
2250
+ * @generated from field: optional bool recording = 11;
2251
+ */
2252
+ recording?: boolean;
2253
+ /**
2254
+ * Whether a sandbox's strips keep the screenshots of a person's control
2255
+ * through a viewer with input; left out is off, and a person's span is left
2256
+ * out of the strip as a gap. Switching it applies to the person's next
2257
+ * control, and switching it off stops an open span's screenshots within one
2258
+ * interval.
2259
+ *
2260
+ * @generated from field: optional bool recording_human_spans = 12;
2261
+ */
2262
+ recordingHumanSpans?: boolean;
2263
+ };
2264
+ /**
2265
+ * Describes the message toshi.workspace.v1.WorkspaceSettings.
2266
+ * Use `create(WorkspaceSettingsSchema)` to create a new message.
2267
+ */
2268
+ export declare const WorkspaceSettingsSchema: GenMessage<WorkspaceSettings, {
2269
+ jsonType: WorkspaceSettingsJson;
2270
+ }>;
2271
+ /**
2272
+ * WorkspaceSettingChange is who last changed one of a workspace's settings,
2273
+ * and when.
2274
+ *
2275
+ * @generated from message toshi.workspace.v1.WorkspaceSettingChange
2276
+ */
2277
+ export type WorkspaceSettingChange = Message<"toshi.workspace.v1.WorkspaceSettingChange"> & {
2278
+ /**
2279
+ * @generated from field: toshi.workspace.v1.Subject changed_by = 1;
2280
+ */
2281
+ changedBy?: Subject | undefined;
2282
+ /**
2283
+ * @generated from field: google.protobuf.Timestamp changed_at = 2;
2284
+ */
2285
+ changedAt?: Timestamp | undefined;
2286
+ };
2287
+ /**
2288
+ * WorkspaceSettingChange is who last changed one of a workspace's settings,
2289
+ * and when.
2290
+ *
2291
+ * @generated from message toshi.workspace.v1.WorkspaceSettingChange
2292
+ */
2293
+ export type WorkspaceSettingChangeJson = {
2294
+ /**
2295
+ * @generated from field: toshi.workspace.v1.Subject changed_by = 1;
2296
+ */
2297
+ changedBy?: SubjectJson;
2298
+ /**
2299
+ * @generated from field: google.protobuf.Timestamp changed_at = 2;
2300
+ */
2301
+ changedAt?: TimestampJson;
2302
+ };
2303
+ /**
2304
+ * Describes the message toshi.workspace.v1.WorkspaceSettingChange.
2305
+ * Use `create(WorkspaceSettingChangeSchema)` to create a new message.
2306
+ */
2307
+ export declare const WorkspaceSettingChangeSchema: GenMessage<WorkspaceSettingChange, {
2308
+ jsonType: WorkspaceSettingChangeJson;
2309
+ }>;
2310
+ /**
2311
+ * WorkspaceSignIn is the sign-in provider a workspace requires.
2312
+ *
2313
+ * @generated from message toshi.workspace.v1.WorkspaceSignIn
2314
+ */
2315
+ export type WorkspaceSignIn = Message<"toshi.workspace.v1.WorkspaceSignIn"> & {
2316
+ /**
2317
+ * The provider entry's name, as GET /auth/providers lists it.
2318
+ *
2319
+ * @generated from field: string provider = 1;
2320
+ */
2321
+ provider: string;
2322
+ /**
2323
+ * The provider's issuer: the identities it signs in are keyed by it, as
2324
+ * their Identity.provider, and GET /auth/providers lists it as the
2325
+ * entry's identity_provider. Set by Toshi.
2326
+ *
2327
+ * @generated from field: string issuer = 2;
2328
+ */
2329
+ issuer: string;
2330
+ /**
2331
+ * The user who set it, and when. Set by Toshi.
2332
+ *
2333
+ * @generated from field: string set_by = 3;
2334
+ */
2335
+ setBy: string;
2336
+ /**
2337
+ * @generated from field: google.protobuf.Timestamp set_at = 4;
2338
+ */
2339
+ setAt?: Timestamp | undefined;
2340
+ };
2341
+ /**
2342
+ * WorkspaceSignIn is the sign-in provider a workspace requires.
2343
+ *
2344
+ * @generated from message toshi.workspace.v1.WorkspaceSignIn
2345
+ */
2346
+ export type WorkspaceSignInJson = {
2347
+ /**
2348
+ * The provider entry's name, as GET /auth/providers lists it.
2349
+ *
2350
+ * @generated from field: string provider = 1;
2351
+ */
2352
+ provider?: string;
2353
+ /**
2354
+ * The provider's issuer: the identities it signs in are keyed by it, as
2355
+ * their Identity.provider, and GET /auth/providers lists it as the
2356
+ * entry's identity_provider. Set by Toshi.
2357
+ *
2358
+ * @generated from field: string issuer = 2;
2359
+ */
2360
+ issuer?: string;
2361
+ /**
2362
+ * The user who set it, and when. Set by Toshi.
2363
+ *
2364
+ * @generated from field: string set_by = 3;
2365
+ */
2366
+ setBy?: string;
2367
+ /**
2368
+ * @generated from field: google.protobuf.Timestamp set_at = 4;
2369
+ */
2370
+ setAt?: TimestampJson;
2371
+ };
2372
+ /**
2373
+ * Describes the message toshi.workspace.v1.WorkspaceSignIn.
2374
+ * Use `create(WorkspaceSignInSchema)` to create a new message.
2375
+ */
2376
+ export declare const WorkspaceSignInSchema: GenMessage<WorkspaceSignIn, {
2377
+ jsonType: WorkspaceSignInJson;
2378
+ }>;
2379
+ /**
2380
+ * Reservation is a workspace's floor of slots jobs of one runner size on shared
2381
+ * hosts, warm of them on warm VMs.
2382
+ *
2383
+ * @generated from message toshi.workspace.v1.Reservation
2384
+ */
2385
+ export type Reservation = Message<"toshi.workspace.v1.Reservation"> & {
2386
+ /**
2387
+ * A runner size, as a runs-on label.
2388
+ *
2389
+ * @generated from field: string size = 1;
2390
+ */
2391
+ size: string;
2392
+ /**
2393
+ * How many slots are reserved; at least 1.
2394
+ *
2395
+ * @generated from field: int32 slots = 2;
2396
+ */
2397
+ slots: number;
2398
+ /**
2399
+ * How many of the slots are kept on warm VMs; 0 when none.
2400
+ *
2401
+ * @generated from field: int32 warm = 3;
2402
+ */
2403
+ warm: number;
2404
+ /**
2405
+ * "tenant" when the workspace's own row set it, "plan" when its plan did.
2406
+ *
2407
+ * @generated from field: string source = 4;
2408
+ */
2409
+ source: string;
2410
+ };
2411
+ /**
2412
+ * Reservation is a workspace's floor of slots jobs of one runner size on shared
2413
+ * hosts, warm of them on warm VMs.
2414
+ *
2415
+ * @generated from message toshi.workspace.v1.Reservation
2416
+ */
2417
+ export type ReservationJson = {
2418
+ /**
2419
+ * A runner size, as a runs-on label.
2420
+ *
2421
+ * @generated from field: string size = 1;
2422
+ */
2423
+ size?: string;
2424
+ /**
2425
+ * How many slots are reserved; at least 1.
2426
+ *
2427
+ * @generated from field: int32 slots = 2;
2428
+ */
2429
+ slots?: number;
2430
+ /**
2431
+ * How many of the slots are kept on warm VMs; 0 when none.
2432
+ *
2433
+ * @generated from field: int32 warm = 3;
2434
+ */
2435
+ warm?: number;
2436
+ /**
2437
+ * "tenant" when the workspace's own row set it, "plan" when its plan did.
2438
+ *
2439
+ * @generated from field: string source = 4;
2440
+ */
2441
+ source?: string;
1858
2442
  };
2443
+ /**
2444
+ * Describes the message toshi.workspace.v1.Reservation.
2445
+ * Use `create(ReservationSchema)` to create a new message.
2446
+ */
2447
+ export declare const ReservationSchema: GenMessage<Reservation, {
2448
+ jsonType: ReservationJson;
2449
+ }>;
1859
2450
  /**
1860
2451
  * WorkspaceBilling is the workspace's billing link, its subscription's
1861
2452
  * status and the usage reported to the billing provider.
1862
2453
  *
1863
2454
  * @generated from message toshi.workspace.v1.WorkspaceBilling
1864
2455
  */
1865
- export type WorkspaceBillingJson = {
2456
+ export type WorkspaceBilling = Message<"toshi.workspace.v1.WorkspaceBilling"> & {
1866
2457
  /**
1867
2458
  * Empty when the workspace is not linked to a customer.
1868
2459
  *
1869
2460
  * @generated from field: string customer_id = 1;
1870
2461
  */
1871
- customerId?: string;
2462
+ customerId: string;
1872
2463
  /**
1873
2464
  * Empty when no subscription has set the plan.
1874
2465
  *
1875
2466
  * @generated from field: string subscription_id = 2;
1876
2467
  */
1877
- subscriptionId?: string;
2468
+ subscriptionId: string;
1878
2469
  /**
1879
2470
  * When billable usage begins; unset when the workspace is not billed.
1880
2471
  *
1881
2472
  * @generated from field: google.protobuf.Timestamp billing_started_at = 3;
1882
2473
  */
1883
- billingStartedAt?: TimestampJson;
2474
+ billingStartedAt?: Timestamp | undefined;
1884
2475
  /**
1885
2476
  * The provider's status of the subscription from the last event applied,
1886
2477
  * such as active or past_due; empty when no event has been applied.
1887
2478
  *
1888
2479
  * @generated from field: string subscription_status = 4;
1889
2480
  */
1890
- subscriptionStatus?: string;
2481
+ subscriptionStatus: string;
1891
2482
  /**
1892
2483
  * When the subscription entered subscription_status.
1893
2484
  *
1894
2485
  * @generated from field: google.protobuf.Timestamp subscription_status_since = 5;
1895
2486
  */
1896
- subscriptionStatusSince?: TimestampJson;
2487
+ subscriptionStatusSince?: Timestamp | undefined;
1897
2488
  /**
1898
2489
  * Meter events per UTC month and runner size, newest month first.
1899
2490
  *
1900
2491
  * @generated from field: repeated toshi.workspace.v1.BillingTotals totals = 6;
1901
2492
  */
1902
- totals?: BillingTotalsJson[];
2493
+ totals: BillingTotals[];
1903
2494
  /**
1904
2495
  * The workspace's failed meter events, most recently failed first, at
1905
2496
  * most 50.
1906
2497
  *
1907
2498
  * @generated from field: repeated toshi.workspace.v1.BillingEventFailure failed_events = 7;
1908
2499
  */
1909
- failedEvents?: BillingEventFailureJson[];
2500
+ failedEvents: BillingEventFailure[];
1910
2501
  /**
1911
2502
  * Minutes of the workspace's jobs that finished this UTC calendar month, as
1912
2503
  * its statement counts them. The free allowance counts these, with or
@@ -1914,89 +2505,89 @@ export type WorkspaceBillingJson = {
1914
2505
  *
1915
2506
  * @generated from field: int64 minutes_this_month = 8;
1916
2507
  */
1917
- minutesThisMonth?: string;
2508
+ minutesThisMonth: bigint;
1918
2509
  /**
1919
2510
  * The free minutes per UTC calendar month of the workspace's plan; 0 when the
1920
2511
  * plan has none.
1921
2512
  *
1922
2513
  * @generated from field: int64 free_minutes_per_month = 9;
1923
2514
  */
1924
- freeMinutesPerMonth?: string;
2515
+ freeMinutesPerMonth: bigint;
1925
2516
  /**
1926
2517
  * Whether the billing customer has a payment method.
1927
2518
  *
1928
2519
  * @generated from field: bool card_verified = 10;
1929
2520
  */
1930
- cardVerified?: boolean;
2521
+ cardVerified: boolean;
1931
2522
  /**
1932
2523
  * When Toshi first saw a payment method on the billing customer; unset
1933
2524
  * without one.
1934
2525
  *
1935
2526
  * @generated from field: google.protobuf.Timestamp card_verified_at = 11;
1936
2527
  */
1937
- cardVerifiedAt?: TimestampJson;
2528
+ cardVerifiedAt?: Timestamp | undefined;
1938
2529
  /**
1939
2530
  * The spending cap; 0 when none.
1940
2531
  *
1941
2532
  * @generated from field: int64 spend_cap_cents = 12;
1942
2533
  */
1943
- spendCapCents?: string;
2534
+ spendCapCents: bigint;
1944
2535
  /**
1945
2536
  * Estimated metered spend this UTC month, rounded up: finished jobs plus
1946
2537
  * what running ones have run so far, at the plan's current prices.
1947
2538
  *
1948
2539
  * @generated from field: int64 spend_cents = 13;
1949
2540
  */
1950
- spendCents?: string;
2541
+ spendCents: bigint;
1951
2542
  /**
1952
2543
  * 0, 80 or 100: the share of the cap spend_cents has reached.
1953
2544
  *
1954
2545
  * @generated from field: int32 spend_level = 14;
1955
2546
  */
1956
- spendLevel?: number;
2547
+ spendLevel: number;
1957
2548
  /**
1958
2549
  * The currency of the plan's prices, lower case; empty when unknown.
1959
2550
  *
1960
2551
  * @generated from field: string currency = 15;
1961
2552
  */
1962
- currency?: string;
2553
+ currency: string;
1963
2554
  /**
1964
2555
  * False when the billing provider's prices are not known yet, so
1965
2556
  * spend_cents means nothing.
1966
2557
  *
1967
2558
  * @generated from field: bool spend_known = 16;
1968
2559
  */
1969
- spendKnown?: boolean;
2560
+ spendKnown: boolean;
1970
2561
  /**
1971
2562
  * Starter credit granted, and an estimate of what is left: the credit
1972
2563
  * less the metered spend since billing started.
1973
2564
  *
1974
2565
  * @generated from field: int64 starter_credit_cents = 17;
1975
2566
  */
1976
- starterCreditCents?: string;
2567
+ starterCreditCents: bigint;
1977
2568
  /**
1978
2569
  * @generated from field: int64 starter_credit_left_cents = 18;
1979
2570
  */
1980
- starterCreditLeftCents?: string;
2571
+ starterCreditLeftCents: bigint;
1981
2572
  /**
1982
2573
  * When the credit reached the billing customer; unset before.
1983
2574
  *
1984
2575
  * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 19;
1985
2576
  */
1986
- starterCreditAppliedAt?: TimestampJson;
2577
+ starterCreditAppliedAt?: Timestamp | undefined;
1987
2578
  /**
1988
2579
  * True when a billing provider is configured; false means nothing is metered or charged.
1989
2580
  *
1990
2581
  * @generated from field: bool billing_enabled = 20;
1991
2582
  */
1992
- billingEnabled?: boolean;
2583
+ billingEnabled: boolean;
1993
2584
  /**
1994
2585
  * The workspace's jobs held now, by reason, in the order GetQueueTimes lists
1995
2586
  * the reasons.
1996
2587
  *
1997
2588
  * @generated from field: repeated toshi.workspace.v1.WorkspaceBilling.HeldJobs held_now = 21;
1998
2589
  */
1999
- heldNow?: WorkspaceBilling_HeldJobsJson[];
2590
+ heldNow: WorkspaceBilling_HeldJobs[];
2000
2591
  /**
2001
2592
  * The workspace's jobs that count against its plan concurrency now: assigned,
2002
2593
  * starting, running or debugging, on Toshi's hosts rather than its own, and
@@ -2006,77 +2597,245 @@ export type WorkspaceBillingJson = {
2006
2597
  *
2007
2598
  * @generated from field: int64 concurrency_used = 22;
2008
2599
  */
2009
- concurrencyUsed?: string;
2600
+ concurrencyUsed: bigint;
2601
+ /**
2602
+ * The price of one desktop seat a month on the workspace's plan, in the
2603
+ * smallest unit of currency; unset while the billing provider has no price
2604
+ * for it.
2605
+ *
2606
+ * @generated from field: optional int64 desktop_seat_price_cents = 26;
2607
+ */
2608
+ desktopSeatPriceCents?: bigint | undefined;
2010
2609
  };
2011
2610
  /**
2012
- * Describes the message toshi.workspace.v1.WorkspaceBilling.
2013
- * Use `create(WorkspaceBillingSchema)` to create a new message.
2014
- */
2015
- export declare const WorkspaceBillingSchema: GenMessage<WorkspaceBilling, {
2016
- jsonType: WorkspaceBillingJson;
2017
- }>;
2018
- /**
2019
- * HeldJobs counts the jobs held now for one reason.
2611
+ * WorkspaceBilling is the workspace's billing link, its subscription's
2612
+ * status and the usage reported to the billing provider.
2020
2613
  *
2021
- * @generated from message toshi.workspace.v1.WorkspaceBilling.HeldJobs
2614
+ * @generated from message toshi.workspace.v1.WorkspaceBilling
2022
2615
  */
2023
- export type WorkspaceBilling_HeldJobs = Message<"toshi.workspace.v1.WorkspaceBilling.HeldJobs"> & {
2616
+ export type WorkspaceBillingJson = {
2024
2617
  /**
2025
- * One of the job hold reasons (see Job.hold_reason).
2618
+ * Empty when the workspace is not linked to a customer.
2026
2619
  *
2027
- * @generated from field: string reason = 23;
2620
+ * @generated from field: string customer_id = 1;
2028
2621
  */
2029
- reason: string;
2622
+ customerId?: string;
2030
2623
  /**
2031
- * @generated from field: int64 jobs = 24;
2624
+ * Empty when no subscription has set the plan.
2625
+ *
2626
+ * @generated from field: string subscription_id = 2;
2032
2627
  */
2033
- jobs: bigint;
2628
+ subscriptionId?: string;
2034
2629
  /**
2035
- * Since when the longest-held of them has been held.
2630
+ * When billable usage begins; unset when the workspace is not billed.
2036
2631
  *
2037
- * @generated from field: google.protobuf.Timestamp since = 25;
2632
+ * @generated from field: google.protobuf.Timestamp billing_started_at = 3;
2038
2633
  */
2039
- since?: Timestamp | undefined;
2040
- };
2041
- /**
2042
- * HeldJobs counts the jobs held now for one reason.
2043
- *
2044
- * @generated from message toshi.workspace.v1.WorkspaceBilling.HeldJobs
2045
- */
2046
- export type WorkspaceBilling_HeldJobsJson = {
2634
+ billingStartedAt?: TimestampJson;
2047
2635
  /**
2048
- * One of the job hold reasons (see Job.hold_reason).
2636
+ * The provider's status of the subscription from the last event applied,
2637
+ * such as active or past_due; empty when no event has been applied.
2049
2638
  *
2050
- * @generated from field: string reason = 23;
2639
+ * @generated from field: string subscription_status = 4;
2051
2640
  */
2052
- reason?: string;
2641
+ subscriptionStatus?: string;
2053
2642
  /**
2054
- * @generated from field: int64 jobs = 24;
2643
+ * When the subscription entered subscription_status.
2644
+ *
2645
+ * @generated from field: google.protobuf.Timestamp subscription_status_since = 5;
2055
2646
  */
2056
- jobs?: string;
2647
+ subscriptionStatusSince?: TimestampJson;
2057
2648
  /**
2058
- * Since when the longest-held of them has been held.
2649
+ * Meter events per UTC month and runner size, newest month first.
2059
2650
  *
2060
- * @generated from field: google.protobuf.Timestamp since = 25;
2651
+ * @generated from field: repeated toshi.workspace.v1.BillingTotals totals = 6;
2061
2652
  */
2062
- since?: TimestampJson;
2063
- };
2064
- /**
2065
- * Describes the message toshi.workspace.v1.WorkspaceBilling.HeldJobs.
2066
- * Use `create(WorkspaceBilling_HeldJobsSchema)` to create a new message.
2067
- */
2068
- export declare const WorkspaceBilling_HeldJobsSchema: GenMessage<WorkspaceBilling_HeldJobs, {
2069
- jsonType: WorkspaceBilling_HeldJobsJson;
2070
- }>;
2071
- /**
2072
- * BillingTotals counts one month's meter events of one runner size by
2073
- * delivery state. A month or size without events is left out.
2074
- *
2075
- * @generated from message toshi.workspace.v1.BillingTotals
2076
- */
2077
- export type BillingTotals = Message<"toshi.workspace.v1.BillingTotals"> & {
2653
+ totals?: BillingTotalsJson[];
2078
2654
  /**
2079
- * The UTC month the jobs finished in, as YYYY-MM.
2655
+ * The workspace's failed meter events, most recently failed first, at
2656
+ * most 50.
2657
+ *
2658
+ * @generated from field: repeated toshi.workspace.v1.BillingEventFailure failed_events = 7;
2659
+ */
2660
+ failedEvents?: BillingEventFailureJson[];
2661
+ /**
2662
+ * Minutes of the workspace's jobs that finished this UTC calendar month, as
2663
+ * its statement counts them. The free allowance counts these, with or
2664
+ * without a billing customer.
2665
+ *
2666
+ * @generated from field: int64 minutes_this_month = 8;
2667
+ */
2668
+ minutesThisMonth?: string;
2669
+ /**
2670
+ * The free minutes per UTC calendar month of the workspace's plan; 0 when the
2671
+ * plan has none.
2672
+ *
2673
+ * @generated from field: int64 free_minutes_per_month = 9;
2674
+ */
2675
+ freeMinutesPerMonth?: string;
2676
+ /**
2677
+ * Whether the billing customer has a payment method.
2678
+ *
2679
+ * @generated from field: bool card_verified = 10;
2680
+ */
2681
+ cardVerified?: boolean;
2682
+ /**
2683
+ * When Toshi first saw a payment method on the billing customer; unset
2684
+ * without one.
2685
+ *
2686
+ * @generated from field: google.protobuf.Timestamp card_verified_at = 11;
2687
+ */
2688
+ cardVerifiedAt?: TimestampJson;
2689
+ /**
2690
+ * The spending cap; 0 when none.
2691
+ *
2692
+ * @generated from field: int64 spend_cap_cents = 12;
2693
+ */
2694
+ spendCapCents?: string;
2695
+ /**
2696
+ * Estimated metered spend this UTC month, rounded up: finished jobs plus
2697
+ * what running ones have run so far, at the plan's current prices.
2698
+ *
2699
+ * @generated from field: int64 spend_cents = 13;
2700
+ */
2701
+ spendCents?: string;
2702
+ /**
2703
+ * 0, 80 or 100: the share of the cap spend_cents has reached.
2704
+ *
2705
+ * @generated from field: int32 spend_level = 14;
2706
+ */
2707
+ spendLevel?: number;
2708
+ /**
2709
+ * The currency of the plan's prices, lower case; empty when unknown.
2710
+ *
2711
+ * @generated from field: string currency = 15;
2712
+ */
2713
+ currency?: string;
2714
+ /**
2715
+ * False when the billing provider's prices are not known yet, so
2716
+ * spend_cents means nothing.
2717
+ *
2718
+ * @generated from field: bool spend_known = 16;
2719
+ */
2720
+ spendKnown?: boolean;
2721
+ /**
2722
+ * Starter credit granted, and an estimate of what is left: the credit
2723
+ * less the metered spend since billing started.
2724
+ *
2725
+ * @generated from field: int64 starter_credit_cents = 17;
2726
+ */
2727
+ starterCreditCents?: string;
2728
+ /**
2729
+ * @generated from field: int64 starter_credit_left_cents = 18;
2730
+ */
2731
+ starterCreditLeftCents?: string;
2732
+ /**
2733
+ * When the credit reached the billing customer; unset before.
2734
+ *
2735
+ * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 19;
2736
+ */
2737
+ starterCreditAppliedAt?: TimestampJson;
2738
+ /**
2739
+ * True when a billing provider is configured; false means nothing is metered or charged.
2740
+ *
2741
+ * @generated from field: bool billing_enabled = 20;
2742
+ */
2743
+ billingEnabled?: boolean;
2744
+ /**
2745
+ * The workspace's jobs held now, by reason, in the order GetQueueTimes lists
2746
+ * the reasons.
2747
+ *
2748
+ * @generated from field: repeated toshi.workspace.v1.WorkspaceBilling.HeldJobs held_now = 21;
2749
+ */
2750
+ heldNow?: WorkspaceBilling_HeldJobsJson[];
2751
+ /**
2752
+ * The workspace's jobs that count against its plan concurrency now: assigned,
2753
+ * starting, running or debugging, on Toshi's hosts rather than its own, and
2754
+ * neither a dispatch filler's job nor an open-source job. This is the count
2755
+ * the scheduler checks against the workspace's limit,
2756
+ * Workspace.effective_concurrency.
2757
+ *
2758
+ * @generated from field: int64 concurrency_used = 22;
2759
+ */
2760
+ concurrencyUsed?: string;
2761
+ /**
2762
+ * The price of one desktop seat a month on the workspace's plan, in the
2763
+ * smallest unit of currency; unset while the billing provider has no price
2764
+ * for it.
2765
+ *
2766
+ * @generated from field: optional int64 desktop_seat_price_cents = 26;
2767
+ */
2768
+ desktopSeatPriceCents?: string;
2769
+ };
2770
+ /**
2771
+ * Describes the message toshi.workspace.v1.WorkspaceBilling.
2772
+ * Use `create(WorkspaceBillingSchema)` to create a new message.
2773
+ */
2774
+ export declare const WorkspaceBillingSchema: GenMessage<WorkspaceBilling, {
2775
+ jsonType: WorkspaceBillingJson;
2776
+ }>;
2777
+ /**
2778
+ * HeldJobs counts the jobs held now for one reason.
2779
+ *
2780
+ * @generated from message toshi.workspace.v1.WorkspaceBilling.HeldJobs
2781
+ */
2782
+ export type WorkspaceBilling_HeldJobs = Message<"toshi.workspace.v1.WorkspaceBilling.HeldJobs"> & {
2783
+ /**
2784
+ * One of the job hold reasons (see Job.hold_reason).
2785
+ *
2786
+ * @generated from field: string reason = 23;
2787
+ */
2788
+ reason: string;
2789
+ /**
2790
+ * @generated from field: int64 jobs = 24;
2791
+ */
2792
+ jobs: bigint;
2793
+ /**
2794
+ * Since when the longest-held of them has been held.
2795
+ *
2796
+ * @generated from field: google.protobuf.Timestamp since = 25;
2797
+ */
2798
+ since?: Timestamp | undefined;
2799
+ };
2800
+ /**
2801
+ * HeldJobs counts the jobs held now for one reason.
2802
+ *
2803
+ * @generated from message toshi.workspace.v1.WorkspaceBilling.HeldJobs
2804
+ */
2805
+ export type WorkspaceBilling_HeldJobsJson = {
2806
+ /**
2807
+ * One of the job hold reasons (see Job.hold_reason).
2808
+ *
2809
+ * @generated from field: string reason = 23;
2810
+ */
2811
+ reason?: string;
2812
+ /**
2813
+ * @generated from field: int64 jobs = 24;
2814
+ */
2815
+ jobs?: string;
2816
+ /**
2817
+ * Since when the longest-held of them has been held.
2818
+ *
2819
+ * @generated from field: google.protobuf.Timestamp since = 25;
2820
+ */
2821
+ since?: TimestampJson;
2822
+ };
2823
+ /**
2824
+ * Describes the message toshi.workspace.v1.WorkspaceBilling.HeldJobs.
2825
+ * Use `create(WorkspaceBilling_HeldJobsSchema)` to create a new message.
2826
+ */
2827
+ export declare const WorkspaceBilling_HeldJobsSchema: GenMessage<WorkspaceBilling_HeldJobs, {
2828
+ jsonType: WorkspaceBilling_HeldJobsJson;
2829
+ }>;
2830
+ /**
2831
+ * BillingTotals counts one month's meter events of one runner size by
2832
+ * delivery state. A month or size without events is left out.
2833
+ *
2834
+ * @generated from message toshi.workspace.v1.BillingTotals
2835
+ */
2836
+ export type BillingTotals = Message<"toshi.workspace.v1.BillingTotals"> & {
2837
+ /**
2838
+ * The UTC month the jobs finished in, as YYYY-MM.
2080
2839
  *
2081
2840
  * @generated from field: string month = 1;
2082
2841
  */
@@ -2294,224 +3053,853 @@ export type WorkspaceStatement = Message<"toshi.workspace.v1.WorkspaceStatement"
2294
3053
  * The minutes metered to the billing provider for the month, by the size
2295
3054
  * they were recorded under, with their estimated cost.
2296
3055
  *
2297
- * @generated from field: repeated toshi.workspace.v1.StatementCharge charges = 7;
3056
+ * @generated from field: repeated toshi.workspace.v1.StatementCharge charges = 7;
3057
+ */
3058
+ charges: StatementCharge[];
3059
+ /**
3060
+ * The estimated cost of every charge, rounded up once, in the smallest
3061
+ * unit of currency: each job at the price recorded for it when it
3062
+ * finished, and minutes with none at today's prices. Leaves out the
3063
+ * plan's own price and any credit.
3064
+ *
3065
+ * @generated from field: int64 estimated_cents = 8;
3066
+ */
3067
+ estimatedCents: bigint;
3068
+ /**
3069
+ * Empty when the prices are unknown.
3070
+ *
3071
+ * @generated from field: string currency = 9;
3072
+ */
3073
+ currency: string;
3074
+ /**
3075
+ * False when some minutes have no recorded price and the billing
3076
+ * provider's prices have not been read: those minutes' amounts are 0.
3077
+ *
3078
+ * @generated from field: bool estimate_known = 10;
3079
+ */
3080
+ estimateKnown: boolean;
3081
+ /**
3082
+ * The starter credit put on the customer's balance in the month; 0 and
3083
+ * unset when it was not applied in it.
3084
+ *
3085
+ * @generated from field: int64 starter_credit_applied_cents = 11;
3086
+ */
3087
+ starterCreditAppliedCents: bigint;
3088
+ /**
3089
+ * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 12;
3090
+ */
3091
+ starterCreditAppliedAt?: Timestamp | undefined;
3092
+ /**
3093
+ * Held time, from first held to assigned, of the jobs queued in the month
3094
+ * that reached running, by the latest reason each was held.
3095
+ *
3096
+ * @generated from field: repeated toshi.workspace.v1.HoldTimes held = 13;
3097
+ */
3098
+ held: HoldTimes[];
3099
+ /**
3100
+ * The metered minutes with no recorded price, estimated at today's
3101
+ * prices: finished jobs not yet in the usage outbox, and usage from
3102
+ * before prices were recorded.
3103
+ *
3104
+ * @generated from field: int64 current_price_minutes = 14;
3105
+ */
3106
+ currentPriceMinutes: bigint;
3107
+ /**
3108
+ * The workspace's filler jobs that finished in the month: not billed, not in
3109
+ * usage or charges. Unset when there were none.
3110
+ *
3111
+ * @generated from field: toshi.workspace.v1.FillerUsage filler = 15;
3112
+ */
3113
+ filler?: FillerUsage | undefined;
3114
+ /**
3115
+ * True when a billing provider is configured; false means nothing is metered or charged.
3116
+ *
3117
+ * @generated from field: bool billing_enabled = 16;
3118
+ */
3119
+ billingEnabled: boolean;
3120
+ /**
3121
+ * When the month's estimated spend first reached the workspace's spending
3122
+ * cap; unset when it did not.
3123
+ *
3124
+ * @generated from field: google.protobuf.Timestamp spend_cap_reached_at = 17;
3125
+ */
3126
+ spendCapReachedAt?: Timestamp | undefined;
3127
+ /**
3128
+ * The cap that was reached, in the smallest unit of currency; 0 when it
3129
+ * was not.
3130
+ *
3131
+ * @generated from field: int64 spend_cap_reached_cents = 18;
3132
+ */
3133
+ spendCapReachedCents: bigint;
3134
+ /**
3135
+ * The workspace's spending cap when the statement was built; 0 when none.
3136
+ *
3137
+ * @generated from field: int64 spend_cap_cents = 19;
3138
+ */
3139
+ spendCapCents: bigint;
3140
+ /**
3141
+ * The own-server fee of the month; included in estimated_cents.
3142
+ *
3143
+ * @generated from field: toshi.workspace.v1.OwnHostFee own_host_fee = 20;
3144
+ */
3145
+ ownHostFee?: OwnHostFee | undefined;
3146
+ /**
3147
+ * The month's service runs billed by the VM-second, by size; included in
3148
+ * estimated_cents.
3149
+ *
3150
+ * @generated from field: repeated toshi.workspace.v1.Awake awake = 21;
3151
+ */
3152
+ awake: Awake[];
3153
+ /**
3154
+ * The month's stored data; its cost is included in estimated_cents.
3155
+ *
3156
+ * @generated from field: toshi.workspace.v1.Storage storage = 22;
3157
+ */
3158
+ storage?: Storage | undefined;
3159
+ /**
3160
+ * The month's desktop seats; unset when there were none. Their cost is
3161
+ * included in estimated_cents.
3162
+ *
3163
+ * @generated from field: toshi.workspace.v1.DesktopSeats desktop_seats = 23;
3164
+ */
3165
+ desktopSeats?: DesktopSeats | undefined;
3166
+ };
3167
+ /**
3168
+ * @generated from message toshi.workspace.v1.WorkspaceStatement
3169
+ */
3170
+ export type WorkspaceStatementJson = {
3171
+ /**
3172
+ * The month as YYYY-MM, and its bounds: from inclusive, to exclusive.
3173
+ *
3174
+ * @generated from field: string month = 1;
3175
+ */
3176
+ month?: string;
3177
+ /**
3178
+ * @generated from field: google.protobuf.Timestamp from = 2;
3179
+ */
3180
+ from?: TimestampJson;
3181
+ /**
3182
+ * @generated from field: google.protobuf.Timestamp to = 3;
3183
+ */
3184
+ to?: TimestampJson;
3185
+ /**
3186
+ * The plans the month's metered minutes were recorded at, comma-separated;
3187
+ * the workspace's plan today when no minute has a recorded price.
3188
+ *
3189
+ * @generated from field: string plan = 4;
3190
+ */
3191
+ plan?: string;
3192
+ /**
3193
+ * The jobs that finished in the month, by runner size and OS, counted as
3194
+ * GetUsage counts them.
3195
+ *
3196
+ * @generated from field: repeated toshi.workspace.v1.StatementUsage usage = 5;
3197
+ */
3198
+ usage?: StatementUsageJson[];
3199
+ /**
3200
+ * The sum of usage; its size and os are empty.
3201
+ *
3202
+ * @generated from field: toshi.workspace.v1.StatementUsage total = 6;
3203
+ */
3204
+ total?: StatementUsageJson;
3205
+ /**
3206
+ * The minutes metered to the billing provider for the month, by the size
3207
+ * they were recorded under, with their estimated cost.
3208
+ *
3209
+ * @generated from field: repeated toshi.workspace.v1.StatementCharge charges = 7;
3210
+ */
3211
+ charges?: StatementChargeJson[];
3212
+ /**
3213
+ * The estimated cost of every charge, rounded up once, in the smallest
3214
+ * unit of currency: each job at the price recorded for it when it
3215
+ * finished, and minutes with none at today's prices. Leaves out the
3216
+ * plan's own price and any credit.
3217
+ *
3218
+ * @generated from field: int64 estimated_cents = 8;
3219
+ */
3220
+ estimatedCents?: string;
3221
+ /**
3222
+ * Empty when the prices are unknown.
3223
+ *
3224
+ * @generated from field: string currency = 9;
3225
+ */
3226
+ currency?: string;
3227
+ /**
3228
+ * False when some minutes have no recorded price and the billing
3229
+ * provider's prices have not been read: those minutes' amounts are 0.
3230
+ *
3231
+ * @generated from field: bool estimate_known = 10;
3232
+ */
3233
+ estimateKnown?: boolean;
3234
+ /**
3235
+ * The starter credit put on the customer's balance in the month; 0 and
3236
+ * unset when it was not applied in it.
3237
+ *
3238
+ * @generated from field: int64 starter_credit_applied_cents = 11;
3239
+ */
3240
+ starterCreditAppliedCents?: string;
3241
+ /**
3242
+ * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 12;
3243
+ */
3244
+ starterCreditAppliedAt?: TimestampJson;
3245
+ /**
3246
+ * Held time, from first held to assigned, of the jobs queued in the month
3247
+ * that reached running, by the latest reason each was held.
3248
+ *
3249
+ * @generated from field: repeated toshi.workspace.v1.HoldTimes held = 13;
3250
+ */
3251
+ held?: HoldTimesJson[];
3252
+ /**
3253
+ * The metered minutes with no recorded price, estimated at today's
3254
+ * prices: finished jobs not yet in the usage outbox, and usage from
3255
+ * before prices were recorded.
3256
+ *
3257
+ * @generated from field: int64 current_price_minutes = 14;
3258
+ */
3259
+ currentPriceMinutes?: string;
3260
+ /**
3261
+ * The workspace's filler jobs that finished in the month: not billed, not in
3262
+ * usage or charges. Unset when there were none.
3263
+ *
3264
+ * @generated from field: toshi.workspace.v1.FillerUsage filler = 15;
3265
+ */
3266
+ filler?: FillerUsageJson;
3267
+ /**
3268
+ * True when a billing provider is configured; false means nothing is metered or charged.
3269
+ *
3270
+ * @generated from field: bool billing_enabled = 16;
3271
+ */
3272
+ billingEnabled?: boolean;
3273
+ /**
3274
+ * When the month's estimated spend first reached the workspace's spending
3275
+ * cap; unset when it did not.
3276
+ *
3277
+ * @generated from field: google.protobuf.Timestamp spend_cap_reached_at = 17;
3278
+ */
3279
+ spendCapReachedAt?: TimestampJson;
3280
+ /**
3281
+ * The cap that was reached, in the smallest unit of currency; 0 when it
3282
+ * was not.
3283
+ *
3284
+ * @generated from field: int64 spend_cap_reached_cents = 18;
3285
+ */
3286
+ spendCapReachedCents?: string;
3287
+ /**
3288
+ * The workspace's spending cap when the statement was built; 0 when none.
3289
+ *
3290
+ * @generated from field: int64 spend_cap_cents = 19;
3291
+ */
3292
+ spendCapCents?: string;
3293
+ /**
3294
+ * The own-server fee of the month; included in estimated_cents.
3295
+ *
3296
+ * @generated from field: toshi.workspace.v1.OwnHostFee own_host_fee = 20;
3297
+ */
3298
+ ownHostFee?: OwnHostFeeJson;
3299
+ /**
3300
+ * The month's service runs billed by the VM-second, by size; included in
3301
+ * estimated_cents.
3302
+ *
3303
+ * @generated from field: repeated toshi.workspace.v1.Awake awake = 21;
3304
+ */
3305
+ awake?: AwakeJson[];
3306
+ /**
3307
+ * The month's stored data; its cost is included in estimated_cents.
3308
+ *
3309
+ * @generated from field: toshi.workspace.v1.Storage storage = 22;
3310
+ */
3311
+ storage?: StorageJson;
3312
+ /**
3313
+ * The month's desktop seats; unset when there were none. Their cost is
3314
+ * included in estimated_cents.
3315
+ *
3316
+ * @generated from field: toshi.workspace.v1.DesktopSeats desktop_seats = 23;
3317
+ */
3318
+ desktopSeats?: DesktopSeatsJson;
3319
+ };
3320
+ /**
3321
+ * Describes the message toshi.workspace.v1.WorkspaceStatement.
3322
+ * Use `create(WorkspaceStatementSchema)` to create a new message.
3323
+ */
3324
+ export declare const WorkspaceStatementSchema: GenMessage<WorkspaceStatement, {
3325
+ jsonType: WorkspaceStatementJson;
3326
+ }>;
3327
+ /**
3328
+ * DesktopSeats is the month's desktop seats: every seat the workspace held
3329
+ * at some time in the month, from its billing start, and what they cost. A
3330
+ * person's seats in one month are billed as one seat, and so are a seat and
3331
+ * the one an operator moved it to; a second person is a second seat.
3332
+ *
3333
+ * @generated from message toshi.workspace.v1.DesktopSeats
3334
+ */
3335
+ export type DesktopSeats = Message<"toshi.workspace.v1.DesktopSeats"> & {
3336
+ /**
3337
+ * The seats billed for the month.
3338
+ *
3339
+ * @generated from field: int64 billed_seats = 1;
3340
+ */
3341
+ billedSeats: bigint;
3342
+ /**
3343
+ * One seat's price for a month at the plan's price today, in the smallest
3344
+ * unit of currency; 0 when unpriced.
3345
+ *
3346
+ * @generated from field: int64 seat_price_cents = 2;
3347
+ */
3348
+ seatPriceCents: bigint;
3349
+ /**
3350
+ * True when the plan has no price for desktop seats yet: the seats are
3351
+ * listed and cost nothing.
3352
+ *
3353
+ * @generated from field: bool unpriced = 3;
3354
+ */
3355
+ unpriced: boolean;
3356
+ /**
3357
+ * billed_seats at seat_price_cents; included in estimated_cents.
3358
+ *
3359
+ * @generated from field: int64 estimated_cents = 4;
3360
+ */
3361
+ estimatedCents: bigint;
3362
+ /**
3363
+ * The seats, oldest assigned first.
3364
+ *
3365
+ * @generated from field: repeated toshi.workspace.v1.StatementSeat seats = 5;
3366
+ */
3367
+ seats: StatementSeat[];
3368
+ };
3369
+ /**
3370
+ * DesktopSeats is the month's desktop seats: every seat the workspace held
3371
+ * at some time in the month, from its billing start, and what they cost. A
3372
+ * person's seats in one month are billed as one seat, and so are a seat and
3373
+ * the one an operator moved it to; a second person is a second seat.
3374
+ *
3375
+ * @generated from message toshi.workspace.v1.DesktopSeats
3376
+ */
3377
+ export type DesktopSeatsJson = {
3378
+ /**
3379
+ * The seats billed for the month.
3380
+ *
3381
+ * @generated from field: int64 billed_seats = 1;
3382
+ */
3383
+ billedSeats?: string;
3384
+ /**
3385
+ * One seat's price for a month at the plan's price today, in the smallest
3386
+ * unit of currency; 0 when unpriced.
3387
+ *
3388
+ * @generated from field: int64 seat_price_cents = 2;
3389
+ */
3390
+ seatPriceCents?: string;
3391
+ /**
3392
+ * True when the plan has no price for desktop seats yet: the seats are
3393
+ * listed and cost nothing.
3394
+ *
3395
+ * @generated from field: bool unpriced = 3;
3396
+ */
3397
+ unpriced?: boolean;
3398
+ /**
3399
+ * billed_seats at seat_price_cents; included in estimated_cents.
3400
+ *
3401
+ * @generated from field: int64 estimated_cents = 4;
3402
+ */
3403
+ estimatedCents?: string;
3404
+ /**
3405
+ * The seats, oldest assigned first.
3406
+ *
3407
+ * @generated from field: repeated toshi.workspace.v1.StatementSeat seats = 5;
3408
+ */
3409
+ seats?: StatementSeatJson[];
3410
+ };
3411
+ /**
3412
+ * Describes the message toshi.workspace.v1.DesktopSeats.
3413
+ * Use `create(DesktopSeatsSchema)` to create a new message.
3414
+ */
3415
+ export declare const DesktopSeatsSchema: GenMessage<DesktopSeats, {
3416
+ jsonType: DesktopSeatsJson;
3417
+ }>;
3418
+ /**
3419
+ * StatementSeat is one desktop seat on a statement.
3420
+ *
3421
+ * @generated from message toshi.workspace.v1.StatementSeat
3422
+ */
3423
+ export type StatementSeat = Message<"toshi.workspace.v1.StatementSeat"> & {
3424
+ /**
3425
+ * @generated from field: string seat_id = 1;
3426
+ */
3427
+ seatId: string;
3428
+ /**
3429
+ * The Toshi user id of the person it was assigned to, and their name.
3430
+ *
3431
+ * @generated from field: string user_id = 2;
3432
+ */
3433
+ userId: string;
3434
+ /**
3435
+ * @generated from field: string name = 3;
3436
+ */
3437
+ name: string;
3438
+ /**
3439
+ * @generated from field: google.protobuf.Timestamp assigned_at = 4;
3440
+ */
3441
+ assignedAt?: Timestamp | undefined;
3442
+ /**
3443
+ * Unset while the seat is live.
3444
+ *
3445
+ * @generated from field: google.protobuf.Timestamp removed_at = 5;
3446
+ */
3447
+ removedAt?: Timestamp | undefined;
3448
+ /**
3449
+ * The seat an operator moved to this one, when it replaces one.
3450
+ *
3451
+ * @generated from field: string replaces = 6;
3452
+ */
3453
+ replaces: string;
3454
+ /**
3455
+ * True when the seat carries a month's charge; false when it is billed
3456
+ * with an older seat of the month: the same person's, or the one an
3457
+ * operator moved to it.
3458
+ *
3459
+ * @generated from field: bool billed = 7;
3460
+ */
3461
+ billed: boolean;
3462
+ };
3463
+ /**
3464
+ * StatementSeat is one desktop seat on a statement.
3465
+ *
3466
+ * @generated from message toshi.workspace.v1.StatementSeat
3467
+ */
3468
+ export type StatementSeatJson = {
3469
+ /**
3470
+ * @generated from field: string seat_id = 1;
3471
+ */
3472
+ seatId?: string;
3473
+ /**
3474
+ * The Toshi user id of the person it was assigned to, and their name.
3475
+ *
3476
+ * @generated from field: string user_id = 2;
3477
+ */
3478
+ userId?: string;
3479
+ /**
3480
+ * @generated from field: string name = 3;
3481
+ */
3482
+ name?: string;
3483
+ /**
3484
+ * @generated from field: google.protobuf.Timestamp assigned_at = 4;
3485
+ */
3486
+ assignedAt?: TimestampJson;
3487
+ /**
3488
+ * Unset while the seat is live.
3489
+ *
3490
+ * @generated from field: google.protobuf.Timestamp removed_at = 5;
3491
+ */
3492
+ removedAt?: TimestampJson;
3493
+ /**
3494
+ * The seat an operator moved to this one, when it replaces one.
3495
+ *
3496
+ * @generated from field: string replaces = 6;
3497
+ */
3498
+ replaces?: string;
3499
+ /**
3500
+ * True when the seat carries a month's charge; false when it is billed
3501
+ * with an older seat of the month: the same person's, or the one an
3502
+ * operator moved to it.
3503
+ *
3504
+ * @generated from field: bool billed = 7;
3505
+ */
3506
+ billed?: boolean;
3507
+ };
3508
+ /**
3509
+ * Describes the message toshi.workspace.v1.StatementSeat.
3510
+ * Use `create(StatementSeatSchema)` to create a new message.
3511
+ */
3512
+ export declare const StatementSeatSchema: GenMessage<StatementSeat, {
3513
+ jsonType: StatementSeatJson;
3514
+ }>;
3515
+ /**
3516
+ * OwnHostFee is the month's own-server fee: the run time of the workspace's
3517
+ * billed jobs on its own hosts, less the plan's free seconds, rounded up once
3518
+ * to whole seconds.
3519
+ *
3520
+ * @generated from message toshi.workspace.v1.OwnHostFee
3521
+ */
3522
+ export type OwnHostFee = Message<"toshi.workspace.v1.OwnHostFee"> & {
3523
+ /**
3524
+ * The exact run time, in seconds, from the workspace's billing start.
3525
+ *
3526
+ * @generated from field: double seconds = 1;
3527
+ */
3528
+ seconds: number;
3529
+ /**
3530
+ * The plan's free seconds a month.
3531
+ *
3532
+ * @generated from field: int64 free_seconds = 2;
3533
+ */
3534
+ freeSeconds: bigint;
3535
+ /**
3536
+ * seconds past free_seconds, rounded up once.
3537
+ *
3538
+ * @generated from field: int64 billed_seconds = 3;
3539
+ */
3540
+ billedSeconds: bigint;
3541
+ /**
3542
+ * billed_seconds at the plan's price today, rounded up, in the smallest
3543
+ * unit of currency; 0 when the plan has no price for the fee.
3544
+ *
3545
+ * @generated from field: int64 estimated_cents = 4;
3546
+ */
3547
+ estimatedCents: bigint;
3548
+ };
3549
+ /**
3550
+ * OwnHostFee is the month's own-server fee: the run time of the workspace's
3551
+ * billed jobs on its own hosts, less the plan's free seconds, rounded up once
3552
+ * to whole seconds.
3553
+ *
3554
+ * @generated from message toshi.workspace.v1.OwnHostFee
3555
+ */
3556
+ export type OwnHostFeeJson = {
3557
+ /**
3558
+ * The exact run time, in seconds, from the workspace's billing start.
3559
+ *
3560
+ * @generated from field: double seconds = 1;
3561
+ */
3562
+ seconds?: number | "NaN" | "Infinity" | "-Infinity";
3563
+ /**
3564
+ * The plan's free seconds a month.
3565
+ *
3566
+ * @generated from field: int64 free_seconds = 2;
3567
+ */
3568
+ freeSeconds?: string;
3569
+ /**
3570
+ * seconds past free_seconds, rounded up once.
3571
+ *
3572
+ * @generated from field: int64 billed_seconds = 3;
3573
+ */
3574
+ billedSeconds?: string;
3575
+ /**
3576
+ * billed_seconds at the plan's price today, rounded up, in the smallest
3577
+ * unit of currency; 0 when the plan has no price for the fee.
3578
+ *
3579
+ * @generated from field: int64 estimated_cents = 4;
3580
+ */
3581
+ estimatedCents?: string;
3582
+ };
3583
+ /**
3584
+ * Describes the message toshi.workspace.v1.OwnHostFee.
3585
+ * Use `create(OwnHostFeeSchema)` to create a new message.
3586
+ */
3587
+ export declare const OwnHostFeeSchema: GenMessage<OwnHostFee, {
3588
+ jsonType: OwnHostFeeJson;
3589
+ }>;
3590
+ /**
3591
+ * Awake is the month's service runs of one runner size billed by the
3592
+ * VM-second: each run's time from first ready to release, summed and rounded
3593
+ * up once to whole seconds.
3594
+ *
3595
+ * @generated from message toshi.workspace.v1.Awake
3596
+ */
3597
+ export type Awake = Message<"toshi.workspace.v1.Awake"> & {
3598
+ /**
3599
+ * @generated from field: string size = 1;
3600
+ */
3601
+ size: string;
3602
+ /**
3603
+ * @generated from field: int64 runs = 2;
3604
+ */
3605
+ runs: bigint;
3606
+ /**
3607
+ * The exact awake time, in seconds, from the workspace's billing start.
3608
+ *
3609
+ * @generated from field: double seconds = 3;
3610
+ */
3611
+ seconds: number;
3612
+ /**
3613
+ * The part of seconds after the last demand before the run was put to
3614
+ * sleep.
3615
+ *
3616
+ * @generated from field: double idle_seconds = 4;
3617
+ */
3618
+ idleSeconds: number;
3619
+ /**
3620
+ * seconds rounded up once.
3621
+ *
3622
+ * @generated from field: int64 billed_seconds = 5;
2298
3623
  */
2299
- charges: StatementCharge[];
3624
+ billedSeconds: bigint;
2300
3625
  /**
2301
- * The estimated cost of every charge, rounded up once, in the smallest
2302
- * unit of currency: each job at the price recorded for it when it
2303
- * finished, and minutes with none at today's prices. Leaves out the
2304
- * plan's own price and any credit.
3626
+ * billed_seconds at the plan's price today, rounded up, in the smallest
3627
+ * unit of currency; 0 when the plan has no price for the size.
2305
3628
  *
2306
- * @generated from field: int64 estimated_cents = 8;
3629
+ * @generated from field: int64 estimated_cents = 6;
2307
3630
  */
2308
3631
  estimatedCents: bigint;
3632
+ };
3633
+ /**
3634
+ * Awake is the month's service runs of one runner size billed by the
3635
+ * VM-second: each run's time from first ready to release, summed and rounded
3636
+ * up once to whole seconds.
3637
+ *
3638
+ * @generated from message toshi.workspace.v1.Awake
3639
+ */
3640
+ export type AwakeJson = {
2309
3641
  /**
2310
- * Empty when the prices are unknown.
2311
- *
2312
- * @generated from field: string currency = 9;
3642
+ * @generated from field: string size = 1;
2313
3643
  */
2314
- currency: string;
3644
+ size?: string;
2315
3645
  /**
2316
- * False when some minutes have no recorded price and the billing
2317
- * provider's prices have not been read: those minutes' amounts are 0.
3646
+ * @generated from field: int64 runs = 2;
3647
+ */
3648
+ runs?: string;
3649
+ /**
3650
+ * The exact awake time, in seconds, from the workspace's billing start.
2318
3651
  *
2319
- * @generated from field: bool estimate_known = 10;
3652
+ * @generated from field: double seconds = 3;
2320
3653
  */
2321
- estimateKnown: boolean;
3654
+ seconds?: number | "NaN" | "Infinity" | "-Infinity";
2322
3655
  /**
2323
- * The starter credit put on the customer's balance in the month; 0 and
2324
- * unset when it was not applied in it.
3656
+ * The part of seconds after the last demand before the run was put to
3657
+ * sleep.
2325
3658
  *
2326
- * @generated from field: int64 starter_credit_applied_cents = 11;
3659
+ * @generated from field: double idle_seconds = 4;
2327
3660
  */
2328
- starterCreditAppliedCents: bigint;
3661
+ idleSeconds?: number | "NaN" | "Infinity" | "-Infinity";
2329
3662
  /**
2330
- * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 12;
3663
+ * seconds rounded up once.
3664
+ *
3665
+ * @generated from field: int64 billed_seconds = 5;
2331
3666
  */
2332
- starterCreditAppliedAt?: Timestamp | undefined;
3667
+ billedSeconds?: string;
2333
3668
  /**
2334
- * Held time, from first held to assigned, of the jobs queued in the month
2335
- * that reached running, by the latest reason each was held.
3669
+ * billed_seconds at the plan's price today, rounded up, in the smallest
3670
+ * unit of currency; 0 when the plan has no price for the size.
2336
3671
  *
2337
- * @generated from field: repeated toshi.workspace.v1.HoldTimes held = 13;
3672
+ * @generated from field: int64 estimated_cents = 6;
2338
3673
  */
2339
- held: HoldTimes[];
3674
+ estimatedCents?: string;
3675
+ };
3676
+ /**
3677
+ * Describes the message toshi.workspace.v1.Awake.
3678
+ * Use `create(AwakeSchema)` to create a new message.
3679
+ */
3680
+ export declare const AwakeSchema: GenMessage<Awake, {
3681
+ jsonType: AwakeJson;
3682
+ }>;
3683
+ /**
3684
+ * Storage is the month's stored data: images, volume versions, artifacts
3685
+ * and recordings, sampled once an hour. Each hour's total past the plan's
3686
+ * included GB is billed, summed over the month in GB-months.
3687
+ *
3688
+ * @generated from message toshi.workspace.v1.Storage
3689
+ */
3690
+ export type Storage = Message<"toshi.workspace.v1.Storage"> & {
2340
3691
  /**
2341
- * The metered minutes with no recorded price, estimated at today's
2342
- * prices: finished jobs not yet in the usage outbox, and usage from
2343
- * before prices were recorded.
3692
+ * Each kind's figures, ordered by kind.
2344
3693
  *
2345
- * @generated from field: int64 current_price_minutes = 14;
3694
+ * @generated from field: repeated toshi.workspace.v1.StoredKind kinds = 1;
2346
3695
  */
2347
- currentPriceMinutes: bigint;
3696
+ kinds: StoredKind[];
2348
3697
  /**
2349
- * The workspace's filler jobs that finished in the month: not billed, not in
2350
- * usage or charges. Unset when there were none.
3698
+ * The plan's included GB in each hour.
2351
3699
  *
2352
- * @generated from field: toshi.workspace.v1.FillerUsage filler = 15;
3700
+ * @generated from field: int64 included_gb = 2;
2353
3701
  */
2354
- filler?: FillerUsage | undefined;
3702
+ includedGb: bigint;
2355
3703
  /**
2356
- * True when a billing provider is configured; false means nothing is metered or charged.
3704
+ * Every kind's GB summed over the sampled hours, from the workspace's
3705
+ * billing start.
2357
3706
  *
2358
- * @generated from field: bool billing_enabled = 16;
3707
+ * @generated from field: double gb_hours = 3;
2359
3708
  */
2360
- billingEnabled: boolean;
3709
+ gbHours: number;
2361
3710
  /**
2362
- * When the month's estimated spend first reached the workspace's spending
2363
- * cap; unset when it did not.
3711
+ * The part of gb_hours past included_gb in each hour.
2364
3712
  *
2365
- * @generated from field: google.protobuf.Timestamp spend_cap_reached_at = 17;
3713
+ * @generated from field: double excess_gb_hours = 4;
2366
3714
  */
2367
- spendCapReachedAt?: Timestamp | undefined;
3715
+ excessGbHours: number;
2368
3716
  /**
2369
- * The cap that was reached, in the smallest unit of currency; 0 when it
2370
- * was not.
3717
+ * excess_gb_hours in GB-months, rounded up once to a thousandth.
2371
3718
  *
2372
- * @generated from field: int64 spend_cap_reached_cents = 18;
3719
+ * @generated from field: double billed_gb_months = 5;
2373
3720
  */
2374
- spendCapReachedCents: bigint;
3721
+ billedGbMonths: number;
2375
3722
  /**
2376
- * The workspace's spending cap when the statement was built; 0 when none.
3723
+ * billed_gb_months at the plan's price today, rounded up, in the smallest
3724
+ * unit of currency; 0 when the plan has no price for storage.
2377
3725
  *
2378
- * @generated from field: int64 spend_cap_cents = 19;
3726
+ * @generated from field: int64 estimated_cents = 6;
2379
3727
  */
2380
- spendCapCents: bigint;
3728
+ estimatedCents: bigint;
2381
3729
  };
2382
3730
  /**
2383
- * @generated from message toshi.workspace.v1.WorkspaceStatement
3731
+ * Storage is the month's stored data: images, volume versions, artifacts
3732
+ * and recordings, sampled once an hour. Each hour's total past the plan's
3733
+ * included GB is billed, summed over the month in GB-months.
3734
+ *
3735
+ * @generated from message toshi.workspace.v1.Storage
2384
3736
  */
2385
- export type WorkspaceStatementJson = {
3737
+ export type StorageJson = {
2386
3738
  /**
2387
- * The month as YYYY-MM, and its bounds: from inclusive, to exclusive.
3739
+ * Each kind's figures, ordered by kind.
2388
3740
  *
2389
- * @generated from field: string month = 1;
3741
+ * @generated from field: repeated toshi.workspace.v1.StoredKind kinds = 1;
2390
3742
  */
2391
- month?: string;
3743
+ kinds?: StoredKindJson[];
2392
3744
  /**
2393
- * @generated from field: google.protobuf.Timestamp from = 2;
3745
+ * The plan's included GB in each hour.
3746
+ *
3747
+ * @generated from field: int64 included_gb = 2;
2394
3748
  */
2395
- from?: TimestampJson;
3749
+ includedGb?: string;
2396
3750
  /**
2397
- * @generated from field: google.protobuf.Timestamp to = 3;
3751
+ * Every kind's GB summed over the sampled hours, from the workspace's
3752
+ * billing start.
3753
+ *
3754
+ * @generated from field: double gb_hours = 3;
2398
3755
  */
2399
- to?: TimestampJson;
3756
+ gbHours?: number | "NaN" | "Infinity" | "-Infinity";
2400
3757
  /**
2401
- * The plans the month's metered minutes were recorded at, comma-separated;
2402
- * the workspace's plan today when no minute has a recorded price.
3758
+ * The part of gb_hours past included_gb in each hour.
2403
3759
  *
2404
- * @generated from field: string plan = 4;
3760
+ * @generated from field: double excess_gb_hours = 4;
2405
3761
  */
2406
- plan?: string;
3762
+ excessGbHours?: number | "NaN" | "Infinity" | "-Infinity";
2407
3763
  /**
2408
- * The jobs that finished in the month, by runner size and OS, counted as
2409
- * GetUsage counts them.
3764
+ * excess_gb_hours in GB-months, rounded up once to a thousandth.
2410
3765
  *
2411
- * @generated from field: repeated toshi.workspace.v1.StatementUsage usage = 5;
3766
+ * @generated from field: double billed_gb_months = 5;
2412
3767
  */
2413
- usage?: StatementUsageJson[];
3768
+ billedGbMonths?: number | "NaN" | "Infinity" | "-Infinity";
2414
3769
  /**
2415
- * The sum of usage; its size and os are empty.
3770
+ * billed_gb_months at the plan's price today, rounded up, in the smallest
3771
+ * unit of currency; 0 when the plan has no price for storage.
2416
3772
  *
2417
- * @generated from field: toshi.workspace.v1.StatementUsage total = 6;
3773
+ * @generated from field: int64 estimated_cents = 6;
2418
3774
  */
2419
- total?: StatementUsageJson;
3775
+ estimatedCents?: string;
3776
+ };
3777
+ /**
3778
+ * Describes the message toshi.workspace.v1.Storage.
3779
+ * Use `create(StorageSchema)` to create a new message.
3780
+ */
3781
+ export declare const StorageSchema: GenMessage<Storage, {
3782
+ jsonType: StorageJson;
3783
+ }>;
3784
+ /**
3785
+ * StoredKind is one kind of stored data in a month: image, volume_version,
3786
+ * artifact or recording.
3787
+ *
3788
+ * @generated from message toshi.workspace.v1.StoredKind
3789
+ */
3790
+ export type StoredKind = Message<"toshi.workspace.v1.StoredKind"> & {
2420
3791
  /**
2421
- * The minutes metered to the billing provider for the month, by the size
2422
- * they were recorded under, with their estimated cost.
2423
- *
2424
- * @generated from field: repeated toshi.workspace.v1.StatementCharge charges = 7;
3792
+ * @generated from field: string kind = 1;
2425
3793
  */
2426
- charges?: StatementChargeJson[];
3794
+ kind: string;
2427
3795
  /**
2428
- * The estimated cost of every charge, rounded up once, in the smallest
2429
- * unit of currency: each job at the price recorded for it when it
2430
- * finished, and minutes with none at today's prices. Leaves out the
2431
- * plan's own price and any credit.
3796
+ * The bytes the last sampled hour held.
2432
3797
  *
2433
- * @generated from field: int64 estimated_cents = 8;
3798
+ * @generated from field: int64 bytes = 2;
2434
3799
  */
2435
- estimatedCents?: string;
3800
+ bytes: bigint;
2436
3801
  /**
2437
- * Empty when the prices are unknown.
3802
+ * The kind's GB summed over the sampled hours.
2438
3803
  *
2439
- * @generated from field: string currency = 9;
3804
+ * @generated from field: double gb_hours = 3;
2440
3805
  */
2441
- currency?: string;
3806
+ gbHours: number;
3807
+ };
3808
+ /**
3809
+ * StoredKind is one kind of stored data in a month: image, volume_version,
3810
+ * artifact or recording.
3811
+ *
3812
+ * @generated from message toshi.workspace.v1.StoredKind
3813
+ */
3814
+ export type StoredKindJson = {
2442
3815
  /**
2443
- * False when some minutes have no recorded price and the billing
2444
- * provider's prices have not been read: those minutes' amounts are 0.
2445
- *
2446
- * @generated from field: bool estimate_known = 10;
3816
+ * @generated from field: string kind = 1;
2447
3817
  */
2448
- estimateKnown?: boolean;
3818
+ kind?: string;
2449
3819
  /**
2450
- * The starter credit put on the customer's balance in the month; 0 and
2451
- * unset when it was not applied in it.
3820
+ * The bytes the last sampled hour held.
2452
3821
  *
2453
- * @generated from field: int64 starter_credit_applied_cents = 11;
3822
+ * @generated from field: int64 bytes = 2;
2454
3823
  */
2455
- starterCreditAppliedCents?: string;
3824
+ bytes?: string;
2456
3825
  /**
2457
- * @generated from field: google.protobuf.Timestamp starter_credit_applied_at = 12;
3826
+ * The kind's GB summed over the sampled hours.
3827
+ *
3828
+ * @generated from field: double gb_hours = 3;
2458
3829
  */
2459
- starterCreditAppliedAt?: TimestampJson;
3830
+ gbHours?: number | "NaN" | "Infinity" | "-Infinity";
3831
+ };
3832
+ /**
3833
+ * Describes the message toshi.workspace.v1.StoredKind.
3834
+ * Use `create(StoredKindSchema)` to create a new message.
3835
+ */
3836
+ export declare const StoredKindSchema: GenMessage<StoredKind, {
3837
+ jsonType: StoredKindJson;
3838
+ }>;
3839
+ /**
3840
+ * StorageUsageRow is one kind of stored data on one UTC day.
3841
+ *
3842
+ * @generated from message toshi.workspace.v1.StorageUsageRow
3843
+ */
3844
+ export type StorageUsageRow = Message<"toshi.workspace.v1.StorageUsageRow"> & {
2460
3845
  /**
2461
- * Held time, from first held to assigned, of the jobs queued in the month
2462
- * that reached running, by the latest reason each was held.
3846
+ * The day's first hour, UTC, as YYYY-MM-DD.
2463
3847
  *
2464
- * @generated from field: repeated toshi.workspace.v1.HoldTimes held = 13;
3848
+ * @generated from field: string day = 1;
2465
3849
  */
2466
- held?: HoldTimesJson[];
3850
+ day: string;
2467
3851
  /**
2468
- * The metered minutes with no recorded price, estimated at today's
2469
- * prices: finished jobs not yet in the usage outbox, and usage from
2470
- * before prices were recorded.
2471
- *
2472
- * @generated from field: int64 current_price_minutes = 14;
3852
+ * @generated from field: string kind = 2;
2473
3853
  */
2474
- currentPriceMinutes?: string;
3854
+ kind: string;
2475
3855
  /**
2476
- * The workspace's filler jobs that finished in the month: not billed, not in
2477
- * usage or charges. Unset when there were none.
3856
+ * The kind's GB summed over the day's sampled hours.
2478
3857
  *
2479
- * @generated from field: toshi.workspace.v1.FillerUsage filler = 15;
3858
+ * @generated from field: double gb_hours = 3;
2480
3859
  */
2481
- filler?: FillerUsageJson;
3860
+ gbHours: number;
2482
3861
  /**
2483
- * True when a billing provider is configured; false means nothing is metered or charged.
3862
+ * The bytes the day's last sampled hour held.
2484
3863
  *
2485
- * @generated from field: bool billing_enabled = 16;
3864
+ * @generated from field: int64 bytes = 4;
2486
3865
  */
2487
- billingEnabled?: boolean;
3866
+ bytes: bigint;
3867
+ };
3868
+ /**
3869
+ * StorageUsageRow is one kind of stored data on one UTC day.
3870
+ *
3871
+ * @generated from message toshi.workspace.v1.StorageUsageRow
3872
+ */
3873
+ export type StorageUsageRowJson = {
2488
3874
  /**
2489
- * When the month's estimated spend first reached the workspace's spending
2490
- * cap; unset when it did not.
3875
+ * The day's first hour, UTC, as YYYY-MM-DD.
2491
3876
  *
2492
- * @generated from field: google.protobuf.Timestamp spend_cap_reached_at = 17;
3877
+ * @generated from field: string day = 1;
2493
3878
  */
2494
- spendCapReachedAt?: TimestampJson;
3879
+ day?: string;
2495
3880
  /**
2496
- * The cap that was reached, in the smallest unit of currency; 0 when it
2497
- * was not.
3881
+ * @generated from field: string kind = 2;
3882
+ */
3883
+ kind?: string;
3884
+ /**
3885
+ * The kind's GB summed over the day's sampled hours.
2498
3886
  *
2499
- * @generated from field: int64 spend_cap_reached_cents = 18;
3887
+ * @generated from field: double gb_hours = 3;
2500
3888
  */
2501
- spendCapReachedCents?: string;
3889
+ gbHours?: number | "NaN" | "Infinity" | "-Infinity";
2502
3890
  /**
2503
- * The workspace's spending cap when the statement was built; 0 when none.
3891
+ * The bytes the day's last sampled hour held.
2504
3892
  *
2505
- * @generated from field: int64 spend_cap_cents = 19;
3893
+ * @generated from field: int64 bytes = 4;
2506
3894
  */
2507
- spendCapCents?: string;
3895
+ bytes?: string;
2508
3896
  };
2509
3897
  /**
2510
- * Describes the message toshi.workspace.v1.WorkspaceStatement.
2511
- * Use `create(WorkspaceStatementSchema)` to create a new message.
3898
+ * Describes the message toshi.workspace.v1.StorageUsageRow.
3899
+ * Use `create(StorageUsageRowSchema)` to create a new message.
2512
3900
  */
2513
- export declare const WorkspaceStatementSchema: GenMessage<WorkspaceStatement, {
2514
- jsonType: WorkspaceStatementJson;
3901
+ export declare const StorageUsageRowSchema: GenMessage<StorageUsageRow, {
3902
+ jsonType: StorageUsageRowJson;
2515
3903
  }>;
2516
3904
  /**
2517
3905
  * @generated from message toshi.workspace.v1.StatementUsage
@@ -2536,7 +3924,8 @@ export type StatementUsage = Message<"toshi.workspace.v1.StatementUsage"> & {
2536
3924
  */
2537
3925
  minutes: bigint;
2538
3926
  /**
2539
- * Minutes on the workspace's own hosts, which are not billed.
3927
+ * Minutes on the workspace's own hosts, which are not billed by the
3928
+ * minute; their exact run time carries the own-server fee.
2540
3929
  *
2541
3930
  * @generated from field: int64 own_host_minutes = 5;
2542
3931
  */
@@ -2568,6 +3957,16 @@ export type StatementUsage = Message<"toshi.workspace.v1.StatementUsage"> & {
2568
3957
  * @generated from field: string outcome = 9;
2569
3958
  */
2570
3959
  outcome: string;
3960
+ /**
3961
+ * The exact run time behind minutes and own_host_minutes, in seconds.
3962
+ *
3963
+ * @generated from field: double seconds = 10;
3964
+ */
3965
+ seconds: number;
3966
+ /**
3967
+ * @generated from field: double own_host_seconds = 11;
3968
+ */
3969
+ ownHostSeconds: number;
2571
3970
  };
2572
3971
  /**
2573
3972
  * @generated from message toshi.workspace.v1.StatementUsage
@@ -2592,7 +3991,8 @@ export type StatementUsageJson = {
2592
3991
  */
2593
3992
  minutes?: string;
2594
3993
  /**
2595
- * Minutes on the workspace's own hosts, which are not billed.
3994
+ * Minutes on the workspace's own hosts, which are not billed by the
3995
+ * minute; their exact run time carries the own-server fee.
2596
3996
  *
2597
3997
  * @generated from field: int64 own_host_minutes = 5;
2598
3998
  */
@@ -2624,6 +4024,16 @@ export type StatementUsageJson = {
2624
4024
  * @generated from field: string outcome = 9;
2625
4025
  */
2626
4026
  outcome?: string;
4027
+ /**
4028
+ * The exact run time behind minutes and own_host_minutes, in seconds.
4029
+ *
4030
+ * @generated from field: double seconds = 10;
4031
+ */
4032
+ seconds?: number | "NaN" | "Infinity" | "-Infinity";
4033
+ /**
4034
+ * @generated from field: double own_host_seconds = 11;
4035
+ */
4036
+ ownHostSeconds?: number | "NaN" | "Infinity" | "-Infinity";
2627
4037
  };
2628
4038
  /**
2629
4039
  * Describes the message toshi.workspace.v1.StatementUsage.
@@ -2902,6 +4312,28 @@ export type UsageRow = Message<"toshi.workspace.v1.UsageRow"> & {
2902
4312
  * @generated from field: string kind = 10;
2903
4313
  */
2904
4314
  kind: string;
4315
+ /**
4316
+ * The exact run time behind minutes and own_host_minutes, in seconds, not
4317
+ * rounded.
4318
+ *
4319
+ * @generated from field: double seconds = 11;
4320
+ */
4321
+ seconds: number;
4322
+ /**
4323
+ * @generated from field: double own_host_seconds = 12;
4324
+ */
4325
+ ownHostSeconds: number;
4326
+ /**
4327
+ * The exact time service runs were awake, from first ready to release,
4328
+ * and the idle part of it before they were put to sleep, in seconds.
4329
+ *
4330
+ * @generated from field: double awake_seconds = 13;
4331
+ */
4332
+ awakeSeconds: number;
4333
+ /**
4334
+ * @generated from field: double idle_seconds = 14;
4335
+ */
4336
+ idleSeconds: number;
2905
4337
  };
2906
4338
  /**
2907
4339
  * UsageRow counts the jobs of one UTC day, conclusion, outcome and kind.
@@ -2980,6 +4412,28 @@ export type UsageRowJson = {
2980
4412
  * @generated from field: string kind = 10;
2981
4413
  */
2982
4414
  kind?: string;
4415
+ /**
4416
+ * The exact run time behind minutes and own_host_minutes, in seconds, not
4417
+ * rounded.
4418
+ *
4419
+ * @generated from field: double seconds = 11;
4420
+ */
4421
+ seconds?: number | "NaN" | "Infinity" | "-Infinity";
4422
+ /**
4423
+ * @generated from field: double own_host_seconds = 12;
4424
+ */
4425
+ ownHostSeconds?: number | "NaN" | "Infinity" | "-Infinity";
4426
+ /**
4427
+ * The exact time service runs were awake, from first ready to release,
4428
+ * and the idle part of it before they were put to sleep, in seconds.
4429
+ *
4430
+ * @generated from field: double awake_seconds = 13;
4431
+ */
4432
+ awakeSeconds?: number | "NaN" | "Infinity" | "-Infinity";
4433
+ /**
4434
+ * @generated from field: double idle_seconds = 14;
4435
+ */
4436
+ idleSeconds?: number | "NaN" | "Infinity" | "-Infinity";
2983
4437
  };
2984
4438
  /**
2985
4439
  * Describes the message toshi.workspace.v1.UsageRow.
@@ -3481,6 +4935,54 @@ export type EgressHostJson = {
3481
4935
  export declare const EgressHostSchema: GenMessage<EgressHost, {
3482
4936
  jsonType: EgressHostJson;
3483
4937
  }>;
4938
+ /**
4939
+ * @generated from enum toshi.workspace.v1.HostingCertificateState
4940
+ */
4941
+ export declare enum HostingCertificateState {
4942
+ /**
4943
+ * @generated from enum value: HOSTING_CERTIFICATE_STATE_UNSPECIFIED = 0;
4944
+ */
4945
+ UNSPECIFIED = 0,
4946
+ /**
4947
+ * The first certificate is being ordered; until it is, provided names
4948
+ * refuse connections.
4949
+ *
4950
+ * @generated from enum value: HOSTING_CERTIFICATE_STATE_ISSUING = 1;
4951
+ */
4952
+ ISSUING = 1,
4953
+ /**
4954
+ * The authority refused an order for its rate limits; Toshi tries again
4955
+ * at retry_at.
4956
+ *
4957
+ * @generated from enum value: HOSTING_CERTIFICATE_STATE_RATE_LIMITED = 2;
4958
+ */
4959
+ RATE_LIMITED = 2,
4960
+ /**
4961
+ * @generated from enum value: HOSTING_CERTIFICATE_STATE_VALID = 3;
4962
+ */
4963
+ VALID = 3,
4964
+ /**
4965
+ * A renewal failed; the current certificate serves until not_after.
4966
+ *
4967
+ * @generated from enum value: HOSTING_CERTIFICATE_STATE_RENEWAL_FAILING = 4;
4968
+ */
4969
+ RENEWAL_FAILING = 4,
4970
+ /**
4971
+ * The control plane signed the certificate itself, as [hosting] dev = true
4972
+ * does for test stacks; clients do not trust it.
4973
+ *
4974
+ * @generated from enum value: HOSTING_CERTIFICATE_STATE_SELF_SIGNED = 5;
4975
+ */
4976
+ SELF_SIGNED = 5
4977
+ }
4978
+ /**
4979
+ * @generated from enum toshi.workspace.v1.HostingCertificateState
4980
+ */
4981
+ export type HostingCertificateStateJson = "HOSTING_CERTIFICATE_STATE_UNSPECIFIED" | "HOSTING_CERTIFICATE_STATE_ISSUING" | "HOSTING_CERTIFICATE_STATE_RATE_LIMITED" | "HOSTING_CERTIFICATE_STATE_VALID" | "HOSTING_CERTIFICATE_STATE_RENEWAL_FAILING" | "HOSTING_CERTIFICATE_STATE_SELF_SIGNED";
4982
+ /**
4983
+ * Describes the enum toshi.workspace.v1.HostingCertificateState.
4984
+ */
4985
+ export declare const HostingCertificateStateSchema: GenEnum<HostingCertificateState, HostingCertificateStateJson>;
3484
4986
  /**
3485
4987
  * WorkspaceService reads and sets the caller's workspace: its settings, its
3486
4988
  * billing and usage, and the plans it may buy.
@@ -3506,6 +5008,32 @@ export declare const WorkspaceService: GenService<{
3506
5008
  input: typeof GetWorkspaceRequestSchema;
3507
5009
  output: typeof GetWorkspaceResponseSchema;
3508
5010
  };
5011
+ /**
5012
+ * UpdateWorkspace changes the fields of the caller's workspace that
5013
+ * update_mask names and returns the workspace as stored. The paths are
5014
+ * "name" and "settings.<field>" for a field of WorkspaceSettings. An
5015
+ * omitted update_mask means the fields the request populates, and an
5016
+ * empty one, an omitted one with no field populated, "*" or another
5017
+ * path fails with INVALID_ARGUMENT. The call needs no permission of its
5018
+ * own: each path needs its field group's, workspace.signin for
5019
+ * settings.sign_in, billing.write for the spending limits and
5020
+ * workspace.write for the others, and a mask that names nothing needs any
5021
+ * one of them. A caller that lacks one is refused with PERMISSION_DENIED
5022
+ * naming it, and nothing is written.
5023
+ *
5024
+ * The workspace's settings are checked as a whole after the change, and a
5025
+ * value they refuse fails with INVALID_ARGUMENT; the fields the mask names
5026
+ * are also checked against the plan and the caller, as their
5027
+ * descriptions say. A workspace.etag that differs from the workspace's
5028
+ * fails with ABORTED and changes nothing; without one the last write wins.
5029
+ *
5030
+ * @generated from rpc toshi.workspace.v1.WorkspaceService.UpdateWorkspace
5031
+ */
5032
+ updateWorkspace: {
5033
+ methodKind: "unary";
5034
+ input: typeof UpdateWorkspaceRequestSchema;
5035
+ output: typeof UpdateWorkspaceResponseSchema;
5036
+ };
3509
5037
  /**
3510
5038
  * ListWorkspaces returns the workspaces of the caller, ordered by ID: a
3511
5039
  * session's workspaces, or a token's one.
@@ -3548,65 +5076,46 @@ export declare const WorkspaceService: GenService<{
3548
5076
  output: typeof GetWorkspaceStatementResponseSchema;
3549
5077
  };
3550
5078
  /**
3551
- * SetWorkspaceOwnHostsOnly sets whether the workspace's jobs wait for its
3552
- * own hosts and never run on shared ones, and returns the workspace as
3553
- * stored.
3554
- *
3555
- * @generated from rpc toshi.workspace.v1.WorkspaceService.SetWorkspaceOwnHostsOnly
3556
- */
3557
- setWorkspaceOwnHostsOnly: {
3558
- methodKind: "unary";
3559
- input: typeof SetWorkspaceOwnHostsOnlyRequestSchema;
3560
- output: typeof SetWorkspaceOwnHostsOnlyResponseSchema;
3561
- };
3562
- /**
3563
- * SetWorkspaceAllowOverflow sets whether shared overflow hosts may take
3564
- * the workspace's jobs and returns the workspace as stored; its own
3565
- * overflow hosts always may.
5079
+ * ListSeats returns the desktop seats the workspace held in one UTC
5080
+ * month, oldest assigned first: the seats live at some time in it,
5081
+ * removed ones included. A person assigned a seat may open a display on
5082
+ * Windows that Toshi licenses; each seat is billed for every month it
5083
+ * touches. A month not in YYYY-MM form fails with INVALID_ARGUMENT.
3566
5084
  *
3567
- * @generated from rpc toshi.workspace.v1.WorkspaceService.SetWorkspaceAllowOverflow
5085
+ * @generated from rpc toshi.workspace.v1.WorkspaceService.ListSeats
3568
5086
  */
3569
- setWorkspaceAllowOverflow: {
5087
+ listSeats: {
3570
5088
  methodKind: "unary";
3571
- input: typeof SetWorkspaceAllowOverflowRequestSchema;
3572
- output: typeof SetWorkspaceAllowOverflowResponseSchema;
5089
+ input: typeof ListSeatsRequestSchema;
5090
+ output: typeof ListSeatsResponseSchema;
3573
5091
  };
3574
5092
  /**
3575
- * SetWorkspaceAllowCacheWarm sets whether the workspace's fillers run and
3576
- * returns the workspace as stored. Off by default.
5093
+ * AssignSeat assigns a desktop seat to a member of the workspace. A
5094
+ * person who holds a live seat fails with ALREADY_EXISTS, and one who is
5095
+ * not a member with NOT_FOUND. A seat removed this month stays billed for
5096
+ * it, so assigning a seat to another person in its place is a second
5097
+ * seat.
3577
5098
  *
3578
- * @generated from rpc toshi.workspace.v1.WorkspaceService.SetWorkspaceAllowCacheWarm
5099
+ * @generated from rpc toshi.workspace.v1.WorkspaceService.AssignSeat
3579
5100
  */
3580
- setWorkspaceAllowCacheWarm: {
5101
+ assignSeat: {
3581
5102
  methodKind: "unary";
3582
- input: typeof SetWorkspaceAllowCacheWarmRequestSchema;
3583
- output: typeof SetWorkspaceAllowCacheWarmResponseSchema;
5103
+ input: typeof AssignSeatRequestSchema;
5104
+ output: typeof AssignSeatResponseSchema;
3584
5105
  };
3585
5106
  /**
3586
- * SetWorkspaceCancelRunOnVmDeath sets whether Toshi cancels the workflow
3587
- * run of the workspace's job when the job's VM is gone and returns the
3588
- * workspace as stored. On by default.
5107
+ * RemoveSeat removes a live seat: its person may open no display on
5108
+ * Windows that Toshi licenses from then on, and the seat stays billed for
5109
+ * the months it touched. A seat the workspace does not have, or one
5110
+ * already removed, fails with NOT_FOUND. A member's removal from the
5111
+ * workspace removes their seat too.
3589
5112
  *
3590
- * @generated from rpc toshi.workspace.v1.WorkspaceService.SetWorkspaceCancelRunOnVmDeath
5113
+ * @generated from rpc toshi.workspace.v1.WorkspaceService.RemoveSeat
3591
5114
  */
3592
- setWorkspaceCancelRunOnVmDeath: {
5115
+ removeSeat: {
3593
5116
  methodKind: "unary";
3594
- input: typeof SetWorkspaceCancelRunOnVmDeathRequestSchema;
3595
- output: typeof SetWorkspaceCancelRunOnVmDeathResponseSchema;
3596
- };
3597
- /**
3598
- * SetWorkspaceSpendLimits sets the workspace's monthly spending cap and its
3599
- * own jobs-per-hour limit, and returns the workspace as stored; an unset
3600
- * field is left as it is. A negative value, or a max_jobs_per_hour above
3601
- * the plan's, fails with INVALID_ARGUMENT; a spending cap while billing is
3602
- * off fails with FAILED_PRECONDITION.
3603
- *
3604
- * @generated from rpc toshi.workspace.v1.WorkspaceService.SetWorkspaceSpendLimits
3605
- */
3606
- setWorkspaceSpendLimits: {
3607
- methodKind: "unary";
3608
- input: typeof SetWorkspaceSpendLimitsRequestSchema;
3609
- output: typeof SetWorkspaceSpendLimitsResponseSchema;
5117
+ input: typeof RemoveSeatRequestSchema;
5118
+ output: typeof RemoveSeatResponseSchema;
3610
5119
  };
3611
5120
  /**
3612
5121
  * ListEgressIPs returns the public addresses the workspace's jobs may
@@ -3626,8 +5135,9 @@ export declare const WorkspaceService: GenService<{
3626
5135
  /**
3627
5136
  * GetUsage returns the workspace's job counts and billable minutes per UTC
3628
5137
  * day, conclusion, outcome and kind, for the jobs whose queued_at is in
3629
- * the window. The window defaults to the last 7 days. A window whose from
3630
- * is not before its to fails with INVALID_ARGUMENT.
5138
+ * the window. Filler jobs, and jobs cancelled before a host held them,
5139
+ * are left out. The window defaults to the last 7 days. A window whose
5140
+ * from is not before its to fails with INVALID_ARGUMENT.
3631
5141
  *
3632
5142
  * @generated from rpc toshi.workspace.v1.WorkspaceService.GetUsage
3633
5143
  */
@@ -3679,11 +5189,12 @@ export declare const WorkspaceService: GenService<{
3679
5189
  /**
3680
5190
  * CreateCheckoutSession returns a Stripe Checkout URL that subscribes the
3681
5191
  * workspace to plan, first creating and linking a billing customer for a
3682
- * workspace without one. An empty plan, or a plan the configuration does
3683
- * not define, fails with INVALID_ARGUMENT; self-serve billing off, a plan
3684
- * that is not sold or maps to several lookup keys, a price missing in
3685
- * Stripe, or a workspace that already has a subscription fails with
3686
- * FAILED_PRECONDITION; a billing provider failure fails with UNAVAILABLE.
5192
+ * workspace without one. An empty plan, a plan the configuration does not
5193
+ * define, or a return_url outside the allowed origins fails with
5194
+ * INVALID_ARGUMENT; self-serve billing off, a plan that is not sold or
5195
+ * maps to several lookup keys, a price missing in Stripe, or a workspace
5196
+ * that already has a subscription fails with FAILED_PRECONDITION; a
5197
+ * billing provider failure fails with UNAVAILABLE.
3687
5198
  *
3688
5199
  * @generated from rpc toshi.workspace.v1.WorkspaceService.CreateCheckoutSession
3689
5200
  */
@@ -3694,7 +5205,8 @@ export declare const WorkspaceService: GenService<{
3694
5205
  };
3695
5206
  /**
3696
5207
  * CreateBillingPortalSession returns a Stripe Customer Portal URL where
3697
- * the workspace manages its card and subscription. Self-serve billing not
5208
+ * the workspace manages its card and subscription. A return_url outside
5209
+ * the allowed origins fails with INVALID_ARGUMENT; self-serve billing not
3698
5210
  * configured, or a workspace with no billing customer, fails with
3699
5211
  * FAILED_PRECONDITION; a billing provider failure fails with UNAVAILABLE.
3700
5212
  *
@@ -3716,4 +5228,38 @@ export declare const WorkspaceService: GenService<{
3716
5228
  input: typeof GetVersionRequestSchema;
3717
5229
  output: typeof GetVersionResponseSchema;
3718
5230
  };
5231
+ /**
5232
+ * DeleteWorkspace schedules the caller's workspace's deletion: the
5233
+ * workspace is suspended until purge_after, the deployment's default
5234
+ * grace from now, after which its data is purged from the control plane
5235
+ * and every host. confirm must equal the workspace's name as
5236
+ * GetWorkspace returns it, else the call fails with INVALID_ARGUMENT. A
5237
+ * workspace that is not active (suspended, deletion scheduled, deleting or
5238
+ * deleted) fails with FAILED_PRECONDITION, with the state as the
5239
+ * google.rpc.ErrorInfo reason. The answer carries the workspace with
5240
+ * purge_after and deletion_by "owner".
5241
+ *
5242
+ * @generated from rpc toshi.workspace.v1.WorkspaceService.DeleteWorkspace
5243
+ */
5244
+ deleteWorkspace: {
5245
+ methodKind: "unary";
5246
+ input: typeof DeleteWorkspaceRequestSchema;
5247
+ output: typeof DeleteWorkspaceResponseSchema;
5248
+ };
5249
+ /**
5250
+ * CancelWorkspaceDeletion cancels a deletion an Owner scheduled while its
5251
+ * purge_after is in the future, and returns the workspace to active; held
5252
+ * jobs run at the next scheduler pass. It is the one call other than the
5253
+ * reads a workspace with a scheduled deletion takes. A workspace with no
5254
+ * scheduled deletion, one the operator scheduled, or one whose
5255
+ * purge_after has passed fails with FAILED_PRECONDITION, with the reason
5256
+ * in a google.rpc.ErrorInfo.
5257
+ *
5258
+ * @generated from rpc toshi.workspace.v1.WorkspaceService.CancelWorkspaceDeletion
5259
+ */
5260
+ cancelWorkspaceDeletion: {
5261
+ methodKind: "unary";
5262
+ input: typeof CancelWorkspaceDeletionRequestSchema;
5263
+ output: typeof CancelWorkspaceDeletionResponseSchema;
5264
+ };
3719
5265
  }>;