@opsee/mcp-server 0.10.2 → 0.11.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 (53) hide show
  1. package/gen/api/v1/acceptance_criterion_pb.js +2 -1
  2. package/gen/api/v1/account_pb.d.ts +20 -0
  3. package/gen/api/v1/account_pb.js +1 -1
  4. package/gen/api/v1/activity_log_pb.js +2 -1
  5. package/gen/api/v1/ai_workflow_run_pb.js +2 -1
  6. package/gen/api/v1/ai_workflow_unit_pb.js +2 -1
  7. package/gen/api/v1/attachment_pb.js +2 -1
  8. package/gen/api/v1/board_column_pb.d.ts +75 -0
  9. package/gen/api/v1/board_column_pb.js +27 -5
  10. package/gen/api/v1/board_pb.js +2 -1
  11. package/gen/api/v1/comment_pb.d.ts +19 -0
  12. package/gen/api/v1/comment_pb.js +2 -1
  13. package/gen/api/v1/component_pb.js +2 -1
  14. package/gen/api/v1/cycle_pb.js +2 -1
  15. package/gen/api/v1/doc_page_pb.js +2 -1
  16. package/gen/api/v1/doc_space_pb.js +2 -1
  17. package/gen/api/v1/doc_template_pb.js +2 -1
  18. package/gen/api/v1/document_pb.js +2 -1
  19. package/gen/api/v1/initiative_pb.d.ts +181 -0
  20. package/gen/api/v1/initiative_pb.js +46 -17
  21. package/gen/api/v1/integration_pb.d.ts +646 -0
  22. package/gen/api/v1/integration_pb.js +137 -3
  23. package/gen/api/v1/label_pb.js +2 -1
  24. package/gen/api/v1/milestone_doc_page_pb.js +2 -1
  25. package/gen/api/v1/milestone_document_pb.js +2 -1
  26. package/gen/api/v1/milestone_pb.js +2 -1
  27. package/gen/api/v1/milestone_repository_pb.js +2 -1
  28. package/gen/api/v1/milestone_task_pb.js +2 -1
  29. package/gen/api/v1/models_pb.d.ts +55 -0
  30. package/gen/api/v1/models_pb.js +56 -49
  31. package/gen/api/v1/orchestrator_pb.d.ts +164 -1
  32. package/gen/api/v1/orchestrator_pb.js +81 -53
  33. package/gen/api/v1/project_membership_pb.d.ts +207 -1
  34. package/gen/api/v1/project_membership_pb.js +46 -2
  35. package/gen/api/v1/project_pb.d.ts +47 -3
  36. package/gen/api/v1/project_pb.js +29 -15
  37. package/gen/api/v1/readiness_pb.d.ts +229 -10
  38. package/gen/api/v1/readiness_pb.js +50 -7
  39. package/gen/api/v1/reporting_pb.js +2 -1
  40. package/gen/api/v1/subscription_pb.js +1 -1
  41. package/gen/api/v1/task_component_pb.js +2 -1
  42. package/gen/api/v1/task_contributor_pb.js +2 -1
  43. package/gen/api/v1/task_doc_page_pb.js +2 -1
  44. package/gen/api/v1/task_document_pb.js +2 -1
  45. package/gen/api/v1/task_label_pb.js +2 -1
  46. package/gen/api/v1/task_pb.d.ts +281 -1
  47. package/gen/api/v1/task_pb.js +73 -23
  48. package/gen/api/v1/task_priority_pb.js +2 -1
  49. package/gen/api/v1/task_repository_pb.js +2 -1
  50. package/gen/api/v1/task_template_pb.js +2 -1
  51. package/gen/api/v1/task_type_pb.js +2 -1
  52. package/gen/api/v1/view_pb.js +2 -1
  53. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
  // @generated from file api/v1/project_membership.proto (package api.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
5
+ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { Pagination } from "./pagination_pb";
8
8
  import type { FilterOptions } from "./filter_pb";
@@ -263,6 +263,204 @@ export declare type GetProjectMembersResponse = Message<"api.v1.GetProjectMember
263
263
  */
264
264
  export declare const GetProjectMembersResponseSchema: GenMessage<GetProjectMembersResponse>;
265
265
 
