@opsee/mcp-server 0.9.60 → 0.10.2
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.
- package/gen/api/v1/billing_pb.d.ts +0 -40
- package/gen/api/v1/billing_pb.js +22 -36
- package/gen/api/v1/developer_metrics_pb.d.ts +9 -3
- package/gen/api/v1/developer_metrics_pb.js +2 -1
- package/gen/api/v1/models_pb.d.ts +116 -5
- package/gen/api/v1/models_pb.js +33 -26
- package/gen/api/v1/project_pb.d.ts +18 -13
- package/gen/api/v1/project_pb.js +1 -1
- package/gen/api/v1/task_subscription_pb.d.ts +146 -0
- package/gen/api/v1/task_subscription_pb.js +66 -0
- package/gen/api/v1/vcs_connection_pb.d.ts +34 -3
- package/gen/api/v1/vcs_connection_pb.js +28 -20
- package/gen/api/v1/vcs_integration_pb.d.ts +11 -1
- package/gen/api/v1/vcs_integration_pb.js +2 -1
- package/gen/fk/foreign_key_pb.d.ts +22 -0
- package/gen/fk/foreign_key_pb.js +24 -0
- package/package.json +11 -11
- package/src/auth/kv-store.ts +12 -33
- package/src/auth/manager.ts +1 -6
- package/src/auth/oauth-provider.ts +32 -104
- package/src/auth/renew.ts +5 -15
- package/src/client/api.ts +3 -5
- package/src/server-http.ts +14 -30
- package/src/tools/acceptance-criteria.ts +4 -14
- package/src/tools/descriptions.ts +2 -7
- package/src/tools/doc-links.ts +4 -9
- package/src/tools/doc-spaces.ts +1 -1
- package/src/tools/docs.ts +8 -19
- package/src/tools/notifications.ts +2 -6
- package/src/tools/tasks-bulk.ts +3 -8
- package/src/tools/tasks-read-write.ts +1 -8
- package/src/utils/format/blocknote.ts +8 -23
- package/src/utils/tool-schema.ts +7 -29
- package/README.md +0 -304
- package/gen/api/v1/deployment_pb.d.ts +0 -277
- package/gen/api/v1/deployment_pb.js +0 -89
- package/gen/api/v1/environment_pb.d.ts +0 -277
- package/gen/api/v1/environment_pb.js +0 -89
- package/gen/api/v1/test_run_pb.d.ts +0 -277
- package/gen/api/v1/test_run_pb.js +0 -89
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
|
|
6
6
|
import type { Message } from "@bufbuild/protobuf";
|
|
7
7
|
import type { VCSProvider } from "./vcs_pb";
|
|
8
|
-
import type { ProjectRepository
|
|
8
|
+
import type { ProjectRepository } from "./models_pb";
|
|
9
9
|
import type { EmptySchema } from "@bufbuild/protobuf/wkt";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -313,9 +313,9 @@ export declare const ConnectRepositoryRequestSchema: GenMessage<ConnectRepositor
|
|
|
313
313
|
*/
|
|
314
314
|
export declare type ConnectRepositoryResponse = Message<"api.v1.ConnectRepositoryResponse"> & {
|
|
315
315
|
/**
|
|
316
|
-
* @generated from field: api.v1.
|
|
316
|
+
* @generated from field: api.v1.ProjectRepository repository = 2;
|
|
317
317
|
*/
|
|
318
|
-
|
|
318
|
+
repository?: ProjectRepository;
|
|
319
319
|
};
|
|
320
320
|
|
|
321
321
|
/**
|
|
@@ -340,6 +340,27 @@ export declare type DisconnectRepositoryRequest = Message<"api.v1.DisconnectRepo
|
|
|
340
340
|
*/
|
|
341
341
|
export declare const DisconnectRepositoryRequestSchema: GenMessage<DisconnectRepositoryRequest>;
|
|
342
342
|
|
|
343
|
+
/**
|
|
344
|
+
* @generated from message api.v1.DisconnectVCSAccountRequest
|
|
345
|
+
*/
|
|
346
|
+
export declare type DisconnectVCSAccountRequest = Message<"api.v1.DisconnectVCSAccountRequest"> & {
|
|
347
|
+
/**
|
|
348
|
+
* @generated from field: uint32 project_id = 1;
|
|
349
|
+
*/
|
|
350
|
+
projectId: number;
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* @generated from field: api.v1.VCSProvider provider = 2;
|
|
354
|
+
*/
|
|
355
|
+
provider: VCSProvider;
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Describes the message api.v1.DisconnectVCSAccountRequest.
|
|
360
|
+
* Use `create(DisconnectVCSAccountRequestSchema)` to create a new message.
|
|
361
|
+
*/
|
|
362
|
+
export declare const DisconnectVCSAccountRequestSchema: GenMessage<DisconnectVCSAccountRequest>;
|
|
363
|
+
|
|
343
364
|
/**
|
|
344
365
|
* @generated from message api.v1.GetConnectionStatusRequest
|
|
345
366
|
*/
|
|
@@ -911,6 +932,16 @@ export declare const VCSConnectionService: GenService<{
|
|
|
911
932
|
input: typeof DisconnectRepositoryRequestSchema;
|
|
912
933
|
output: typeof EmptySchema;
|
|
913
934
|
},
|
|
935
|
+
/**
|
|
936
|
+
* Disconnect an entire VCS account connection (all repos + stored credentials) for a provider
|
|
937
|
+
*
|
|
938
|
+
* @generated from rpc api.v1.VCSConnectionService.DisconnectVCSAccount
|
|
939
|
+
*/
|
|
940
|
+
disconnectVCSAccount: {
|
|
941
|
+
methodKind: "unary";
|
|
942
|
+
input: typeof DisconnectVCSAccountRequestSchema;
|
|
943
|
+
output: typeof EmptySchema;
|
|
944
|
+
},
|
|
914
945
|
/**
|
|
915
946
|
* Get VCS connection status for a project
|
|
916
947
|
*
|
|
@@ -8,12 +8,13 @@ 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_models } from "./models_pb";
|
|
10
10
|
import { file_api_v1_vcs } from "./vcs_pb";
|
|
11
|
+
import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Describes the file api/v1/vcs_connection.proto.
|
|
14
15
|
*/
|
|
15
16
|
export const file_api_v1_vcs_connection = /*@__PURE__*/
|
|
16
|
-
fileDesc("ChthcGkvdjEvdmNzX2Nvbm5lY3Rpb24ucHJvdG8SBmFwaS52MSL6AQocSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBIlCghwcm92aWRlchgBIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIbCgpwcm9qZWN0X2lkGAIgASgNQgf6QgQqAigBEhkKDGluc3RhbmNlX3VybBgDIAEoCUgAiAEBEhwKD29hdXRoX2NsaWVudF9pZBgEIAEoCUgBiAEBEiAKE29hdXRoX2NsaWVudF9zZWNyZXQYBSABKAlIAogBAUIPCg1faW5zdGFuY2VfdXJsQhIKEF9vYXV0aF9jbGllbnRfaWRCFgoUX29hdXRoX2NsaWVudF9zZWNyZXQiSQodSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVzcG9uc2USGQoRYXV0aG9yaXphdGlvbl91cmwYASABKAkSDQoFc3RhdGUYAiABKAkihgIKHENvbXBsZXRlVkNTQ29ubmVjdGlvblJlcXVlc3QSJQoIcHJvdmlkZXIYASABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGwoKcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoARIWCgVzdGF0ZRgDIAEoCUIH+kIEcgIQARIcCg9pbnN0YWxsYXRpb25faWQYBCABKANIAIgBARIZCgxzZXR1cF9hY3Rpb24YBSABKAlIAYgBARIRCgRjb2RlGAYgASgJSAKIAQFCEgoQX2luc3RhbGxhdGlvbl9pZEIPCg1fc2V0dXBfYWN0aW9uQgcKBV9jb2RlSgQIBxAISgQICBAJSgQICRAKIkEKHUNvbXBsZXRlVkNTQ29ubmVjdGlvblJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKOAQoXTGlzdFJlcG9zaXRvcmllc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRIOCgZzZWFyY2gYBSABKAkiqQEKClJlcG9zaXRvcnkSCgoCaWQYASABKAMSDAoEbmFtZRgCIAEoCRIRCglmdWxsX25hbWUYAyABKAkSDQoFb3duZXIYBCABKAkSFgoOZGVmYXVsdF9icmFuY2gYBSABKAkSDwoHcHJpdmF0ZRgGIAEoCBITCgtkZXNjcmlwdGlvbhgHIAEoCRILCgN1cmwYCCABKAkSFAoMaXNfY29ubmVjdGVkGAkgASgIIqYBChhMaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2USKAoMcmVwb3NpdG9yaWVzGAEgAygLMhIuYXBpLnYxLlJlcG9zaXRvcnkSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRINCgV0b3RhbBgFIAEoBRITCgt0b3RhbF9wYWdlcxgGIAEoBSKdAQoYQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoUcmVwb3NpdG9yeV9mdWxsX25hbWUYAiABKAlCB/
|
|
17
|
+
fileDesc("ChthcGkvdjEvdmNzX2Nvbm5lY3Rpb24ucHJvdG8SBmFwaS52MSL6AQocSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBIlCghwcm92aWRlchgBIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIbCgpwcm9qZWN0X2lkGAIgASgNQgf6QgQqAigBEhkKDGluc3RhbmNlX3VybBgDIAEoCUgAiAEBEhwKD29hdXRoX2NsaWVudF9pZBgEIAEoCUgBiAEBEiAKE29hdXRoX2NsaWVudF9zZWNyZXQYBSABKAlIAogBAUIPCg1faW5zdGFuY2VfdXJsQhIKEF9vYXV0aF9jbGllbnRfaWRCFgoUX29hdXRoX2NsaWVudF9zZWNyZXQiSQodSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVzcG9uc2USGQoRYXV0aG9yaXphdGlvbl91cmwYASABKAkSDQoFc3RhdGUYAiABKAkihgIKHENvbXBsZXRlVkNTQ29ubmVjdGlvblJlcXVlc3QSJQoIcHJvdmlkZXIYASABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGwoKcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoARIWCgVzdGF0ZRgDIAEoCUIH+kIEcgIQARIcCg9pbnN0YWxsYXRpb25faWQYBCABKANIAIgBARIZCgxzZXR1cF9hY3Rpb24YBSABKAlIAYgBARIRCgRjb2RlGAYgASgJSAKIAQFCEgoQX2luc3RhbGxhdGlvbl9pZEIPCg1fc2V0dXBfYWN0aW9uQgcKBV9jb2RlSgQIBxAISgQICBAJSgQICRAKIkEKHUNvbXBsZXRlVkNTQ29ubmVjdGlvblJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKOAQoXTGlzdFJlcG9zaXRvcmllc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlchIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRIOCgZzZWFyY2gYBSABKAkiqQEKClJlcG9zaXRvcnkSCgoCaWQYASABKAMSDAoEbmFtZRgCIAEoCRIRCglmdWxsX25hbWUYAyABKAkSDQoFb3duZXIYBCABKAkSFgoOZGVmYXVsdF9icmFuY2gYBSABKAkSDwoHcHJpdmF0ZRgGIAEoCBITCgtkZXNjcmlwdGlvbhgHIAEoCRILCgN1cmwYCCABKAkSFAoMaXNfY29ubmVjdGVkGAkgASgIIqYBChhMaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2USKAoMcmVwb3NpdG9yaWVzGAEgAygLMhIuYXBpLnYxLlJlcG9zaXRvcnkSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIMCgRwYWdlGAMgASgFEhEKCXBhZ2Vfc2l6ZRgEIAEoBRINCgV0b3RhbBgFIAEoBRITCgt0b3RhbF9wYWdlcxgGIAEoBSKdAQoYQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoUcmVwb3NpdG9yeV9mdWxsX25hbWUYAiABKAlCB/pCBHICEAESFgoOZGVmYXVsdF9icmFuY2gYAyABKAkSJQoIcHJvdmlkZXIYBCABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXIiXQoZQ29ubmVjdFJlcG9zaXRvcnlSZXNwb25zZRItCgpyZXBvc2l0b3J5GAIgASgLMhkuYXBpLnYxLlByb2plY3RSZXBvc2l0b3J5SgQIARACUgtpbnRlZ3JhdGlvbiJCChtEaXNjb25uZWN0UmVwb3NpdG9yeVJlcXVlc3QSIwoSdmNzX2ludGVncmF0aW9uX2lkGAEgASgNQgf6QgQqAigBIm0KG0Rpc2Nvbm5lY3RWQ1NBY2NvdW50UmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEjEKCHByb3ZpZGVyGAIgASgOMhMuYXBpLnYxLlZDU1Byb3ZpZGVyQgr6QgeCAQQQASAAImAKGkdldENvbm5lY3Rpb25TdGF0dXNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAESJQoIcHJvdmlkZXIYAiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXIi9QEKG0dldENvbm5lY3Rpb25TdGF0dXNSZXNwb25zZRIUCgxpc19jb25uZWN0ZWQYASABKAgSGwoTaW5zdGFsbGF0aW9uX3N0YXR1cxgCIAEoCRIUCgxhY2NvdW50X25hbWUYAyABKAkSFAoMYWNjb3VudF90eXBlGAQgASgJEiQKHGNvbm5lY3RlZF9yZXBvc2l0b3JpZXNfY291bnQYBSABKAUSJQoIcHJvdmlkZXIYBiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISGQoMaW5zdGFuY2VfdXJsGAcgASgJSACIAQFCDwoNX2luc3RhbmNlX3VybCJUChVHZXRPcHNlZUNvbmZpZ1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBImsKFkdldE9wc2VlQ29uZmlnUmVzcG9uc2USFgoOY29uZmlnX2NvbnRlbnQYASABKAkSEwoLY29tbWl0X2hhc2gYAiABKAkSFAoMbGFzdF91cGRhdGVkGAMgASgJEg4KBmV4aXN0cxgEIAEoCCKcAQoYVXBkYXRlT3BzZWVDb25maWdSZXF1ZXN0EicKCnByb2plY3RfaWQYASABKA1CE/pCBCoCKAGCtRgIcHJvamVjdHMSHgoNcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoARIfCg5jb25maWdfY29udGVudBgDIAEoCUIH+kIEcgIQARIWCg5jb21taXRfbWVzc2FnZRgEIAEoCSJSChlVcGRhdGVPcHNlZUNvbmZpZ1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSEwoLY29tbWl0X2hhc2gYAiABKAkSDwoHbWVzc2FnZRgDIAEoCSJXChhHZXRBbmFseXNpc1N0YXR1c1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBIpgBChlHZXRBbmFseXNpc1N0YXR1c1Jlc3BvbnNlEg4KBnN0YXR1cxgBIAEoCRIQCghqb2JfbmFtZRgCIAEoCRISCgpzdGFydGVkX2F0GAMgASgJEhQKDGNvbXBsZXRlZF9hdBgEIAEoCRIVCg1lcnJvcl9tZXNzYWdlGAUgASgJEhgKEGhhc19vcHNlZV9jb25maWcYBiABKAgioAEKH1VwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1JlcXVlc3QSJwoKcHJvamVjdF9pZBgBIAEoDUIT+kIEKgIoAYK1GAhwcm9qZWN0cxIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBEhgKEGF1dG9fc3luY19pc3N1ZXMYAyABKAgSGgoSZW5hYmxlX3ByX3dlYmhvb2tzGAQgASgIImIKIFVwZGF0ZVJlcG9zaXRvcnlTZXR0aW5nc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSLQoKcmVwb3NpdG9yeRgCIAEoCzIZLmFwaS52MS5Qcm9qZWN0UmVwb3NpdG9yeSJ5ChtTeW5jUmVwb3NpdG9yeUlzc3Vlc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIWCg5yZXBvc2l0b3J5X2lkcxgCIAMoDRIlCghwcm92aWRlchgDIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlciJAChxTeW5jUmVwb3NpdG9yeUlzc3Vlc1Jlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgSDwoHbWVzc2FnZRgCIAEoCSKCAgoVUmV1c2FibGVWQ1NDb25uZWN0aW9uEhYKDmludGVncmF0aW9uX2lkGAEgASgNEhkKEXNvdXJjZV9wcm9qZWN0X2lkGAIgASgNEhsKE3NvdXJjZV9wcm9qZWN0X25hbWUYAyABKAkSJQoIcHJvdmlkZXIYBCABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXISFAoMYWNjb3VudF9uYW1lGAUgASgJEhQKDGFjY291bnRfdHlwZRgGIAEoCRIaChJhY2NvdW50X2F2YXRhcl91cmwYByABKAkSGQoMaW5zdGFuY2VfdXJsGAggASgJSACIAQFCDwoNX2luc3RhbmNlX3VybCJkCh5MaXN0UmV1c2FibGVDb25uZWN0aW9uc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIlCghwcm92aWRlchgCIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlciJVCh9MaXN0UmV1c2FibGVDb25uZWN0aW9uc1Jlc3BvbnNlEjIKC2Nvbm5lY3Rpb25zGAEgAygLMh0uYXBpLnYxLlJldXNhYmxlVkNTQ29ubmVjdGlvbiJnChlSZXVzZVZDU0Nvbm5lY3Rpb25SZXF1ZXN0EiYKFXNvdXJjZV9pbnRlZ3JhdGlvbl9pZBgBIAEoDUIH+kIEKgIoARIiChF0YXJnZXRfcHJvamVjdF9pZBgCIAEoDUIH+kIEKgIoASI+ChpSZXVzZVZDU0Nvbm5lY3Rpb25SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkiXwogVHJpZ2dlclJlcG9zaXRvcnlBbmFseXNpc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIeCg1yZXBvc2l0b3J5X2lkGAIgASgNQgf6QgQqAigBIkUKIVRyaWdnZXJSZXBvc2l0b3J5QW5hbHlzaXNSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAkyzxIKFFZDU0Nvbm5lY3Rpb25TZXJ2aWNlEoQBChVJbml0aWF0ZVZDU0Nvbm5lY3Rpb24SJC5hcGkudjEuSW5pdGlhdGVWQ1NDb25uZWN0aW9uUmVxdWVzdBolLmFwaS52MS5Jbml0aWF0ZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIegtPkkwIYOgEqIhMvYXBpL3YxL3Zjcy9jb25uZWN0EoUBChVDb21wbGV0ZVZDU0Nvbm5lY3Rpb24SJC5hcGkudjEuQ29tcGxldGVWQ1NDb25uZWN0aW9uUmVxdWVzdBolLmFwaS52MS5Db21wbGV0ZVZDU0Nvbm5lY3Rpb25SZXNwb25zZSIfgtPkkwIZOgEqIhQvYXBpL3YxL3Zjcy9jYWxsYmFjaxKNAQoQTGlzdFJlcG9zaXRvcmllcxIfLmFwaS52MS5MaXN0UmVwb3NpdG9yaWVzUmVxdWVzdBogLmFwaS52MS5MaXN0UmVwb3NpdG9yaWVzUmVzcG9uc2UiNoLT5JMCMBIuL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JlcG9zaXRvcmllcxKTAQoRQ29ubmVjdFJlcG9zaXRvcnkSIC5hcGkudjEuQ29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0GiEuYXBpLnYxLkNvbm5lY3RSZXBvc2l0b3J5UmVzcG9uc2UiOYLT5JMCMzoBKiIuL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vdmNzL3JlcG9zaXRvcmllcxKKAQoURGlzY29ubmVjdFJlcG9zaXRvcnkSIy5hcGkudjEuRGlzY29ubmVjdFJlcG9zaXRvcnlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjWC0+STAi8qLS9hcGkvdjEvdmNzL2ludGVncmF0aW9ucy97dmNzX2ludGVncmF0aW9uX2lkfRKRAQoURGlzY29ubmVjdFZDU0FjY291bnQSIy5hcGkudjEuRGlzY29ubmVjdFZDU0FjY291bnRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IjyC0+STAjYqNC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9hY2NvdW50L3twcm92aWRlcn0SkAEKE0dldENvbm5lY3Rpb25TdGF0dXMSIi5hcGkudjEuR2V0Q29ubmVjdGlvblN0YXR1c1JlcXVlc3QaIy5hcGkudjEuR2V0Q29ubmVjdGlvblN0YXR1c1Jlc3BvbnNlIjCC0+STAioSKC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9zdGF0dXMSmQEKDkdldE9wc2VlQ29uZmlnEh0uYXBpLnYxLkdldE9wc2VlQ29uZmlnUmVxdWVzdBoeLmFwaS52MS5HZXRPcHNlZUNvbmZpZ1Jlc3BvbnNlIkiC0+STAkISQC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vb3BzZWUSpQEKEVVwZGF0ZU9wc2VlQ29uZmlnEiAuYXBpLnYxLlVwZGF0ZU9wc2VlQ29uZmlnUmVxdWVzdBohLmFwaS52MS5VcGRhdGVPcHNlZUNvbmZpZ1Jlc3BvbnNlIkuC0+STAkU6ASoaQC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vb3BzZWUSrAEKEUdldEFuYWx5c2lzU3RhdHVzEiAuYXBpLnYxLkdldEFuYWx5c2lzU3RhdHVzUmVxdWVzdBohLmFwaS52MS5HZXRBbmFseXNpc1N0YXR1c1Jlc3BvbnNlIlKC0+STAkwSSi9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH0vYW5hbHlzaXMvc3RhdHVzEr0BChhVcGRhdGVSZXBvc2l0b3J5U2V0dGluZ3MSJy5hcGkudjEuVXBkYXRlUmVwb3NpdG9yeVNldHRpbmdzUmVxdWVzdBooLmFwaS52MS5VcGRhdGVSZXBvc2l0b3J5U2V0dGluZ3NSZXNwb25zZSJOgtPkkwJIOgEqGkMvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9L3NldHRpbmdzEpsBChRTeW5jUmVwb3NpdG9yeUlzc3VlcxIjLmFwaS52MS5TeW5jUmVwb3NpdG9yeUlzc3Vlc1JlcXVlc3QaJC5hcGkudjEuU3luY1JlcG9zaXRvcnlJc3N1ZXNSZXNwb25zZSI4gtPkkwIyOgEqIi0vYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS92Y3Mvc3luYy1pc3N1ZXMSqgEKF0xpc3RSZXVzYWJsZUNvbm5lY3Rpb25zEiYuYXBpLnYxLkxpc3RSZXVzYWJsZUNvbm5lY3Rpb25zUmVxdWVzdBonLmFwaS52MS5MaXN0UmV1c2FibGVDb25uZWN0aW9uc1Jlc3BvbnNlIj6C0+STAjgSNi9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3Zjcy9yZXVzYWJsZS1jb25uZWN0aW9ucxKEAQoSUmV1c2VWQ1NDb25uZWN0aW9uEiEuYXBpLnYxLlJldXNlVkNTQ29ubmVjdGlvblJlcXVlc3QaIi5hcGkudjEuUmV1c2VWQ1NDb25uZWN0aW9uUmVzcG9uc2UiJ4LT5JMCIToBKiIcL2FwaS92MS92Y3MvcmV1c2UtY29ubmVjdGlvbhLIAQoZVHJpZ2dlclJlcG9zaXRvcnlBbmFseXNpcxIoLmFwaS52MS5UcmlnZ2VyUmVwb3NpdG9yeUFuYWx5c2lzUmVxdWVzdBopLmFwaS52MS5UcmlnZ2VyUmVwb3NpdG9yeUFuYWx5c2lzUmVzcG9uc2UiVoLT5JMCUDoBKiJLL2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfS9hbmFseXNpcy90cmlnZ2VyQncKCmNvbS5hcGkudjFCElZjc0Nvbm5lY3Rpb25Qcm90b1ABWhxvcHNlZS9iYWNrZW5kL2dlbi9hcGkvdjE7Z2VuogIDQVhYqgIGQXBpLlYxygIGQXBpXFYx4gISQXBpXFYxXEdQQk1ldGFkYXRh6gIHQXBpOjpWMWIGcHJvdG8z", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_models, file_api_v1_vcs, file_fk_foreign_key]);
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Describes the message api.v1.InitiateVCSConnectionRequest.
|
|
@@ -85,138 +86,145 @@ export const ConnectRepositoryResponseSchema = /*@__PURE__*/
|
|
|
85
86
|
export const DisconnectRepositoryRequestSchema = /*@__PURE__*/
|
|
86
87
|
messageDesc(file_api_v1_vcs_connection, 9);
|
|
87
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Describes the message api.v1.DisconnectVCSAccountRequest.
|
|
91
|
+
* Use `create(DisconnectVCSAccountRequestSchema)` to create a new message.
|
|
92
|
+
*/
|
|
93
|
+
export const DisconnectVCSAccountRequestSchema = /*@__PURE__*/
|
|
94
|
+
messageDesc(file_api_v1_vcs_connection, 10);
|
|
95
|
+
|
|
88
96
|
/**
|
|
89
97
|
* Describes the message api.v1.GetConnectionStatusRequest.
|
|
90
98
|
* Use `create(GetConnectionStatusRequestSchema)` to create a new message.
|
|
91
99
|
*/
|
|
92
100
|
export const GetConnectionStatusRequestSchema = /*@__PURE__*/
|
|
93
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
101
|
+
messageDesc(file_api_v1_vcs_connection, 11);
|
|
94
102
|
|
|
95
103
|
/**
|
|
96
104
|
* Describes the message api.v1.GetConnectionStatusResponse.
|
|
97
105
|
* Use `create(GetConnectionStatusResponseSchema)` to create a new message.
|
|
98
106
|
*/
|
|
99
107
|
export const GetConnectionStatusResponseSchema = /*@__PURE__*/
|
|
100
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
108
|
+
messageDesc(file_api_v1_vcs_connection, 12);
|
|
101
109
|
|
|
102
110
|
/**
|
|
103
111
|
* Describes the message api.v1.GetOpseeConfigRequest.
|
|
104
112
|
* Use `create(GetOpseeConfigRequestSchema)` to create a new message.
|
|
105
113
|
*/
|
|
106
114
|
export const GetOpseeConfigRequestSchema = /*@__PURE__*/
|
|
107
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
115
|
+
messageDesc(file_api_v1_vcs_connection, 13);
|
|
108
116
|
|
|
109
117
|
/**
|
|
110
118
|
* Describes the message api.v1.GetOpseeConfigResponse.
|
|
111
119
|
* Use `create(GetOpseeConfigResponseSchema)` to create a new message.
|
|
112
120
|
*/
|
|
113
121
|
export const GetOpseeConfigResponseSchema = /*@__PURE__*/
|
|
114
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
122
|
+
messageDesc(file_api_v1_vcs_connection, 14);
|
|
115
123
|
|
|
116
124
|
/**
|
|
117
125
|
* Describes the message api.v1.UpdateOpseeConfigRequest.
|
|
118
126
|
* Use `create(UpdateOpseeConfigRequestSchema)` to create a new message.
|
|
119
127
|
*/
|
|
120
128
|
export const UpdateOpseeConfigRequestSchema = /*@__PURE__*/
|
|
121
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
129
|
+
messageDesc(file_api_v1_vcs_connection, 15);
|
|
122
130
|
|
|
123
131
|
/**
|
|
124
132
|
* Describes the message api.v1.UpdateOpseeConfigResponse.
|
|
125
133
|
* Use `create(UpdateOpseeConfigResponseSchema)` to create a new message.
|
|
126
134
|
*/
|
|
127
135
|
export const UpdateOpseeConfigResponseSchema = /*@__PURE__*/
|
|
128
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
136
|
+
messageDesc(file_api_v1_vcs_connection, 16);
|
|
129
137
|
|
|
130
138
|
/**
|
|
131
139
|
* Describes the message api.v1.GetAnalysisStatusRequest.
|
|
132
140
|
* Use `create(GetAnalysisStatusRequestSchema)` to create a new message.
|
|
133
141
|
*/
|
|
134
142
|
export const GetAnalysisStatusRequestSchema = /*@__PURE__*/
|
|
135
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
143
|
+
messageDesc(file_api_v1_vcs_connection, 17);
|
|
136
144
|
|
|
137
145
|
/**
|
|
138
146
|
* Describes the message api.v1.GetAnalysisStatusResponse.
|
|
139
147
|
* Use `create(GetAnalysisStatusResponseSchema)` to create a new message.
|
|
140
148
|
*/
|
|
141
149
|
export const GetAnalysisStatusResponseSchema = /*@__PURE__*/
|
|
142
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
150
|
+
messageDesc(file_api_v1_vcs_connection, 18);
|
|
143
151
|
|
|
144
152
|
/**
|
|
145
153
|
* Describes the message api.v1.UpdateRepositorySettingsRequest.
|
|
146
154
|
* Use `create(UpdateRepositorySettingsRequestSchema)` to create a new message.
|
|
147
155
|
*/
|
|
148
156
|
export const UpdateRepositorySettingsRequestSchema = /*@__PURE__*/
|
|
149
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
157
|
+
messageDesc(file_api_v1_vcs_connection, 19);
|
|
150
158
|
|
|
151
159
|
/**
|
|
152
160
|
* Describes the message api.v1.UpdateRepositorySettingsResponse.
|
|
153
161
|
* Use `create(UpdateRepositorySettingsResponseSchema)` to create a new message.
|
|
154
162
|
*/
|
|
155
163
|
export const UpdateRepositorySettingsResponseSchema = /*@__PURE__*/
|
|
156
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
164
|
+
messageDesc(file_api_v1_vcs_connection, 20);
|
|
157
165
|
|
|
158
166
|
/**
|
|
159
167
|
* Describes the message api.v1.SyncRepositoryIssuesRequest.
|
|
160
168
|
* Use `create(SyncRepositoryIssuesRequestSchema)` to create a new message.
|
|
161
169
|
*/
|
|
162
170
|
export const SyncRepositoryIssuesRequestSchema = /*@__PURE__*/
|
|
163
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
171
|
+
messageDesc(file_api_v1_vcs_connection, 21);
|
|
164
172
|
|
|
165
173
|
/**
|
|
166
174
|
* Describes the message api.v1.SyncRepositoryIssuesResponse.
|
|
167
175
|
* Use `create(SyncRepositoryIssuesResponseSchema)` to create a new message.
|
|
168
176
|
*/
|
|
169
177
|
export const SyncRepositoryIssuesResponseSchema = /*@__PURE__*/
|
|
170
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
178
|
+
messageDesc(file_api_v1_vcs_connection, 22);
|
|
171
179
|
|
|
172
180
|
/**
|
|
173
181
|
* Describes the message api.v1.ReusableVCSConnection.
|
|
174
182
|
* Use `create(ReusableVCSConnectionSchema)` to create a new message.
|
|
175
183
|
*/
|
|
176
184
|
export const ReusableVCSConnectionSchema = /*@__PURE__*/
|
|
177
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
185
|
+
messageDesc(file_api_v1_vcs_connection, 23);
|
|
178
186
|
|
|
179
187
|
/**
|
|
180
188
|
* Describes the message api.v1.ListReusableConnectionsRequest.
|
|
181
189
|
* Use `create(ListReusableConnectionsRequestSchema)` to create a new message.
|
|
182
190
|
*/
|
|
183
191
|
export const ListReusableConnectionsRequestSchema = /*@__PURE__*/
|
|
184
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
192
|
+
messageDesc(file_api_v1_vcs_connection, 24);
|
|
185
193
|
|
|
186
194
|
/**
|
|
187
195
|
* Describes the message api.v1.ListReusableConnectionsResponse.
|
|
188
196
|
* Use `create(ListReusableConnectionsResponseSchema)` to create a new message.
|
|
189
197
|
*/
|
|
190
198
|
export const ListReusableConnectionsResponseSchema = /*@__PURE__*/
|
|
191
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
199
|
+
messageDesc(file_api_v1_vcs_connection, 25);
|
|
192
200
|
|
|
193
201
|
/**
|
|
194
202
|
* Describes the message api.v1.ReuseVCSConnectionRequest.
|
|
195
203
|
* Use `create(ReuseVCSConnectionRequestSchema)` to create a new message.
|
|
196
204
|
*/
|
|
197
205
|
export const ReuseVCSConnectionRequestSchema = /*@__PURE__*/
|
|
198
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
206
|
+
messageDesc(file_api_v1_vcs_connection, 26);
|
|
199
207
|
|
|
200
208
|
/**
|
|
201
209
|
* Describes the message api.v1.ReuseVCSConnectionResponse.
|
|
202
210
|
* Use `create(ReuseVCSConnectionResponseSchema)` to create a new message.
|
|
203
211
|
*/
|
|
204
212
|
export const ReuseVCSConnectionResponseSchema = /*@__PURE__*/
|
|
205
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
213
|
+
messageDesc(file_api_v1_vcs_connection, 27);
|
|
206
214
|
|
|
207
215
|
/**
|
|
208
216
|
* Describes the message api.v1.TriggerRepositoryAnalysisRequest.
|
|
209
217
|
* Use `create(TriggerRepositoryAnalysisRequestSchema)` to create a new message.
|
|
210
218
|
*/
|
|
211
219
|
export const TriggerRepositoryAnalysisRequestSchema = /*@__PURE__*/
|
|
212
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
220
|
+
messageDesc(file_api_v1_vcs_connection, 28);
|
|
213
221
|
|
|
214
222
|
/**
|
|
215
223
|
* Describes the message api.v1.TriggerRepositoryAnalysisResponse.
|
|
216
224
|
* Use `create(TriggerRepositoryAnalysisResponseSchema)` to create a new message.
|
|
217
225
|
*/
|
|
218
226
|
export const TriggerRepositoryAnalysisResponseSchema = /*@__PURE__*/
|
|
219
|
-
messageDesc(file_api_v1_vcs_connection,
|
|
227
|
+
messageDesc(file_api_v1_vcs_connection, 29);
|
|
220
228
|
|
|
221
229
|
/**
|
|
222
230
|
* Service definition
|
|
@@ -7,7 +7,7 @@ import type { Message } from "@bufbuild/protobuf";
|
|
|
7
7
|
import type { VCSProvider } from "./vcs_pb";
|
|
8
8
|
import type { Pagination } from "./pagination_pb";
|
|
9
9
|
import type { FilterOptions } from "./filter_pb";
|
|
10
|
-
import type { VCSIntegration } from "./models_pb";
|
|
10
|
+
import type { ProjectRepository, VCSIntegration } from "./models_pb";
|
|
11
11
|
import type { EmptySchema } from "@bufbuild/protobuf/wkt";
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -195,6 +195,11 @@ export declare const DeleteVCSIntegrationRequestSchema: GenMessage<DeleteVCSInte
|
|
|
195
195
|
/**
|
|
196
196
|
* Response definitions
|
|
197
197
|
*
|
|
198
|
+
* A project has at most one VCSIntegration per provider (the account/app
|
|
199
|
+
* installation) and one ProjectRepository per connected repository. They are
|
|
200
|
+
* different things, so they are returned as separate lists rather than a
|
|
201
|
+
* single one where the repositories wear an integration's field names.
|
|
202
|
+
*
|
|
198
203
|
* @generated from message api.v1.GetVCSIntegrationsResponse
|
|
199
204
|
*/
|
|
200
205
|
export declare type GetVCSIntegrationsResponse = Message<"api.v1.GetVCSIntegrationsResponse"> & {
|
|
@@ -207,6 +212,11 @@ export declare type GetVCSIntegrationsResponse = Message<"api.v1.GetVCSIntegrati
|
|
|
207
212
|
* @generated from field: api.v1.Pagination pagination = 2;
|
|
208
213
|
*/
|
|
209
214
|
pagination?: Pagination;
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* @generated from field: repeated api.v1.ProjectRepository project_repositories = 3;
|
|
218
|
+
*/
|
|
219
|
+
projectRepositories: ProjectRepository[];
|
|
210
220
|
};
|
|
211
221
|
|
|
212
222
|
/**
|
|
@@ -10,12 +10,13 @@ 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
12
|
import { file_api_v1_vcs } from "./vcs_pb";
|
|
13
|
+
import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Describes the file api/v1/vcs_integration.proto.
|
|
16
17
|
*/
|
|
17
18
|
export const file_api_v1_vcs_integration = /*@__PURE__*/
|
|
18
|
-
fileDesc("
|
|
19
|
+
fileDesc("ChxhcGkvdjEvdmNzX2ludGVncmF0aW9uLnByb3RvEgZhcGkudjEi1gIKGEFkZFZDU0ludGVncmF0aW9uUmVxdWVzdBIbCgpyZXBvX293bmVyGAEgASgJQgf6QgRyAhABEhoKCXJlcG9fbmFtZRgCIAEoCUIH+kIEcgIQARIgCg90b2tlbl9lbmNyeXB0ZWQYAyABKAlCB/pCBHICEAESHwoOZGVmYXVsdF9icmFuY2gYBCABKAlCB/pCBHICEAESGwoOd2ViaG9va19zZWNyZXQYBSABKAlIAIgBARIdChBwZXJtaXNzaW9uc19qc29uGAYgASgJSAGIAQESEQoJaXNfYWN0aXZlGAcgASgIEiAKCnByb2plY3RfaWQYCCABKA1CDIK1GAhwcm9qZWN0cxIlCghwcm92aWRlchgJIAEoDjITLmFwaS52MS5WQ1NQcm92aWRlckIRCg9fd2ViaG9va19zZWNyZXRCEwoRX3Blcm1pc3Npb25zX2pzb24i7AIKGUVkaXRWQ1NJbnRlZ3JhdGlvblJlcXVlc3QSEwoCaWQYASABKA1CB/pCBCoCKAESGwoKcmVwb19vd25lchgCIAEoCUIH+kIEcgIQARIaCglyZXBvX25hbWUYAyABKAlCB/pCBHICEAESIAoPdG9rZW5fZW5jcnlwdGVkGAQgASgJQgf6QgRyAhABEh8KDmRlZmF1bHRfYnJhbmNoGAUgASgJQgf6QgRyAhABEhsKDndlYmhvb2tfc2VjcmV0GAYgASgJSACIAQESHQoQcGVybWlzc2lvbnNfanNvbhgHIAEoCUgBiAEBEhEKCWlzX2FjdGl2ZRgIIAEoCBIgCgpwcm9qZWN0X2lkGAkgASgNQgyCtRgIcHJvamVjdHMSJQoIcHJvdmlkZXIYCiABKA4yEy5hcGkudjEuVkNTUHJvdmlkZXJCEQoPX3dlYmhvb2tfc2VjcmV0QhMKEV9wZXJtaXNzaW9uc19qc29uIiYKGEdldFZDU0ludGVncmF0aW9uUmVxdWVzdBIKCgJpZBgBIAEoDSKZAQoZR2V0VkNTSW50ZWdyYXRpb25zUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEjAKCnBhZ2luYXRpb24YAiABKAsyEi5hcGkudjEuUGFnaW5hdGlvbkII+kIFigECEAESLQoOZmlsdGVyX29wdGlvbnMYAyABKAsyFS5hcGkudjEuRmlsdGVyT3B0aW9ucyIpChtEZWxldGVWQ1NJbnRlZ3JhdGlvblJlcXVlc3QSCgoCaWQYASABKA0irwEKGkdldFZDU0ludGVncmF0aW9uc1Jlc3BvbnNlEjAKEHZjc19pbnRlZ3JhdGlvbnMYASADKAsyFi5hcGkudjEuVkNTSW50ZWdyYXRpb24SJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uEjcKFHByb2plY3RfcmVwb3NpdG9yaWVzGAMgAygLMhkuYXBpLnYxLlByb2plY3RSZXBvc2l0b3J5IkwKGUFkZFZDU0ludGVncmF0aW9uUmVzcG9uc2USLwoPdmNzX2ludGVncmF0aW9uGAEgASgLMhYuYXBpLnYxLlZDU0ludGVncmF0aW9uIk0KGkVkaXRWQ1NJbnRlZ3JhdGlvblJlc3BvbnNlEi8KD3Zjc19pbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS52MS5WQ1NJbnRlZ3JhdGlvbiJMChlHZXRWQ1NJbnRlZ3JhdGlvblJlc3BvbnNlEi8KD3Zjc19pbnRlZ3JhdGlvbhgBIAEoCzIWLmFwaS52MS5WQ1NJbnRlZ3JhdGlvbiJbChhHZXRSZXBvc2l0b3J5VHJlZVJlcXVlc3QSHwoOaW50ZWdyYXRpb25faWQYASABKA1CB/pCBCoCKAESCwoDc2hhGAIgASgJEhEKCXJlY3Vyc2l2ZRgDIAEoCCJiCg5SZXBvc2l0b3J5RGF0YRIMCgRwYXRoGAEgASgJEgwKBG1vZGUYAiABKAkSDAoEdHlwZRgDIAEoCRILCgNzaGEYBCABKAkSDAoEc2l6ZRgFIAEoAxILCgN1cmwYBiABKAkiQQoZR2V0UmVwb3NpdG9yeVRyZWVSZXNwb25zZRIkCgR0cmVlGAEgAygLMhYuYXBpLnYxLlJlcG9zaXRvcnlEYXRhIlwKFUdldEZpbGVDb250ZW50UmVxdWVzdBIfCg5pbnRlZ3JhdGlvbl9pZBgBIAEoDUIH+kIEKgIoARIVCgRwYXRoGAIgASgJQgf6QgRyAhABEgsKA3JlZhgDIAEoCSJyChZHZXRGaWxlQ29udGVudFJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkSEAoIZW5jb2RpbmcYAiABKAkSDAoEbmFtZRgDIAEoCRIMCgRwYXRoGAQgASgJEgwKBHNpemUYBSABKAMSCwoDc2hhGAYgASgJMsIHChVWQ1NJbnRlZ3JhdGlvblNlcnZpY2USfQoRQWRkVkNTSW50ZWdyYXRpb24SIC5hcGkudjEuQWRkVkNTSW50ZWdyYXRpb25SZXF1ZXN0GiEuYXBpLnYxLkFkZFZDU0ludGVncmF0aW9uUmVzcG9uc2UiI4LT5JMCHToBKiIYL2FwaS92MS92Y3NfaW50ZWdyYXRpb25zEoUBChJFZGl0VkNTSW50ZWdyYXRpb24SIS5hcGkudjEuRWRpdFZDU0ludGVncmF0aW9uUmVxdWVzdBoiLmFwaS52MS5FZGl0VkNTSW50ZWdyYXRpb25SZXNwb25zZSIogtPkkwIiOgEqGh0vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2lkfRJ/ChFHZXRWQ1NJbnRlZ3JhdGlvbhIgLmFwaS52MS5HZXRWQ1NJbnRlZ3JhdGlvblJlcXVlc3QaIS5hcGkudjEuR2V0VkNTSW50ZWdyYXRpb25SZXNwb25zZSIlgtPkkwIfEh0vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2lkfRJ9ChJHZXRWQ1NJbnRlZ3JhdGlvbnMSIS5hcGkudjEuR2V0VkNTSW50ZWdyYXRpb25zUmVxdWVzdBoiLmFwaS52MS5HZXRWQ1NJbnRlZ3JhdGlvbnNSZXNwb25zZSIggtPkkwIaEhgvYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMSegoURGVsZXRlVkNTSW50ZWdyYXRpb24SIy5hcGkudjEuRGVsZXRlVkNTSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiWC0+STAh8qHS9hcGkvdjEvdmNzX2ludGVncmF0aW9ucy97aWR9EpABChFHZXRSZXBvc2l0b3J5VHJlZRIgLmFwaS52MS5HZXRSZXBvc2l0b3J5VHJlZVJlcXVlc3QaIS5hcGkudjEuR2V0UmVwb3NpdG9yeVRyZWVSZXNwb25zZSI2gtPkkwIwEi4vYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2ludGVncmF0aW9uX2lkfS90cmVlEpIBCg5HZXRGaWxlQ29udGVudBIdLmFwaS52MS5HZXRGaWxlQ29udGVudFJlcXVlc3QaHi5hcGkudjEuR2V0RmlsZUNvbnRlbnRSZXNwb25zZSJBgtPkkwI7EjkvYXBpL3YxL3Zjc19pbnRlZ3JhdGlvbnMve2ludGVncmF0aW9uX2lkfS9maWxlcy97cGF0aD0qKn1CeAoKY29tLmFwaS52MUITVmNzSW50ZWdyYXRpb25Qcm90b1ABWhxvcHNlZS9iYWNrZW5kL2dlbi9hcGkvdjE7Z2VuogIDQVhYqgIGQXBpLlYxygIGQXBpXFYx4gISQXBpXFYxXEdQQk1ldGFkYXRh6gIHQXBpOjpWMWIGcHJvdG8z", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models, file_api_v1_vcs, file_fk_foreign_key]);
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Describes the message api.v1.AddVCSIntegrationRequest.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @generated by protoc-gen-es v2.2.3
|
|
2
|
+
// @generated from file fk/foreign_key.proto (package fk, syntax proto3)
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
|
|
5
|
+
import type { GenExtension, GenFile } from "@bufbuild/protobuf/codegenv1";
|
|
6
|
+
import type { FieldOptions } from "@bufbuild/protobuf/wkt";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Describes the file fk/foreign_key.proto.
|
|
10
|
+
*/
|
|
11
|
+
export declare const file_fk_foreign_key: GenFile;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Marks a field as a foreign key into the named relation (database table).
|
|
15
|
+
* The in-repo protoc-gen-fk-validator plugin (tools/protoc-gen-fk-validator)
|
|
16
|
+
* turns these annotations into GetForeignKeysUint32 methods, which the backend
|
|
17
|
+
* validation interceptor uses to check referenced rows exist.
|
|
18
|
+
*
|
|
19
|
+
* @generated from extension: string foreign_key = 50000;
|
|
20
|
+
*/
|
|
21
|
+
export declare const foreign_key: GenExtension<FieldOptions, string>;
|
|
22
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// @generated by protoc-gen-es v2.2.3
|
|
2
|
+
// @generated from file fk/foreign_key.proto (package fk, syntax proto3)
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
|
|
5
|
+
import { extDesc, fileDesc } from "@bufbuild/protobuf/codegenv1";
|
|
6
|
+
import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Describes the file fk/foreign_key.proto.
|
|
10
|
+
*/
|
|
11
|
+
export const file_fk_foreign_key = /*@__PURE__*/
|
|
12
|
+
fileDesc("ChRmay9mb3JlaWduX2tleS5wcm90bxICZms6QAoLZm9yZWlnbl9rZXkSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGNCGAyABKAlSCmZvcmVpZ25LZXlCVwoGY29tLmZrQg9Gb3JlaWduS2V5UHJvdG9QAVoUb3BzZWUvYmFja2VuZC9nZW4vZmuiAgNGWFiqAgJGa8oCAkZr4gIORmtcR1BCTWV0YWRhdGHqAgJGa2IGcHJvdG8z", [file_google_protobuf_descriptor]);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Marks a field as a foreign key into the named relation (database table).
|
|
16
|
+
* The in-repo protoc-gen-fk-validator plugin (tools/protoc-gen-fk-validator)
|
|
17
|
+
* turns these annotations into GetForeignKeysUint32 methods, which the backend
|
|
18
|
+
* validation interceptor uses to check referenced rows exist.
|
|
19
|
+
*
|
|
20
|
+
* @generated from extension: string foreign_key = 50000;
|
|
21
|
+
*/
|
|
22
|
+
export const foreign_key = /*@__PURE__*/
|
|
23
|
+
extDesc(file_fk_foreign_key, 0);
|
|
24
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opsee/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Opsee MCP server — manage projects, tasks, docs, and cycles from AI coding environments",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -15,23 +15,23 @@
|
|
|
15
15
|
"test": "vitest run"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@bufbuild/protobuf": "^2.
|
|
19
|
-
"@connectrpc/connect": "^2.
|
|
20
|
-
"@connectrpc/connect-node": "^2.
|
|
21
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
18
|
+
"@bufbuild/protobuf": "^2.14.0",
|
|
19
|
+
"@connectrpc/connect": "^2.1.2",
|
|
20
|
+
"@connectrpc/connect-node": "^2.1.2",
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
22
22
|
"cors": "^2.8.6",
|
|
23
23
|
"express": "^5.2.1",
|
|
24
24
|
"ioredis": "^5.11.1",
|
|
25
|
-
"open": "^10.
|
|
26
|
-
"tsx": "^4.
|
|
27
|
-
"zod": "^4.3
|
|
25
|
+
"open": "^10.2.0",
|
|
26
|
+
"tsx": "^4.23.12",
|
|
27
|
+
"zod": "^4.4.3"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/cors": "^2.8.19",
|
|
31
31
|
"@types/express": "^5.0.6",
|
|
32
|
-
"@types/node": "^22.
|
|
33
|
-
"typescript": "^5.
|
|
34
|
-
"vitest": "^4.1.
|
|
32
|
+
"@types/node": "^22.20.1",
|
|
33
|
+
"typescript": "^5.9.3",
|
|
34
|
+
"vitest": "^4.1.10"
|
|
35
35
|
},
|
|
36
36
|
"engines": {
|
|
37
37
|
"node": ">=18.0.0"
|
package/src/auth/kv-store.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { Redis } from "ioredis";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The OAuth flow keeps clients, pending authorizations, authorization codes,
|
|
7
|
-
* and revoked tokens here. Backing it with Redis (instead of in-process Maps)
|
|
8
|
-
* lets registration on one request survive a server restart and be visible to
|
|
9
|
-
* other replicas — which is what makes horizontal scaling safe.
|
|
10
|
-
*/
|
|
3
|
+
/** KVStore persists OAuth state (clients, pending auths, codes, revocations). A Redis backing makes a
|
|
4
|
+
* registration survive restart and be visible to other replicas, which is what allows scaling out. */
|
|
11
5
|
export interface KVStore {
|
|
12
6
|
/** Returns the stored value, or null if missing/expired. */
|
|
13
7
|
get(key: string): Promise<string | null>;
|
|
@@ -17,11 +11,8 @@ export interface KVStore {
|
|
|
17
11
|
del(key: string): Promise<void>;
|
|
18
12
|
}
|
|
19
13
|
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* usage). State is lost on restart and is NOT shared across replicas, so this
|
|
23
|
-
* must not be used in a multi-replica deployment.
|
|
24
|
-
*/
|
|
14
|
+
/** Process-local fallback for local dev/stdio: state is lost on restart and not shared, so it must not
|
|
15
|
+
* be used in a multi-replica deployment. */
|
|
25
16
|
export class InMemoryKVStore implements KVStore {
|
|
26
17
|
private entries = new Map<string, { value: string; expiresAt: number | null }>();
|
|
27
18
|
private readonly maxEntries: number;
|
|
@@ -43,8 +34,7 @@ export class InMemoryKVStore implements KVStore {
|
|
|
43
34
|
async set(key: string, value: string, ttlSeconds?: number): Promise<void> {
|
|
44
35
|
const expiresAt =
|
|
45
36
|
ttlSeconds !== undefined ? Date.now() + ttlSeconds * 1000 : null;
|
|
46
|
-
// Re-insert so the
|
|
47
|
-
// is evicted last.
|
|
37
|
+
// Re-insert so the newest key sorts last and is evicted last.
|
|
48
38
|
this.entries.delete(key);
|
|
49
39
|
this.entries.set(key, { value, expiresAt });
|
|
50
40
|
this.evictIfNeeded();
|
|
@@ -54,12 +44,8 @@ export class InMemoryKVStore implements KVStore {
|
|
|
54
44
|
this.entries.delete(key);
|
|
55
45
|
}
|
|
56
46
|
|
|
57
|
-
/**
|
|
58
|
-
*
|
|
59
|
-
* design — clients cache their DCR indefinitely), so without a cap this
|
|
60
|
-
* fallback store grows forever in a long-running remote process that has no
|
|
61
|
-
* Redis. Evict expired entries first, then the oldest live entries.
|
|
62
|
-
*/
|
|
47
|
+
/** Bounds memory: DCR entries are stored without a TTL, so without a cap this store grows forever.
|
|
48
|
+
* Evicts expired entries first, then the oldest live ones. */
|
|
63
49
|
private evictIfNeeded(): void {
|
|
64
50
|
if (this.entries.size <= this.maxEntries) return;
|
|
65
51
|
|
|
@@ -100,11 +86,8 @@ export class RedisKVStore implements KVStore {
|
|
|
100
86
|
}
|
|
101
87
|
}
|
|
102
88
|
|
|
103
|
-
/**
|
|
104
|
-
*
|
|
105
|
-
* mirroring the backend's REDIS_* env conventions; otherwise falls back to an
|
|
106
|
-
* in-process store and warns that scaling beyond one replica is unsafe.
|
|
107
|
-
*/
|
|
89
|
+
/** Builds a KVStore from the environment: Redis when REDIS_HOST is set (matching the backend's REDIS_*
|
|
90
|
+
* conventions), else an in-process store with a warning that multi-replica use is unsafe. */
|
|
108
91
|
export function createKVStore(): KVStore {
|
|
109
92
|
const host = process.env.REDIS_HOST;
|
|
110
93
|
if (!host) {
|
|
@@ -120,12 +103,9 @@ export function createKVStore(): KVStore {
|
|
|
120
103
|
port: parseInt(process.env.REDIS_PORT || "6379", 10),
|
|
121
104
|
password: process.env.REDIS_PASSWORD || undefined,
|
|
122
105
|
db: parseInt(process.env.REDIS_DB || "0", 10),
|
|
123
|
-
// ElastiCache
|
|
124
|
-
// set so SNI/cert validation matches the endpoint host.
|
|
106
|
+
// ElastiCache in-transit encryption needs TLS, with ServerName set so SNI/cert validation matches.
|
|
125
107
|
tls: process.env.REDIS_TLS === "true" ? { servername: host } : undefined,
|
|
126
|
-
//
|
|
127
|
-
// misconfigured connection (e.g. plaintext to a TLS-only server) leaves
|
|
128
|
-
// commands queued indefinitely, so awaiting a GET/SET never resolves.
|
|
108
|
+
// Without these, a misconfigured connection queues commands forever and awaits never resolve.
|
|
129
109
|
maxRetriesPerRequest: 3,
|
|
130
110
|
connectTimeout: 10_000,
|
|
131
111
|
commandTimeout: 5_000,
|
|
@@ -134,8 +114,7 @@ export function createKVStore(): KVStore {
|
|
|
134
114
|
redis.on("error", (err: Error) => {
|
|
135
115
|
console.error("[oauth] Redis error:", err.message);
|
|
136
116
|
});
|
|
137
|
-
// "ready"
|
|
138
|
-
// socket to a TLS-only server fires "connect" but never becomes ready.
|
|
117
|
+
// "ready", not "connect": a plaintext socket to a TLS-only server connects but never gets ready.
|
|
139
118
|
redis.on("ready", () => {
|
|
140
119
|
console.log(`[oauth] Redis ready at ${host}`);
|
|
141
120
|
});
|
package/src/auth/manager.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { readCredentials, clearCredentials, type Credentials } from "./credentials.js";
|
|
2
2
|
|
|
3
3
|
const DEFAULT_SERVER_URL = "https://grpc.api.opsee.ai";
|
|
4
|
-
// A stale default that older login builds wrote to ~/.opsee/credentials.json.
|
|
5
|
-
// It points at a dead host, so treat a stored value of it as "unset" and fall
|
|
6
|
-
// back to the canonical default instead of forcing users to re-login.
|
|
7
|
-
const LEGACY_STALE_SERVER_URL = "https://api.opsee.dev";
|
|
8
4
|
|
|
9
5
|
export class AuthManager {
|
|
10
6
|
private credentials: Credentials | null = null;
|
|
@@ -21,10 +17,9 @@ export class AuthManager {
|
|
|
21
17
|
}
|
|
22
18
|
|
|
23
19
|
getServerUrl(): string {
|
|
24
|
-
const stored = this.credentials?.serverUrl;
|
|
25
20
|
return (
|
|
26
21
|
process.env.OPSEE_API_URL ||
|
|
27
|
-
|
|
22
|
+
this.credentials?.serverUrl ||
|
|
28
23
|
DEFAULT_SERVER_URL
|
|
29
24
|
);
|
|
30
25
|
}
|