266
+ /**
267
+ * One recipient in a bulk add. Either user_id (picked from the company user
268
+ * list) or email (typed or pasted) identifies the person, never both.
269
+ *
270
+ * @generated from message api.v1.BulkAddProjectMemberEntry
271
+ */
272
+ export declare type BulkAddProjectMemberEntry = Message<"api.v1.BulkAddProjectMemberEntry"> & {
273
+ /**
274
+ * @generated from field: uint32 user_id = 1;
275
+ */
276
+ userId: number;
277
+
278
+ /**
279
+ * @generated from field: string email = 2;
280
+ */
281
+ email: string;
282
+
283
+ /**
284
+ * Overrides the request's default_role for this recipient only. Empty means
285
+ * "use default_role".
286
+ *
287
+ * @generated from field: string role = 3;
288
+ */
289
+ role: string;
290
+ };
291
+
292
+ /**
293
+ * Describes the message api.v1.BulkAddProjectMemberEntry.
294
+ * Use `create(BulkAddProjectMemberEntrySchema)` to create a new message.
295
+ */
296
+ export declare const BulkAddProjectMemberEntrySchema: GenMessage<BulkAddProjectMemberEntry>;
297
+
298
+ /**
299
+ * @generated from message api.v1.BulkAddProjectMemberResult
300
+ */
301
+ export declare type BulkAddProjectMemberResult = Message<"api.v1.BulkAddProjectMemberResult"> & {
302
+ /**
303
+ * Echoed back so the client can line results up with the rows it submitted,
304
+ * including rows that never resolved to a user.
305
+ *
306
+ * @generated from field: string email = 1;
307
+ */
308
+ email: string;
309
+
310
+ /**
311
+ * @generated from field: uint32 user_id = 2;
312
+ */
313
+ userId: number;
314
+
315
+ /**
316
+ * @generated from field: string role = 3;
317
+ */
318
+ role: string;
319
+
320
+ /**
321
+ * @generated from field: api.v1.BulkAddProjectMemberStatus status = 4;
322
+ */
323
+ status: BulkAddProjectMemberStatus;
324
+
325
+ /**
326
+ * Human-readable reason for skipped and failed rows. Empty on success.
327
+ *
328
+ * @generated from field: string message = 5;
329
+ */
330
+ message: string;
331
+
332
+ /**
333
+ * @generated from field: api.v1.ProjectMembership project_membership = 6;
334
+ */
335
+ projectMembership?: ProjectMembership;
336
+ };
337
+
338
+ /**
339
+ * Describes the message api.v1.BulkAddProjectMemberResult.
340
+ * Use `create(BulkAddProjectMemberResultSchema)` to create a new message.
341
+ */
342
+ export declare const BulkAddProjectMemberResultSchema: GenMessage<BulkAddProjectMemberResult>;
343
+
344
+ /**
345
+ * @generated from message api.v1.BulkAddProjectMembersRequest
346
+ */
347
+ export declare type BulkAddProjectMembersRequest = Message<"api.v1.BulkAddProjectMembersRequest"> & {
348
+ /**
349
+ * @generated from field: uint32 project_id = 1;
350
+ */
351
+ projectId: number;
352
+
353
+ /**
354
+ * @generated from field: repeated api.v1.BulkAddProjectMemberEntry entries = 2;
355
+ */
356
+ entries: BulkAddProjectMemberEntry[];
357
+
358
+ /**
359
+ * Applied to every entry that does not carry its own role.
360
+ *
361
+ * @generated from field: string default_role = 3;
362
+ */
363
+ defaultRole: string;
364
+ };
365
+
366
+ /**
367
+ * Describes the message api.v1.BulkAddProjectMembersRequest.
368
+ * Use `create(BulkAddProjectMembersRequestSchema)` to create a new message.
369
+ */
370
+ export declare const BulkAddProjectMembersRequestSchema: GenMessage<BulkAddProjectMembersRequest>;
371
+
372
+ /**
373
+ * @generated from message api.v1.BulkAddProjectMembersResponse
374
+ */
375
+ export declare type BulkAddProjectMembersResponse = Message<"api.v1.BulkAddProjectMembersResponse"> & {
376
+ /**
377
+ * One result per submitted entry, in request order.
378
+ *
379
+ * @generated from field: repeated api.v1.BulkAddProjectMemberResult results = 1;
380
+ */
381
+ results: BulkAddProjectMemberResult[];
382
+
383
+ /**
384
+ * @generated from field: int32 added_count = 2;
385
+ */
386
+ addedCount: number;
387
+
388
+ /**
389
+ * @generated from field: int32 invited_count = 3;
390
+ */
391
+ invitedCount: number;
392
+
393
+ /**
394
+ * @generated from field: int32 skipped_count = 4;
395
+ */
396
+ skippedCount: number;
397
+
398
+ /**
399
+ * @generated from field: int32 failed_count = 5;
400
+ */
401
+ failedCount: number;
402
+ };
403
+
404
+ /**
405
+ * Describes the message api.v1.BulkAddProjectMembersResponse.
406
+ * Use `create(BulkAddProjectMembersResponseSchema)` to create a new message.
407
+ */
408
+ export declare const BulkAddProjectMembersResponseSchema: GenMessage<BulkAddProjectMembersResponse>;
409
+
410
+ /**
411
+ * Outcome of a single recipient. Rows are independent: one failure never
412
+ * discards the rest of the batch.
413
+ *
414
+ * @generated from enum api.v1.BulkAddProjectMemberStatus
415
+ */
416
+ export enum BulkAddProjectMemberStatus {
417
+ /**
418
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_UNSPECIFIED = 0;
419
+ */
420
+ UNSPECIFIED = 0,
421
+
422
+ /**
423
+ * Existing company user, membership created.
424
+ *
425
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_ADDED = 1;
426
+ */
427
+ ADDED = 1,
428
+
429
+ /**
430
+ * New company user created, invitation email queued, membership created.
431
+ *
432
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_INVITED = 2;
433
+ */
434
+ INVITED = 2,
435
+
436
+ /**
437
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_SKIPPED_ALREADY_MEMBER = 3;
438
+ */
439
+ SKIPPED_ALREADY_MEMBER = 3,
440
+
441
+ /**
442
+ * Same person listed more than once in this request.
443
+ *
444
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_SKIPPED_DUPLICATE = 4;
445
+ */
446
+ SKIPPED_DUPLICATE = 4,
447
+
448
+ /**
449
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_FAILED_INVALID_EMAIL = 5;
450
+ */
451
+ FAILED_INVALID_EMAIL = 5,
452
+
453
+ /**
454
+ * @generated from enum value: BULK_ADD_PROJECT_MEMBER_STATUS_FAILED = 6;
455
+ */
456
+ FAILED = 6,
457
+ }
458
+
459
+ /**
460
+ * Describes the enum api.v1.BulkAddProjectMemberStatus.
461
+ */
462
+ export declare const BulkAddProjectMemberStatusSchema: GenEnum<BulkAddProjectMemberStatus>;
463
+
266
464
  /**
267
465
  * Service definition
268
466
  *
@@ -317,5 +515,13 @@ export declare const ProjectMembershipService: GenService<{
317
515
  input: typeof GetProjectMembersRequestSchema;
318
516
  output: typeof GetProjectMembersResponseSchema;
319
517
  },
518
+ /**
519
+ * @generated from rpc api.v1.ProjectMembershipService.BulkAddProjectMembers
520
+ */
521
+ bulkAddProjectMembers: {
522
+ methodKind: "unary";
523
+ input: typeof BulkAddProjectMembersRequestSchema;
524
+ output: typeof BulkAddProjectMembersResponseSchema;
525
+ },
320
526
  }>;
321
527
 
@@ -2,19 +2,20 @@
2
2
  // @generated from file api/v1/project_membership.proto (package api.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1";
5
+ import { enumDesc, fileDesc, messageDesc, serviceDesc, tsEnum } from "@bufbuild/protobuf/codegenv1";
6
6
  import { file_google_protobuf_empty } from "@bufbuild/protobuf/wkt";
7
7
  import { file_google_api_annotations } from "../../google/api/annotations_pb";
8
8
  import { file_validate_validate } from "../../validate/validate_pb";
9
9
  import { file_api_v1_pagination } from "./pagination_pb";
10
10
  import { file_api_v1_filter } from "./filter_pb";
11
11
  import { file_api_v1_models } from "./models_pb";
12
+ import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
12
13
 
13
14
  /**
14
15
  * Describes the file api/v1/project_membership.proto.
15
16
  */
16
17
  export const file_api_v1_project_membership = /*@__PURE__*/
17
- fileDesc("Ch9hcGkvdjEvcHJvamVjdF9tZW1iZXJzaGlwLnByb3RvEgZhcGkudjEiggEKG0FkZFByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBIXCgRyb2xlGAEgASgJQgn6QgZyBBABGDISEwoLaXNfZmF2b3JpdGUYAiABKAgSGwoKcHJvamVjdF9pZBgDIAEoDUIH+kIEKgIoARIYCgd1c2VyX2lkGAQgASgNQgf6QgQqAigBIpgBChxFZGl0UHJvamVjdE1lbWJlcnNoaXBSZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhcKBHJvbGUYAiABKAlCCfpCBnIEEAEYMhITCgtpc19mYXZvcml0ZRgDIAEoCBIbCgpwcm9qZWN0X2lkGAQgASgNQgf6QgQqAigBEhgKB3VzZXJfaWQYBSABKA1CB/pCBCoCKAEiKQobR2V0UHJvamVjdE1lbWJlcnNoaXBSZXF1ZXN0EgoKAmlkGAEgASgNIpwBChxHZXRQcm9qZWN0TWVtYmVyc2hpcHNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESMAoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uQgj6QgWKAQIQARItCg5maWx0ZXJfb3B0aW9ucxgDIAEoCzIVLmFwaS52MS5GaWx0ZXJPcHRpb25zIiwKHkRlbGV0ZVByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBIKCgJpZBgBIAEoDSJ/Ch1HZXRQcm9qZWN0TWVtYmVyc2hpcHNSZXNwb25zZRI2ChNwcm9qZWN0X21lbWJlcnNoaXBzGAEgAygLMhkuYXBpLnYxLlByb2plY3RNZW1iZXJzaGlwEiYKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbiJVChxBZGRQcm9qZWN0TWVtYmVyc2hpcFJlc3BvbnNlEjUKEnByb2plY3RfbWVtYmVyc2hpcBgBIAEoCzIZLmFwaS52MS5Qcm9qZWN0TWVtYmVyc2hpcCJWCh1FZGl0UHJvamVjdE1lbWJlcnNoaXBSZXNwb25zZRI1ChJwcm9qZWN0X21lbWJlcnNoaXAYASABKAsyGS5hcGkudjEuUHJvamVjdE1lbWJlcnNoaXAiVQocR2V0UHJvamVjdE1lbWJlcnNoaXBSZXNwb25zZRI1ChJwcm9qZWN0X21lbWJlcnNoaXAYASABKAsyGS5hcGkudjEuUHJvamVjdE1lbWJlcnNoaXAimAEKGEdldFByb2plY3RNZW1iZXJzUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEjAKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbkII+kIFigECEAESLQoOZmlsdGVyX29wdGlvbnMYAyABKAsyFS5hcGkudjEuRmlsdGVyT3B0aW9ucyJ7ChlHZXRQcm9qZWN0TWVtYmVyc1Jlc3BvbnNlEjYKE3Byb2plY3RfbWVtYmVyc2hpcHMYASADKAsyGS5hcGkudjEuUHJvamVjdE1lbWJlcnNoaXASJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uMuQGChhQcm9qZWN0TWVtYmVyc2hpcFNlcnZpY2USiQEKFEFkZFByb2plY3RNZW1iZXJzaGlwEiMuYXBpLnYxLkFkZFByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBokLmFwaS52MS5BZGRQcm9qZWN0TWVtYmVyc2hpcFJlc3BvbnNlIiaC0+STAiA6ASoiGy9hcGkvdjEvcHJvamVjdF9tZW1iZXJzaGlwcxKRAQoVRWRpdFByb2plY3RNZW1iZXJzaGlwEiQuYXBpLnYxLkVkaXRQcm9qZWN0TWVtYmVyc2hpcFJlcXVlc3QaJS5hcGkudjEuRWRpdFByb2plY3RNZW1iZXJzaGlwUmVzcG9uc2UiK4LT5JMCJToBKhogL2FwaS92MS9wcm9qZWN0X21lbWJlcnNoaXBzL3tpZH0SiwEKFEdldFByb2plY3RNZW1iZXJzaGlwEiMuYXBpLnYxLkdldFByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBokLmFwaS52MS5HZXRQcm9qZWN0TWVtYmVyc2hpcFJlc3BvbnNlIiiC0+STAiISIC9hcGkvdjEvcHJvamVjdF9tZW1iZXJzaGlwcy97aWR9EokBChVHZXRQcm9qZWN0TWVtYmVyc2hpcHMSJC5hcGkudjEuR2V0UHJvamVjdE1lbWJlcnNoaXBzUmVxdWVzdBolLmFwaS52MS5HZXRQcm9qZWN0TWVtYmVyc2hpcHNSZXNwb25zZSIjgtPkkwIdEhsvYXBpL3YxL3Byb2plY3RfbWVtYmVyc2hpcHMSgwEKF0RlbGV0ZVByb2plY3RNZW1iZXJzaGlwEiYuYXBpLnYxLkRlbGV0ZVByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIogtPkkwIiKiAvYXBpL3YxL3Byb2plY3RfbWVtYmVyc2hpcHMve2lkfRKHAQoRR2V0UHJvamVjdE1lbWJlcnMSIC5hcGkudjEuR2V0UHJvamVjdE1lbWJlcnNSZXF1ZXN0GiEuYXBpLnYxLkdldFByb2plY3RNZW1iZXJzUmVzcG9uc2UiLYLT5JMCJxIlL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vbWVtYmVyc0J7Cgpjb20uYXBpLnYxQhZQcm9qZWN0TWVtYmVyc2hpcFByb3RvUAFaHG9wc2VlL2JhY2tlbmQvZ2VuL2FwaS92MTtnZW6iAgNBWFiqAgZBcGkuVjHKAgZBcGlcVjHiAhJBcGlcVjFcR1BCTWV0YWRhdGHqAgdBcGk6OlYxYgZwcm90bzM", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models]);
18
+ fileDesc("Ch9hcGkvdjEvcHJvamVjdF9tZW1iZXJzaGlwLnByb3RvEgZhcGkudjEijgEKG0FkZFByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBIXCgRyb2xlGAEgASgJQgn6QgZyBBABGDISEwoLaXNfZmF2b3JpdGUYAiABKAgSJwoKcHJvamVjdF9pZBgDIAEoDUIT+kIEKgIoAYK1GAhwcm9qZWN0cxIYCgd1c2VyX2lkGAQgASgNQgf6QgQqAigBIqQBChxFZGl0UHJvamVjdE1lbWJlcnNoaXBSZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhcKBHJvbGUYAiABKAlCCfpCBnIEEAEYMhITCgtpc19mYXZvcml0ZRgDIAEoCBInCgpwcm9qZWN0X2lkGAQgASgNQhP6QgQqAigBgrUYCHByb2plY3RzEhgKB3VzZXJfaWQYBSABKA1CB/pCBCoCKAEiKQobR2V0UHJvamVjdE1lbWJlcnNoaXBSZXF1ZXN0EgoKAmlkGAEgASgNIpwBChxHZXRQcm9qZWN0TWVtYmVyc2hpcHNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESMAoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uQgj6QgWKAQIQARItCg5maWx0ZXJfb3B0aW9ucxgDIAEoCzIVLmFwaS52MS5GaWx0ZXJPcHRpb25zIiwKHkRlbGV0ZVByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBIKCgJpZBgBIAEoDSJ/Ch1HZXRQcm9qZWN0TWVtYmVyc2hpcHNSZXNwb25zZRI2ChNwcm9qZWN0X21lbWJlcnNoaXBzGAEgAygLMhkuYXBpLnYxLlByb2plY3RNZW1iZXJzaGlwEiYKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbiJVChxBZGRQcm9qZWN0TWVtYmVyc2hpcFJlc3BvbnNlEjUKEnByb2plY3RfbWVtYmVyc2hpcBgBIAEoCzIZLmFwaS52MS5Qcm9qZWN0TWVtYmVyc2hpcCJWCh1FZGl0UHJvamVjdE1lbWJlcnNoaXBSZXNwb25zZRI1ChJwcm9qZWN0X21lbWJlcnNoaXAYASABKAsyGS5hcGkudjEuUHJvamVjdE1lbWJlcnNoaXAiVQocR2V0UHJvamVjdE1lbWJlcnNoaXBSZXNwb25zZRI1ChJwcm9qZWN0X21lbWJlcnNoaXAYASABKAsyGS5hcGkudjEuUHJvamVjdE1lbWJlcnNoaXAimAEKGEdldFByb2plY3RNZW1iZXJzUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEjAKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbkII+kIFigECEAESLQoOZmlsdGVyX29wdGlvbnMYAyABKAsyFS5hcGkudjEuRmlsdGVyT3B0aW9ucyJ7ChlHZXRQcm9qZWN0TWVtYmVyc1Jlc3BvbnNlEjYKE3Byb2plY3RfbWVtYmVyc2hpcHMYASADKAsyGS5hcGkudjEuUHJvamVjdE1lbWJlcnNoaXASJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uIlwKGUJ1bGtBZGRQcm9qZWN0TWVtYmVyRW50cnkSDwoHdXNlcl9pZBgBIAEoDRIXCgVlbWFpbBgCIAEoCUII+kIFcgMY/wESFQoEcm9sZRgDIAEoCUIH+kIEcgIYMiLGAQoaQnVsa0FkZFByb2plY3RNZW1iZXJSZXN1bHQSDQoFZW1haWwYASABKAkSDwoHdXNlcl9pZBgCIAEoDRIMCgRyb2xlGAMgASgJEjIKBnN0YXR1cxgEIAEoDjIiLmFwaS52MS5CdWxrQWRkUHJvamVjdE1lbWJlclN0YXR1cxIPCgdtZXNzYWdlGAUgASgJEjUKEnByb2plY3RfbWVtYmVyc2hpcBgGIAEoCzIZLmFwaS52MS5Qcm9qZWN0TWVtYmVyc2hpcCKoAQocQnVsa0FkZFByb2plY3RNZW1iZXJzUmVxdWVzdBInCgpwcm9qZWN0X2lkGAEgASgNQhP6QgQqAigBgrUYCHByb2plY3RzEj4KB2VudHJpZXMYAiADKAsyIS5hcGkudjEuQnVsa0FkZFByb2plY3RNZW1iZXJFbnRyeUIK+kIHkgEECAEQMhIfCgxkZWZhdWx0X3JvbGUYAyABKAlCCfpCBnIEEAEYMiKtAQodQnVsa0FkZFByb2plY3RNZW1iZXJzUmVzcG9uc2USMwoHcmVzdWx0cxgBIAMoCzIiLmFwaS52MS5CdWxrQWRkUHJvamVjdE1lbWJlclJlc3VsdBITCgthZGRlZF9jb3VudBgCIAEoBRIVCg1pbnZpdGVkX2NvdW50GAMgASgFEhUKDXNraXBwZWRfY291bnQYBCABKAUSFAoMZmFpbGVkX2NvdW50GAUgASgFKvcCChpCdWxrQWRkUHJvamVjdE1lbWJlclN0YXR1cxIuCipCVUxLX0FERF9QUk9KRUNUX01FTUJFUl9TVEFUVVNfVU5TUEVDSUZJRUQQABIoCiRCVUxLX0FERF9QUk9KRUNUX01FTUJFUl9TVEFUVVNfQURERUQQARIqCiZCVUxLX0FERF9QUk9KRUNUX01FTUJFUl9TVEFUVVNfSU5WSVRFRBACEjkKNUJVTEtfQUREX1BST0pFQ1RfTUVNQkVSX1NUQVRVU19TS0lQUEVEX0FMUkVBRFlfTUVNQkVSEAMSNAowQlVMS19BRERfUFJPSkVDVF9NRU1CRVJfU1RBVFVTX1NLSVBQRURfRFVQTElDQVRFEAQSNwozQlVMS19BRERfUFJPSkVDVF9NRU1CRVJfU1RBVFVTX0ZBSUxFRF9JTlZBTElEX0VNQUlMEAUSKQolQlVMS19BRERfUFJPSkVDVF9NRU1CRVJfU1RBVFVTX0ZBSUxFRBAGMoIIChhQcm9qZWN0TWVtYmVyc2hpcFNlcnZpY2USiQEKFEFkZFByb2plY3RNZW1iZXJzaGlwEiMuYXBpLnYxLkFkZFByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBokLmFwaS52MS5BZGRQcm9qZWN0TWVtYmVyc2hpcFJlc3BvbnNlIiaC0+STAiA6ASoiGy9hcGkvdjEvcHJvamVjdF9tZW1iZXJzaGlwcxKRAQoVRWRpdFByb2plY3RNZW1iZXJzaGlwEiQuYXBpLnYxLkVkaXRQcm9qZWN0TWVtYmVyc2hpcFJlcXVlc3QaJS5hcGkudjEuRWRpdFByb2plY3RNZW1iZXJzaGlwUmVzcG9uc2UiK4LT5JMCJToBKhogL2FwaS92MS9wcm9qZWN0X21lbWJlcnNoaXBzL3tpZH0SiwEKFEdldFByb2plY3RNZW1iZXJzaGlwEiMuYXBpLnYxLkdldFByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBokLmFwaS52MS5HZXRQcm9qZWN0TWVtYmVyc2hpcFJlc3BvbnNlIiiC0+STAiISIC9hcGkvdjEvcHJvamVjdF9tZW1iZXJzaGlwcy97aWR9EokBChVHZXRQcm9qZWN0TWVtYmVyc2hpcHMSJC5hcGkudjEuR2V0UHJvamVjdE1lbWJlcnNoaXBzUmVxdWVzdBolLmFwaS52MS5HZXRQcm9qZWN0TWVtYmVyc2hpcHNSZXNwb25zZSIjgtPkkwIdEhsvYXBpL3YxL3Byb2plY3RfbWVtYmVyc2hpcHMSgwEKF0RlbGV0ZVByb2plY3RNZW1iZXJzaGlwEiYuYXBpLnYxLkRlbGV0ZVByb2plY3RNZW1iZXJzaGlwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIogtPkkwIiKiAvYXBpL3YxL3Byb2plY3RfbWVtYmVyc2hpcHMve2lkfRKHAQoRR2V0UHJvamVjdE1lbWJlcnMSIC5hcGkudjEuR2V0UHJvamVjdE1lbWJlcnNSZXF1ZXN0GiEuYXBpLnYxLkdldFByb2plY3RNZW1iZXJzUmVzcG9uc2UiLYLT5JMCJxIlL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vbWVtYmVycxKbAQoVQnVsa0FkZFByb2plY3RNZW1iZXJzEiQuYXBpLnYxLkJ1bGtBZGRQcm9qZWN0TWVtYmVyc1JlcXVlc3QaJS5hcGkudjEuQnVsa0FkZFByb2plY3RNZW1iZXJzUmVzcG9uc2UiNYLT5JMCLzoBKiIqL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vbWVtYmVycy9idWxrQnsKCmNvbS5hcGkudjFCFlByb2plY3RNZW1iZXJzaGlwUHJvdG9QAVocb3BzZWUvYmFja2VuZC9nZW4vYXBpL3YxO2dlbqICA0FYWKoCBkFwaS5WMcoCBkFwaVxWMeICEkFwaVxWMVxHUEJNZXRhZGF0YeoCB0FwaTo6VjFiBnByb3RvMw", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models, file_fk_foreign_key]);
18
19
 
19
20
  /**
20
21
  * Describes the message api.v1.AddProjectMembershipRequest.
@@ -93,6 +94,49 @@ export const GetProjectMembersRequestSchema = /*@__PURE__*/
93
94
  export const GetProjectMembersResponseSchema = /*@__PURE__*/
94
95
  messageDesc(file_api_v1_project_membership, 10);
95
96
 
97
+ /**
98
+ * Describes the message api.v1.BulkAddProjectMemberEntry.
99
+ * Use `create(BulkAddProjectMemberEntrySchema)` to create a new message.
100
+ */
101
+ export const BulkAddProjectMemberEntrySchema = /*@__PURE__*/
102
+ messageDesc(file_api_v1_project_membership, 11);
103
+
104
+ /**
105
+ * Describes the message api.v1.BulkAddProjectMemberResult.
106
+ * Use `create(BulkAddProjectMemberResultSchema)` to create a new message.
107
+ */
108
+ export const BulkAddProjectMemberResultSchema = /*@__PURE__*/
109
+ messageDesc(file_api_v1_project_membership, 12);
110
+
111
+ /**
112
+ * Describes the message api.v1.BulkAddProjectMembersRequest.
113
+ * Use `create(BulkAddProjectMembersRequestSchema)` to create a new message.
114
+ */
115
+ export const BulkAddProjectMembersRequestSchema = /*@__PURE__*/
116
+ messageDesc(file_api_v1_project_membership, 13);
117
+
118
+ /**
119
+ * Describes the message api.v1.BulkAddProjectMembersResponse.
120
+ * Use `create(BulkAddProjectMembersResponseSchema)` to create a new message.
121
+ */
122
+ export const BulkAddProjectMembersResponseSchema = /*@__PURE__*/
123
+ messageDesc(file_api_v1_project_membership, 14);
124
+
125
+ /**
126
+ * Describes the enum api.v1.BulkAddProjectMemberStatus.
127
+ */
128
+ export const BulkAddProjectMemberStatusSchema = /*@__PURE__*/
129
+ enumDesc(file_api_v1_project_membership, 0);
130
+
131
+ /**
132
+ * Outcome of a single recipient. Rows are independent: one failure never
133
+ * discards the rest of the batch.
134
+ *
135
+ * @generated from enum api.v1.BulkAddProjectMemberStatus
136
+ */
137
+ export const BulkAddProjectMemberStatus = /*@__PURE__*/
138
+ tsEnum(BulkAddProjectMemberStatusSchema);
139
+
96
140
  /**
97
141
  * Service definition
98
142
  *
@@ -4,9 +4,9 @@
4
4
 
5
5
  import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
+ import type { Project, ProjectStats } from "./models_pb";
7
8
  import type { Pagination } from "./pagination_pb";
8
9
  import type { FilterOptions } from "./filter_pb";
9
- import type { Project } from "./models_pb";
10
10
  import type { EmptySchema } from "@bufbuild/protobuf/wkt";
11
11
 
12
12
  /**
@@ -66,8 +66,8 @@ export declare const AddProjectRequestSchema: GenMessage<AddProjectRequest>;
66
66
  * EditProjectRequest is a partial update: every mutable field carries explicit
67
67
  * presence, so "set this column to false/empty" is distinguishable from "the
68
68
  * client did not send this field". A bare proto3 scalar makes both arrive as
69
- * the zero value, which is how deactivating a project used to be swallowed
70
- * (OPS-244). Validation rules on an optional field are only applied when the
69
+ * the zero value, which is how deactivating a project used to be swallowed.
70
+ * Validation rules on an optional field are only applied when the
71
71
  * field is present, so an omitted name is "unchanged", not "empty name".
72
72
  *
73
73
  * @generated from message api.v1.EditProjectRequest
@@ -134,6 +134,42 @@ export declare type GetProjectRequest = Message<"api.v1.GetProjectRequest"> & {
134
134
  */
135
135
  export declare const GetProjectRequestSchema: GenMessage<GetProjectRequest>;
136
136
 
137
+ /**
138
+ * GetProjectStatsRequest asks for lightweight per-project counters. The ids are
139
+ * filtered to what the caller may see, so an unknown or foreign id is simply
140
+ * absent from the response rather than an error.
141
+ *
142
+ * @generated from message api.v1.GetProjectStatsRequest
143
+ */
144
+ export declare type GetProjectStatsRequest = Message<"api.v1.GetProjectStatsRequest"> & {
145
+ /**
146
+ * @generated from field: repeated uint32 project_ids = 1;
147
+ */
148
+ projectIds: number[];
149
+ };
150
+
151
+ /**
152
+ * Describes the message api.v1.GetProjectStatsRequest.
153
+ * Use `create(GetProjectStatsRequestSchema)` to create a new message.
154
+ */
155
+ export declare const GetProjectStatsRequestSchema: GenMessage<GetProjectStatsRequest>;
156
+
157
+ /**
158
+ * @generated from message api.v1.GetProjectStatsResponse
159
+ */
160
+ export declare type GetProjectStatsResponse = Message<"api.v1.GetProjectStatsResponse"> & {
161
+ /**
162
+ * @generated from field: repeated api.v1.ProjectStats stats = 1;
163
+ */
164
+ stats: ProjectStats[];
165
+ };
166
+
167
+ /**
168
+ * Describes the message api.v1.GetProjectStatsResponse.
169
+ * Use `create(GetProjectStatsResponseSchema)` to create a new message.
170
+ */
171
+ export declare const GetProjectStatsResponseSchema: GenMessage<GetProjectStatsResponse>;
172
+
137
173
  /**
138
174
  * @generated from message api.v1.GetProjectByUUIDRequest
139
175
  */
@@ -442,6 +478,14 @@ export declare const ProjectService: GenService<{
442
478
  input: typeof GetProjectsRequestSchema;
443
479
  output: typeof GetProjectsResponseSchema;
444
480
  },
481
+ /**
482
+ * @generated from rpc api.v1.ProjectService.GetProjectStats
483
+ */
484
+ getProjectStats: {
485
+ methodKind: "unary";
486
+ input: typeof GetProjectStatsRequestSchema;
487
+ output: typeof GetProjectStatsResponseSchema;
488
+ },
445
489
  /**
446
490
  * @generated from rpc api.v1.ProjectService.DeleteProject
447
491
  */
@@ -14,7 +14,7 @@ import { file_api_v1_models } from "./models_pb";
14
14
  * Describes the file api/v1/project.proto.
15
15
  */
16
16
  export const file_api_v1_project = /*@__PURE__*/
17
- fileDesc("ChRhcGkvdjEvcHJvamVjdC5wcm90bxIGYXBpLnYxIusBChFBZGRQcm9qZWN0UmVxdWVzdBIXCgRuYW1lGAEgASgJQgn6QgZyBBABGGQSFQoEc2x1ZxgCIAEoCUIH+kIEcgIYMhIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEhEKCWlzX2FjdGl2ZRgEIAEoCBIaCg1zZXR0aW5nc19qc29uGAUgASgJSAGIAQESEgoKY29tcGFueV9pZBgGIAEoDRInCgpzaG9ydF9uYW1lGAcgASgJQhP6QhByDhABGAQyCF5bQS1aXSskQg4KDF9kZXNjcmlwdGlvbkIQCg5fc2V0dGluZ3NfanNvbiLEAgoSRWRpdFByb2plY3RSZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhwKBG5hbWUYAiABKAlCCfpCBnIEEAEYZEgAiAEBEhwKBHNsdWcYAyABKAlCCfpCBnIEEAEYMkgBiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAKIAQESFgoJaXNfYWN0aXZlGAUgASgISAOIAQESGgoNc2V0dGluZ3NfanNvbhgGIAEoCUgEiAEBEiwKCnNob3J0X25hbWUYCCABKAlCE/pCEHIOEAEYBDIIXltBLVpdKyRIBYgBAUIHCgVfbmFtZUIHCgVfc2x1Z0IOCgxfZGVzY3JpcHRpb25CDAoKX2lzX2FjdGl2ZUIQCg5fc2V0dGluZ3NfanNvbkINCgtfc2hvcnRfbmFtZUoECAcQCFIKY29tcGFueV9pZCIfChFHZXRQcm9qZWN0UmVxdWVzdBIKCgJpZBgBIAEoDSIxChdHZXRQcm9qZWN0QnlVVUlEUmVxdWVzdBIWCgR1dWlkGAEgASgJQgj6QgVyA7ABASJ1ChJHZXRQcm9qZWN0c1JlcXVlc3QSMAoKcGFnaW5hdGlvbhgBIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uQgj6QgWKAQIQARItCg5maWx0ZXJfb3B0aW9ucxgCIAEoCzIVLmFwaS52MS5GaWx0ZXJPcHRpb25zIiIKFERlbGV0ZVByb2plY3RSZXF1ZXN0EgoKAmlkGAEgASgNImAKE0dldFByb2plY3RzUmVzcG9uc2USIQoIcHJvamVjdHMYASADKAsyDy5hcGkudjEuUHJvamVjdBImCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb24iNgoSQWRkUHJvamVjdFJlc3BvbnNlEiAKB3Byb2plY3QYASABKAsyDy5hcGkudjEuUHJvamVjdCI3ChNFZGl0UHJvamVjdFJlc3BvbnNlEiAKB3Byb2plY3QYASABKAsyDy5hcGkudjEuUHJvamVjdCI2ChJHZXRQcm9qZWN0UmVzcG9uc2USIAoHcHJvamVjdBgBIAEoCzIPLmFwaS52MS5Qcm9qZWN0IkoKE1NoYXJlUHJvamVjdFJlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIWCgVlbWFpbBgCIAEoCUIH+kIEcgJgASInChRTaGFyZVByb2plY3RSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIi8KEkFjY2VwdFNoYXJlUmVxdWVzdBIZCghzaGFyZV9pZBgBIAEoDUIH+kIEKgIoASImChNBY2NlcHRTaGFyZVJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiGgoYR2V0UGVuZGluZ0ludml0ZXNSZXF1ZXN0IkEKGUdldFBlbmRpbmdJbnZpdGVzUmVzcG9uc2USJAoGc2hhcmVzGAEgAygLMhQuYXBpLnYxLlByb2plY3RTaGFyZSKRAQoMUHJvamVjdFNoYXJlEgoKAmlkGAEgASgNEhIKCnByb2plY3RfaWQYAiABKA0SIAoHcHJvamVjdBgDIAEoCzIPLmFwaS52MS5Qcm9qZWN0EhQKDGludml0ZV9lbWFpbBgEIAEoCRIOCgZzdGF0dXMYBSABKAkSGQoRdGFyZ2V0X2NvbXBhbnlfaWQYBiABKA0y7QcKDlByb2plY3RTZXJ2aWNlEmAKCkFkZFByb2plY3QSGS5hcGkudjEuQWRkUHJvamVjdFJlcXVlc3QaGi5hcGkudjEuQWRkUHJvamVjdFJlc3BvbnNlIhuC0+STAhU6ASoiEC9hcGkvdjEvcHJvamVjdHMSaAoLRWRpdFByb2plY3QSGi5hcGkudjEuRWRpdFByb2plY3RSZXF1ZXN0GhsuYXBpLnYxLkVkaXRQcm9qZWN0UmVzcG9uc2UiIILT5JMCGjoBKhoVL2FwaS92MS9wcm9qZWN0cy97aWR9EmIKCkdldFByb2plY3QSGS5hcGkudjEuR2V0UHJvamVjdFJlcXVlc3QaGi5hcGkudjEuR2V0UHJvamVjdFJlc3BvbnNlIh2C0+STAhcSFS9hcGkvdjEvcHJvamVjdHMve2lkfRJ1ChBHZXRQcm9qZWN0QnlVVUlEEh8uYXBpLnYxLkdldFByb2plY3RCeVVVSURSZXF1ZXN0GhouYXBpLnYxLkdldFByb2plY3RSZXNwb25zZSIkgtPkkwIeEhwvYXBpL3YxL3Byb2plY3RzL3V1aWQve3V1aWR9EmAKC0dldFByb2plY3RzEhouYXBpLnYxLkdldFByb2plY3RzUmVxdWVzdBobLmFwaS52MS5HZXRQcm9qZWN0c1Jlc3BvbnNlIhiC0+STAhISEC9hcGkvdjEvcHJvamVjdHMSZAoNRGVsZXRlUHJvamVjdBIcLmFwaS52MS5EZWxldGVQcm9qZWN0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIdgtPkkwIXKhUvYXBpL3YxL3Byb2plY3RzL3tpZH0SbAoMU2hhcmVQcm9qZWN0EhsuYXBpLnYxLlNoYXJlUHJvamVjdFJlcXVlc3QaHC5hcGkudjEuU2hhcmVQcm9qZWN0UmVzcG9uc2UiIYLT5JMCGzoBKiIWL2FwaS92MS9wcm9qZWN0cy9zaGFyZRJ7CgtBY2NlcHRTaGFyZRIaLmFwaS52MS5BY2NlcHRTaGFyZVJlcXVlc3QaGy5hcGkudjEuQWNjZXB0U2hhcmVSZXNwb25zZSIzgtPkkwItOgEqIigvYXBpL3YxL3Byb2plY3RzL3NoYXJlL3tzaGFyZV9pZH0vYWNjZXB0EoABChFHZXRQZW5kaW5nSW52aXRlcxIgLmFwaS52MS5HZXRQZW5kaW5nSW52aXRlc1JlcXVlc3QaIS5hcGkudjEuR2V0UGVuZGluZ0ludml0ZXNSZXNwb25zZSImgtPkkwIgEh4vYXBpL3YxL3Byb2plY3RzL3NoYXJlL3BlbmRpbmdCcQoKY29tLmFwaS52MUIMUHJvamVjdFByb3RvUAFaHG9wc2VlL2JhY2tlbmQvZ2VuL2FwaS92MTtnZW6iAgNBWFiqAgZBcGkuVjHKAgZBcGlcVjHiAhJBcGlcVjFcR1BCTWV0YWRhdGHqAgdBcGk6OlYxYgZwcm90bzM", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models]);
17
+ fileDesc("ChRhcGkvdjEvcHJvamVjdC5wcm90bxIGYXBpLnYxIusBChFBZGRQcm9qZWN0UmVxdWVzdBIXCgRuYW1lGAEgASgJQgn6QgZyBBABGGQSFQoEc2x1ZxgCIAEoCUIH+kIEcgIYMhIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEhEKCWlzX2FjdGl2ZRgEIAEoCBIaCg1zZXR0aW5nc19qc29uGAUgASgJSAGIAQESEgoKY29tcGFueV9pZBgGIAEoDRInCgpzaG9ydF9uYW1lGAcgASgJQhP6QhByDhABGAQyCF5bQS1aXSskQg4KDF9kZXNjcmlwdGlvbkIQCg5fc2V0dGluZ3NfanNvbiLEAgoSRWRpdFByb2plY3RSZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhwKBG5hbWUYAiABKAlCCfpCBnIEEAEYZEgAiAEBEhwKBHNsdWcYAyABKAlCCfpCBnIEEAEYMkgBiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAKIAQESFgoJaXNfYWN0aXZlGAUgASgISAOIAQESGgoNc2V0dGluZ3NfanNvbhgGIAEoCUgEiAEBEiwKCnNob3J0X25hbWUYCCABKAlCE/pCEHIOEAEYBDIIXltBLVpdKyRIBYgBAUIHCgVfbmFtZUIHCgVfc2x1Z0IOCgxfZGVzY3JpcHRpb25CDAoKX2lzX2FjdGl2ZUIQCg5fc2V0dGluZ3NfanNvbkINCgtfc2hvcnRfbmFtZUoECAcQCFIKY29tcGFueV9pZCIfChFHZXRQcm9qZWN0UmVxdWVzdBIKCgJpZBgBIAEoDSI3ChZHZXRQcm9qZWN0U3RhdHNSZXF1ZXN0Eh0KC3Byb2plY3RfaWRzGAEgAygNQgj6QgWSAQIQZCI+ChdHZXRQcm9qZWN0U3RhdHNSZXNwb25zZRIjCgVzdGF0cxgBIAMoCzIULmFwaS52MS5Qcm9qZWN0U3RhdHMiMQoXR2V0UHJvamVjdEJ5VVVJRFJlcXVlc3QSFgoEdXVpZBgBIAEoCUII+kIFcgOwAQEidQoSR2V0UHJvamVjdHNSZXF1ZXN0EjAKCnBhZ2luYXRpb24YASABKAsyEi5hcGkudjEuUGFnaW5hdGlvbkII+kIFigECEAESLQoOZmlsdGVyX29wdGlvbnMYAiABKAsyFS5hcGkudjEuRmlsdGVyT3B0aW9ucyIiChREZWxldGVQcm9qZWN0UmVxdWVzdBIKCgJpZBgBIAEoDSJgChNHZXRQcm9qZWN0c1Jlc3BvbnNlEiEKCHByb2plY3RzGAEgAygLMg8uYXBpLnYxLlByb2plY3QSJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uIjYKEkFkZFByb2plY3RSZXNwb25zZRIgCgdwcm9qZWN0GAEgASgLMg8uYXBpLnYxLlByb2plY3QiNwoTRWRpdFByb2plY3RSZXNwb25zZRIgCgdwcm9qZWN0GAEgASgLMg8uYXBpLnYxLlByb2plY3QiNgoSR2V0UHJvamVjdFJlc3BvbnNlEiAKB3Byb2plY3QYASABKAsyDy5hcGkudjEuUHJvamVjdCJKChNTaGFyZVByb2plY3RSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESFgoFZW1haWwYAiABKAlCB/pCBHICYAEiJwoUU2hhcmVQcm9qZWN0UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCIvChJBY2NlcHRTaGFyZVJlcXVlc3QSGQoIc2hhcmVfaWQYASABKA1CB/pCBCoCKAEiJgoTQWNjZXB0U2hhcmVSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIhoKGEdldFBlbmRpbmdJbnZpdGVzUmVxdWVzdCJBChlHZXRQZW5kaW5nSW52aXRlc1Jlc3BvbnNlEiQKBnNoYXJlcxgBIAMoCzIULmFwaS52MS5Qcm9qZWN0U2hhcmUikQEKDFByb2plY3RTaGFyZRIKCgJpZBgBIAEoDRISCgpwcm9qZWN0X2lkGAIgASgNEiAKB3Byb2plY3QYAyABKAsyDy5hcGkudjEuUHJvamVjdBIUCgxpbnZpdGVfZW1haWwYBCABKAkSDgoGc3RhdHVzGAUgASgJEhkKEXRhcmdldF9jb21wYW55X2lkGAYgASgNMuEICg5Qcm9qZWN0U2VydmljZRJgCgpBZGRQcm9qZWN0EhkuYXBpLnYxLkFkZFByb2plY3RSZXF1ZXN0GhouYXBpLnYxLkFkZFByb2plY3RSZXNwb25zZSIbgtPkkwIVOgEqIhAvYXBpL3YxL3Byb2plY3RzEmgKC0VkaXRQcm9qZWN0EhouYXBpLnYxLkVkaXRQcm9qZWN0UmVxdWVzdBobLmFwaS52MS5FZGl0UHJvamVjdFJlc3BvbnNlIiCC0+STAho6ASoaFS9hcGkvdjEvcHJvamVjdHMve2lkfRJiCgpHZXRQcm9qZWN0EhkuYXBpLnYxLkdldFByb2plY3RSZXF1ZXN0GhouYXBpLnYxLkdldFByb2plY3RSZXNwb25zZSIdgtPkkwIXEhUvYXBpL3YxL3Byb2plY3RzL3tpZH0SdQoQR2V0UHJvamVjdEJ5VVVJRBIfLmFwaS52MS5HZXRQcm9qZWN0QnlVVUlEUmVxdWVzdBoaLmFwaS52MS5HZXRQcm9qZWN0UmVzcG9uc2UiJILT5JMCHhIcL2FwaS92MS9wcm9qZWN0cy91dWlkL3t1dWlkfRJgCgtHZXRQcm9qZWN0cxIaLmFwaS52MS5HZXRQcm9qZWN0c1JlcXVlc3QaGy5hcGkudjEuR2V0UHJvamVjdHNSZXNwb25zZSIYgtPkkwISEhAvYXBpL3YxL3Byb2plY3RzEnIKD0dldFByb2plY3RTdGF0cxIeLmFwaS52MS5HZXRQcm9qZWN0U3RhdHNSZXF1ZXN0Gh8uYXBpLnYxLkdldFByb2plY3RTdGF0c1Jlc3BvbnNlIh6C0+STAhgSFi9hcGkvdjEvcHJvamVjdHMvc3RhdHMSZAoNRGVsZXRlUHJvamVjdBIcLmFwaS52MS5EZWxldGVQcm9qZWN0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIdgtPkkwIXKhUvYXBpL3YxL3Byb2plY3RzL3tpZH0SbAoMU2hhcmVQcm9qZWN0EhsuYXBpLnYxLlNoYXJlUHJvamVjdFJlcXVlc3QaHC5hcGkudjEuU2hhcmVQcm9qZWN0UmVzcG9uc2UiIYLT5JMCGzoBKiIWL2FwaS92MS9wcm9qZWN0cy9zaGFyZRJ7CgtBY2NlcHRTaGFyZRIaLmFwaS52MS5BY2NlcHRTaGFyZVJlcXVlc3QaGy5hcGkudjEuQWNjZXB0U2hhcmVSZXNwb25zZSIzgtPkkwItOgEqIigvYXBpL3YxL3Byb2plY3RzL3NoYXJlL3tzaGFyZV9pZH0vYWNjZXB0EoABChFHZXRQZW5kaW5nSW52aXRlcxIgLmFwaS52MS5HZXRQZW5kaW5nSW52aXRlc1JlcXVlc3QaIS5hcGkudjEuR2V0UGVuZGluZ0ludml0ZXNSZXNwb25zZSImgtPkkwIgEh4vYXBpL3YxL3Byb2plY3RzL3NoYXJlL3BlbmRpbmdCcQoKY29tLmFwaS52MUIMUHJvamVjdFByb3RvUAFaHG9wc2VlL2JhY2tlbmQvZ2VuL2FwaS92MTtnZW6iAgNBWFiqAgZBcGkuVjHKAgZBcGlcVjHiAhJBcGlcVjFcR1BCTWV0YWRhdGHqAgdBcGk6OlYxYgZwcm90bzM", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models]);
18
18
 
19
19
  /**
20
20
  * Describes the message api.v1.AddProjectRequest.
@@ -37,103 +37,117 @@ export const EditProjectRequestSchema = /*@__PURE__*/
37
37
  export const GetProjectRequestSchema = /*@__PURE__*/
38
38
  messageDesc(file_api_v1_project, 2);
39
39
 
40
+ /**
41
+ * Describes the message api.v1.GetProjectStatsRequest.
42
+ * Use `create(GetProjectStatsRequestSchema)` to create a new message.
43
+ */
44
+ export const GetProjectStatsRequestSchema = /*@__PURE__*/
45
+ messageDesc(file_api_v1_project, 3);
46
+
47
+ /**
48
+ * Describes the message api.v1.GetProjectStatsResponse.
49
+ * Use `create(GetProjectStatsResponseSchema)` to create a new message.
50
+ */
51
+ export const GetProjectStatsResponseSchema = /*@__PURE__*/
52
+ messageDesc(file_api_v1_project, 4);
53
+
40
54
  /**
41
55
  * Describes the message api.v1.GetProjectByUUIDRequest.
42
56
  * Use `create(GetProjectByUUIDRequestSchema)` to create a new message.
43
57
  */
44
58
  export const GetProjectByUUIDRequestSchema = /*@__PURE__*/
45
- messageDesc(file_api_v1_project, 3);
59
+ messageDesc(file_api_v1_project, 5);
46
60
 
47
61
  /**
48
62
  * Describes the message api.v1.GetProjectsRequest.
49
63
  * Use `create(GetProjectsRequestSchema)` to create a new message.
50
64
  */
51
65
  export const GetProjectsRequestSchema = /*@__PURE__*/
52
- messageDesc(file_api_v1_project, 4);
66
+ messageDesc(file_api_v1_project, 6);
53
67
 
54
68
  /**
55
69
  * Describes the message api.v1.DeleteProjectRequest.
56
70
  * Use `create(DeleteProjectRequestSchema)` to create a new message.
57
71
  */
58
72
  export const DeleteProjectRequestSchema = /*@__PURE__*/
59
- messageDesc(file_api_v1_project, 5);
73
+ messageDesc(file_api_v1_project, 7);
60
74
 
61
75
  /**
62
76
  * Describes the message api.v1.GetProjectsResponse.
63
77
  * Use `create(GetProjectsResponseSchema)` to create a new message.
64
78
  */
65
79
  export const GetProjectsResponseSchema = /*@__PURE__*/
66
- messageDesc(file_api_v1_project, 6);
80
+ messageDesc(file_api_v1_project, 8);
67
81
 
68
82
  /**
69
83
  * Describes the message api.v1.AddProjectResponse.
70
84
  * Use `create(AddProjectResponseSchema)` to create a new message.
71
85
  */
72
86
  export const AddProjectResponseSchema = /*@__PURE__*/
73
- messageDesc(file_api_v1_project, 7);
87
+ messageDesc(file_api_v1_project, 9);
74
88
 
75
89
  /**
76
90
  * Describes the message api.v1.EditProjectResponse.
77
91
  * Use `create(EditProjectResponseSchema)` to create a new message.
78
92
  */
79
93
  export const EditProjectResponseSchema = /*@__PURE__*/
80
- messageDesc(file_api_v1_project, 8);
94
+ messageDesc(file_api_v1_project, 10);
81
95
 
82
96
  /**
83
97
  * Describes the message api.v1.GetProjectResponse.
84
98
  * Use `create(GetProjectResponseSchema)` to create a new message.
85
99
  */
86
100
  export const GetProjectResponseSchema = /*@__PURE__*/
87
- messageDesc(file_api_v1_project, 9);
101
+ messageDesc(file_api_v1_project, 11);
88
102
 
89
103
  /**
90
104
  * Describes the message api.v1.ShareProjectRequest.
91
105
  * Use `create(ShareProjectRequestSchema)` to create a new message.
92
106
  */
93
107
  export const ShareProjectRequestSchema = /*@__PURE__*/
94
- messageDesc(file_api_v1_project, 10);
108
+ messageDesc(file_api_v1_project, 12);
95
109
 
96
110
  /**
97
111
  * Describes the message api.v1.ShareProjectResponse.
98
112
  * Use `create(ShareProjectResponseSchema)` to create a new message.
99
113
  */
100
114
  export const ShareProjectResponseSchema = /*@__PURE__*/
101
- messageDesc(file_api_v1_project, 11);
115
+ messageDesc(file_api_v1_project, 13);
102
116
 
103
117
  /**
104
118
  * Describes the message api.v1.AcceptShareRequest.
105
119
  * Use `create(AcceptShareRequestSchema)` to create a new message.
106
120
  */
107
121
  export const AcceptShareRequestSchema = /*@__PURE__*/
108
- messageDesc(file_api_v1_project, 12);
122
+ messageDesc(file_api_v1_project, 14);
109
123
 
110
124
  /**
111
125
  * Describes the message api.v1.AcceptShareResponse.
112
126
  * Use `create(AcceptShareResponseSchema)` to create a new message.
113
127
  */
114
128
  export const AcceptShareResponseSchema = /*@__PURE__*/
115
- messageDesc(file_api_v1_project, 13);
129
+ messageDesc(file_api_v1_project, 15);
116
130
 
117
131
  /**
118
132
  * Describes the message api.v1.GetPendingInvitesRequest.
119
133
  * Use `create(GetPendingInvitesRequestSchema)` to create a new message.
120
134
  */
121
135
  export const GetPendingInvitesRequestSchema = /*@__PURE__*/
122
- messageDesc(file_api_v1_project, 14);
136
+ messageDesc(file_api_v1_project, 16);
123
137
 
124
138
  /**
125
139
  * Describes the message api.v1.GetPendingInvitesResponse.
126
140
  * Use `create(GetPendingInvitesResponseSchema)` to create a new message.
127
141
  */
128
142
  export const GetPendingInvitesResponseSchema = /*@__PURE__*/
129
- messageDesc(file_api_v1_project, 15);
143
+ messageDesc(file_api_v1_project, 17);
130
144
 
131
145
  /**
132
146
  * Describes the message api.v1.ProjectShare.
133
147
  * Use `create(ProjectShareSchema)` to create a new message.
134
148
  */
135
149
  export const ProjectShareSchema = /*@__PURE__*/
136
- messageDesc(file_api_v1_project, 16);
150
+ messageDesc(file_api_v1_project, 18);
137
151
 
138
152
  /**
139
153
  * Service definition