From 6f3988d38afee29c0a73d40b83b4c0407908b191 Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Thu, 18 Dec 2025 16:29:01 -0800 Subject: [PATCH 1/7] Add resource-typed sync task handling and related functionality - Implemented resource-typed sync task handler in `resource_typed_sync.go`. - Added support for `SyncResourceTypedType` in task type checks. - Introduced `localResourceTypedSyncer` for managing resource-typed sync tasks. - Updated existing task processing logic to accommodate new task type. --- pkg/tasks/c1api/manager.go | 2 + pkg/tasks/c1api/resource_typed_sync.go | 143 +++++++++++++++++++++++ pkg/tasks/local/resource_typed_syncer.go | 121 +++++++++++++++++++ pkg/tasks/tasks.go | 4 + 4 files changed, 270 insertions(+) create mode 100644 pkg/tasks/c1api/resource_typed_sync.go create mode 100644 pkg/tasks/local/resource_typed_syncer.go diff --git a/pkg/tasks/c1api/manager.go b/pkg/tasks/c1api/manager.go index 7b6aec9d9..11085024c 100644 --- a/pkg/tasks/c1api/manager.go +++ b/pkg/tasks/c1api/manager.go @@ -286,6 +286,8 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. handler = newActionInvokeTaskHandler(task, tHelpers) case taskTypes.ActionStatusType: handler = newActionStatusTaskHandler(task, tHelpers) + case taskTypes.SyncResourceTypedType: + handler = newResourceTypedSyncTaskHandler(task, tHelpers) default: return c.finishTask(ctx, task, nil, nil, errors.New("unsupported task type")) } diff --git a/pkg/tasks/c1api/resource_typed_sync.go b/pkg/tasks/c1api/resource_typed_sync.go new file mode 100644 index 000000000..7a153cd16 --- /dev/null +++ b/pkg/tasks/c1api/resource_typed_sync.go @@ -0,0 +1,143 @@ +package c1api + +import ( + "context" + "errors" + "os" + + "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + "go.uber.org/zap" + + v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" + "github.com/conductorone/baton-sdk/pkg/session" + sdkSync "github.com/conductorone/baton-sdk/pkg/sync" + "github.com/conductorone/baton-sdk/pkg/tasks" +) + +type resourceTypedSyncTaskHandler struct { + task *v1.Task + helpers fullSyncHelpers +} + +func (c *resourceTypedSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { + ctx, span := tracer.Start(ctx, "resourceTypedSyncTaskHandler.sync") + defer span.End() + + l := ctxzap.Extract(ctx).With(zap.String("task_id", c.task.GetId()), zap.Stringer("task_type", tasks.GetType(c.task))) + + syncTask := c.task.GetSyncResourceTyped() + if syncTask == nil { + return errors.New("task is not a resource-typed sync task") + } + + syncOpts := []sdkSync.SyncOpt{ + sdkSync.WithC1ZPath(c1zPath), + sdkSync.WithTmpDir(c.helpers.TempDir()), + sdkSync.WithResourceTypedSync(syncTask.GetResourceTypeId()), + } + + if syncTask.GetSkipEntitlementsAndGrants() { + syncOpts = append(syncOpts, sdkSync.WithSkipEntitlementsAndGrants(true)) + } + + cc := c.helpers.ConnectorClient() + + if setSessionStore, ok := cc.(session.SetSessionStore); ok { + syncOpts = append(syncOpts, sdkSync.WithSessionStore(setSessionStore)) + } + + syncer, err := sdkSync.NewSyncer(ctx, cc, syncOpts...) + if err != nil { + l.Error("failed to create syncer", zap.Error(err)) + return err + } + + err = syncer.Sync(ctx) + if err != nil { + l.Error("failed to sync", zap.Error(err)) + + if closeErr := syncer.Close(ctx); closeErr != nil { + l.Error("failed to close syncer after sync error", zap.Error(err)) + err = errors.Join(err, closeErr) + } + + return err + } + + if err := syncer.Close(ctx); err != nil { + l.Error("failed to close syncer", zap.Error(err)) + return err + } + + return nil +} + +func (c *resourceTypedSyncTaskHandler) HandleTask(ctx context.Context) error { + ctx, span := tracer.Start(ctx, "resourceTypedSyncTaskHandler.HandleTask") + defer span.End() + + ctx, cancel := context.WithCancel(ctx) + defer cancel() + l := ctxzap.Extract(ctx).With(zap.String("task_id", c.task.GetId()), zap.Stringer("task_type", tasks.GetType(c.task))) + l.Info("Handling resource-typed sync task.", zap.String("resource_type_id", c.task.GetSyncResourceTyped().GetResourceTypeId())) + + assetFile, err := os.CreateTemp(c.helpers.TempDir(), "baton-sdk-resource-typed-sync-upload") + if err != nil { + l.Error("failed to create temp file", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + c1zPath := assetFile.Name() + err = assetFile.Close() + if err != nil { + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + ctx, err = c.helpers.HeartbeatTask(ctx, nil) + if err != nil { + l.Error("failed to heartbeat task", zap.Error(err)) + return err + } + + err = c.sync(ctx, c1zPath) + if err != nil { + l.Error("failed to sync", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + c1zF, err := os.Open(c1zPath) + if err != nil { + l.Error("failed to open sync asset prior to upload", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + defer func(f *os.File) { + err = f.Close() + if err != nil { + l.Error("failed to close sync asset", zap.Error(err), zap.String("path", f.Name())) + } + err = os.Remove(f.Name()) + if err != nil { + l.Error("failed to remove temp file", zap.Error(err), zap.String("path", f.Name())) + } + }(c1zF) + + err = c.helpers.Upload(ctx, c1zF) + if err != nil { + l.Error("failed to upload sync asset", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + err = uploadDebugLogs(ctx, c.helpers) + if err != nil { + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + return c.helpers.FinishTask(ctx, nil, nil, nil) +} + +func newResourceTypedSyncTaskHandler(task *v1.Task, helpers fullSyncHelpers) tasks.TaskHandler { + return &resourceTypedSyncTaskHandler{ + task: task, + helpers: helpers, + } +} + diff --git a/pkg/tasks/local/resource_typed_syncer.go b/pkg/tasks/local/resource_typed_syncer.go new file mode 100644 index 000000000..2e5f6ca1e --- /dev/null +++ b/pkg/tasks/local/resource_typed_syncer.go @@ -0,0 +1,121 @@ +package local + +import ( + "context" + "errors" + "sync" + "time" + + "go.opentelemetry.io/otel/trace" + + v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" + "github.com/conductorone/baton-sdk/pkg/session" + sdkSync "github.com/conductorone/baton-sdk/pkg/sync" + "github.com/conductorone/baton-sdk/pkg/tasks" + "github.com/conductorone/baton-sdk/pkg/types" +) + +type localResourceTypedSyncer struct { + dbPath string + resourceTypeID string + tmpDir string + skipEntitlementsAndGrants bool + skipGrants bool + o sync.Once +} + +type ResourceTypedSyncerOption func(*localResourceTypedSyncer) + +func (m *localResourceTypedSyncer) GetTempDir() string { + return "" +} + +func (m *localResourceTypedSyncer) ShouldDebug() bool { + return false +} + +func (m *localResourceTypedSyncer) Next(ctx context.Context) (*v1.Task, time.Duration, error) { + var task *v1.Task + m.o.Do(func() { + task = v1.Task_builder{ + SyncResourceTyped: v1.Task_SyncResourceTypedTask_builder{ + ResourceTypeId: m.resourceTypeID, + SkipEntitlementsAndGrants: m.skipEntitlementsAndGrants, + }.Build(), + }.Build() + }) + return task, 0, nil +} + +func (m *localResourceTypedSyncer) Process(ctx context.Context, task *v1.Task, cc types.ConnectorClient) error { + ctx, span := tracer.Start(ctx, "localResourceTypedSyncer.Process", trace.WithNewRoot()) + defer span.End() + + var setSessionStore session.SetSessionStore + if ssetSessionStore, ok := cc.(session.SetSessionStore); ok { + setSessionStore = ssetSessionStore + } + + syncTask := task.GetSyncResourceTyped() + syncer, err := sdkSync.NewSyncer(ctx, cc, + sdkSync.WithC1ZPath(m.dbPath), + sdkSync.WithTmpDir(m.tmpDir), + sdkSync.WithResourceTypedSync(syncTask.GetResourceTypeId()), + sdkSync.WithSkipEntitlementsAndGrants(syncTask.GetSkipEntitlementsAndGrants()), + sdkSync.WithSkipGrants(m.skipGrants), + sdkSync.WithSessionStore(setSessionStore), + ) + if err != nil { + return err + } + + err = syncer.Sync(ctx) + if err != nil { + if closeErr := syncer.Close(ctx); closeErr != nil { + err = errors.Join(err, closeErr) + } + return err + } + + if err := syncer.Close(ctx); err != nil { + return err + } + + return nil +} + +// NewResourceTypedSyncer returns a task manager that queues a resource-typed sync task. +func NewResourceTypedSyncer(ctx context.Context, dbPath string, resourceTypeID string, opts ...ResourceTypedSyncerOption) (tasks.Manager, error) { + nm := &localResourceTypedSyncer{ + dbPath: dbPath, + resourceTypeID: resourceTypeID, + } + + for _, opt := range opts { + opt(nm) + } + + return nm, nil +} + +// ResourceTypedWithTmpDir sets the temp directory for the resource-typed syncer. +func ResourceTypedWithTmpDir(tmpDir string) ResourceTypedSyncerOption { + return func(m *localResourceTypedSyncer) { + m.tmpDir = tmpDir + } +} + +// ResourceTypedWithSkipEntitlementsAndGrants sets whether to skip entitlements and grants. +func ResourceTypedWithSkipEntitlementsAndGrants(skip bool) ResourceTypedSyncerOption { + return func(m *localResourceTypedSyncer) { + m.skipEntitlementsAndGrants = skip + } +} + +// ResourceTypedWithSkipGrants sets whether to skip grants only. +func ResourceTypedWithSkipGrants(skip bool) ResourceTypedSyncerOption { + return func(m *localResourceTypedSyncer) { + m.skipGrants = skip + } +} + diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go index db0e64d40..7bd97d4dc 100644 --- a/pkg/tasks/tasks.go +++ b/pkg/tasks/tasks.go @@ -68,6 +68,8 @@ func Is(task *v1.Task, target taskTypes.TaskType) bool { return actualType == v1.Task_ActionStatus_case case taskTypes.CreateSyncDiff: return actualType == v1.Task_CreateSyncDiff_case + case taskTypes.SyncResourceTypedType: + return actualType == v1.Task_SyncResourceTyped_case default: return false } @@ -119,6 +121,8 @@ func GetType(task *v1.Task) taskTypes.TaskType { return taskTypes.ActionStatusType case v1.Task_CreateSyncDiff_case: return taskTypes.CreateSyncDiff + case v1.Task_SyncResourceTyped_case: + return taskTypes.SyncResourceTypedType default: return taskTypes.UnknownType } From b02897154bccba099ddc9cb702804c668b1234bb Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Thu, 18 Dec 2025 16:29:38 -0800 Subject: [PATCH 2/7] Add support for resource-typed sync functionality - Introduced `WithResourceTypedSync` option for configuring resource-typed sync in the connector runner. - Added `SyncResourceTypedTask` message to the protocol buffer definition for handling resource-typed sync tasks. - Implemented validation for `SyncResourceTypedTask` and integrated it into the task processing logic. - Updated syncer to handle resource-typed sync operations, including syncing entitlements and grants for specific resource types. - Enhanced CLI commands to accept `sync-resource-type` parameter for initiating resource-typed syncs. --- internal/connector/connector.go | 8 + pb/c1/connectorapi/baton/v1/baton.pb.go | 529 ++++++++++------- .../baton/v1/baton.pb.validate.go | 181 ++++++ .../baton/v1/baton_protoopaque.pb.go | 530 +++++++++++------- pkg/cli/commands.go | 4 + pkg/connectorrunner/runner.go | 34 +- pkg/field/defaults.go | 5 + pkg/sync/state.go | 10 + pkg/sync/syncer.go | 383 +++++++++++++ pkg/types/tasks/tasks.go | 3 + proto/c1/connectorapi/baton/v1/baton.proto | 7 + 11 files changed, 1295 insertions(+), 399 deletions(-) diff --git a/internal/connector/connector.go b/internal/connector/connector.go index ab6da92c6..1885a0a3f 100644 --- a/internal/connector/connector.go +++ b/internal/connector/connector.go @@ -92,6 +92,7 @@ type wrapper struct { targetedSyncResources []*connectorV2.Resource sessionStoreEnabled bool syncResourceTypeIDs []string + resourceTypedSyncID string rateLimiter ratelimitV1.RateLimiterServiceServer rlCfg *ratelimitV1.RateLimiterConfig @@ -176,6 +177,13 @@ func WithSyncResourceTypeIDs(resourceTypeIDs []string) Option { } } +func WithResourceTypedSync(resourceTypeID string) Option { + return func(ctx context.Context, w *wrapper) error { + w.resourceTypedSyncID = resourceTypeID + return nil + } +} + // NewConnectorWrapper returns a connector wrapper for running connector services locally. func NewWrapper(ctx context.Context, server interface{}, opts ...Option) (*wrapper, error) { connectorServer, isServer := server.(types.ConnectorServer) diff --git a/pb/c1/connectorapi/baton/v1/baton.pb.go b/pb/c1/connectorapi/baton/v1/baton.pb.go index 0e6cbdeb5..8da1adf94 100644 --- a/pb/c1/connectorapi/baton/v1/baton.pb.go +++ b/pb/c1/connectorapi/baton/v1/baton.pb.go @@ -106,6 +106,7 @@ type Task struct { // *Task_ActionStatus // *Task_CreateSyncDiff // *Task_CompactSyncs_ + // *Task_SyncResourceTyped TaskType isTask_TaskType `protobuf_oneof:"task_type"` Debug bool `protobuf:"varint,3,opt,name=debug,proto3" json:"debug,omitempty"` unknownFields protoimpl.UnknownFields @@ -347,6 +348,15 @@ func (x *Task) GetCompactSyncs() *Task_CompactSyncs { return nil } +func (x *Task) GetSyncResourceTyped() *Task_SyncResourceTypedTask { + if x != nil { + if x, ok := x.TaskType.(*Task_SyncResourceTyped); ok { + return x.SyncResourceTyped + } + } + return nil +} + func (x *Task) GetDebug() bool { if x != nil { return x.Debug @@ -530,6 +540,14 @@ func (x *Task) SetCompactSyncs(v *Task_CompactSyncs) { x.TaskType = &Task_CompactSyncs_{v} } +func (x *Task) SetSyncResourceTyped(v *Task_SyncResourceTypedTask) { + if v == nil { + x.TaskType = nil + return + } + x.TaskType = &Task_SyncResourceTyped{v} +} + func (x *Task) SetDebug(v bool) { x.Debug = v } @@ -709,6 +727,14 @@ func (x *Task) HasCompactSyncs() bool { return ok } +func (x *Task) HasSyncResourceTyped() bool { + if x == nil { + return false + } + _, ok := x.TaskType.(*Task_SyncResourceTyped) + return ok +} + func (x *Task) ClearTaskType() { x.TaskType = nil } @@ -839,6 +865,12 @@ func (x *Task) ClearCompactSyncs() { } } +func (x *Task) ClearSyncResourceTyped() { + if _, ok := x.TaskType.(*Task_SyncResourceTyped); ok { + x.TaskType = nil + } +} + const Task_TaskType_not_set_case case_Task_TaskType = 0 const Task_None_case case_Task_TaskType = 100 const Task_Hello_case case_Task_TaskType = 101 @@ -861,6 +893,7 @@ const Task_ActionInvoke_case case_Task_TaskType = 117 const Task_ActionStatus_case case_Task_TaskType = 118 const Task_CreateSyncDiff_case case_Task_TaskType = 119 const Task_CompactSyncs_case case_Task_TaskType = 120 +const Task_SyncResourceTyped_case case_Task_TaskType = 121 func (x *Task) WhichTaskType() case_Task_TaskType { if x == nil { @@ -909,6 +942,8 @@ func (x *Task) WhichTaskType() case_Task_TaskType { return Task_CreateSyncDiff_case case *Task_CompactSyncs_: return Task_CompactSyncs_case + case *Task_SyncResourceTyped: + return Task_SyncResourceTyped_case default: return Task_TaskType_not_set_case } @@ -941,6 +976,7 @@ type Task_builder struct { ActionStatus *Task_ActionStatusTask CreateSyncDiff *Task_CreateSyncDiffTask CompactSyncs *Task_CompactSyncs + SyncResourceTyped *Task_SyncResourceTypedTask // -- end of TaskType Debug bool } @@ -1014,6 +1050,9 @@ func (b0 Task_builder) Build() *Task { if b.CompactSyncs != nil { x.TaskType = &Task_CompactSyncs_{b.CompactSyncs} } + if b.SyncResourceTyped != nil { + x.TaskType = &Task_SyncResourceTyped{b.SyncResourceTyped} + } x.Debug = b.Debug return m0 } @@ -1116,6 +1155,10 @@ type Task_CompactSyncs_ struct { CompactSyncs *Task_CompactSyncs `protobuf:"bytes,120,opt,name=compact_syncs,json=compactSyncs,proto3,oneof"` } +type Task_SyncResourceTyped struct { + SyncResourceTyped *Task_SyncResourceTypedTask `protobuf:"bytes,121,opt,name=sync_resource_typed,json=syncResourceTyped,proto3,oneof"` +} + func (*Task_None) isTask_TaskType() {} func (*Task_Hello) isTask_TaskType() {} @@ -1158,6 +1201,8 @@ func (*Task_CreateSyncDiff) isTask_TaskType() {} func (*Task_CompactSyncs_) isTask_TaskType() {} +func (*Task_SyncResourceTyped) isTask_TaskType() {} + type BatonServiceHelloRequest struct { state protoimpl.MessageState `protogen:"hybrid.v1"` HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3" json:"host_id,omitempty"` @@ -2635,6 +2680,91 @@ func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { return m0 } +type Task_SyncResourceTypedTask struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` + ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3" json:"resource_type_id,omitempty"` + SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3" json:"skip_entitlements_and_grants,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Task_SyncResourceTypedTask) Reset() { + *x = Task_SyncResourceTypedTask{} + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Task_SyncResourceTypedTask) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Task_SyncResourceTypedTask) ProtoMessage() {} + +func (x *Task_SyncResourceTypedTask) ProtoReflect() protoreflect.Message { + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *Task_SyncResourceTypedTask) GetAnnotations() []*anypb.Any { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *Task_SyncResourceTypedTask) GetResourceTypeId() string { + if x != nil { + return x.ResourceTypeId + } + return "" +} + +func (x *Task_SyncResourceTypedTask) GetSkipEntitlementsAndGrants() bool { + if x != nil { + return x.SkipEntitlementsAndGrants + } + return false +} + +func (x *Task_SyncResourceTypedTask) SetAnnotations(v []*anypb.Any) { + x.Annotations = v +} + +func (x *Task_SyncResourceTypedTask) SetResourceTypeId(v string) { + x.ResourceTypeId = v +} + +func (x *Task_SyncResourceTypedTask) SetSkipEntitlementsAndGrants(v bool) { + x.SkipEntitlementsAndGrants = v +} + +type Task_SyncResourceTypedTask_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Annotations []*anypb.Any + ResourceTypeId string + SkipEntitlementsAndGrants bool +} + +func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask { + m0 := &Task_SyncResourceTypedTask{} + b, x := &b0, m0 + _, _ = b, x + x.Annotations = b.Annotations + x.ResourceTypeId = b.ResourceTypeId + x.SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants + return m0 +} + type Task_EventFeedTask struct { state protoimpl.MessageState `protogen:"hybrid.v1"` Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` @@ -2645,7 +2775,7 @@ type Task_EventFeedTask struct { func (x *Task_EventFeedTask) Reset() { *x = Task_EventFeedTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2657,7 +2787,7 @@ func (x *Task_EventFeedTask) String() string { func (*Task_EventFeedTask) ProtoMessage() {} func (x *Task_EventFeedTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2729,7 +2859,7 @@ type Task_GrantTask struct { func (x *Task_GrantTask) Reset() { *x = Task_GrantTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2741,7 +2871,7 @@ func (x *Task_GrantTask) String() string { func (*Task_GrantTask) ProtoMessage() {} func (x *Task_GrantTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2859,7 +2989,7 @@ type Task_RevokeTask struct { func (x *Task_RevokeTask) Reset() { *x = Task_RevokeTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2871,7 +3001,7 @@ func (x *Task_RevokeTask) String() string { func (*Task_RevokeTask) ProtoMessage() {} func (x *Task_RevokeTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2942,7 +3072,7 @@ type Task_CreateAccountTask struct { func (x *Task_CreateAccountTask) Reset() { *x = Task_CreateAccountTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2954,7 +3084,7 @@ func (x *Task_CreateAccountTask) String() string { func (*Task_CreateAccountTask) ProtoMessage() {} func (x *Task_CreateAccountTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3047,7 +3177,7 @@ type Task_CreateResourceTask struct { func (x *Task_CreateResourceTask) Reset() { *x = Task_CreateResourceTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3059,7 +3189,7 @@ func (x *Task_CreateResourceTask) String() string { func (*Task_CreateResourceTask) ProtoMessage() {} func (x *Task_CreateResourceTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3116,7 +3246,7 @@ type Task_DeleteResourceTask struct { func (x *Task_DeleteResourceTask) Reset() { *x = Task_DeleteResourceTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3128,7 +3258,7 @@ func (x *Task_DeleteResourceTask) String() string { func (*Task_DeleteResourceTask) ProtoMessage() {} func (x *Task_DeleteResourceTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3210,7 +3340,7 @@ type Task_RotateCredentialsTask struct { func (x *Task_RotateCredentialsTask) Reset() { *x = Task_RotateCredentialsTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3222,7 +3352,7 @@ func (x *Task_RotateCredentialsTask) String() string { func (*Task_RotateCredentialsTask) ProtoMessage() {} func (x *Task_RotateCredentialsTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3317,7 +3447,7 @@ type Task_CreateTicketTask struct { func (x *Task_CreateTicketTask) Reset() { *x = Task_CreateTicketTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3329,7 +3459,7 @@ func (x *Task_CreateTicketTask) String() string { func (*Task_CreateTicketTask) ProtoMessage() {} func (x *Task_CreateTicketTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3422,7 +3552,7 @@ type Task_BulkCreateTicketsTask struct { func (x *Task_BulkCreateTicketsTask) Reset() { *x = Task_BulkCreateTicketsTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3434,7 +3564,7 @@ func (x *Task_BulkCreateTicketsTask) String() string { func (*Task_BulkCreateTicketsTask) ProtoMessage() {} func (x *Task_BulkCreateTicketsTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3479,7 +3609,7 @@ type Task_BulkGetTicketsTask struct { func (x *Task_BulkGetTicketsTask) Reset() { *x = Task_BulkGetTicketsTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3491,7 +3621,7 @@ func (x *Task_BulkGetTicketsTask) String() string { func (*Task_BulkGetTicketsTask) ProtoMessage() {} func (x *Task_BulkGetTicketsTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3536,7 +3666,7 @@ type Task_ListTicketSchemasTask struct { func (x *Task_ListTicketSchemasTask) Reset() { *x = Task_ListTicketSchemasTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3548,7 +3678,7 @@ func (x *Task_ListTicketSchemasTask) String() string { func (*Task_ListTicketSchemasTask) ProtoMessage() {} func (x *Task_ListTicketSchemasTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3594,7 +3724,7 @@ type Task_GetTicketTask struct { func (x *Task_GetTicketTask) Reset() { *x = Task_GetTicketTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3606,7 +3736,7 @@ func (x *Task_GetTicketTask) String() string { func (*Task_GetTicketTask) ProtoMessage() {} func (x *Task_GetTicketTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3664,7 +3794,7 @@ type Task_ActionListSchemasTask struct { func (x *Task_ActionListSchemasTask) Reset() { *x = Task_ActionListSchemasTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3676,7 +3806,7 @@ func (x *Task_ActionListSchemasTask) String() string { func (*Task_ActionListSchemasTask) ProtoMessage() {} func (x *Task_ActionListSchemasTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3722,7 +3852,7 @@ type Task_ActionGetSchemaTask struct { func (x *Task_ActionGetSchemaTask) Reset() { *x = Task_ActionGetSchemaTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3734,7 +3864,7 @@ func (x *Task_ActionGetSchemaTask) String() string { func (*Task_ActionGetSchemaTask) ProtoMessage() {} func (x *Task_ActionGetSchemaTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3794,7 +3924,7 @@ type Task_ActionInvokeTask struct { func (x *Task_ActionInvokeTask) Reset() { *x = Task_ActionInvokeTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3806,7 +3936,7 @@ func (x *Task_ActionInvokeTask) String() string { func (*Task_ActionInvokeTask) ProtoMessage() {} func (x *Task_ActionInvokeTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3890,7 +4020,7 @@ type Task_ActionStatusTask struct { func (x *Task_ActionStatusTask) Reset() { *x = Task_ActionStatusTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3902,7 +4032,7 @@ func (x *Task_ActionStatusTask) String() string { func (*Task_ActionStatusTask) ProtoMessage() {} func (x *Task_ActionStatusTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3976,7 +4106,7 @@ type Task_CreateSyncDiffTask struct { func (x *Task_CreateSyncDiffTask) Reset() { *x = Task_CreateSyncDiffTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3988,7 +4118,7 @@ func (x *Task_CreateSyncDiffTask) String() string { func (*Task_CreateSyncDiffTask) ProtoMessage() {} func (x *Task_CreateSyncDiffTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4061,7 +4191,7 @@ type Task_CompactSyncs struct { func (x *Task_CompactSyncs) Reset() { *x = Task_CompactSyncs{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4073,7 +4203,7 @@ func (x *Task_CompactSyncs) String() string { func (*Task_CompactSyncs) ProtoMessage() {} func (x *Task_CompactSyncs) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4132,7 +4262,7 @@ type Task_CompactSyncs_CompactableSync struct { func (x *Task_CompactSyncs_CompactableSync) Reset() { *x = Task_CompactSyncs_CompactableSync{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4144,7 +4274,7 @@ func (x *Task_CompactSyncs_CompactableSync) String() string { func (*Task_CompactSyncs_CompactableSync) ProtoMessage() {} func (x *Task_CompactSyncs_CompactableSync) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4204,7 +4334,7 @@ type BatonServiceHelloRequest_BuildInfo struct { func (x *BatonServiceHelloRequest_BuildInfo) Reset() { *x = BatonServiceHelloRequest_BuildInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4216,7 +4346,7 @@ func (x *BatonServiceHelloRequest_BuildInfo) String() string { func (*BatonServiceHelloRequest_BuildInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_BuildInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4294,7 +4424,7 @@ type BatonServiceHelloRequest_OSInfo struct { func (x *BatonServiceHelloRequest_OSInfo) Reset() { *x = BatonServiceHelloRequest_OSInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4306,7 +4436,7 @@ func (x *BatonServiceHelloRequest_OSInfo) String() string { func (*BatonServiceHelloRequest_OSInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_OSInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4444,7 +4574,7 @@ type BatonServiceUploadAssetRequest_UploadMetadata struct { func (x *BatonServiceUploadAssetRequest_UploadMetadata) Reset() { *x = BatonServiceUploadAssetRequest_UploadMetadata{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4456,7 +4586,7 @@ func (x *BatonServiceUploadAssetRequest_UploadMetadata) String() string { func (*BatonServiceUploadAssetRequest_UploadMetadata) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadMetadata) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4528,7 +4658,7 @@ type BatonServiceUploadAssetRequest_UploadData struct { func (x *BatonServiceUploadAssetRequest_UploadData) Reset() { *x = BatonServiceUploadAssetRequest_UploadData{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4540,7 +4670,7 @@ func (x *BatonServiceUploadAssetRequest_UploadData) String() string { func (*BatonServiceUploadAssetRequest_UploadData) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadData) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4590,7 +4720,7 @@ type BatonServiceUploadAssetRequest_UploadEOF struct { func (x *BatonServiceUploadAssetRequest_UploadEOF) Reset() { *x = BatonServiceUploadAssetRequest_UploadEOF{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4602,7 +4732,7 @@ func (x *BatonServiceUploadAssetRequest_UploadEOF) String() string { func (*BatonServiceUploadAssetRequest_UploadEOF) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadEOF) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4666,7 +4796,7 @@ type BatonServiceFinishTaskRequest_Error struct { func (x *BatonServiceFinishTaskRequest_Error) Reset() { *x = BatonServiceFinishTaskRequest_Error{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4678,7 +4808,7 @@ func (x *BatonServiceFinishTaskRequest_Error) String() string { func (*BatonServiceFinishTaskRequest_Error) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Error) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4763,7 +4893,7 @@ type BatonServiceFinishTaskRequest_Success struct { func (x *BatonServiceFinishTaskRequest_Success) Reset() { *x = BatonServiceFinishTaskRequest_Success{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4775,7 +4905,7 @@ func (x *BatonServiceFinishTaskRequest_Success) String() string { func (*BatonServiceFinishTaskRequest_Success) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Success) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4840,7 +4970,7 @@ var File_c1_connectorapi_baton_v1_baton_proto protoreflect.FileDescriptor const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\n" + - "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xac(\n" + + "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xd1*\n" + "\x04Task\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12=\n" + "\x06status\x18\x02 \x01(\x0e2%.c1.connectorapi.baton.v1.Task.StatusR\x06status\x12=\n" + @@ -4866,7 +4996,8 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\raction_invoke\x18u \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionInvokeTaskH\x00R\factionInvoke\x12V\n" + "\raction_status\x18v \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionStatusTaskH\x00R\factionStatus\x12]\n" + "\x10create_sync_diff\x18w \x01(\v21.c1.connectorapi.baton.v1.Task.CreateSyncDiffTaskH\x00R\x0ecreateSyncDiff\x12R\n" + - "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12\x14\n" + + "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12f\n" + + "\x13sync_resource_typed\x18y \x01(\v24.c1.connectorapi.baton.v1.Task.SyncResourceTypedTaskH\x00R\x11syncResourceTyped\x12\x14\n" + "\x05debug\x18\x03 \x01(\bR\x05debug\x1aB\n" + "\bNoneTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1aC\n" + @@ -4876,7 +5007,11 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12,\n" + "\x12skip_expand_grants\x18\x02 \x01(\bR\x10skipExpandGrants\x12?\n" + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x12Q\n" + - "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a~\n" + + "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a\xba\x01\n" + + "\x15SyncResourceTypedTask\x126\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12(\n" + + "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x12?\n" + + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x1a~\n" + "\rEventFeedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x125\n" + "\bstart_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x1a\xf3\x01\n" + @@ -5050,7 +5185,7 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\x0eStartDebugging\x12/.c1.connectorapi.baton.v1.StartDebuggingRequest\x1a0.c1.connectorapi.baton.v1.StartDebuggingResponse\"\x00B7Z5gitlab.com/ductone/c1/pkg/pb/c1/connectorapi/baton/v1b\x06proto3" var file_c1_connectorapi_baton_v1_baton_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 42) +var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (Task_Status)(0), // 0: c1.connectorapi.baton.v1.Task.Status (*Task)(nil), // 1: c1.connectorapi.baton.v1.Task @@ -5069,150 +5204,153 @@ var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (*Task_NoneTask)(nil), // 14: c1.connectorapi.baton.v1.Task.NoneTask (*Task_HelloTask)(nil), // 15: c1.connectorapi.baton.v1.Task.HelloTask (*Task_SyncFullTask)(nil), // 16: c1.connectorapi.baton.v1.Task.SyncFullTask - (*Task_EventFeedTask)(nil), // 17: c1.connectorapi.baton.v1.Task.EventFeedTask - (*Task_GrantTask)(nil), // 18: c1.connectorapi.baton.v1.Task.GrantTask - (*Task_RevokeTask)(nil), // 19: c1.connectorapi.baton.v1.Task.RevokeTask - (*Task_CreateAccountTask)(nil), // 20: c1.connectorapi.baton.v1.Task.CreateAccountTask - (*Task_CreateResourceTask)(nil), // 21: c1.connectorapi.baton.v1.Task.CreateResourceTask - (*Task_DeleteResourceTask)(nil), // 22: c1.connectorapi.baton.v1.Task.DeleteResourceTask - (*Task_RotateCredentialsTask)(nil), // 23: c1.connectorapi.baton.v1.Task.RotateCredentialsTask - (*Task_CreateTicketTask)(nil), // 24: c1.connectorapi.baton.v1.Task.CreateTicketTask - (*Task_BulkCreateTicketsTask)(nil), // 25: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask - (*Task_BulkGetTicketsTask)(nil), // 26: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask - (*Task_ListTicketSchemasTask)(nil), // 27: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask - (*Task_GetTicketTask)(nil), // 28: c1.connectorapi.baton.v1.Task.GetTicketTask - (*Task_ActionListSchemasTask)(nil), // 29: c1.connectorapi.baton.v1.Task.ActionListSchemasTask - (*Task_ActionGetSchemaTask)(nil), // 30: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask - (*Task_ActionInvokeTask)(nil), // 31: c1.connectorapi.baton.v1.Task.ActionInvokeTask - (*Task_ActionStatusTask)(nil), // 32: c1.connectorapi.baton.v1.Task.ActionStatusTask - (*Task_CreateSyncDiffTask)(nil), // 33: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask - (*Task_CompactSyncs)(nil), // 34: c1.connectorapi.baton.v1.Task.CompactSyncs - (*Task_CompactSyncs_CompactableSync)(nil), // 35: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - (*BatonServiceHelloRequest_BuildInfo)(nil), // 36: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - (*BatonServiceHelloRequest_OSInfo)(nil), // 37: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - (*BatonServiceUploadAssetRequest_UploadData)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - (*BatonServiceFinishTaskRequest_Error)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - (*BatonServiceFinishTaskRequest_Success)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - (*v2.ConnectorMetadata)(nil), // 43: c1.connector.v2.ConnectorMetadata - (*anypb.Any)(nil), // 44: google.protobuf.Any - (*durationpb.Duration)(nil), // 45: google.protobuf.Duration - (*status.Status)(nil), // 46: google.rpc.Status - (*v2.Resource)(nil), // 47: c1.connector.v2.Resource - (*timestamppb.Timestamp)(nil), // 48: google.protobuf.Timestamp - (*v2.Entitlement)(nil), // 49: c1.connector.v2.Entitlement - (*v2.Grant)(nil), // 50: c1.connector.v2.Grant - (*v2.AccountInfo)(nil), // 51: c1.connector.v2.AccountInfo - (*v2.CredentialOptions)(nil), // 52: c1.connector.v2.CredentialOptions - (*v2.EncryptionConfig)(nil), // 53: c1.connector.v2.EncryptionConfig - (*v2.ResourceId)(nil), // 54: c1.connector.v2.ResourceId - (*v2.TicketRequest)(nil), // 55: c1.connector.v2.TicketRequest - (*v2.TicketSchema)(nil), // 56: c1.connector.v2.TicketSchema - (*structpb.Struct)(nil), // 57: google.protobuf.Struct + (*Task_SyncResourceTypedTask)(nil), // 17: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask + (*Task_EventFeedTask)(nil), // 18: c1.connectorapi.baton.v1.Task.EventFeedTask + (*Task_GrantTask)(nil), // 19: c1.connectorapi.baton.v1.Task.GrantTask + (*Task_RevokeTask)(nil), // 20: c1.connectorapi.baton.v1.Task.RevokeTask + (*Task_CreateAccountTask)(nil), // 21: c1.connectorapi.baton.v1.Task.CreateAccountTask + (*Task_CreateResourceTask)(nil), // 22: c1.connectorapi.baton.v1.Task.CreateResourceTask + (*Task_DeleteResourceTask)(nil), // 23: c1.connectorapi.baton.v1.Task.DeleteResourceTask + (*Task_RotateCredentialsTask)(nil), // 24: c1.connectorapi.baton.v1.Task.RotateCredentialsTask + (*Task_CreateTicketTask)(nil), // 25: c1.connectorapi.baton.v1.Task.CreateTicketTask + (*Task_BulkCreateTicketsTask)(nil), // 26: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask + (*Task_BulkGetTicketsTask)(nil), // 27: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask + (*Task_ListTicketSchemasTask)(nil), // 28: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask + (*Task_GetTicketTask)(nil), // 29: c1.connectorapi.baton.v1.Task.GetTicketTask + (*Task_ActionListSchemasTask)(nil), // 30: c1.connectorapi.baton.v1.Task.ActionListSchemasTask + (*Task_ActionGetSchemaTask)(nil), // 31: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask + (*Task_ActionInvokeTask)(nil), // 32: c1.connectorapi.baton.v1.Task.ActionInvokeTask + (*Task_ActionStatusTask)(nil), // 33: c1.connectorapi.baton.v1.Task.ActionStatusTask + (*Task_CreateSyncDiffTask)(nil), // 34: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask + (*Task_CompactSyncs)(nil), // 35: c1.connectorapi.baton.v1.Task.CompactSyncs + (*Task_CompactSyncs_CompactableSync)(nil), // 36: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + (*BatonServiceHelloRequest_BuildInfo)(nil), // 37: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + (*BatonServiceHelloRequest_OSInfo)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + (*BatonServiceUploadAssetRequest_UploadData)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + (*BatonServiceFinishTaskRequest_Error)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + (*BatonServiceFinishTaskRequest_Success)(nil), // 43: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + (*v2.ConnectorMetadata)(nil), // 44: c1.connector.v2.ConnectorMetadata + (*anypb.Any)(nil), // 45: google.protobuf.Any + (*durationpb.Duration)(nil), // 46: google.protobuf.Duration + (*status.Status)(nil), // 47: google.rpc.Status + (*v2.Resource)(nil), // 48: c1.connector.v2.Resource + (*timestamppb.Timestamp)(nil), // 49: google.protobuf.Timestamp + (*v2.Entitlement)(nil), // 50: c1.connector.v2.Entitlement + (*v2.Grant)(nil), // 51: c1.connector.v2.Grant + (*v2.AccountInfo)(nil), // 52: c1.connector.v2.AccountInfo + (*v2.CredentialOptions)(nil), // 53: c1.connector.v2.CredentialOptions + (*v2.EncryptionConfig)(nil), // 54: c1.connector.v2.EncryptionConfig + (*v2.ResourceId)(nil), // 55: c1.connector.v2.ResourceId + (*v2.TicketRequest)(nil), // 56: c1.connector.v2.TicketRequest + (*v2.TicketSchema)(nil), // 57: c1.connector.v2.TicketSchema + (*structpb.Struct)(nil), // 58: google.protobuf.Struct } var file_c1_connectorapi_baton_v1_baton_proto_depIdxs = []int32{ 0, // 0: c1.connectorapi.baton.v1.Task.status:type_name -> c1.connectorapi.baton.v1.Task.Status 14, // 1: c1.connectorapi.baton.v1.Task.none:type_name -> c1.connectorapi.baton.v1.Task.NoneTask 15, // 2: c1.connectorapi.baton.v1.Task.hello:type_name -> c1.connectorapi.baton.v1.Task.HelloTask 16, // 3: c1.connectorapi.baton.v1.Task.sync_full:type_name -> c1.connectorapi.baton.v1.Task.SyncFullTask - 18, // 4: c1.connectorapi.baton.v1.Task.grant:type_name -> c1.connectorapi.baton.v1.Task.GrantTask - 19, // 5: c1.connectorapi.baton.v1.Task.revoke:type_name -> c1.connectorapi.baton.v1.Task.RevokeTask - 20, // 6: c1.connectorapi.baton.v1.Task.create_account:type_name -> c1.connectorapi.baton.v1.Task.CreateAccountTask - 21, // 7: c1.connectorapi.baton.v1.Task.create_resource:type_name -> c1.connectorapi.baton.v1.Task.CreateResourceTask - 22, // 8: c1.connectorapi.baton.v1.Task.delete_resource:type_name -> c1.connectorapi.baton.v1.Task.DeleteResourceTask - 23, // 9: c1.connectorapi.baton.v1.Task.rotate_credentials:type_name -> c1.connectorapi.baton.v1.Task.RotateCredentialsTask - 17, // 10: c1.connectorapi.baton.v1.Task.event_feed:type_name -> c1.connectorapi.baton.v1.Task.EventFeedTask - 24, // 11: c1.connectorapi.baton.v1.Task.create_ticket_task:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask - 27, // 12: c1.connectorapi.baton.v1.Task.list_ticket_schemas:type_name -> c1.connectorapi.baton.v1.Task.ListTicketSchemasTask - 28, // 13: c1.connectorapi.baton.v1.Task.get_ticket:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask - 25, // 14: c1.connectorapi.baton.v1.Task.bulk_create_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask - 26, // 15: c1.connectorapi.baton.v1.Task.bulk_get_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkGetTicketsTask - 29, // 16: c1.connectorapi.baton.v1.Task.action_list_schemas:type_name -> c1.connectorapi.baton.v1.Task.ActionListSchemasTask - 30, // 17: c1.connectorapi.baton.v1.Task.action_get_schema:type_name -> c1.connectorapi.baton.v1.Task.ActionGetSchemaTask - 31, // 18: c1.connectorapi.baton.v1.Task.action_invoke:type_name -> c1.connectorapi.baton.v1.Task.ActionInvokeTask - 32, // 19: c1.connectorapi.baton.v1.Task.action_status:type_name -> c1.connectorapi.baton.v1.Task.ActionStatusTask - 33, // 20: c1.connectorapi.baton.v1.Task.create_sync_diff:type_name -> c1.connectorapi.baton.v1.Task.CreateSyncDiffTask - 34, // 21: c1.connectorapi.baton.v1.Task.compact_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs - 36, // 22: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - 37, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - 43, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata - 44, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any - 44, // 26: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any - 1, // 27: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.task:type_name -> c1.connectorapi.baton.v1.Task - 45, // 28: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration - 45, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration - 44, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any - 44, // 31: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any - 45, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration - 44, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any - 38, // 34: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - 39, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - 40, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - 44, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any - 46, // 38: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status - 41, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - 42, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - 44, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any - 44, // 42: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any - 44, // 43: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any - 44, // 44: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any - 47, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource - 44, // 46: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any - 48, // 47: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp - 49, // 48: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement - 47, // 49: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource - 44, // 50: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any - 45, // 51: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration - 50, // 52: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant - 44, // 53: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any - 51, // 54: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo - 52, // 55: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 53, // 56: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 47, // 57: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource - 54, // 58: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId - 54, // 59: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId - 54, // 60: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId - 52, // 61: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 53, // 62: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 55, // 63: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest - 56, // 64: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema - 44, // 65: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any - 24, // 66: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask - 28, // 67: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask - 44, // 68: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any - 44, // 69: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any - 44, // 70: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any - 44, // 71: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any - 57, // 72: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct - 44, // 73: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any - 44, // 74: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any - 44, // 75: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any - 35, // 76: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - 44, // 77: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any - 44, // 78: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any - 44, // 79: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any - 44, // 80: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any - 44, // 81: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any - 44, // 82: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any - 44, // 83: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any - 2, // 84: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest - 4, // 85: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest - 6, // 86: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest - 10, // 87: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest - 8, // 88: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest - 12, // 89: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest - 3, // 90: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse - 5, // 91: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse - 7, // 92: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse - 11, // 93: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse - 9, // 94: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse - 13, // 95: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse - 90, // [90:96] is the sub-list for method output_type - 84, // [84:90] is the sub-list for method input_type - 84, // [84:84] is the sub-list for extension type_name - 84, // [84:84] is the sub-list for extension extendee - 0, // [0:84] is the sub-list for field type_name + 19, // 4: c1.connectorapi.baton.v1.Task.grant:type_name -> c1.connectorapi.baton.v1.Task.GrantTask + 20, // 5: c1.connectorapi.baton.v1.Task.revoke:type_name -> c1.connectorapi.baton.v1.Task.RevokeTask + 21, // 6: c1.connectorapi.baton.v1.Task.create_account:type_name -> c1.connectorapi.baton.v1.Task.CreateAccountTask + 22, // 7: c1.connectorapi.baton.v1.Task.create_resource:type_name -> c1.connectorapi.baton.v1.Task.CreateResourceTask + 23, // 8: c1.connectorapi.baton.v1.Task.delete_resource:type_name -> c1.connectorapi.baton.v1.Task.DeleteResourceTask + 24, // 9: c1.connectorapi.baton.v1.Task.rotate_credentials:type_name -> c1.connectorapi.baton.v1.Task.RotateCredentialsTask + 18, // 10: c1.connectorapi.baton.v1.Task.event_feed:type_name -> c1.connectorapi.baton.v1.Task.EventFeedTask + 25, // 11: c1.connectorapi.baton.v1.Task.create_ticket_task:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask + 28, // 12: c1.connectorapi.baton.v1.Task.list_ticket_schemas:type_name -> c1.connectorapi.baton.v1.Task.ListTicketSchemasTask + 29, // 13: c1.connectorapi.baton.v1.Task.get_ticket:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask + 26, // 14: c1.connectorapi.baton.v1.Task.bulk_create_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask + 27, // 15: c1.connectorapi.baton.v1.Task.bulk_get_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkGetTicketsTask + 30, // 16: c1.connectorapi.baton.v1.Task.action_list_schemas:type_name -> c1.connectorapi.baton.v1.Task.ActionListSchemasTask + 31, // 17: c1.connectorapi.baton.v1.Task.action_get_schema:type_name -> c1.connectorapi.baton.v1.Task.ActionGetSchemaTask + 32, // 18: c1.connectorapi.baton.v1.Task.action_invoke:type_name -> c1.connectorapi.baton.v1.Task.ActionInvokeTask + 33, // 19: c1.connectorapi.baton.v1.Task.action_status:type_name -> c1.connectorapi.baton.v1.Task.ActionStatusTask + 34, // 20: c1.connectorapi.baton.v1.Task.create_sync_diff:type_name -> c1.connectorapi.baton.v1.Task.CreateSyncDiffTask + 35, // 21: c1.connectorapi.baton.v1.Task.compact_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs + 17, // 22: c1.connectorapi.baton.v1.Task.sync_resource_typed:type_name -> c1.connectorapi.baton.v1.Task.SyncResourceTypedTask + 37, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + 38, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + 44, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata + 45, // 26: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any + 45, // 27: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any + 1, // 28: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.task:type_name -> c1.connectorapi.baton.v1.Task + 46, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration + 46, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration + 45, // 31: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any + 45, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any + 46, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration + 45, // 34: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any + 39, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + 40, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + 41, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + 45, // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any + 47, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status + 42, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + 43, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + 45, // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any + 45, // 43: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any + 45, // 44: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any + 45, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any + 48, // 46: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource + 45, // 47: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask.annotations:type_name -> google.protobuf.Any + 45, // 48: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any + 49, // 49: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp + 50, // 50: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement + 48, // 51: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource + 45, // 52: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any + 46, // 53: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration + 51, // 54: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant + 45, // 55: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any + 52, // 56: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo + 53, // 57: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 54, // 58: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 48, // 59: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource + 55, // 60: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId + 55, // 61: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId + 55, // 62: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId + 53, // 63: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 54, // 64: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 56, // 65: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest + 57, // 66: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema + 45, // 67: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any + 25, // 68: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask + 29, // 69: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask + 45, // 70: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any + 45, // 71: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any + 45, // 72: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any + 45, // 73: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any + 58, // 74: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct + 45, // 75: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any + 45, // 76: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any + 45, // 77: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any + 36, // 78: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + 45, // 79: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any + 45, // 80: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any + 45, // 81: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any + 45, // 82: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any + 45, // 83: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any + 45, // 84: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any + 45, // 85: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any + 2, // 86: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest + 4, // 87: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest + 6, // 88: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest + 10, // 89: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest + 8, // 90: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest + 12, // 91: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest + 3, // 92: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse + 5, // 93: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse + 7, // 94: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse + 11, // 95: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse + 9, // 96: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse + 13, // 97: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse + 92, // [92:98] is the sub-list for method output_type + 86, // [86:92] is the sub-list for method input_type + 86, // [86:86] is the sub-list for extension type_name + 86, // [86:86] is the sub-list for extension extendee + 0, // [0:86] is the sub-list for field type_name } func init() { file_c1_connectorapi_baton_v1_baton_proto_init() } @@ -5242,6 +5380,7 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { (*Task_ActionStatus)(nil), (*Task_CreateSyncDiff)(nil), (*Task_CompactSyncs_)(nil), + (*Task_SyncResourceTyped)(nil), } file_c1_connectorapi_baton_v1_baton_proto_msgTypes[7].OneofWrappers = []any{ (*BatonServiceUploadAssetRequest_Metadata)(nil), @@ -5258,7 +5397,7 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_c1_connectorapi_baton_v1_baton_proto_rawDesc), len(file_c1_connectorapi_baton_v1_baton_proto_rawDesc)), NumEnums: 1, - NumMessages: 42, + NumMessages: 43, NumExtensions: 0, NumServices: 1, }, diff --git a/pb/c1/connectorapi/baton/v1/baton.pb.validate.go b/pb/c1/connectorapi/baton/v1/baton.pb.validate.go index 3e9a11770..fa81d770f 100644 --- a/pb/c1/connectorapi/baton/v1/baton.pb.validate.go +++ b/pb/c1/connectorapi/baton/v1/baton.pb.validate.go @@ -924,6 +924,47 @@ func (m *Task) validate(all bool) error { } } + case *Task_SyncResourceTyped: + if v == nil { + err := TaskValidationError{ + field: "TaskType", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetSyncResourceTyped()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TaskValidationError{ + field: "SyncResourceTyped", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TaskValidationError{ + field: "SyncResourceTyped", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSyncResourceTyped()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TaskValidationError{ + field: "SyncResourceTyped", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: _ = v // ensures v is used } @@ -3532,6 +3573,146 @@ var _ interface { ErrorName() string } = Task_SyncFullTaskValidationError{} +// Validate checks the field values on Task_SyncResourceTypedTask with the +// rules defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *Task_SyncResourceTypedTask) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Task_SyncResourceTypedTask with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// Task_SyncResourceTypedTaskMultiError, or nil if none found. +func (m *Task_SyncResourceTypedTask) ValidateAll() error { + return m.validate(true) +} + +func (m *Task_SyncResourceTypedTask) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetAnnotations() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, Task_SyncResourceTypedTaskValidationError{ + field: fmt.Sprintf("Annotations[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, Task_SyncResourceTypedTaskValidationError{ + field: fmt.Sprintf("Annotations[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Task_SyncResourceTypedTaskValidationError{ + field: fmt.Sprintf("Annotations[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for ResourceTypeId + + // no validation rules for SkipEntitlementsAndGrants + + if len(errors) > 0 { + return Task_SyncResourceTypedTaskMultiError(errors) + } + + return nil +} + +// Task_SyncResourceTypedTaskMultiError is an error wrapping multiple +// validation errors returned by Task_SyncResourceTypedTask.ValidateAll() if +// the designated constraints aren't met. +type Task_SyncResourceTypedTaskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m Task_SyncResourceTypedTaskMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m Task_SyncResourceTypedTaskMultiError) AllErrors() []error { return m } + +// Task_SyncResourceTypedTaskValidationError is the validation error returned +// by Task_SyncResourceTypedTask.Validate if the designated constraints aren't met. +type Task_SyncResourceTypedTaskValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Task_SyncResourceTypedTaskValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Task_SyncResourceTypedTaskValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Task_SyncResourceTypedTaskValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Task_SyncResourceTypedTaskValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Task_SyncResourceTypedTaskValidationError) ErrorName() string { + return "Task_SyncResourceTypedTaskValidationError" +} + +// Error satisfies the builtin error interface +func (e Task_SyncResourceTypedTaskValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTask_SyncResourceTypedTask.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Task_SyncResourceTypedTaskValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Task_SyncResourceTypedTaskValidationError{} + // Validate checks the field values on Task_EventFeedTask with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. diff --git a/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go b/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go index 3ca4c3e3d..6b92c9d52 100644 --- a/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go +++ b/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go @@ -317,6 +317,15 @@ func (x *Task) GetCompactSyncs() *Task_CompactSyncs { return nil } +func (x *Task) GetSyncResourceTyped() *Task_SyncResourceTypedTask { + if x != nil { + if x, ok := x.xxx_hidden_TaskType.(*task_SyncResourceTyped); ok { + return x.SyncResourceTyped + } + } + return nil +} + func (x *Task) GetDebug() bool { if x != nil { return x.xxx_hidden_Debug @@ -500,6 +509,14 @@ func (x *Task) SetCompactSyncs(v *Task_CompactSyncs) { x.xxx_hidden_TaskType = &task_CompactSyncs_{v} } +func (x *Task) SetSyncResourceTyped(v *Task_SyncResourceTypedTask) { + if v == nil { + x.xxx_hidden_TaskType = nil + return + } + x.xxx_hidden_TaskType = &task_SyncResourceTyped{v} +} + func (x *Task) SetDebug(v bool) { x.xxx_hidden_Debug = v } @@ -679,6 +696,14 @@ func (x *Task) HasCompactSyncs() bool { return ok } +func (x *Task) HasSyncResourceTyped() bool { + if x == nil { + return false + } + _, ok := x.xxx_hidden_TaskType.(*task_SyncResourceTyped) + return ok +} + func (x *Task) ClearTaskType() { x.xxx_hidden_TaskType = nil } @@ -809,6 +834,12 @@ func (x *Task) ClearCompactSyncs() { } } +func (x *Task) ClearSyncResourceTyped() { + if _, ok := x.xxx_hidden_TaskType.(*task_SyncResourceTyped); ok { + x.xxx_hidden_TaskType = nil + } +} + const Task_TaskType_not_set_case case_Task_TaskType = 0 const Task_None_case case_Task_TaskType = 100 const Task_Hello_case case_Task_TaskType = 101 @@ -831,6 +862,7 @@ const Task_ActionInvoke_case case_Task_TaskType = 117 const Task_ActionStatus_case case_Task_TaskType = 118 const Task_CreateSyncDiff_case case_Task_TaskType = 119 const Task_CompactSyncs_case case_Task_TaskType = 120 +const Task_SyncResourceTyped_case case_Task_TaskType = 121 func (x *Task) WhichTaskType() case_Task_TaskType { if x == nil { @@ -879,6 +911,8 @@ func (x *Task) WhichTaskType() case_Task_TaskType { return Task_CreateSyncDiff_case case *task_CompactSyncs_: return Task_CompactSyncs_case + case *task_SyncResourceTyped: + return Task_SyncResourceTyped_case default: return Task_TaskType_not_set_case } @@ -911,6 +945,7 @@ type Task_builder struct { ActionStatus *Task_ActionStatusTask CreateSyncDiff *Task_CreateSyncDiffTask CompactSyncs *Task_CompactSyncs + SyncResourceTyped *Task_SyncResourceTypedTask // -- end of xxx_hidden_TaskType Debug bool } @@ -984,6 +1019,9 @@ func (b0 Task_builder) Build() *Task { if b.CompactSyncs != nil { x.xxx_hidden_TaskType = &task_CompactSyncs_{b.CompactSyncs} } + if b.SyncResourceTyped != nil { + x.xxx_hidden_TaskType = &task_SyncResourceTyped{b.SyncResourceTyped} + } x.xxx_hidden_Debug = b.Debug return m0 } @@ -1086,6 +1124,10 @@ type task_CompactSyncs_ struct { CompactSyncs *Task_CompactSyncs `protobuf:"bytes,120,opt,name=compact_syncs,json=compactSyncs,proto3,oneof"` } +type task_SyncResourceTyped struct { + SyncResourceTyped *Task_SyncResourceTypedTask `protobuf:"bytes,121,opt,name=sync_resource_typed,json=syncResourceTyped,proto3,oneof"` +} + func (*task_None) isTask_TaskType() {} func (*task_Hello) isTask_TaskType() {} @@ -1128,6 +1170,8 @@ func (*task_CreateSyncDiff) isTask_TaskType() {} func (*task_CompactSyncs_) isTask_TaskType() {} +func (*task_SyncResourceTyped) isTask_TaskType() {} + type BatonServiceHelloRequest struct { state protoimpl.MessageState `protogen:"opaque.v1"` xxx_hidden_HostId string `protobuf:"bytes,1,opt,name=host_id,json=hostId,proto3"` @@ -2604,6 +2648,93 @@ func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { return m0 } +type Task_SyncResourceTypedTask struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` + xxx_hidden_ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3"` + xxx_hidden_SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Task_SyncResourceTypedTask) Reset() { + *x = Task_SyncResourceTypedTask{} + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Task_SyncResourceTypedTask) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Task_SyncResourceTypedTask) ProtoMessage() {} + +func (x *Task_SyncResourceTypedTask) ProtoReflect() protoreflect.Message { + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *Task_SyncResourceTypedTask) GetAnnotations() []*anypb.Any { + if x != nil { + if x.xxx_hidden_Annotations != nil { + return *x.xxx_hidden_Annotations + } + } + return nil +} + +func (x *Task_SyncResourceTypedTask) GetResourceTypeId() string { + if x != nil { + return x.xxx_hidden_ResourceTypeId + } + return "" +} + +func (x *Task_SyncResourceTypedTask) GetSkipEntitlementsAndGrants() bool { + if x != nil { + return x.xxx_hidden_SkipEntitlementsAndGrants + } + return false +} + +func (x *Task_SyncResourceTypedTask) SetAnnotations(v []*anypb.Any) { + x.xxx_hidden_Annotations = &v +} + +func (x *Task_SyncResourceTypedTask) SetResourceTypeId(v string) { + x.xxx_hidden_ResourceTypeId = v +} + +func (x *Task_SyncResourceTypedTask) SetSkipEntitlementsAndGrants(v bool) { + x.xxx_hidden_SkipEntitlementsAndGrants = v +} + +type Task_SyncResourceTypedTask_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Annotations []*anypb.Any + ResourceTypeId string + SkipEntitlementsAndGrants bool +} + +func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask { + m0 := &Task_SyncResourceTypedTask{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Annotations = &b.Annotations + x.xxx_hidden_ResourceTypeId = b.ResourceTypeId + x.xxx_hidden_SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants + return m0 +} + type Task_EventFeedTask struct { state protoimpl.MessageState `protogen:"opaque.v1"` xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` @@ -2614,7 +2745,7 @@ type Task_EventFeedTask struct { func (x *Task_EventFeedTask) Reset() { *x = Task_EventFeedTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2626,7 +2757,7 @@ func (x *Task_EventFeedTask) String() string { func (*Task_EventFeedTask) ProtoMessage() {} func (x *Task_EventFeedTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2700,7 +2831,7 @@ type Task_GrantTask struct { func (x *Task_GrantTask) Reset() { *x = Task_GrantTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2712,7 +2843,7 @@ func (x *Task_GrantTask) String() string { func (*Task_GrantTask) ProtoMessage() {} func (x *Task_GrantTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[17] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2832,7 +2963,7 @@ type Task_RevokeTask struct { func (x *Task_RevokeTask) Reset() { *x = Task_RevokeTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2844,7 +2975,7 @@ func (x *Task_RevokeTask) String() string { func (*Task_RevokeTask) ProtoMessage() {} func (x *Task_RevokeTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[18] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2917,7 +3048,7 @@ type Task_CreateAccountTask struct { func (x *Task_CreateAccountTask) Reset() { *x = Task_CreateAccountTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2929,7 +3060,7 @@ func (x *Task_CreateAccountTask) String() string { func (*Task_CreateAccountTask) ProtoMessage() {} func (x *Task_CreateAccountTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[19] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3024,7 +3155,7 @@ type Task_CreateResourceTask struct { func (x *Task_CreateResourceTask) Reset() { *x = Task_CreateResourceTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3036,7 +3167,7 @@ func (x *Task_CreateResourceTask) String() string { func (*Task_CreateResourceTask) ProtoMessage() {} func (x *Task_CreateResourceTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[20] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3093,7 +3224,7 @@ type Task_DeleteResourceTask struct { func (x *Task_DeleteResourceTask) Reset() { *x = Task_DeleteResourceTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3105,7 +3236,7 @@ func (x *Task_DeleteResourceTask) String() string { func (*Task_DeleteResourceTask) ProtoMessage() {} func (x *Task_DeleteResourceTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[21] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3187,7 +3318,7 @@ type Task_RotateCredentialsTask struct { func (x *Task_RotateCredentialsTask) Reset() { *x = Task_RotateCredentialsTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3199,7 +3330,7 @@ func (x *Task_RotateCredentialsTask) String() string { func (*Task_RotateCredentialsTask) ProtoMessage() {} func (x *Task_RotateCredentialsTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[22] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3296,7 +3427,7 @@ type Task_CreateTicketTask struct { func (x *Task_CreateTicketTask) Reset() { *x = Task_CreateTicketTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3308,7 +3439,7 @@ func (x *Task_CreateTicketTask) String() string { func (*Task_CreateTicketTask) ProtoMessage() {} func (x *Task_CreateTicketTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[23] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3403,7 +3534,7 @@ type Task_BulkCreateTicketsTask struct { func (x *Task_BulkCreateTicketsTask) Reset() { *x = Task_BulkCreateTicketsTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3415,7 +3546,7 @@ func (x *Task_BulkCreateTicketsTask) String() string { func (*Task_BulkCreateTicketsTask) ProtoMessage() {} func (x *Task_BulkCreateTicketsTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[24] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3462,7 +3593,7 @@ type Task_BulkGetTicketsTask struct { func (x *Task_BulkGetTicketsTask) Reset() { *x = Task_BulkGetTicketsTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3474,7 +3605,7 @@ func (x *Task_BulkGetTicketsTask) String() string { func (*Task_BulkGetTicketsTask) ProtoMessage() {} func (x *Task_BulkGetTicketsTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[25] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3521,7 +3652,7 @@ type Task_ListTicketSchemasTask struct { func (x *Task_ListTicketSchemasTask) Reset() { *x = Task_ListTicketSchemasTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3533,7 +3664,7 @@ func (x *Task_ListTicketSchemasTask) String() string { func (*Task_ListTicketSchemasTask) ProtoMessage() {} func (x *Task_ListTicketSchemasTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[26] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3581,7 +3712,7 @@ type Task_GetTicketTask struct { func (x *Task_GetTicketTask) Reset() { *x = Task_GetTicketTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3593,7 +3724,7 @@ func (x *Task_GetTicketTask) String() string { func (*Task_GetTicketTask) ProtoMessage() {} func (x *Task_GetTicketTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[27] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3653,7 +3784,7 @@ type Task_ActionListSchemasTask struct { func (x *Task_ActionListSchemasTask) Reset() { *x = Task_ActionListSchemasTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3665,7 +3796,7 @@ func (x *Task_ActionListSchemasTask) String() string { func (*Task_ActionListSchemasTask) ProtoMessage() {} func (x *Task_ActionListSchemasTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[28] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3713,7 +3844,7 @@ type Task_ActionGetSchemaTask struct { func (x *Task_ActionGetSchemaTask) Reset() { *x = Task_ActionGetSchemaTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3725,7 +3856,7 @@ func (x *Task_ActionGetSchemaTask) String() string { func (*Task_ActionGetSchemaTask) ProtoMessage() {} func (x *Task_ActionGetSchemaTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[29] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3787,7 +3918,7 @@ type Task_ActionInvokeTask struct { func (x *Task_ActionInvokeTask) Reset() { *x = Task_ActionInvokeTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3799,7 +3930,7 @@ func (x *Task_ActionInvokeTask) String() string { func (*Task_ActionInvokeTask) ProtoMessage() {} func (x *Task_ActionInvokeTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[30] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3885,7 +4016,7 @@ type Task_ActionStatusTask struct { func (x *Task_ActionStatusTask) Reset() { *x = Task_ActionStatusTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3897,7 +4028,7 @@ func (x *Task_ActionStatusTask) String() string { func (*Task_ActionStatusTask) ProtoMessage() {} func (x *Task_ActionStatusTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[31] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3972,7 +4103,7 @@ type Task_CreateSyncDiffTask struct { func (x *Task_CreateSyncDiffTask) Reset() { *x = Task_CreateSyncDiffTask{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3984,7 +4115,7 @@ func (x *Task_CreateSyncDiffTask) String() string { func (*Task_CreateSyncDiffTask) ProtoMessage() {} func (x *Task_CreateSyncDiffTask) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[32] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4059,7 +4190,7 @@ type Task_CompactSyncs struct { func (x *Task_CompactSyncs) Reset() { *x = Task_CompactSyncs{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4071,7 +4202,7 @@ func (x *Task_CompactSyncs) String() string { func (*Task_CompactSyncs) ProtoMessage() {} func (x *Task_CompactSyncs) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[33] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4134,7 +4265,7 @@ type Task_CompactSyncs_CompactableSync struct { func (x *Task_CompactSyncs_CompactableSync) Reset() { *x = Task_CompactSyncs_CompactableSync{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4146,7 +4277,7 @@ func (x *Task_CompactSyncs_CompactableSync) String() string { func (*Task_CompactSyncs_CompactableSync) ProtoMessage() {} func (x *Task_CompactSyncs_CompactableSync) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[34] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4206,7 +4337,7 @@ type BatonServiceHelloRequest_BuildInfo struct { func (x *BatonServiceHelloRequest_BuildInfo) Reset() { *x = BatonServiceHelloRequest_BuildInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4218,7 +4349,7 @@ func (x *BatonServiceHelloRequest_BuildInfo) String() string { func (*BatonServiceHelloRequest_BuildInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_BuildInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4296,7 +4427,7 @@ type BatonServiceHelloRequest_OSInfo struct { func (x *BatonServiceHelloRequest_OSInfo) Reset() { *x = BatonServiceHelloRequest_OSInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4308,7 +4439,7 @@ func (x *BatonServiceHelloRequest_OSInfo) String() string { func (*BatonServiceHelloRequest_OSInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_OSInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4446,7 +4577,7 @@ type BatonServiceUploadAssetRequest_UploadMetadata struct { func (x *BatonServiceUploadAssetRequest_UploadMetadata) Reset() { *x = BatonServiceUploadAssetRequest_UploadMetadata{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4458,7 +4589,7 @@ func (x *BatonServiceUploadAssetRequest_UploadMetadata) String() string { func (*BatonServiceUploadAssetRequest_UploadMetadata) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadMetadata) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4531,7 +4662,7 @@ type BatonServiceUploadAssetRequest_UploadData struct { func (x *BatonServiceUploadAssetRequest_UploadData) Reset() { *x = BatonServiceUploadAssetRequest_UploadData{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4543,7 +4674,7 @@ func (x *BatonServiceUploadAssetRequest_UploadData) String() string { func (*BatonServiceUploadAssetRequest_UploadData) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadData) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4593,7 +4724,7 @@ type BatonServiceUploadAssetRequest_UploadEOF struct { func (x *BatonServiceUploadAssetRequest_UploadEOF) Reset() { *x = BatonServiceUploadAssetRequest_UploadEOF{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4605,7 +4736,7 @@ func (x *BatonServiceUploadAssetRequest_UploadEOF) String() string { func (*BatonServiceUploadAssetRequest_UploadEOF) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadEOF) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4670,7 +4801,7 @@ type BatonServiceFinishTaskRequest_Error struct { func (x *BatonServiceFinishTaskRequest_Error) Reset() { *x = BatonServiceFinishTaskRequest_Error{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4682,7 +4813,7 @@ func (x *BatonServiceFinishTaskRequest_Error) String() string { func (*BatonServiceFinishTaskRequest_Error) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Error) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4768,7 +4899,7 @@ type BatonServiceFinishTaskRequest_Success struct { func (x *BatonServiceFinishTaskRequest_Success) Reset() { *x = BatonServiceFinishTaskRequest_Success{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4780,7 +4911,7 @@ func (x *BatonServiceFinishTaskRequest_Success) String() string { func (*BatonServiceFinishTaskRequest_Success) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Success) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4847,7 +4978,7 @@ var File_c1_connectorapi_baton_v1_baton_proto protoreflect.FileDescriptor const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\n" + - "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xac(\n" + + "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xd1*\n" + "\x04Task\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12=\n" + "\x06status\x18\x02 \x01(\x0e2%.c1.connectorapi.baton.v1.Task.StatusR\x06status\x12=\n" + @@ -4873,7 +5004,8 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\raction_invoke\x18u \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionInvokeTaskH\x00R\factionInvoke\x12V\n" + "\raction_status\x18v \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionStatusTaskH\x00R\factionStatus\x12]\n" + "\x10create_sync_diff\x18w \x01(\v21.c1.connectorapi.baton.v1.Task.CreateSyncDiffTaskH\x00R\x0ecreateSyncDiff\x12R\n" + - "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12\x14\n" + + "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12f\n" + + "\x13sync_resource_typed\x18y \x01(\v24.c1.connectorapi.baton.v1.Task.SyncResourceTypedTaskH\x00R\x11syncResourceTyped\x12\x14\n" + "\x05debug\x18\x03 \x01(\bR\x05debug\x1aB\n" + "\bNoneTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1aC\n" + @@ -4883,7 +5015,11 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12,\n" + "\x12skip_expand_grants\x18\x02 \x01(\bR\x10skipExpandGrants\x12?\n" + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x12Q\n" + - "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a~\n" + + "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a\xba\x01\n" + + "\x15SyncResourceTypedTask\x126\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12(\n" + + "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x12?\n" + + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x1a~\n" + "\rEventFeedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x125\n" + "\bstart_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x1a\xf3\x01\n" + @@ -5057,7 +5193,7 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\x0eStartDebugging\x12/.c1.connectorapi.baton.v1.StartDebuggingRequest\x1a0.c1.connectorapi.baton.v1.StartDebuggingResponse\"\x00B7Z5gitlab.com/ductone/c1/pkg/pb/c1/connectorapi/baton/v1b\x06proto3" var file_c1_connectorapi_baton_v1_baton_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 42) +var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (Task_Status)(0), // 0: c1.connectorapi.baton.v1.Task.Status (*Task)(nil), // 1: c1.connectorapi.baton.v1.Task @@ -5076,150 +5212,153 @@ var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (*Task_NoneTask)(nil), // 14: c1.connectorapi.baton.v1.Task.NoneTask (*Task_HelloTask)(nil), // 15: c1.connectorapi.baton.v1.Task.HelloTask (*Task_SyncFullTask)(nil), // 16: c1.connectorapi.baton.v1.Task.SyncFullTask - (*Task_EventFeedTask)(nil), // 17: c1.connectorapi.baton.v1.Task.EventFeedTask - (*Task_GrantTask)(nil), // 18: c1.connectorapi.baton.v1.Task.GrantTask - (*Task_RevokeTask)(nil), // 19: c1.connectorapi.baton.v1.Task.RevokeTask - (*Task_CreateAccountTask)(nil), // 20: c1.connectorapi.baton.v1.Task.CreateAccountTask - (*Task_CreateResourceTask)(nil), // 21: c1.connectorapi.baton.v1.Task.CreateResourceTask - (*Task_DeleteResourceTask)(nil), // 22: c1.connectorapi.baton.v1.Task.DeleteResourceTask - (*Task_RotateCredentialsTask)(nil), // 23: c1.connectorapi.baton.v1.Task.RotateCredentialsTask - (*Task_CreateTicketTask)(nil), // 24: c1.connectorapi.baton.v1.Task.CreateTicketTask - (*Task_BulkCreateTicketsTask)(nil), // 25: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask - (*Task_BulkGetTicketsTask)(nil), // 26: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask - (*Task_ListTicketSchemasTask)(nil), // 27: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask - (*Task_GetTicketTask)(nil), // 28: c1.connectorapi.baton.v1.Task.GetTicketTask - (*Task_ActionListSchemasTask)(nil), // 29: c1.connectorapi.baton.v1.Task.ActionListSchemasTask - (*Task_ActionGetSchemaTask)(nil), // 30: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask - (*Task_ActionInvokeTask)(nil), // 31: c1.connectorapi.baton.v1.Task.ActionInvokeTask - (*Task_ActionStatusTask)(nil), // 32: c1.connectorapi.baton.v1.Task.ActionStatusTask - (*Task_CreateSyncDiffTask)(nil), // 33: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask - (*Task_CompactSyncs)(nil), // 34: c1.connectorapi.baton.v1.Task.CompactSyncs - (*Task_CompactSyncs_CompactableSync)(nil), // 35: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - (*BatonServiceHelloRequest_BuildInfo)(nil), // 36: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - (*BatonServiceHelloRequest_OSInfo)(nil), // 37: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - (*BatonServiceUploadAssetRequest_UploadData)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - (*BatonServiceFinishTaskRequest_Error)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - (*BatonServiceFinishTaskRequest_Success)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - (*v2.ConnectorMetadata)(nil), // 43: c1.connector.v2.ConnectorMetadata - (*anypb.Any)(nil), // 44: google.protobuf.Any - (*durationpb.Duration)(nil), // 45: google.protobuf.Duration - (*status.Status)(nil), // 46: google.rpc.Status - (*v2.Resource)(nil), // 47: c1.connector.v2.Resource - (*timestamppb.Timestamp)(nil), // 48: google.protobuf.Timestamp - (*v2.Entitlement)(nil), // 49: c1.connector.v2.Entitlement - (*v2.Grant)(nil), // 50: c1.connector.v2.Grant - (*v2.AccountInfo)(nil), // 51: c1.connector.v2.AccountInfo - (*v2.CredentialOptions)(nil), // 52: c1.connector.v2.CredentialOptions - (*v2.EncryptionConfig)(nil), // 53: c1.connector.v2.EncryptionConfig - (*v2.ResourceId)(nil), // 54: c1.connector.v2.ResourceId - (*v2.TicketRequest)(nil), // 55: c1.connector.v2.TicketRequest - (*v2.TicketSchema)(nil), // 56: c1.connector.v2.TicketSchema - (*structpb.Struct)(nil), // 57: google.protobuf.Struct + (*Task_SyncResourceTypedTask)(nil), // 17: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask + (*Task_EventFeedTask)(nil), // 18: c1.connectorapi.baton.v1.Task.EventFeedTask + (*Task_GrantTask)(nil), // 19: c1.connectorapi.baton.v1.Task.GrantTask + (*Task_RevokeTask)(nil), // 20: c1.connectorapi.baton.v1.Task.RevokeTask + (*Task_CreateAccountTask)(nil), // 21: c1.connectorapi.baton.v1.Task.CreateAccountTask + (*Task_CreateResourceTask)(nil), // 22: c1.connectorapi.baton.v1.Task.CreateResourceTask + (*Task_DeleteResourceTask)(nil), // 23: c1.connectorapi.baton.v1.Task.DeleteResourceTask + (*Task_RotateCredentialsTask)(nil), // 24: c1.connectorapi.baton.v1.Task.RotateCredentialsTask + (*Task_CreateTicketTask)(nil), // 25: c1.connectorapi.baton.v1.Task.CreateTicketTask + (*Task_BulkCreateTicketsTask)(nil), // 26: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask + (*Task_BulkGetTicketsTask)(nil), // 27: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask + (*Task_ListTicketSchemasTask)(nil), // 28: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask + (*Task_GetTicketTask)(nil), // 29: c1.connectorapi.baton.v1.Task.GetTicketTask + (*Task_ActionListSchemasTask)(nil), // 30: c1.connectorapi.baton.v1.Task.ActionListSchemasTask + (*Task_ActionGetSchemaTask)(nil), // 31: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask + (*Task_ActionInvokeTask)(nil), // 32: c1.connectorapi.baton.v1.Task.ActionInvokeTask + (*Task_ActionStatusTask)(nil), // 33: c1.connectorapi.baton.v1.Task.ActionStatusTask + (*Task_CreateSyncDiffTask)(nil), // 34: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask + (*Task_CompactSyncs)(nil), // 35: c1.connectorapi.baton.v1.Task.CompactSyncs + (*Task_CompactSyncs_CompactableSync)(nil), // 36: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + (*BatonServiceHelloRequest_BuildInfo)(nil), // 37: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + (*BatonServiceHelloRequest_OSInfo)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + (*BatonServiceUploadAssetRequest_UploadData)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + (*BatonServiceFinishTaskRequest_Error)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + (*BatonServiceFinishTaskRequest_Success)(nil), // 43: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + (*v2.ConnectorMetadata)(nil), // 44: c1.connector.v2.ConnectorMetadata + (*anypb.Any)(nil), // 45: google.protobuf.Any + (*durationpb.Duration)(nil), // 46: google.protobuf.Duration + (*status.Status)(nil), // 47: google.rpc.Status + (*v2.Resource)(nil), // 48: c1.connector.v2.Resource + (*timestamppb.Timestamp)(nil), // 49: google.protobuf.Timestamp + (*v2.Entitlement)(nil), // 50: c1.connector.v2.Entitlement + (*v2.Grant)(nil), // 51: c1.connector.v2.Grant + (*v2.AccountInfo)(nil), // 52: c1.connector.v2.AccountInfo + (*v2.CredentialOptions)(nil), // 53: c1.connector.v2.CredentialOptions + (*v2.EncryptionConfig)(nil), // 54: c1.connector.v2.EncryptionConfig + (*v2.ResourceId)(nil), // 55: c1.connector.v2.ResourceId + (*v2.TicketRequest)(nil), // 56: c1.connector.v2.TicketRequest + (*v2.TicketSchema)(nil), // 57: c1.connector.v2.TicketSchema + (*structpb.Struct)(nil), // 58: google.protobuf.Struct } var file_c1_connectorapi_baton_v1_baton_proto_depIdxs = []int32{ 0, // 0: c1.connectorapi.baton.v1.Task.status:type_name -> c1.connectorapi.baton.v1.Task.Status 14, // 1: c1.connectorapi.baton.v1.Task.none:type_name -> c1.connectorapi.baton.v1.Task.NoneTask 15, // 2: c1.connectorapi.baton.v1.Task.hello:type_name -> c1.connectorapi.baton.v1.Task.HelloTask 16, // 3: c1.connectorapi.baton.v1.Task.sync_full:type_name -> c1.connectorapi.baton.v1.Task.SyncFullTask - 18, // 4: c1.connectorapi.baton.v1.Task.grant:type_name -> c1.connectorapi.baton.v1.Task.GrantTask - 19, // 5: c1.connectorapi.baton.v1.Task.revoke:type_name -> c1.connectorapi.baton.v1.Task.RevokeTask - 20, // 6: c1.connectorapi.baton.v1.Task.create_account:type_name -> c1.connectorapi.baton.v1.Task.CreateAccountTask - 21, // 7: c1.connectorapi.baton.v1.Task.create_resource:type_name -> c1.connectorapi.baton.v1.Task.CreateResourceTask - 22, // 8: c1.connectorapi.baton.v1.Task.delete_resource:type_name -> c1.connectorapi.baton.v1.Task.DeleteResourceTask - 23, // 9: c1.connectorapi.baton.v1.Task.rotate_credentials:type_name -> c1.connectorapi.baton.v1.Task.RotateCredentialsTask - 17, // 10: c1.connectorapi.baton.v1.Task.event_feed:type_name -> c1.connectorapi.baton.v1.Task.EventFeedTask - 24, // 11: c1.connectorapi.baton.v1.Task.create_ticket_task:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask - 27, // 12: c1.connectorapi.baton.v1.Task.list_ticket_schemas:type_name -> c1.connectorapi.baton.v1.Task.ListTicketSchemasTask - 28, // 13: c1.connectorapi.baton.v1.Task.get_ticket:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask - 25, // 14: c1.connectorapi.baton.v1.Task.bulk_create_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask - 26, // 15: c1.connectorapi.baton.v1.Task.bulk_get_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkGetTicketsTask - 29, // 16: c1.connectorapi.baton.v1.Task.action_list_schemas:type_name -> c1.connectorapi.baton.v1.Task.ActionListSchemasTask - 30, // 17: c1.connectorapi.baton.v1.Task.action_get_schema:type_name -> c1.connectorapi.baton.v1.Task.ActionGetSchemaTask - 31, // 18: c1.connectorapi.baton.v1.Task.action_invoke:type_name -> c1.connectorapi.baton.v1.Task.ActionInvokeTask - 32, // 19: c1.connectorapi.baton.v1.Task.action_status:type_name -> c1.connectorapi.baton.v1.Task.ActionStatusTask - 33, // 20: c1.connectorapi.baton.v1.Task.create_sync_diff:type_name -> c1.connectorapi.baton.v1.Task.CreateSyncDiffTask - 34, // 21: c1.connectorapi.baton.v1.Task.compact_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs - 36, // 22: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - 37, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - 43, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata - 44, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any - 44, // 26: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any - 1, // 27: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.task:type_name -> c1.connectorapi.baton.v1.Task - 45, // 28: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration - 45, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration - 44, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any - 44, // 31: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any - 45, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration - 44, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any - 38, // 34: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - 39, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - 40, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - 44, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any - 46, // 38: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status - 41, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - 42, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - 44, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any - 44, // 42: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any - 44, // 43: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any - 44, // 44: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any - 47, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource - 44, // 46: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any - 48, // 47: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp - 49, // 48: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement - 47, // 49: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource - 44, // 50: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any - 45, // 51: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration - 50, // 52: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant - 44, // 53: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any - 51, // 54: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo - 52, // 55: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 53, // 56: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 47, // 57: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource - 54, // 58: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId - 54, // 59: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId - 54, // 60: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId - 52, // 61: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 53, // 62: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 55, // 63: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest - 56, // 64: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema - 44, // 65: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any - 24, // 66: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask - 28, // 67: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask - 44, // 68: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any - 44, // 69: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any - 44, // 70: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any - 44, // 71: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any - 57, // 72: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct - 44, // 73: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any - 44, // 74: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any - 44, // 75: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any - 35, // 76: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - 44, // 77: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any - 44, // 78: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any - 44, // 79: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any - 44, // 80: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any - 44, // 81: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any - 44, // 82: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any - 44, // 83: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any - 2, // 84: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest - 4, // 85: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest - 6, // 86: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest - 10, // 87: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest - 8, // 88: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest - 12, // 89: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest - 3, // 90: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse - 5, // 91: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse - 7, // 92: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse - 11, // 93: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse - 9, // 94: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse - 13, // 95: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse - 90, // [90:96] is the sub-list for method output_type - 84, // [84:90] is the sub-list for method input_type - 84, // [84:84] is the sub-list for extension type_name - 84, // [84:84] is the sub-list for extension extendee - 0, // [0:84] is the sub-list for field type_name + 19, // 4: c1.connectorapi.baton.v1.Task.grant:type_name -> c1.connectorapi.baton.v1.Task.GrantTask + 20, // 5: c1.connectorapi.baton.v1.Task.revoke:type_name -> c1.connectorapi.baton.v1.Task.RevokeTask + 21, // 6: c1.connectorapi.baton.v1.Task.create_account:type_name -> c1.connectorapi.baton.v1.Task.CreateAccountTask + 22, // 7: c1.connectorapi.baton.v1.Task.create_resource:type_name -> c1.connectorapi.baton.v1.Task.CreateResourceTask + 23, // 8: c1.connectorapi.baton.v1.Task.delete_resource:type_name -> c1.connectorapi.baton.v1.Task.DeleteResourceTask + 24, // 9: c1.connectorapi.baton.v1.Task.rotate_credentials:type_name -> c1.connectorapi.baton.v1.Task.RotateCredentialsTask + 18, // 10: c1.connectorapi.baton.v1.Task.event_feed:type_name -> c1.connectorapi.baton.v1.Task.EventFeedTask + 25, // 11: c1.connectorapi.baton.v1.Task.create_ticket_task:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask + 28, // 12: c1.connectorapi.baton.v1.Task.list_ticket_schemas:type_name -> c1.connectorapi.baton.v1.Task.ListTicketSchemasTask + 29, // 13: c1.connectorapi.baton.v1.Task.get_ticket:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask + 26, // 14: c1.connectorapi.baton.v1.Task.bulk_create_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask + 27, // 15: c1.connectorapi.baton.v1.Task.bulk_get_tickets:type_name -> c1.connectorapi.baton.v1.Task.BulkGetTicketsTask + 30, // 16: c1.connectorapi.baton.v1.Task.action_list_schemas:type_name -> c1.connectorapi.baton.v1.Task.ActionListSchemasTask + 31, // 17: c1.connectorapi.baton.v1.Task.action_get_schema:type_name -> c1.connectorapi.baton.v1.Task.ActionGetSchemaTask + 32, // 18: c1.connectorapi.baton.v1.Task.action_invoke:type_name -> c1.connectorapi.baton.v1.Task.ActionInvokeTask + 33, // 19: c1.connectorapi.baton.v1.Task.action_status:type_name -> c1.connectorapi.baton.v1.Task.ActionStatusTask + 34, // 20: c1.connectorapi.baton.v1.Task.create_sync_diff:type_name -> c1.connectorapi.baton.v1.Task.CreateSyncDiffTask + 35, // 21: c1.connectorapi.baton.v1.Task.compact_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs + 17, // 22: c1.connectorapi.baton.v1.Task.sync_resource_typed:type_name -> c1.connectorapi.baton.v1.Task.SyncResourceTypedTask + 37, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + 38, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + 44, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata + 45, // 26: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any + 45, // 27: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any + 1, // 28: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.task:type_name -> c1.connectorapi.baton.v1.Task + 46, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration + 46, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration + 45, // 31: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any + 45, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any + 46, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration + 45, // 34: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any + 39, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + 40, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + 41, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + 45, // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any + 47, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status + 42, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + 43, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + 45, // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any + 45, // 43: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any + 45, // 44: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any + 45, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any + 48, // 46: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource + 45, // 47: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask.annotations:type_name -> google.protobuf.Any + 45, // 48: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any + 49, // 49: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp + 50, // 50: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement + 48, // 51: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource + 45, // 52: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any + 46, // 53: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration + 51, // 54: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant + 45, // 55: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any + 52, // 56: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo + 53, // 57: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 54, // 58: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 48, // 59: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource + 55, // 60: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId + 55, // 61: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId + 55, // 62: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId + 53, // 63: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 54, // 64: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 56, // 65: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest + 57, // 66: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema + 45, // 67: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any + 25, // 68: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask + 29, // 69: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask + 45, // 70: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any + 45, // 71: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any + 45, // 72: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any + 45, // 73: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any + 58, // 74: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct + 45, // 75: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any + 45, // 76: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any + 45, // 77: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any + 36, // 78: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + 45, // 79: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any + 45, // 80: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any + 45, // 81: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any + 45, // 82: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any + 45, // 83: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any + 45, // 84: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any + 45, // 85: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any + 2, // 86: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest + 4, // 87: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest + 6, // 88: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest + 10, // 89: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest + 8, // 90: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest + 12, // 91: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest + 3, // 92: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse + 5, // 93: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse + 7, // 94: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse + 11, // 95: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse + 9, // 96: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse + 13, // 97: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse + 92, // [92:98] is the sub-list for method output_type + 86, // [86:92] is the sub-list for method input_type + 86, // [86:86] is the sub-list for extension type_name + 86, // [86:86] is the sub-list for extension extendee + 0, // [0:86] is the sub-list for field type_name } func init() { file_c1_connectorapi_baton_v1_baton_proto_init() } @@ -5249,6 +5388,7 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { (*task_ActionStatus)(nil), (*task_CreateSyncDiff)(nil), (*task_CompactSyncs_)(nil), + (*task_SyncResourceTyped)(nil), } file_c1_connectorapi_baton_v1_baton_proto_msgTypes[7].OneofWrappers = []any{ (*batonServiceUploadAssetRequest_Metadata)(nil), @@ -5265,7 +5405,7 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_c1_connectorapi_baton_v1_baton_proto_rawDesc), len(file_c1_connectorapi_baton_v1_baton_proto_rawDesc)), NumEnums: 1, - NumMessages: 42, + NumMessages: 43, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/cli/commands.go b/pkg/cli/commands.go index 2e56e53c8..e74e1f013 100644 --- a/pkg/cli/commands.go +++ b/pkg/cli/commands.go @@ -321,6 +321,10 @@ func MakeMainCommand[T field.Configurable]( ), ) default: + if v.GetString("sync-resource-type") != "" { + opts = append(opts, + connectorrunner.WithResourceTypedSync(v.GetString("sync-resource-type"))) + } if len(v.GetStringSlice("sync-resources")) > 0 { opts = append(opts, connectorrunner.WithTargetedSyncResources(v.GetStringSlice("sync-resources"))) diff --git a/pkg/connectorrunner/runner.go b/pkg/connectorrunner/runner.go index d705f052b..d8505e1aa 100644 --- a/pkg/connectorrunner/runner.go +++ b/pkg/connectorrunner/runner.go @@ -350,6 +350,7 @@ type runnerConfig struct { skipGrants bool sessionStoreEnabled bool syncResourceTypeIDs []string + resourceTypedSyncID string } func WithSessionStoreEnabled() Option { @@ -568,6 +569,13 @@ func WithSyncResourceTypeIDs(resourceTypeIDs []string) Option { } } +func WithResourceTypedSync(resourceTypeID string) Option { + return func(ctx context.Context, cfg *runnerConfig) error { + cfg.resourceTypedSyncID = resourceTypeID + return nil + } +} + func WithTicketingEnabled() Option { return func(ctx context.Context, cfg *runnerConfig) error { cfg.ticketingEnabled = true @@ -806,15 +814,23 @@ func NewConnectorRunner(ctx context.Context, c types.ConnectorServer, opts ...Op } tm = local.NewLocalCompactor(ctx, cfg.syncCompactorConfig.outputPath, configs) default: - tm, err = local.NewSyncer(ctx, cfg.c1zPath, - local.WithTmpDir(cfg.tempDir), - local.WithExternalResourceC1Z(cfg.externalResourceC1Z), - local.WithExternalResourceEntitlementIdFilter(cfg.externalResourceEntitlementIdFilter), - local.WithTargetedSyncResources(resources), - local.WithSkipEntitlementsAndGrants(cfg.skipEntitlementsAndGrants), - local.WithSkipGrants(cfg.skipGrants), - local.WithSyncResourceTypeIDs(cfg.syncResourceTypeIDs), - ) + if cfg.resourceTypedSyncID != "" { + tm, err = local.NewResourceTypedSyncer(ctx, cfg.c1zPath, cfg.resourceTypedSyncID, + local.ResourceTypedWithTmpDir(cfg.tempDir), + local.ResourceTypedWithSkipEntitlementsAndGrants(cfg.skipEntitlementsAndGrants), + local.ResourceTypedWithSkipGrants(cfg.skipGrants), + ) + } else { + tm, err = local.NewSyncer(ctx, cfg.c1zPath, + local.WithTmpDir(cfg.tempDir), + local.WithExternalResourceC1Z(cfg.externalResourceC1Z), + local.WithExternalResourceEntitlementIdFilter(cfg.externalResourceEntitlementIdFilter), + local.WithTargetedSyncResources(resources), + local.WithSkipEntitlementsAndGrants(cfg.skipEntitlementsAndGrants), + local.WithSkipGrants(cfg.skipGrants), + local.WithSyncResourceTypeIDs(cfg.syncResourceTypeIDs), + ) + } if err != nil { return nil, err } diff --git a/pkg/field/defaults.go b/pkg/field/defaults.go index bdaabe960..631db4f57 100644 --- a/pkg/field/defaults.go +++ b/pkg/field/defaults.go @@ -114,6 +114,10 @@ var ( WithDescription("The resource type IDs to sync"), WithPersistent(true), WithExportTarget(ExportTargetNone)) + resourceTypedSyncField = StringField("sync-resource-type", + WithDescription("Sync all resources of a single resource type (incremental sync)"), + WithPersistent(true), + WithExportTarget(ExportTargetNone)) diffSyncsField = BoolField( "diff-syncs", WithDescription("Create a new partial SyncID from a base and applied sync."), @@ -290,6 +294,7 @@ var DefaultFields = []SchemaField{ skipFullSync, targetedSyncResourceIDs, syncResourceTypeIDs, + resourceTypedSyncField, skipEntitlementsAndGrants, skipGrants, externalResourceC1ZField, diff --git a/pkg/sync/state.go b/pkg/sync/state.go index 81eeace7e..78930e4dc 100644 --- a/pkg/sync/state.go +++ b/pkg/sync/state.go @@ -67,6 +67,10 @@ func (s ActionOp) String() string { return "targeted-resource-sync" case SyncStaticEntitlementsOp: return "list-static-entitlements" + case SyncResourceTypedOp: + return "sync-resource-typed" + case SetupResourceTypedSyncOp: + return "setup-resource-typed-sync" default: return "unknown" } @@ -114,6 +118,10 @@ func newActionOp(str string) ActionOp { return SyncStaticEntitlementsOp case ListResourcesForEntitlementsOp.String(): return ListResourcesForEntitlementsOp + case SyncResourceTypedOp.String(): + return SyncResourceTypedOp + case SetupResourceTypedSyncOp.String(): + return SetupResourceTypedSyncOp default: return UnknownOp } @@ -134,6 +142,8 @@ const ( SyncGrantExpansionOp SyncTargetedResourceOp SyncStaticEntitlementsOp + SyncResourceTypedOp + SetupResourceTypedSyncOp ) // Action stores the current operation, page token, and optional fields for which resource is being worked with. diff --git a/pkg/sync/syncer.go b/pkg/sync/syncer.go index 778e7f19d..0d7f6338e 100644 --- a/pkg/sync/syncer.go +++ b/pkg/sync/syncer.go @@ -220,6 +220,7 @@ type syncer struct { injectSyncIDAnnotation bool setSessionStore sessions.SetSessionStore syncResourceTypes []string + resourceTypedSyncID string } const minCheckpointInterval = 10 * time.Second @@ -527,6 +528,25 @@ func (s *syncer) Sync(ctx context.Context) error { continue } + // Resource-typed sync: sync all resources of a single resource type + // SetupResourceTypedSyncOp will discover parent types and queue the appropriate sync actions + if s.resourceTypedSyncID != "" { + if !s.state.ShouldSkipEntitlementsAndGrants() { + if !s.state.ShouldSkipGrants() { + s.state.PushAction(ctx, Action{Op: SyncGrantsOp, ResourceTypeID: s.resourceTypedSyncID}) + } + s.state.PushAction(ctx, Action{Op: SyncEntitlementsOp, ResourceTypeID: s.resourceTypedSyncID}) + } + // SetupResourceTypedSyncOp runs after SyncResourceTypesOp to discover parent relationships + s.state.PushAction(ctx, Action{Op: SetupResourceTypedSyncOp, ResourceTypeID: s.resourceTypedSyncID}) + s.state.PushAction(ctx, Action{Op: SyncResourceTypesOp}) + err = s.Checkpoint(ctx, true) + if err != nil { + return err + } + continue + } + // FIXME(jirwin): Disabling syncing assets for now // s.state.PushAction(ctx, Action{Op: SyncAssetsOp}) if !s.state.ShouldSkipEntitlementsAndGrants() { @@ -651,6 +671,21 @@ func (s *syncer) Sync(ctx context.Context) error { return err } continue + + case SyncResourceTypedOp: + err = s.SyncResourceTyped(ctx) + if !retryer.ShouldWaitAndRetry(ctx, err) { + return err + } + continue + + case SetupResourceTypedSyncOp: + err = s.SetupResourceTypedSync(ctx) + if !retryer.ShouldWaitAndRetry(ctx, err) { + return err + } + continue + default: return fmt.Errorf("unexpected sync step") } @@ -1093,6 +1128,244 @@ func (s *syncer) syncResources(ctx context.Context) error { return nil } +// SyncResourceTyped syncs all resources of a specific resource type. +// This is used for resource-typed incremental syncs. +func (s *syncer) SyncResourceTyped(ctx context.Context) error { + ctx, span := tracer.Start(ctx, "syncer.SyncResourceTyped") + defer span.End() + + resourceTypeID := s.state.ResourceTypeID(ctx) + if resourceTypeID == "" { + return errors.New("resource type ID is required for resource-typed sync") + } + + pageToken := s.state.PageToken(ctx) + + if pageToken == "" { + ctxzap.Extract(ctx).Info("Syncing resources for type...", zap.String("resource_type_id", resourceTypeID)) + s.handleInitialActionForStep(ctx, *s.state.Current()) + } + + req := v2.ResourcesServiceListResourcesRequest_builder{ + ResourceTypeId: resourceTypeID, + PageToken: pageToken, + ActiveSyncId: s.getActiveSyncID(), + }.Build() + if s.state.ParentResourceTypeID(ctx) != "" && s.state.ParentResourceID(ctx) != "" { + req.SetParentResourceId(v2.ResourceId_builder{ + ResourceType: s.state.ParentResourceTypeID(ctx), + Resource: s.state.ParentResourceID(ctx), + }.Build()) + } + + resp, err := s.connector.ListResources(ctx, req) + if err != nil { + return err + } + + s.handleProgress(ctx, s.state.Current(), len(resp.GetList())) + + s.counts.Resources[resourceTypeID] += len(resp.GetList()) + + if resp.GetNextPageToken() == "" { + s.counts.LogResourcesProgress(ctx, resourceTypeID) + s.state.FinishAction(ctx) + } else { + err = s.state.NextPage(ctx, resp.GetNextPageToken()) + if err != nil { + return err + } + } + + bulkPutResources := []*v2.Resource{} + for _, r := range resp.GetList() { + // Check if we've already synced this resource, skip it if we have + _, err = s.store.GetResource(ctx, reader_v2.ResourcesReaderServiceGetResourceRequest_builder{ + ResourceId: v2.ResourceId_builder{ResourceType: r.GetId().GetResourceType(), Resource: r.GetId().GetResource()}.Build(), + }.Build()) + if err == nil { + continue + } + + if !errors.Is(err, sql.ErrNoRows) { + return err + } + + err = s.validateResourceTraits(ctx, r) + if err != nil { + return err + } + + // Set the resource creation source + r.SetCreationSource(v2.Resource_CREATION_SOURCE_CONNECTOR_LIST_RESOURCES) + + bulkPutResources = append(bulkPutResources, r) + + // Only follow child annotations that match our target resource type + err = s.getSubResourcesForType(ctx, r, s.resourceTypedSyncID) + if err != nil { + return err + } + } + + if len(bulkPutResources) > 0 { + err = s.store.PutResources(ctx, bulkPutResources...) + if err != nil { + return err + } + } + + return nil +} + +// getSubResourcesForType fetches sub-resources that match the target resource type. +// This is used for resource-typed syncs to only follow child annotations of the same type. +func (s *syncer) getSubResourcesForType(ctx context.Context, parent *v2.Resource, targetResourceTypeID string) error { + ctx, span := tracer.Start(ctx, "syncer.getSubResourcesForType") + defer span.End() + + for _, a := range parent.GetAnnotations() { + if a.MessageIs((*v2.ChildResourceType)(nil)) { + crt := &v2.ChildResourceType{} + err := a.UnmarshalTo(crt) + if err != nil { + return err + } + + // Only follow child annotations that match our target type + if crt.GetResourceTypeId() != targetResourceTypeID { + continue + } + + childAction := Action{ + Op: SyncResourceTypedOp, + ResourceTypeID: crt.GetResourceTypeId(), + ParentResourceID: parent.GetId().GetResource(), + ParentResourceTypeID: parent.GetId().GetResourceType(), + } + s.state.PushAction(ctx, childAction) + } + } + + return nil +} + +// SetupResourceTypedSync discovers the resource hierarchy and queues appropriate sync actions. +// For child resource types (like users under orgs), it discovers parent types first. +func (s *syncer) SetupResourceTypedSync(ctx context.Context) error { + ctx, span := tracer.Start(ctx, "syncer.SetupResourceTypedSync") + defer span.End() + + l := ctxzap.Extract(ctx) + targetTypeID := s.state.ResourceTypeID(ctx) + if targetTypeID == "" { + return errors.New("resource type ID is required for SetupResourceTypedSync") + } + + l.Info("Setting up resource-typed sync, discovering parent types...", zap.String("target_type", targetTypeID)) + + // First, try to find parent types by sampling resources from each type + // and checking their ChildResourceType annotations + parentTypes := []string{} + + resp, err := s.store.ListResourceTypes(ctx, v2.ResourceTypesServiceListResourceTypesRequest_builder{}.Build()) + if err != nil { + return err + } + + for _, rt := range resp.GetList() { + // Skip the target type itself + if rt.GetId() == targetTypeID { + continue + } + + // Try to get a sample resource of this type to check annotations + hasTargetAsChild, err := s.resourceTypeHasChildType(ctx, rt.GetId(), targetTypeID) + if err != nil { + l.Debug("error checking if resource type has child type", + zap.String("parent_type", rt.GetId()), + zap.String("target_type", targetTypeID), + zap.Error(err)) + continue + } + + if hasTargetAsChild { + parentTypes = append(parentTypes, rt.GetId()) + l.Debug("found parent type for target", + zap.String("parent_type", rt.GetId()), + zap.String("target_type", targetTypeID)) + } + } + + s.state.FinishAction(ctx) + + if len(parentTypes) > 0 { + // We found parent types - queue syncing them first + // When they sync, getSubResourcesForType will queue syncing children + l.Info("Discovered parent types for target, syncing parents first", + zap.String("target_type", targetTypeID), + zap.Strings("parent_types", parentTypes)) + + for _, parentType := range parentTypes { + s.state.PushAction(ctx, Action{ + Op: SyncResourceTypedOp, + ResourceTypeID: parentType, + }) + } + } else { + // No parents found - target is a root-level type, sync directly + l.Info("No parent types found, syncing target type directly", + zap.String("target_type", targetTypeID)) + + s.state.PushAction(ctx, Action{ + Op: SyncResourceTypedOp, + ResourceTypeID: targetTypeID, + }) + } + + return nil +} + +// resourceTypeHasChildType checks if a resource type has the target type as a child +// by sampling a resource and checking its ChildResourceType annotations. +func (s *syncer) resourceTypeHasChildType(ctx context.Context, resourceTypeID string, targetTypeID string) (bool, error) { + ctx, span := tracer.Start(ctx, "syncer.resourceTypeHasChildType") + defer span.End() + + // Try to get a sample resource of this type from the connector + resp, err := s.connector.ListResources(ctx, v2.ResourcesServiceListResourcesRequest_builder{ + ResourceTypeId: resourceTypeID, + ActiveSyncId: s.getActiveSyncID(), + }.Build()) + if err != nil { + return false, err + } + + // Check the first resource's annotations for ChildResourceType matching our target + // All resources of the same type should have the same child type annotations + resources := resp.GetList() + if len(resources) == 0 { + return false, nil + } + + r := resources[0] + for _, a := range r.GetAnnotations() { + if a.MessageIs((*v2.ChildResourceType)(nil)) { + crt := &v2.ChildResourceType{} + err := a.UnmarshalTo(crt) + if err != nil { + return false, err + } + + if crt.GetResourceTypeId() == targetTypeID { + return true, nil + } + } + } + + return false, nil +} + func (s *syncer) validateResourceTraits(ctx context.Context, r *v2.Resource) error { ctx, span := tracer.Start(ctx, "syncer.validateResourceTraits") defer span.End() @@ -1233,6 +1506,12 @@ func (s *syncer) SyncEntitlements(ctx context.Context) error { ctx, span := tracer.Start(ctx, "syncer.SyncEntitlements") defer span.End() + // If ResourceTypeID is set but ResourceID is not, we're doing a resource-typed sync + // and should only sync entitlements for resources of that type + if s.state.ResourceTypeID(ctx) != "" && s.state.ResourceID(ctx) == "" { + return s.syncEntitlementsForResourceType(ctx, s.state.ResourceTypeID(ctx)) + } + if s.state.ResourceTypeID(ctx) == "" && s.state.ResourceID(ctx) == "" { pageToken := s.state.PageToken(ctx) @@ -1327,6 +1606,51 @@ func (s *syncer) syncEntitlementsForResource(ctx context.Context, resourceID *v2 return nil } +// syncEntitlementsForResourceType syncs entitlements for all resources of a specific type. +// This is used for resource-typed incremental syncs. +func (s *syncer) syncEntitlementsForResourceType(ctx context.Context, resourceTypeID string) error { + ctx, span := tracer.Start(ctx, "syncer.syncEntitlementsForResourceType") + defer span.End() + + pageToken := s.state.PageToken(ctx) + + if pageToken == "" { + ctxzap.Extract(ctx).Info("Syncing entitlements for resource type...", zap.String("resource_type_id", resourceTypeID)) + s.handleInitialActionForStep(ctx, *s.state.Current()) + } + + resp, err := s.store.ListResources(ctx, v2.ResourcesServiceListResourcesRequest_builder{ + ResourceTypeId: resourceTypeID, + PageToken: pageToken, + }.Build()) + if err != nil { + return err + } + + // We want to take action on the next page before we push any new actions + if resp.GetNextPageToken() != "" { + err = s.state.NextPage(ctx, resp.GetNextPageToken()) + if err != nil { + return err + } + } else { + s.state.FinishAction(ctx) + } + + for _, r := range resp.GetList() { + shouldSkipEntitlements, err := s.shouldSkipEntitlements(ctx, r) + if err != nil { + return err + } + if shouldSkipEntitlements { + continue + } + s.state.PushAction(ctx, Action{Op: SyncEntitlementsOp, ResourceID: r.GetId().GetResource(), ResourceTypeID: r.GetId().GetResourceType()}) + } + + return nil +} + func (s *syncer) SyncStaticEntitlements(ctx context.Context) error { ctx, span := tracer.Start(ctx, "syncer.SyncStaticEntitlements") defer span.End() @@ -1764,6 +2088,12 @@ func (s *syncer) SyncGrants(ctx context.Context) error { ctx, span := tracer.Start(ctx, "syncer.SyncGrants") defer span.End() + // If ResourceTypeID is set but ResourceID is not, we're doing a resource-typed sync + // and should only sync grants for resources of that type + if s.state.ResourceTypeID(ctx) != "" && s.state.ResourceID(ctx) == "" { + return s.syncGrantsForResourceType(ctx, s.state.ResourceTypeID(ctx)) + } + if s.state.ResourceTypeID(ctx) == "" && s.state.ResourceID(ctx) == "" { pageToken := s.state.PageToken(ctx) @@ -1812,6 +2142,52 @@ func (s *syncer) SyncGrants(ctx context.Context) error { return nil } +// syncGrantsForResourceType syncs grants for all resources of a specific type. +// This is used for resource-typed incremental syncs. +func (s *syncer) syncGrantsForResourceType(ctx context.Context, resourceTypeID string) error { + ctx, span := tracer.Start(ctx, "syncer.syncGrantsForResourceType") + defer span.End() + + pageToken := s.state.PageToken(ctx) + + if pageToken == "" { + ctxzap.Extract(ctx).Info("Syncing grants for resource type...", zap.String("resource_type_id", resourceTypeID)) + s.handleInitialActionForStep(ctx, *s.state.Current()) + } + + resp, err := s.store.ListResources(ctx, v2.ResourcesServiceListResourcesRequest_builder{ + ResourceTypeId: resourceTypeID, + PageToken: pageToken, + }.Build()) + if err != nil { + return err + } + + // We want to take action on the next page before we push any new actions + if resp.GetNextPageToken() != "" { + err = s.state.NextPage(ctx, resp.GetNextPageToken()) + if err != nil { + return err + } + } else { + s.state.FinishAction(ctx) + } + + for _, r := range resp.GetList() { + shouldSkip, err := s.shouldSkipGrants(ctx, r) + if err != nil { + return err + } + + if shouldSkip { + continue + } + s.state.PushAction(ctx, Action{Op: SyncGrantsOp, ResourceID: r.GetId().GetResource(), ResourceTypeID: r.GetId().GetResourceType()}) + } + + return nil +} + type latestSyncFetcher interface { LatestFinishedSync(ctx context.Context, syncType connectorstore.SyncType) (string, error) } @@ -3004,6 +3380,13 @@ func WithSkipGrants(skip bool) SyncOpt { } } +func WithResourceTypedSync(resourceTypeID string) SyncOpt { + return func(s *syncer) { + s.resourceTypedSyncID = resourceTypeID + s.syncType = connectorstore.SyncTypePartial + } +} + // NewSyncer returns a new syncer object. func NewSyncer(ctx context.Context, c types.ConnectorClient, opts ...SyncOpt) (Syncer, error) { s := &syncer{ diff --git a/pkg/types/tasks/tasks.go b/pkg/types/tasks/tasks.go index 07e38a89f..b09d13f34 100644 --- a/pkg/types/tasks/tasks.go +++ b/pkg/types/tasks/tasks.go @@ -66,6 +66,8 @@ func (tt TaskType) String() string { return "action_status" case CreateSyncDiff: return "create_sync_diff" + case SyncResourceTypedType: + return "sync_resource_typed" default: return "unknown" } @@ -104,4 +106,5 @@ const ( ActionStatusType CreateSyncDiff ListStaticEntitlementsType + SyncResourceTypedType ) diff --git a/proto/c1/connectorapi/baton/v1/baton.proto b/proto/c1/connectorapi/baton/v1/baton.proto index 976d05aeb..321b9133a 100644 --- a/proto/c1/connectorapi/baton/v1/baton.proto +++ b/proto/c1/connectorapi/baton/v1/baton.proto @@ -52,6 +52,12 @@ message Task { repeated connector.v2.Resource targeted_sync_resources = 4; } + message SyncResourceTypedTask { + repeated google.protobuf.Any annotations = 1; + string resource_type_id = 2; + bool skip_entitlements_and_grants = 3; + } + message EventFeedTask { repeated google.protobuf.Any annotations = 1; google.protobuf.Timestamp start_at = 2; @@ -175,6 +181,7 @@ message Task { ActionStatusTask action_status = 118; CreateSyncDiffTask create_sync_diff = 119; CompactSyncs compact_syncs = 120; + SyncResourceTypedTask sync_resource_typed = 121; } bool debug = 3; } From 45cd64bd3bd5d7f37e640e5a40f89a2741e5f903 Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Thu, 18 Dec 2025 16:42:58 -0800 Subject: [PATCH 3/7] Enhance resource-typed sync documentation and comments - Updated comments in `state.go` to clarify the purpose of `SyncResourceTypedOp` and `SetupResourceTypedSyncOp`. - Improved documentation for `resourceTypedSyncID` in `syncer.go` to explain its role in resource-typed incremental sync. - Added clarification in the `resourceTypeHasChildType` function regarding the retrieval of sample resources and their annotations. --- pkg/sync/state.go | 4 ++-- pkg/sync/syncer.go | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/sync/state.go b/pkg/sync/state.go index 78930e4dc..314a94693 100644 --- a/pkg/sync/state.go +++ b/pkg/sync/state.go @@ -142,8 +142,8 @@ const ( SyncGrantExpansionOp SyncTargetedResourceOp SyncStaticEntitlementsOp - SyncResourceTypedOp - SetupResourceTypedSyncOp + SyncResourceTypedOp // Syncs resources of a specific type (incremental sync) + SetupResourceTypedSyncOp // Discovers parent types and queues appropriate SyncResourceTypedOp actions ) // Action stores the current operation, page token, and optional fields for which resource is being worked with. diff --git a/pkg/sync/syncer.go b/pkg/sync/syncer.go index 0d7f6338e..008f52226 100644 --- a/pkg/sync/syncer.go +++ b/pkg/sync/syncer.go @@ -220,7 +220,9 @@ type syncer struct { injectSyncIDAnnotation bool setSessionStore sessions.SetSessionStore syncResourceTypes []string - resourceTypedSyncID string + // resourceTypedSyncID is the target resource type for resource-typed incremental sync. + // Used both as the sync configuration and as the filter for child resource discovery. + resourceTypedSyncID string } const minCheckpointInterval = 10 * time.Second @@ -1332,9 +1334,12 @@ func (s *syncer) resourceTypeHasChildType(ctx context.Context, resourceTypeID st ctx, span := tracer.Start(ctx, "syncer.resourceTypeHasChildType") defer span.End() - // Try to get a sample resource of this type from the connector + // Try to get a single sample resource of this type from the connector + // We only need one resource to check annotations since all resources of the same type + // should have the same child type annotations resp, err := s.connector.ListResources(ctx, v2.ResourcesServiceListResourcesRequest_builder{ ResourceTypeId: resourceTypeID, + PageSize: 1, ActiveSyncId: s.getActiveSyncID(), }.Build()) if err != nil { @@ -1342,7 +1347,6 @@ func (s *syncer) resourceTypeHasChildType(ctx context.Context, resourceTypeID st } // Check the first resource's annotations for ChildResourceType matching our target - // All resources of the same type should have the same child type annotations resources := resp.GetList() if len(resources) == 0 { return false, nil From a9e2b7db6dd194a975254a6b649e7ed8a11253ee Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Fri, 19 Dec 2025 11:41:43 -0800 Subject: [PATCH 4/7] Refactor resource-typed sync to partial sync functionality - Renamed `resourceTypedSyncID` to `partialSyncResourceTypeID` across multiple files to reflect the new functionality. - Updated related functions and CLI commands to use `WithPartialSyncResourceType` for configuring partial syncs. - Introduced `localPartialSyncResourceType` to handle partial sync tasks, ensuring only resources are synced without entitlements and grants. - Removed the deprecated `resourceTypedSyncer` implementation to streamline the codebase. --- internal/connector/connector.go | 6 +- pkg/cli/commands.go | 4 +- pkg/connectorrunner/runner.go | 14 +- pkg/field/defaults.go | 6 +- pkg/sync/syncer.go | 11 +- pkg/tasks/c1api/resource_typed_sync.go | 8 +- pkg/tasks/local/partial_sync_resource_type.go | 103 +++++++++++++++ pkg/tasks/local/resource_typed_syncer.go | 121 ------------------ 8 files changed, 121 insertions(+), 152 deletions(-) create mode 100644 pkg/tasks/local/partial_sync_resource_type.go delete mode 100644 pkg/tasks/local/resource_typed_syncer.go diff --git a/internal/connector/connector.go b/internal/connector/connector.go index 1885a0a3f..d2369f750 100644 --- a/internal/connector/connector.go +++ b/internal/connector/connector.go @@ -92,7 +92,7 @@ type wrapper struct { targetedSyncResources []*connectorV2.Resource sessionStoreEnabled bool syncResourceTypeIDs []string - resourceTypedSyncID string + partialSyncResourceTypeID string rateLimiter ratelimitV1.RateLimiterServiceServer rlCfg *ratelimitV1.RateLimiterConfig @@ -177,9 +177,9 @@ func WithSyncResourceTypeIDs(resourceTypeIDs []string) Option { } } -func WithResourceTypedSync(resourceTypeID string) Option { +func WithPartialSyncResourceType(resourceTypeID string) Option { return func(ctx context.Context, w *wrapper) error { - w.resourceTypedSyncID = resourceTypeID + w.partialSyncResourceTypeID = resourceTypeID return nil } } diff --git a/pkg/cli/commands.go b/pkg/cli/commands.go index e74e1f013..fbc735a40 100644 --- a/pkg/cli/commands.go +++ b/pkg/cli/commands.go @@ -321,9 +321,9 @@ func MakeMainCommand[T field.Configurable]( ), ) default: - if v.GetString("sync-resource-type") != "" { + if v.GetString("partial-sync-resource-type") != "" { opts = append(opts, - connectorrunner.WithResourceTypedSync(v.GetString("sync-resource-type"))) + connectorrunner.WithPartialSyncResourceType(v.GetString("partial-sync-resource-type"))) } if len(v.GetStringSlice("sync-resources")) > 0 { opts = append(opts, diff --git a/pkg/connectorrunner/runner.go b/pkg/connectorrunner/runner.go index d8505e1aa..5f1f4c980 100644 --- a/pkg/connectorrunner/runner.go +++ b/pkg/connectorrunner/runner.go @@ -350,7 +350,7 @@ type runnerConfig struct { skipGrants bool sessionStoreEnabled bool syncResourceTypeIDs []string - resourceTypedSyncID string + partialSyncResourceTypeID string } func WithSessionStoreEnabled() Option { @@ -569,9 +569,9 @@ func WithSyncResourceTypeIDs(resourceTypeIDs []string) Option { } } -func WithResourceTypedSync(resourceTypeID string) Option { +func WithPartialSyncResourceType(resourceTypeID string) Option { return func(ctx context.Context, cfg *runnerConfig) error { - cfg.resourceTypedSyncID = resourceTypeID + cfg.partialSyncResourceTypeID = resourceTypeID return nil } } @@ -814,11 +814,9 @@ func NewConnectorRunner(ctx context.Context, c types.ConnectorServer, opts ...Op } tm = local.NewLocalCompactor(ctx, cfg.syncCompactorConfig.outputPath, configs) default: - if cfg.resourceTypedSyncID != "" { - tm, err = local.NewResourceTypedSyncer(ctx, cfg.c1zPath, cfg.resourceTypedSyncID, - local.ResourceTypedWithTmpDir(cfg.tempDir), - local.ResourceTypedWithSkipEntitlementsAndGrants(cfg.skipEntitlementsAndGrants), - local.ResourceTypedWithSkipGrants(cfg.skipGrants), + if cfg.partialSyncResourceTypeID != "" { + tm, err = local.NewPartialSyncResourceType(ctx, cfg.c1zPath, cfg.partialSyncResourceTypeID, + local.PartialSyncWithTmpDir(cfg.tempDir), ) } else { tm, err = local.NewSyncer(ctx, cfg.c1zPath, diff --git a/pkg/field/defaults.go b/pkg/field/defaults.go index 631db4f57..a5c41ca7f 100644 --- a/pkg/field/defaults.go +++ b/pkg/field/defaults.go @@ -114,8 +114,8 @@ var ( WithDescription("The resource type IDs to sync"), WithPersistent(true), WithExportTarget(ExportTargetNone)) - resourceTypedSyncField = StringField("sync-resource-type", - WithDescription("Sync all resources of a single resource type (incremental sync)"), + partialSyncResourceTypeField = StringField("partial-sync-resource-type", + WithDescription("Run a partial sync for a single resource type, automatically discovering parent resources"), WithPersistent(true), WithExportTarget(ExportTargetNone)) diffSyncsField = BoolField( @@ -294,7 +294,7 @@ var DefaultFields = []SchemaField{ skipFullSync, targetedSyncResourceIDs, syncResourceTypeIDs, - resourceTypedSyncField, + partialSyncResourceTypeField, skipEntitlementsAndGrants, skipGrants, externalResourceC1ZField, diff --git a/pkg/sync/syncer.go b/pkg/sync/syncer.go index 008f52226..54dd0fb0c 100644 --- a/pkg/sync/syncer.go +++ b/pkg/sync/syncer.go @@ -530,16 +530,9 @@ func (s *syncer) Sync(ctx context.Context) error { continue } - // Resource-typed sync: sync all resources of a single resource type + // Partial sync for a single resource type: only sync resources, never entitlements/grants // SetupResourceTypedSyncOp will discover parent types and queue the appropriate sync actions if s.resourceTypedSyncID != "" { - if !s.state.ShouldSkipEntitlementsAndGrants() { - if !s.state.ShouldSkipGrants() { - s.state.PushAction(ctx, Action{Op: SyncGrantsOp, ResourceTypeID: s.resourceTypedSyncID}) - } - s.state.PushAction(ctx, Action{Op: SyncEntitlementsOp, ResourceTypeID: s.resourceTypedSyncID}) - } - // SetupResourceTypedSyncOp runs after SyncResourceTypesOp to discover parent relationships s.state.PushAction(ctx, Action{Op: SetupResourceTypedSyncOp, ResourceTypeID: s.resourceTypedSyncID}) s.state.PushAction(ctx, Action{Op: SyncResourceTypesOp}) err = s.Checkpoint(ctx, true) @@ -3384,7 +3377,7 @@ func WithSkipGrants(skip bool) SyncOpt { } } -func WithResourceTypedSync(resourceTypeID string) SyncOpt { +func WithPartialSyncResourceType(resourceTypeID string) SyncOpt { return func(s *syncer) { s.resourceTypedSyncID = resourceTypeID s.syncType = connectorstore.SyncTypePartial diff --git a/pkg/tasks/c1api/resource_typed_sync.go b/pkg/tasks/c1api/resource_typed_sync.go index 7a153cd16..ffb74e581 100644 --- a/pkg/tasks/c1api/resource_typed_sync.go +++ b/pkg/tasks/c1api/resource_typed_sync.go @@ -30,14 +30,11 @@ func (c *resourceTypedSyncTaskHandler) sync(ctx context.Context, c1zPath string) return errors.New("task is not a resource-typed sync task") } + // Partial syncs only sync resources - entitlements and grants are never synced syncOpts := []sdkSync.SyncOpt{ sdkSync.WithC1ZPath(c1zPath), sdkSync.WithTmpDir(c.helpers.TempDir()), - sdkSync.WithResourceTypedSync(syncTask.GetResourceTypeId()), - } - - if syncTask.GetSkipEntitlementsAndGrants() { - syncOpts = append(syncOpts, sdkSync.WithSkipEntitlementsAndGrants(true)) + sdkSync.WithPartialSyncResourceType(syncTask.GetResourceTypeId()), } cc := c.helpers.ConnectorClient() @@ -140,4 +137,3 @@ func newResourceTypedSyncTaskHandler(task *v1.Task, helpers fullSyncHelpers) tas helpers: helpers, } } - diff --git a/pkg/tasks/local/partial_sync_resource_type.go b/pkg/tasks/local/partial_sync_resource_type.go new file mode 100644 index 000000000..844f3fa2f --- /dev/null +++ b/pkg/tasks/local/partial_sync_resource_type.go @@ -0,0 +1,103 @@ +package local + +import ( + "context" + "errors" + "sync" + "time" + + "go.opentelemetry.io/otel/trace" + + v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" + "github.com/conductorone/baton-sdk/pkg/session" + sdkSync "github.com/conductorone/baton-sdk/pkg/sync" + "github.com/conductorone/baton-sdk/pkg/tasks" + "github.com/conductorone/baton-sdk/pkg/types" +) + +type localPartialSyncResourceType struct { + dbPath string + resourceTypeID string + tmpDir string + o sync.Once +} + +type PartialSyncResourceTypeOption func(*localPartialSyncResourceType) + +func (m *localPartialSyncResourceType) GetTempDir() string { + return "" +} + +func (m *localPartialSyncResourceType) ShouldDebug() bool { + return false +} + +func (m *localPartialSyncResourceType) Next(ctx context.Context) (*v1.Task, time.Duration, error) { + var task *v1.Task + m.o.Do(func() { + task = v1.Task_builder{ + SyncResourceTyped: v1.Task_SyncResourceTypedTask_builder{ + ResourceTypeId: m.resourceTypeID, + }.Build(), + }.Build() + }) + return task, 0, nil +} + +func (m *localPartialSyncResourceType) Process(ctx context.Context, task *v1.Task, cc types.ConnectorClient) error { + ctx, span := tracer.Start(ctx, "localPartialSyncResourceType.Process", trace.WithNewRoot()) + defer span.End() + + var setSessionStore session.SetSessionStore + if ssetSessionStore, ok := cc.(session.SetSessionStore); ok { + setSessionStore = ssetSessionStore + } + + syncTask := task.GetSyncResourceTyped() + syncer, err := sdkSync.NewSyncer(ctx, cc, + sdkSync.WithC1ZPath(m.dbPath), + sdkSync.WithTmpDir(m.tmpDir), + sdkSync.WithPartialSyncResourceType(syncTask.GetResourceTypeId()), + sdkSync.WithSessionStore(setSessionStore), + ) + if err != nil { + return err + } + + err = syncer.Sync(ctx) + if err != nil { + if closeErr := syncer.Close(ctx); closeErr != nil { + err = errors.Join(err, closeErr) + } + return err + } + + if err := syncer.Close(ctx); err != nil { + return err + } + + return nil +} + +// NewPartialSyncResourceType returns a task manager that queues a partial sync task for a single resource type. +// It automatically discovers parent resource types and syncs them first to ensure child resources can be discovered. +// Partial syncs only sync resources - entitlements and grants are never synced. +func NewPartialSyncResourceType(ctx context.Context, dbPath string, resourceTypeID string, opts ...PartialSyncResourceTypeOption) (tasks.Manager, error) { + nm := &localPartialSyncResourceType{ + dbPath: dbPath, + resourceTypeID: resourceTypeID, + } + + for _, opt := range opts { + opt(nm) + } + + return nm, nil +} + +// PartialSyncWithTmpDir sets the temp directory for the partial sync. +func PartialSyncWithTmpDir(tmpDir string) PartialSyncResourceTypeOption { + return func(m *localPartialSyncResourceType) { + m.tmpDir = tmpDir + } +} diff --git a/pkg/tasks/local/resource_typed_syncer.go b/pkg/tasks/local/resource_typed_syncer.go deleted file mode 100644 index 2e5f6ca1e..000000000 --- a/pkg/tasks/local/resource_typed_syncer.go +++ /dev/null @@ -1,121 +0,0 @@ -package local - -import ( - "context" - "errors" - "sync" - "time" - - "go.opentelemetry.io/otel/trace" - - v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" - "github.com/conductorone/baton-sdk/pkg/session" - sdkSync "github.com/conductorone/baton-sdk/pkg/sync" - "github.com/conductorone/baton-sdk/pkg/tasks" - "github.com/conductorone/baton-sdk/pkg/types" -) - -type localResourceTypedSyncer struct { - dbPath string - resourceTypeID string - tmpDir string - skipEntitlementsAndGrants bool - skipGrants bool - o sync.Once -} - -type ResourceTypedSyncerOption func(*localResourceTypedSyncer) - -func (m *localResourceTypedSyncer) GetTempDir() string { - return "" -} - -func (m *localResourceTypedSyncer) ShouldDebug() bool { - return false -} - -func (m *localResourceTypedSyncer) Next(ctx context.Context) (*v1.Task, time.Duration, error) { - var task *v1.Task - m.o.Do(func() { - task = v1.Task_builder{ - SyncResourceTyped: v1.Task_SyncResourceTypedTask_builder{ - ResourceTypeId: m.resourceTypeID, - SkipEntitlementsAndGrants: m.skipEntitlementsAndGrants, - }.Build(), - }.Build() - }) - return task, 0, nil -} - -func (m *localResourceTypedSyncer) Process(ctx context.Context, task *v1.Task, cc types.ConnectorClient) error { - ctx, span := tracer.Start(ctx, "localResourceTypedSyncer.Process", trace.WithNewRoot()) - defer span.End() - - var setSessionStore session.SetSessionStore - if ssetSessionStore, ok := cc.(session.SetSessionStore); ok { - setSessionStore = ssetSessionStore - } - - syncTask := task.GetSyncResourceTyped() - syncer, err := sdkSync.NewSyncer(ctx, cc, - sdkSync.WithC1ZPath(m.dbPath), - sdkSync.WithTmpDir(m.tmpDir), - sdkSync.WithResourceTypedSync(syncTask.GetResourceTypeId()), - sdkSync.WithSkipEntitlementsAndGrants(syncTask.GetSkipEntitlementsAndGrants()), - sdkSync.WithSkipGrants(m.skipGrants), - sdkSync.WithSessionStore(setSessionStore), - ) - if err != nil { - return err - } - - err = syncer.Sync(ctx) - if err != nil { - if closeErr := syncer.Close(ctx); closeErr != nil { - err = errors.Join(err, closeErr) - } - return err - } - - if err := syncer.Close(ctx); err != nil { - return err - } - - return nil -} - -// NewResourceTypedSyncer returns a task manager that queues a resource-typed sync task. -func NewResourceTypedSyncer(ctx context.Context, dbPath string, resourceTypeID string, opts ...ResourceTypedSyncerOption) (tasks.Manager, error) { - nm := &localResourceTypedSyncer{ - dbPath: dbPath, - resourceTypeID: resourceTypeID, - } - - for _, opt := range opts { - opt(nm) - } - - return nm, nil -} - -// ResourceTypedWithTmpDir sets the temp directory for the resource-typed syncer. -func ResourceTypedWithTmpDir(tmpDir string) ResourceTypedSyncerOption { - return func(m *localResourceTypedSyncer) { - m.tmpDir = tmpDir - } -} - -// ResourceTypedWithSkipEntitlementsAndGrants sets whether to skip entitlements and grants. -func ResourceTypedWithSkipEntitlementsAndGrants(skip bool) ResourceTypedSyncerOption { - return func(m *localResourceTypedSyncer) { - m.skipEntitlementsAndGrants = skip - } -} - -// ResourceTypedWithSkipGrants sets whether to skip grants only. -func ResourceTypedWithSkipGrants(skip bool) ResourceTypedSyncerOption { - return func(m *localResourceTypedSyncer) { - m.skipGrants = skip - } -} - From cb6bd6a3163fba5e568566264676fba98622250e Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Mon, 22 Dec 2025 14:55:35 -0800 Subject: [PATCH 5/7] Implement partial sync resource type functionality in Task_SyncFullTask - Added `PartialSyncResourceTypeId` field to `Task_SyncFullTask` for triggering partial syncs of specific resource types. - Updated getter and setter methods for `PartialSyncResourceTypeId`. - Modified `fullSyncTaskHandler` to handle partial sync resource type from task or CLI. - Removed deprecated `resourceTypedSync` implementation to streamline the codebase. - Updated protocol buffer definitions and validation logic accordingly. --- pb/c1/connectorapi/baton/v1/baton.pb.go | 57 +++---- .../baton/v1/baton.pb.validate.go | 4 +- .../baton/v1/baton_protoopaque.pb.go | 54 +++---- pkg/connectorrunner/runner.go | 1 + pkg/tasks/c1api/full_sync.go | 13 ++ pkg/tasks/c1api/manager.go | 7 +- pkg/tasks/c1api/resource_typed_sync.go | 139 ------------------ proto/c1/connectorapi/baton/v1/baton.proto | 6 +- 8 files changed, 86 insertions(+), 195 deletions(-) delete mode 100644 pkg/tasks/c1api/resource_typed_sync.go diff --git a/pb/c1/connectorapi/baton/v1/baton.pb.go b/pb/c1/connectorapi/baton/v1/baton.pb.go index 8da1adf94..4f3dbb287 100644 --- a/pb/c1/connectorapi/baton/v1/baton.pb.go +++ b/pb/c1/connectorapi/baton/v1/baton.pb.go @@ -2587,6 +2587,10 @@ type Task_SyncFullTask struct { SkipExpandGrants bool `protobuf:"varint,2,opt,name=skip_expand_grants,json=skipExpandGrants,proto3" json:"skip_expand_grants,omitempty"` SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3" json:"skip_entitlements_and_grants,omitempty"` TargetedSyncResources []*v2.Resource `protobuf:"bytes,4,rep,name=targeted_sync_resources,json=targetedSyncResources,proto3" json:"targeted_sync_resources,omitempty"` + // partial_sync_resource_type_id triggers a partial sync for a single resource type. + // When set, only resources of this type are synced (with parent discovery). + // Entitlements and grants are never synced for partial syncs. + PartialSyncResourceTypeId string `protobuf:"bytes,5,opt,name=partial_sync_resource_type_id,json=partialSyncResourceTypeId,proto3" json:"partial_sync_resource_type_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2644,6 +2648,13 @@ func (x *Task_SyncFullTask) GetTargetedSyncResources() []*v2.Resource { return nil } +func (x *Task_SyncFullTask) GetPartialSyncResourceTypeId() string { + if x != nil { + return x.PartialSyncResourceTypeId + } + return "" +} + func (x *Task_SyncFullTask) SetAnnotations(v []*anypb.Any) { x.Annotations = v } @@ -2660,6 +2671,10 @@ func (x *Task_SyncFullTask) SetTargetedSyncResources(v []*v2.Resource) { x.TargetedSyncResources = v } +func (x *Task_SyncFullTask) SetPartialSyncResourceTypeId(v string) { + x.PartialSyncResourceTypeId = v +} + type Task_SyncFullTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. @@ -2667,6 +2682,10 @@ type Task_SyncFullTask_builder struct { SkipExpandGrants bool SkipEntitlementsAndGrants bool TargetedSyncResources []*v2.Resource + // partial_sync_resource_type_id triggers a partial sync for a single resource type. + // When set, only resources of this type are synced (with parent discovery). + // Entitlements and grants are never synced for partial syncs. + PartialSyncResourceTypeId string } func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { @@ -2677,16 +2696,17 @@ func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { x.SkipExpandGrants = b.SkipExpandGrants x.SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants x.TargetedSyncResources = b.TargetedSyncResources + x.PartialSyncResourceTypeId = b.PartialSyncResourceTypeId return m0 } +// Deprecated: Use SyncFullTask.partial_sync_resource_type_id instead. type Task_SyncResourceTypedTask struct { - state protoimpl.MessageState `protogen:"hybrid.v1"` - Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` - ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3" json:"resource_type_id,omitempty"` - SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3" json:"skip_entitlements_and_grants,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"hybrid.v1"` + Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` + ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3" json:"resource_type_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Task_SyncResourceTypedTask) Reset() { @@ -2728,13 +2748,6 @@ func (x *Task_SyncResourceTypedTask) GetResourceTypeId() string { return "" } -func (x *Task_SyncResourceTypedTask) GetSkipEntitlementsAndGrants() bool { - if x != nil { - return x.SkipEntitlementsAndGrants - } - return false -} - func (x *Task_SyncResourceTypedTask) SetAnnotations(v []*anypb.Any) { x.Annotations = v } @@ -2743,16 +2756,11 @@ func (x *Task_SyncResourceTypedTask) SetResourceTypeId(v string) { x.ResourceTypeId = v } -func (x *Task_SyncResourceTypedTask) SetSkipEntitlementsAndGrants(v bool) { - x.SkipEntitlementsAndGrants = v -} - type Task_SyncResourceTypedTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. - Annotations []*anypb.Any - ResourceTypeId string - SkipEntitlementsAndGrants bool + Annotations []*anypb.Any + ResourceTypeId string } func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask { @@ -2761,7 +2769,6 @@ func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask _, _ = b, x x.Annotations = b.Annotations x.ResourceTypeId = b.ResourceTypeId - x.SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants return m0 } @@ -5002,16 +5009,16 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\bNoneTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1aC\n" + "\tHelloTask\x126\n" + - "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\x88\x02\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\xca\x02\n" + "\fSyncFullTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12,\n" + "\x12skip_expand_grants\x18\x02 \x01(\bR\x10skipExpandGrants\x12?\n" + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x12Q\n" + - "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a\xba\x01\n" + + "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x12@\n" + + "\x1dpartial_sync_resource_type_id\x18\x05 \x01(\tR\x19partialSyncResourceTypeId\x1ay\n" + "\x15SyncResourceTypedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12(\n" + - "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x12?\n" + - "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x1a~\n" + + "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x1a~\n" + "\rEventFeedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x125\n" + "\bstart_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x1a\xf3\x01\n" + diff --git a/pb/c1/connectorapi/baton/v1/baton.pb.validate.go b/pb/c1/connectorapi/baton/v1/baton.pb.validate.go index fa81d770f..2471f54a9 100644 --- a/pb/c1/connectorapi/baton/v1/baton.pb.validate.go +++ b/pb/c1/connectorapi/baton/v1/baton.pb.validate.go @@ -3493,6 +3493,8 @@ func (m *Task_SyncFullTask) validate(all bool) error { } + // no validation rules for PartialSyncResourceTypeId + if len(errors) > 0 { return Task_SyncFullTaskMultiError(errors) } @@ -3631,8 +3633,6 @@ func (m *Task_SyncResourceTypedTask) validate(all bool) error { // no validation rules for ResourceTypeId - // no validation rules for SkipEntitlementsAndGrants - if len(errors) > 0 { return Task_SyncResourceTypedTaskMultiError(errors) } diff --git a/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go b/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go index 6b92c9d52..ed072ceb7 100644 --- a/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go +++ b/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go @@ -2551,6 +2551,7 @@ type Task_SyncFullTask struct { xxx_hidden_SkipExpandGrants bool `protobuf:"varint,2,opt,name=skip_expand_grants,json=skipExpandGrants,proto3"` xxx_hidden_SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3"` xxx_hidden_TargetedSyncResources *[]*v2.Resource `protobuf:"bytes,4,rep,name=targeted_sync_resources,json=targetedSyncResources,proto3"` + xxx_hidden_PartialSyncResourceTypeId string `protobuf:"bytes,5,opt,name=partial_sync_resource_type_id,json=partialSyncResourceTypeId,proto3"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2612,6 +2613,13 @@ func (x *Task_SyncFullTask) GetTargetedSyncResources() []*v2.Resource { return nil } +func (x *Task_SyncFullTask) GetPartialSyncResourceTypeId() string { + if x != nil { + return x.xxx_hidden_PartialSyncResourceTypeId + } + return "" +} + func (x *Task_SyncFullTask) SetAnnotations(v []*anypb.Any) { x.xxx_hidden_Annotations = &v } @@ -2628,6 +2636,10 @@ func (x *Task_SyncFullTask) SetTargetedSyncResources(v []*v2.Resource) { x.xxx_hidden_TargetedSyncResources = &v } +func (x *Task_SyncFullTask) SetPartialSyncResourceTypeId(v string) { + x.xxx_hidden_PartialSyncResourceTypeId = v +} + type Task_SyncFullTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. @@ -2635,6 +2647,10 @@ type Task_SyncFullTask_builder struct { SkipExpandGrants bool SkipEntitlementsAndGrants bool TargetedSyncResources []*v2.Resource + // partial_sync_resource_type_id triggers a partial sync for a single resource type. + // When set, only resources of this type are synced (with parent discovery). + // Entitlements and grants are never synced for partial syncs. + PartialSyncResourceTypeId string } func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { @@ -2645,16 +2661,17 @@ func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { x.xxx_hidden_SkipExpandGrants = b.SkipExpandGrants x.xxx_hidden_SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants x.xxx_hidden_TargetedSyncResources = &b.TargetedSyncResources + x.xxx_hidden_PartialSyncResourceTypeId = b.PartialSyncResourceTypeId return m0 } +// Deprecated: Use SyncFullTask.partial_sync_resource_type_id instead. type Task_SyncResourceTypedTask struct { - state protoimpl.MessageState `protogen:"opaque.v1"` - xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` - xxx_hidden_ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3"` - xxx_hidden_SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` + xxx_hidden_ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Task_SyncResourceTypedTask) Reset() { @@ -2698,13 +2715,6 @@ func (x *Task_SyncResourceTypedTask) GetResourceTypeId() string { return "" } -func (x *Task_SyncResourceTypedTask) GetSkipEntitlementsAndGrants() bool { - if x != nil { - return x.xxx_hidden_SkipEntitlementsAndGrants - } - return false -} - func (x *Task_SyncResourceTypedTask) SetAnnotations(v []*anypb.Any) { x.xxx_hidden_Annotations = &v } @@ -2713,16 +2723,11 @@ func (x *Task_SyncResourceTypedTask) SetResourceTypeId(v string) { x.xxx_hidden_ResourceTypeId = v } -func (x *Task_SyncResourceTypedTask) SetSkipEntitlementsAndGrants(v bool) { - x.xxx_hidden_SkipEntitlementsAndGrants = v -} - type Task_SyncResourceTypedTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. - Annotations []*anypb.Any - ResourceTypeId string - SkipEntitlementsAndGrants bool + Annotations []*anypb.Any + ResourceTypeId string } func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask { @@ -2731,7 +2736,6 @@ func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask _, _ = b, x x.xxx_hidden_Annotations = &b.Annotations x.xxx_hidden_ResourceTypeId = b.ResourceTypeId - x.xxx_hidden_SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants return m0 } @@ -5010,16 +5014,16 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\bNoneTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1aC\n" + "\tHelloTask\x126\n" + - "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\x88\x02\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\xca\x02\n" + "\fSyncFullTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12,\n" + "\x12skip_expand_grants\x18\x02 \x01(\bR\x10skipExpandGrants\x12?\n" + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x12Q\n" + - "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a\xba\x01\n" + + "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x12@\n" + + "\x1dpartial_sync_resource_type_id\x18\x05 \x01(\tR\x19partialSyncResourceTypeId\x1ay\n" + "\x15SyncResourceTypedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12(\n" + - "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x12?\n" + - "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x1a~\n" + + "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x1a~\n" + "\rEventFeedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x125\n" + "\bstart_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x1a\xf3\x01\n" + diff --git a/pkg/connectorrunner/runner.go b/pkg/connectorrunner/runner.go index 5f1f4c980..c6e91706d 100644 --- a/pkg/connectorrunner/runner.go +++ b/pkg/connectorrunner/runner.go @@ -849,6 +849,7 @@ func NewConnectorRunner(ctx context.Context, c types.ConnectorServer, opts ...Op cfg.externalResourceEntitlementIdFilter, resources, cfg.syncResourceTypeIDs, + cfg.partialSyncResourceTypeID, ) if err != nil { return nil, err diff --git a/pkg/tasks/c1api/full_sync.go b/pkg/tasks/c1api/full_sync.go index 4171ecc2d..2e7336d87 100644 --- a/pkg/tasks/c1api/full_sync.go +++ b/pkg/tasks/c1api/full_sync.go @@ -36,6 +36,7 @@ type fullSyncTaskHandler struct { externalResourceEntitlementIdFilter string targetedSyncResources []*v2.Resource syncResourceTypeIDs []string + partialSyncResourceTypeID string } func (c *fullSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { @@ -88,6 +89,16 @@ func (c *fullSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { syncOpts = append(syncOpts, sdkSync.WithSyncResourceTypes(c.syncResourceTypeIDs)) } + // Check for partial sync resource type from task or CLI + partialSyncResourceTypeID := c.task.GetSyncFull().GetPartialSyncResourceTypeId() + if partialSyncResourceTypeID == "" { + partialSyncResourceTypeID = c.partialSyncResourceTypeID + } + if partialSyncResourceTypeID != "" { + l.Info("Running partial sync for resource type", zap.String("resource_type_id", partialSyncResourceTypeID)) + syncOpts = append(syncOpts, sdkSync.WithPartialSyncResourceType(partialSyncResourceTypeID)) + } + if setSessionStore, ok := cc.(session.SetSessionStore); ok { syncOpts = append(syncOpts, sdkSync.WithSessionStore(setSessionStore)) } @@ -199,6 +210,7 @@ func newFullSyncTaskHandler( externalResourceEntitlementIdFilter string, targetedSyncResources []*v2.Resource, syncResourceTypeIDs []string, + partialSyncResourceTypeID string, ) tasks.TaskHandler { return &fullSyncTaskHandler{ task: task, @@ -208,6 +220,7 @@ func newFullSyncTaskHandler( externalResourceEntitlementIdFilter: externalResourceEntitlementIdFilter, targetedSyncResources: targetedSyncResources, syncResourceTypeIDs: syncResourceTypeIDs, + partialSyncResourceTypeID: partialSyncResourceTypeID, } } diff --git a/pkg/tasks/c1api/manager.go b/pkg/tasks/c1api/manager.go index 11085024c..46826d460 100644 --- a/pkg/tasks/c1api/manager.go +++ b/pkg/tasks/c1api/manager.go @@ -55,6 +55,7 @@ type c1ApiTaskManager struct { externalResourceEntitlementIdFilter string targetedSyncResources []*v2.Resource syncResourceTypeIDs []string + partialSyncResourceTypeID string } // getHeartbeatInterval returns an appropriate heartbeat interval. If the interval is 0, it will return the default heartbeat interval. @@ -251,6 +252,7 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. c.externalResourceEntitlementIdFilter, c.targetedSyncResources, c.syncResourceTypeIDs, + c.partialSyncResourceTypeID, ) case taskTypes.HelloType: handler = newHelloTaskHandler(task, tHelpers) @@ -286,8 +288,6 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. handler = newActionInvokeTaskHandler(task, tHelpers) case taskTypes.ActionStatusType: handler = newActionStatusTaskHandler(task, tHelpers) - case taskTypes.SyncResourceTypedType: - handler = newResourceTypedSyncTaskHandler(task, tHelpers) default: return c.finishTask(ctx, task, nil, nil, errors.New("unsupported task type")) } @@ -304,7 +304,7 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. func NewC1TaskManager( ctx context.Context, clientID string, clientSecret string, tempDir string, skipFullSync bool, externalC1Z string, externalResourceEntitlementIdFilter string, targetedSyncResources []*v2.Resource, - syncResourceTypeIDs []string, + syncResourceTypeIDs []string, partialSyncResourceTypeID string, ) (tasks.Manager, error) { serviceClient, err := newServiceClient(ctx, clientID, clientSecret) if err != nil { @@ -319,5 +319,6 @@ func NewC1TaskManager( externalResourceEntitlementIdFilter: externalResourceEntitlementIdFilter, targetedSyncResources: targetedSyncResources, syncResourceTypeIDs: syncResourceTypeIDs, + partialSyncResourceTypeID: partialSyncResourceTypeID, }, nil } diff --git a/pkg/tasks/c1api/resource_typed_sync.go b/pkg/tasks/c1api/resource_typed_sync.go deleted file mode 100644 index ffb74e581..000000000 --- a/pkg/tasks/c1api/resource_typed_sync.go +++ /dev/null @@ -1,139 +0,0 @@ -package c1api - -import ( - "context" - "errors" - "os" - - "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" - "go.uber.org/zap" - - v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" - "github.com/conductorone/baton-sdk/pkg/session" - sdkSync "github.com/conductorone/baton-sdk/pkg/sync" - "github.com/conductorone/baton-sdk/pkg/tasks" -) - -type resourceTypedSyncTaskHandler struct { - task *v1.Task - helpers fullSyncHelpers -} - -func (c *resourceTypedSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { - ctx, span := tracer.Start(ctx, "resourceTypedSyncTaskHandler.sync") - defer span.End() - - l := ctxzap.Extract(ctx).With(zap.String("task_id", c.task.GetId()), zap.Stringer("task_type", tasks.GetType(c.task))) - - syncTask := c.task.GetSyncResourceTyped() - if syncTask == nil { - return errors.New("task is not a resource-typed sync task") - } - - // Partial syncs only sync resources - entitlements and grants are never synced - syncOpts := []sdkSync.SyncOpt{ - sdkSync.WithC1ZPath(c1zPath), - sdkSync.WithTmpDir(c.helpers.TempDir()), - sdkSync.WithPartialSyncResourceType(syncTask.GetResourceTypeId()), - } - - cc := c.helpers.ConnectorClient() - - if setSessionStore, ok := cc.(session.SetSessionStore); ok { - syncOpts = append(syncOpts, sdkSync.WithSessionStore(setSessionStore)) - } - - syncer, err := sdkSync.NewSyncer(ctx, cc, syncOpts...) - if err != nil { - l.Error("failed to create syncer", zap.Error(err)) - return err - } - - err = syncer.Sync(ctx) - if err != nil { - l.Error("failed to sync", zap.Error(err)) - - if closeErr := syncer.Close(ctx); closeErr != nil { - l.Error("failed to close syncer after sync error", zap.Error(err)) - err = errors.Join(err, closeErr) - } - - return err - } - - if err := syncer.Close(ctx); err != nil { - l.Error("failed to close syncer", zap.Error(err)) - return err - } - - return nil -} - -func (c *resourceTypedSyncTaskHandler) HandleTask(ctx context.Context) error { - ctx, span := tracer.Start(ctx, "resourceTypedSyncTaskHandler.HandleTask") - defer span.End() - - ctx, cancel := context.WithCancel(ctx) - defer cancel() - l := ctxzap.Extract(ctx).With(zap.String("task_id", c.task.GetId()), zap.Stringer("task_type", tasks.GetType(c.task))) - l.Info("Handling resource-typed sync task.", zap.String("resource_type_id", c.task.GetSyncResourceTyped().GetResourceTypeId())) - - assetFile, err := os.CreateTemp(c.helpers.TempDir(), "baton-sdk-resource-typed-sync-upload") - if err != nil { - l.Error("failed to create temp file", zap.Error(err)) - return c.helpers.FinishTask(ctx, nil, nil, err) - } - c1zPath := assetFile.Name() - err = assetFile.Close() - if err != nil { - return c.helpers.FinishTask(ctx, nil, nil, err) - } - - ctx, err = c.helpers.HeartbeatTask(ctx, nil) - if err != nil { - l.Error("failed to heartbeat task", zap.Error(err)) - return err - } - - err = c.sync(ctx, c1zPath) - if err != nil { - l.Error("failed to sync", zap.Error(err)) - return c.helpers.FinishTask(ctx, nil, nil, err) - } - - c1zF, err := os.Open(c1zPath) - if err != nil { - l.Error("failed to open sync asset prior to upload", zap.Error(err)) - return c.helpers.FinishTask(ctx, nil, nil, err) - } - defer func(f *os.File) { - err = f.Close() - if err != nil { - l.Error("failed to close sync asset", zap.Error(err), zap.String("path", f.Name())) - } - err = os.Remove(f.Name()) - if err != nil { - l.Error("failed to remove temp file", zap.Error(err), zap.String("path", f.Name())) - } - }(c1zF) - - err = c.helpers.Upload(ctx, c1zF) - if err != nil { - l.Error("failed to upload sync asset", zap.Error(err)) - return c.helpers.FinishTask(ctx, nil, nil, err) - } - - err = uploadDebugLogs(ctx, c.helpers) - if err != nil { - return c.helpers.FinishTask(ctx, nil, nil, err) - } - - return c.helpers.FinishTask(ctx, nil, nil, nil) -} - -func newResourceTypedSyncTaskHandler(task *v1.Task, helpers fullSyncHelpers) tasks.TaskHandler { - return &resourceTypedSyncTaskHandler{ - task: task, - helpers: helpers, - } -} diff --git a/proto/c1/connectorapi/baton/v1/baton.proto b/proto/c1/connectorapi/baton/v1/baton.proto index 321b9133a..56b02ceba 100644 --- a/proto/c1/connectorapi/baton/v1/baton.proto +++ b/proto/c1/connectorapi/baton/v1/baton.proto @@ -50,12 +50,16 @@ message Task { bool skip_expand_grants = 2; bool skip_entitlements_and_grants = 3; repeated connector.v2.Resource targeted_sync_resources = 4; + // partial_sync_resource_type_id triggers a partial sync for a single resource type. + // When set, only resources of this type are synced (with parent discovery). + // Entitlements and grants are never synced for partial syncs. + string partial_sync_resource_type_id = 5; } + // Deprecated: Use SyncFullTask.partial_sync_resource_type_id instead. message SyncResourceTypedTask { repeated google.protobuf.Any annotations = 1; string resource_type_id = 2; - bool skip_entitlements_and_grants = 3; } message EventFeedTask { From 893f1fe2b7ee49122c0cebde4dc99d981e974e5b Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Mon, 22 Dec 2025 16:55:53 -0800 Subject: [PATCH 6/7] Refactor sync functionality to introduce partial sync handling - Replaced `SyncResourceTypedType` with `PartialSyncType` in task type checks to align with new partial sync implementation. - Removed `partialSyncResourceTypeID` from `fullSyncTaskHandler` and `c1ApiTaskManager` to streamline the codebase. - Added `partialSyncTaskHandler` to manage partial sync tasks, supporting both targeted resources and resource type modes. - Introduced `localPartialSync` to handle partial sync operations, ensuring only resources are synced without entitlements and grants. - Deleted deprecated `partial_sync_resource_type.go` and added new `partial_sync.go` for local partial sync management. --- pkg/tasks/c1api/full_sync.go | 13 -- pkg/tasks/c1api/manager.go | 7 +- pkg/tasks/c1api/partial_sync.go | 162 ++++++++++++++++++ pkg/tasks/local/partial_sync.go | 161 +++++++++++++++++ pkg/tasks/local/partial_sync_resource_type.go | 103 ----------- pkg/tasks/tasks.go | 8 +- 6 files changed, 330 insertions(+), 124 deletions(-) create mode 100644 pkg/tasks/c1api/partial_sync.go create mode 100644 pkg/tasks/local/partial_sync.go delete mode 100644 pkg/tasks/local/partial_sync_resource_type.go diff --git a/pkg/tasks/c1api/full_sync.go b/pkg/tasks/c1api/full_sync.go index 2e7336d87..4171ecc2d 100644 --- a/pkg/tasks/c1api/full_sync.go +++ b/pkg/tasks/c1api/full_sync.go @@ -36,7 +36,6 @@ type fullSyncTaskHandler struct { externalResourceEntitlementIdFilter string targetedSyncResources []*v2.Resource syncResourceTypeIDs []string - partialSyncResourceTypeID string } func (c *fullSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { @@ -89,16 +88,6 @@ func (c *fullSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { syncOpts = append(syncOpts, sdkSync.WithSyncResourceTypes(c.syncResourceTypeIDs)) } - // Check for partial sync resource type from task or CLI - partialSyncResourceTypeID := c.task.GetSyncFull().GetPartialSyncResourceTypeId() - if partialSyncResourceTypeID == "" { - partialSyncResourceTypeID = c.partialSyncResourceTypeID - } - if partialSyncResourceTypeID != "" { - l.Info("Running partial sync for resource type", zap.String("resource_type_id", partialSyncResourceTypeID)) - syncOpts = append(syncOpts, sdkSync.WithPartialSyncResourceType(partialSyncResourceTypeID)) - } - if setSessionStore, ok := cc.(session.SetSessionStore); ok { syncOpts = append(syncOpts, sdkSync.WithSessionStore(setSessionStore)) } @@ -210,7 +199,6 @@ func newFullSyncTaskHandler( externalResourceEntitlementIdFilter string, targetedSyncResources []*v2.Resource, syncResourceTypeIDs []string, - partialSyncResourceTypeID string, ) tasks.TaskHandler { return &fullSyncTaskHandler{ task: task, @@ -220,7 +208,6 @@ func newFullSyncTaskHandler( externalResourceEntitlementIdFilter: externalResourceEntitlementIdFilter, targetedSyncResources: targetedSyncResources, syncResourceTypeIDs: syncResourceTypeIDs, - partialSyncResourceTypeID: partialSyncResourceTypeID, } } diff --git a/pkg/tasks/c1api/manager.go b/pkg/tasks/c1api/manager.go index 46826d460..3f7478816 100644 --- a/pkg/tasks/c1api/manager.go +++ b/pkg/tasks/c1api/manager.go @@ -55,7 +55,6 @@ type c1ApiTaskManager struct { externalResourceEntitlementIdFilter string targetedSyncResources []*v2.Resource syncResourceTypeIDs []string - partialSyncResourceTypeID string } // getHeartbeatInterval returns an appropriate heartbeat interval. If the interval is 0, it will return the default heartbeat interval. @@ -252,7 +251,6 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. c.externalResourceEntitlementIdFilter, c.targetedSyncResources, c.syncResourceTypeIDs, - c.partialSyncResourceTypeID, ) case taskTypes.HelloType: handler = newHelloTaskHandler(task, tHelpers) @@ -288,6 +286,8 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. handler = newActionInvokeTaskHandler(task, tHelpers) case taskTypes.ActionStatusType: handler = newActionStatusTaskHandler(task, tHelpers) + case taskTypes.PartialSyncType: + handler = newPartialSyncTaskHandler(task, tHelpers) default: return c.finishTask(ctx, task, nil, nil, errors.New("unsupported task type")) } @@ -304,7 +304,7 @@ func (c *c1ApiTaskManager) Process(ctx context.Context, task *v1.Task, cc types. func NewC1TaskManager( ctx context.Context, clientID string, clientSecret string, tempDir string, skipFullSync bool, externalC1Z string, externalResourceEntitlementIdFilter string, targetedSyncResources []*v2.Resource, - syncResourceTypeIDs []string, partialSyncResourceTypeID string, + syncResourceTypeIDs []string, ) (tasks.Manager, error) { serviceClient, err := newServiceClient(ctx, clientID, clientSecret) if err != nil { @@ -319,6 +319,5 @@ func NewC1TaskManager( externalResourceEntitlementIdFilter: externalResourceEntitlementIdFilter, targetedSyncResources: targetedSyncResources, syncResourceTypeIDs: syncResourceTypeIDs, - partialSyncResourceTypeID: partialSyncResourceTypeID, }, nil } diff --git a/pkg/tasks/c1api/partial_sync.go b/pkg/tasks/c1api/partial_sync.go new file mode 100644 index 000000000..8003c8adb --- /dev/null +++ b/pkg/tasks/c1api/partial_sync.go @@ -0,0 +1,162 @@ +package c1api + +import ( + "context" + "errors" + "os" + + "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap" + "go.uber.org/zap" + + v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" + "github.com/conductorone/baton-sdk/pkg/session" + sdkSync "github.com/conductorone/baton-sdk/pkg/sync" + "github.com/conductorone/baton-sdk/pkg/tasks" +) + +type partialSyncTaskHandler struct { + task *v1.Task + helpers fullSyncHelpers +} + +func (c *partialSyncTaskHandler) sync(ctx context.Context, c1zPath string) error { + ctx, span := tracer.Start(ctx, "partialSyncTaskHandler.sync") + defer span.End() + + l := ctxzap.Extract(ctx).With(zap.String("task_id", c.task.GetId()), zap.Stringer("task_type", tasks.GetType(c.task))) + + syncPartialTask := c.task.GetSyncPartial() + if syncPartialTask == nil { + return errors.New("task is not a partial sync task") + } + + syncOpts := []sdkSync.SyncOpt{ + sdkSync.WithC1ZPath(c1zPath), + sdkSync.WithTmpDir(c.helpers.TempDir()), + } + + cc := c.helpers.ConnectorClient() + + // Check which sync mode is set + switch { + case syncPartialTask.HasTargetedResources(): + // Targeted resources mode - includes entitlements and grants + targetedResources := syncPartialTask.GetTargetedResources() + if targetedResources != nil && len(targetedResources.GetResources()) > 0 { + l.Info("Running partial sync for targeted resources", + zap.Int("resource_count", len(targetedResources.GetResources()))) + syncOpts = append(syncOpts, sdkSync.WithTargetedSyncResources(targetedResources.GetResources())) + } else { + return errors.New("targeted_resources is set but contains no resources") + } + + case syncPartialTask.GetResourceTypeId() != "": + // Resource type mode - skips entitlements and grants + resourceTypeID := syncPartialTask.GetResourceTypeId() + l.Info("Running partial sync for resource type", zap.String("resource_type_id", resourceTypeID)) + syncOpts = append(syncOpts, sdkSync.WithPartialSyncResourceType(resourceTypeID)) + + default: + return errors.New("partial sync task must specify either targeted_resources or resource_type_id") + } + + if setSessionStore, ok := cc.(session.SetSessionStore); ok { + syncOpts = append(syncOpts, sdkSync.WithSessionStore(setSessionStore)) + } + + syncer, err := sdkSync.NewSyncer(ctx, cc, syncOpts...) + if err != nil { + l.Error("failed to create syncer", zap.Error(err)) + return err + } + + err = syncer.Sync(ctx) + if err != nil { + l.Error("failed to sync", zap.Error(err)) + + if closeErr := syncer.Close(ctx); closeErr != nil { + l.Error("failed to close syncer after sync error", zap.Error(closeErr)) + err = errors.Join(err, closeErr) + } + + return err + } + + if err := syncer.Close(ctx); err != nil { + l.Error("failed to close syncer", zap.Error(err)) + return err + } + + return nil +} + +func (c *partialSyncTaskHandler) HandleTask(ctx context.Context) error { + ctx, span := tracer.Start(ctx, "partialSyncTaskHandler.HandleTask") + defer span.End() + + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + l := ctxzap.Extract(ctx).With(zap.String("task_id", c.task.GetId()), zap.Stringer("task_type", tasks.GetType(c.task))) + l.Info("Handling partial sync task.") + + assetFile, err := os.CreateTemp(c.helpers.TempDir(), "baton-sdk-partial-sync-upload") + if err != nil { + l.Error("failed to create temp file", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + c1zPath := assetFile.Name() + err = assetFile.Close() + if err != nil { + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + ctx, err = c.helpers.HeartbeatTask(ctx, nil) + if err != nil { + l.Error("failed to heartbeat task", zap.Error(err)) + return err + } + + err = c.sync(ctx, c1zPath) + if err != nil { + l.Error("failed to sync", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + c1zF, err := os.Open(c1zPath) + if err != nil { + l.Error("failed to open sync asset prior to upload", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + defer func(f *os.File) { + err = f.Close() + if err != nil { + l.Error("failed to close sync asset", zap.Error(err), zap.String("path", f.Name())) + } + err = os.Remove(f.Name()) + if err != nil { + l.Error("failed to remove temp file", zap.Error(err), zap.String("path", f.Name())) + } + }(c1zF) + + err = c.helpers.Upload(ctx, c1zF) + if err != nil { + l.Error("failed to upload sync asset", zap.Error(err)) + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + err = uploadDebugLogs(ctx, c.helpers) + if err != nil { + return c.helpers.FinishTask(ctx, nil, nil, err) + } + + return c.helpers.FinishTask(ctx, nil, nil, nil) +} + +func newPartialSyncTaskHandler(task *v1.Task, helpers fullSyncHelpers) tasks.TaskHandler { + return &partialSyncTaskHandler{ + task: task, + helpers: helpers, + } +} + diff --git a/pkg/tasks/local/partial_sync.go b/pkg/tasks/local/partial_sync.go new file mode 100644 index 000000000..ad76e67fd --- /dev/null +++ b/pkg/tasks/local/partial_sync.go @@ -0,0 +1,161 @@ +package local + +import ( + "context" + "errors" + "sync" + "time" + + "go.opentelemetry.io/otel/trace" + + v2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2" + v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" + "github.com/conductorone/baton-sdk/pkg/session" + sdkSync "github.com/conductorone/baton-sdk/pkg/sync" + "github.com/conductorone/baton-sdk/pkg/tasks" + "github.com/conductorone/baton-sdk/pkg/types" +) + +type localPartialSync struct { + dbPath string + resourceTypeID string + targetedResources []*v2.Resource + tmpDir string + o sync.Once +} + +type PartialSyncOption func(*localPartialSync) + +func (m *localPartialSync) GetTempDir() string { + return "" +} + +func (m *localPartialSync) ShouldDebug() bool { + return false +} + +func (m *localPartialSync) Next(ctx context.Context) (*v1.Task, time.Duration, error) { + var task *v1.Task + m.o.Do(func() { + taskBuilder := v1.Task_builder{} + + syncPartialBuilder := v1.Task_SyncPartialTask_builder{} + + if len(m.targetedResources) > 0 { + // Targeted resources mode + syncPartialBuilder.TargetedResources = v1.Task_SyncPartialTask_TargetedResources_builder{ + Resources: m.targetedResources, + }.Build() + } else if m.resourceTypeID != "" { + // Resource type mode + syncPartialBuilder.ResourceTypeId = &m.resourceTypeID + } + + taskBuilder.SyncPartial = syncPartialBuilder.Build() + task = taskBuilder.Build() + }) + return task, 0, nil +} + +func (m *localPartialSync) Process(ctx context.Context, task *v1.Task, cc types.ConnectorClient) error { + ctx, span := tracer.Start(ctx, "localPartialSync.Process", trace.WithNewRoot()) + defer span.End() + + var setSessionStore session.SetSessionStore + if ssetSessionStore, ok := cc.(session.SetSessionStore); ok { + setSessionStore = ssetSessionStore + } + + syncTask := task.GetSyncPartial() + if syncTask == nil { + return errors.New("task is not a partial sync task") + } + + syncOpts := []sdkSync.SyncOpt{ + sdkSync.WithC1ZPath(m.dbPath), + sdkSync.WithTmpDir(m.tmpDir), + sdkSync.WithSessionStore(setSessionStore), + } + + // Check which sync mode is set + switch { + case syncTask.HasTargetedResources(): + // Targeted resources mode - includes entitlements and grants + targetedResources := syncTask.GetTargetedResources() + if targetedResources != nil && len(targetedResources.GetResources()) > 0 { + syncOpts = append(syncOpts, sdkSync.WithTargetedSyncResources(targetedResources.GetResources())) + } else { + return errors.New("targeted_resources is set but contains no resources") + } + + case syncTask.GetResourceTypeId() != "": + // Resource type mode - skips entitlements and grants + syncOpts = append(syncOpts, sdkSync.WithPartialSyncResourceType(syncTask.GetResourceTypeId())) + + default: + return errors.New("partial sync task must specify either targeted_resources or resource_type_id") + } + + syncer, err := sdkSync.NewSyncer(ctx, cc, syncOpts...) + if err != nil { + return err + } + + err = syncer.Sync(ctx) + if err != nil { + if closeErr := syncer.Close(ctx); closeErr != nil { + err = errors.Join(err, closeErr) + } + return err + } + + if err := syncer.Close(ctx); err != nil { + return err + } + + return nil +} + +// NewPartialSync returns a task manager that queues a partial sync task. +// It supports two modes: +// - Resource type mode: Syncs resources of a single type (with parent discovery). Entitlements and grants are skipped. +// - Targeted resources mode: Syncs specific resources with their entitlements and grants. +func NewPartialSync(ctx context.Context, dbPath string, opts ...PartialSyncOption) (tasks.Manager, error) { + nm := &localPartialSync{ + dbPath: dbPath, + } + + for _, opt := range opts { + opt(nm) + } + + if nm.resourceTypeID == "" && len(nm.targetedResources) == 0 { + return nil, errors.New("partial sync requires either a resource type ID or targeted resources") + } + + return nm, nil +} + +// WithPartialSyncResourceType sets the resource type ID for resource type mode. +// In this mode, only resources are synced - entitlements and grants are skipped. +func WithPartialSyncResourceType(resourceTypeID string) PartialSyncOption { + return func(m *localPartialSync) { + m.resourceTypeID = resourceTypeID + } +} + +// WithPartialSyncTargetedResources sets the targeted resources for targeted resources mode. +// In this mode, full sync data (resources, entitlements, grants) is synced for the specified resources. +func WithPartialSyncTargetedResources(resources []*v2.Resource) PartialSyncOption { + return func(m *localPartialSync) { + m.targetedResources = resources + } +} + +// WithPartialSyncTmpDir sets the temp directory for the partial sync. +func WithPartialSyncTmpDir(tmpDir string) PartialSyncOption { + return func(m *localPartialSync) { + m.tmpDir = tmpDir + } +} + diff --git a/pkg/tasks/local/partial_sync_resource_type.go b/pkg/tasks/local/partial_sync_resource_type.go deleted file mode 100644 index 844f3fa2f..000000000 --- a/pkg/tasks/local/partial_sync_resource_type.go +++ /dev/null @@ -1,103 +0,0 @@ -package local - -import ( - "context" - "errors" - "sync" - "time" - - "go.opentelemetry.io/otel/trace" - - v1 "github.com/conductorone/baton-sdk/pb/c1/connectorapi/baton/v1" - "github.com/conductorone/baton-sdk/pkg/session" - sdkSync "github.com/conductorone/baton-sdk/pkg/sync" - "github.com/conductorone/baton-sdk/pkg/tasks" - "github.com/conductorone/baton-sdk/pkg/types" -) - -type localPartialSyncResourceType struct { - dbPath string - resourceTypeID string - tmpDir string - o sync.Once -} - -type PartialSyncResourceTypeOption func(*localPartialSyncResourceType) - -func (m *localPartialSyncResourceType) GetTempDir() string { - return "" -} - -func (m *localPartialSyncResourceType) ShouldDebug() bool { - return false -} - -func (m *localPartialSyncResourceType) Next(ctx context.Context) (*v1.Task, time.Duration, error) { - var task *v1.Task - m.o.Do(func() { - task = v1.Task_builder{ - SyncResourceTyped: v1.Task_SyncResourceTypedTask_builder{ - ResourceTypeId: m.resourceTypeID, - }.Build(), - }.Build() - }) - return task, 0, nil -} - -func (m *localPartialSyncResourceType) Process(ctx context.Context, task *v1.Task, cc types.ConnectorClient) error { - ctx, span := tracer.Start(ctx, "localPartialSyncResourceType.Process", trace.WithNewRoot()) - defer span.End() - - var setSessionStore session.SetSessionStore - if ssetSessionStore, ok := cc.(session.SetSessionStore); ok { - setSessionStore = ssetSessionStore - } - - syncTask := task.GetSyncResourceTyped() - syncer, err := sdkSync.NewSyncer(ctx, cc, - sdkSync.WithC1ZPath(m.dbPath), - sdkSync.WithTmpDir(m.tmpDir), - sdkSync.WithPartialSyncResourceType(syncTask.GetResourceTypeId()), - sdkSync.WithSessionStore(setSessionStore), - ) - if err != nil { - return err - } - - err = syncer.Sync(ctx) - if err != nil { - if closeErr := syncer.Close(ctx); closeErr != nil { - err = errors.Join(err, closeErr) - } - return err - } - - if err := syncer.Close(ctx); err != nil { - return err - } - - return nil -} - -// NewPartialSyncResourceType returns a task manager that queues a partial sync task for a single resource type. -// It automatically discovers parent resource types and syncs them first to ensure child resources can be discovered. -// Partial syncs only sync resources - entitlements and grants are never synced. -func NewPartialSyncResourceType(ctx context.Context, dbPath string, resourceTypeID string, opts ...PartialSyncResourceTypeOption) (tasks.Manager, error) { - nm := &localPartialSyncResourceType{ - dbPath: dbPath, - resourceTypeID: resourceTypeID, - } - - for _, opt := range opts { - opt(nm) - } - - return nm, nil -} - -// PartialSyncWithTmpDir sets the temp directory for the partial sync. -func PartialSyncWithTmpDir(tmpDir string) PartialSyncResourceTypeOption { - return func(m *localPartialSyncResourceType) { - m.tmpDir = tmpDir - } -} diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go index 7bd97d4dc..a24727d29 100644 --- a/pkg/tasks/tasks.go +++ b/pkg/tasks/tasks.go @@ -68,8 +68,8 @@ func Is(task *v1.Task, target taskTypes.TaskType) bool { return actualType == v1.Task_ActionStatus_case case taskTypes.CreateSyncDiff: return actualType == v1.Task_CreateSyncDiff_case - case taskTypes.SyncResourceTypedType: - return actualType == v1.Task_SyncResourceTyped_case + case taskTypes.PartialSyncType: + return actualType == v1.Task_SyncPartial_case default: return false } @@ -121,8 +121,8 @@ func GetType(task *v1.Task) taskTypes.TaskType { return taskTypes.ActionStatusType case v1.Task_CreateSyncDiff_case: return taskTypes.CreateSyncDiff - case v1.Task_SyncResourceTyped_case: - return taskTypes.SyncResourceTypedType + case v1.Task_SyncPartial_case: + return taskTypes.PartialSyncType default: return taskTypes.UnknownType } From 01261dc264e33e1ea7ea710d0f1bbc859a36b0d3 Mon Sep 17 00:00:00 2001 From: Justin Gallardo Date: Mon, 22 Dec 2025 16:56:22 -0800 Subject: [PATCH 7/7] Refactor sync functionality to fully implement partial sync handling - Removed `partialSyncResourceTypeID` from various components, including the connector runner and CLI commands, to streamline the codebase. - Replaced `SyncResourceTypedTask` with `SyncPartialTask` in protocol buffers and task processing logic, supporting both targeted resources and resource type modes. - Updated validation logic and methods to accommodate the new `SyncPartialTask`, ensuring proper handling of partial sync operations. - Enhanced documentation and comments to clarify the purpose and functionality of the new partial sync implementation. --- internal/connector/connector.go | 8 - pb/c1/connectorapi/baton/v1/baton.pb.go | 564 ++++++++++++------ .../baton/v1/baton.pb.validate.go | 274 +++++++-- .../baton/v1/baton_protoopaque.pb.go | 550 +++++++++++------ pkg/cli/commands.go | 4 - pkg/connectorrunner/runner.go | 33 +- pkg/field/defaults.go | 5 - pkg/types/tasks/tasks.go | 6 +- proto/c1/connectorapi/baton/v1/baton.proto | 24 +- 9 files changed, 990 insertions(+), 478 deletions(-) diff --git a/internal/connector/connector.go b/internal/connector/connector.go index d2369f750..ab6da92c6 100644 --- a/internal/connector/connector.go +++ b/internal/connector/connector.go @@ -92,7 +92,6 @@ type wrapper struct { targetedSyncResources []*connectorV2.Resource sessionStoreEnabled bool syncResourceTypeIDs []string - partialSyncResourceTypeID string rateLimiter ratelimitV1.RateLimiterServiceServer rlCfg *ratelimitV1.RateLimiterConfig @@ -177,13 +176,6 @@ func WithSyncResourceTypeIDs(resourceTypeIDs []string) Option { } } -func WithPartialSyncResourceType(resourceTypeID string) Option { - return func(ctx context.Context, w *wrapper) error { - w.partialSyncResourceTypeID = resourceTypeID - return nil - } -} - // NewConnectorWrapper returns a connector wrapper for running connector services locally. func NewWrapper(ctx context.Context, server interface{}, opts ...Option) (*wrapper, error) { connectorServer, isServer := server.(types.ConnectorServer) diff --git a/pb/c1/connectorapi/baton/v1/baton.pb.go b/pb/c1/connectorapi/baton/v1/baton.pb.go index 4f3dbb287..2c830c1be 100644 --- a/pb/c1/connectorapi/baton/v1/baton.pb.go +++ b/pb/c1/connectorapi/baton/v1/baton.pb.go @@ -106,7 +106,7 @@ type Task struct { // *Task_ActionStatus // *Task_CreateSyncDiff // *Task_CompactSyncs_ - // *Task_SyncResourceTyped + // *Task_SyncPartial TaskType isTask_TaskType `protobuf_oneof:"task_type"` Debug bool `protobuf:"varint,3,opt,name=debug,proto3" json:"debug,omitempty"` unknownFields protoimpl.UnknownFields @@ -348,10 +348,10 @@ func (x *Task) GetCompactSyncs() *Task_CompactSyncs { return nil } -func (x *Task) GetSyncResourceTyped() *Task_SyncResourceTypedTask { +func (x *Task) GetSyncPartial() *Task_SyncPartialTask { if x != nil { - if x, ok := x.TaskType.(*Task_SyncResourceTyped); ok { - return x.SyncResourceTyped + if x, ok := x.TaskType.(*Task_SyncPartial); ok { + return x.SyncPartial } } return nil @@ -540,12 +540,12 @@ func (x *Task) SetCompactSyncs(v *Task_CompactSyncs) { x.TaskType = &Task_CompactSyncs_{v} } -func (x *Task) SetSyncResourceTyped(v *Task_SyncResourceTypedTask) { +func (x *Task) SetSyncPartial(v *Task_SyncPartialTask) { if v == nil { x.TaskType = nil return } - x.TaskType = &Task_SyncResourceTyped{v} + x.TaskType = &Task_SyncPartial{v} } func (x *Task) SetDebug(v bool) { @@ -727,11 +727,11 @@ func (x *Task) HasCompactSyncs() bool { return ok } -func (x *Task) HasSyncResourceTyped() bool { +func (x *Task) HasSyncPartial() bool { if x == nil { return false } - _, ok := x.TaskType.(*Task_SyncResourceTyped) + _, ok := x.TaskType.(*Task_SyncPartial) return ok } @@ -865,8 +865,8 @@ func (x *Task) ClearCompactSyncs() { } } -func (x *Task) ClearSyncResourceTyped() { - if _, ok := x.TaskType.(*Task_SyncResourceTyped); ok { +func (x *Task) ClearSyncPartial() { + if _, ok := x.TaskType.(*Task_SyncPartial); ok { x.TaskType = nil } } @@ -893,7 +893,7 @@ const Task_ActionInvoke_case case_Task_TaskType = 117 const Task_ActionStatus_case case_Task_TaskType = 118 const Task_CreateSyncDiff_case case_Task_TaskType = 119 const Task_CompactSyncs_case case_Task_TaskType = 120 -const Task_SyncResourceTyped_case case_Task_TaskType = 121 +const Task_SyncPartial_case case_Task_TaskType = 121 func (x *Task) WhichTaskType() case_Task_TaskType { if x == nil { @@ -942,8 +942,8 @@ func (x *Task) WhichTaskType() case_Task_TaskType { return Task_CreateSyncDiff_case case *Task_CompactSyncs_: return Task_CompactSyncs_case - case *Task_SyncResourceTyped: - return Task_SyncResourceTyped_case + case *Task_SyncPartial: + return Task_SyncPartial_case default: return Task_TaskType_not_set_case } @@ -976,7 +976,7 @@ type Task_builder struct { ActionStatus *Task_ActionStatusTask CreateSyncDiff *Task_CreateSyncDiffTask CompactSyncs *Task_CompactSyncs - SyncResourceTyped *Task_SyncResourceTypedTask + SyncPartial *Task_SyncPartialTask // -- end of TaskType Debug bool } @@ -1050,8 +1050,8 @@ func (b0 Task_builder) Build() *Task { if b.CompactSyncs != nil { x.TaskType = &Task_CompactSyncs_{b.CompactSyncs} } - if b.SyncResourceTyped != nil { - x.TaskType = &Task_SyncResourceTyped{b.SyncResourceTyped} + if b.SyncPartial != nil { + x.TaskType = &Task_SyncPartial{b.SyncPartial} } x.Debug = b.Debug return m0 @@ -1155,8 +1155,8 @@ type Task_CompactSyncs_ struct { CompactSyncs *Task_CompactSyncs `protobuf:"bytes,120,opt,name=compact_syncs,json=compactSyncs,proto3,oneof"` } -type Task_SyncResourceTyped struct { - SyncResourceTyped *Task_SyncResourceTypedTask `protobuf:"bytes,121,opt,name=sync_resource_typed,json=syncResourceTyped,proto3,oneof"` +type Task_SyncPartial struct { + SyncPartial *Task_SyncPartialTask `protobuf:"bytes,121,opt,name=sync_partial,json=syncPartial,proto3,oneof"` } func (*Task_None) isTask_TaskType() {} @@ -1201,7 +1201,7 @@ func (*Task_CreateSyncDiff) isTask_TaskType() {} func (*Task_CompactSyncs_) isTask_TaskType() {} -func (*Task_SyncResourceTyped) isTask_TaskType() {} +func (*Task_SyncPartial) isTask_TaskType() {} type BatonServiceHelloRequest struct { state protoimpl.MessageState `protogen:"hybrid.v1"` @@ -2587,10 +2587,6 @@ type Task_SyncFullTask struct { SkipExpandGrants bool `protobuf:"varint,2,opt,name=skip_expand_grants,json=skipExpandGrants,proto3" json:"skip_expand_grants,omitempty"` SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3" json:"skip_entitlements_and_grants,omitempty"` TargetedSyncResources []*v2.Resource `protobuf:"bytes,4,rep,name=targeted_sync_resources,json=targetedSyncResources,proto3" json:"targeted_sync_resources,omitempty"` - // partial_sync_resource_type_id triggers a partial sync for a single resource type. - // When set, only resources of this type are synced (with parent discovery). - // Entitlements and grants are never synced for partial syncs. - PartialSyncResourceTypeId string `protobuf:"bytes,5,opt,name=partial_sync_resource_type_id,json=partialSyncResourceTypeId,proto3" json:"partial_sync_resource_type_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2648,13 +2644,6 @@ func (x *Task_SyncFullTask) GetTargetedSyncResources() []*v2.Resource { return nil } -func (x *Task_SyncFullTask) GetPartialSyncResourceTypeId() string { - if x != nil { - return x.PartialSyncResourceTypeId - } - return "" -} - func (x *Task_SyncFullTask) SetAnnotations(v []*anypb.Any) { x.Annotations = v } @@ -2671,10 +2660,6 @@ func (x *Task_SyncFullTask) SetTargetedSyncResources(v []*v2.Resource) { x.TargetedSyncResources = v } -func (x *Task_SyncFullTask) SetPartialSyncResourceTypeId(v string) { - x.PartialSyncResourceTypeId = v -} - type Task_SyncFullTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. @@ -2682,10 +2667,6 @@ type Task_SyncFullTask_builder struct { SkipExpandGrants bool SkipEntitlementsAndGrants bool TargetedSyncResources []*v2.Resource - // partial_sync_resource_type_id triggers a partial sync for a single resource type. - // When set, only resources of this type are synced (with parent discovery). - // Entitlements and grants are never synced for partial syncs. - PartialSyncResourceTypeId string } func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { @@ -2696,33 +2677,38 @@ func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { x.SkipExpandGrants = b.SkipExpandGrants x.SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants x.TargetedSyncResources = b.TargetedSyncResources - x.PartialSyncResourceTypeId = b.PartialSyncResourceTypeId return m0 } -// Deprecated: Use SyncFullTask.partial_sync_resource_type_id instead. -type Task_SyncResourceTypedTask struct { - state protoimpl.MessageState `protogen:"hybrid.v1"` - Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` - ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3" json:"resource_type_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +// SyncPartialTask is a partial sync task that syncs either targeted resources or a single resource type. +// When using targeted_resources, entitlements and grants are included. +// When using resource_type_id, only resources are synced (entitlements and grants are skipped). +type Task_SyncPartialTask struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` + // Types that are valid to be assigned to SyncMode: + // + // *Task_SyncPartialTask_TargetedResources_ + // *Task_SyncPartialTask_ResourceTypeId + SyncMode isTask_SyncPartialTask_SyncMode `protobuf_oneof:"sync_mode"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Task_SyncResourceTypedTask) Reset() { - *x = Task_SyncResourceTypedTask{} +func (x *Task_SyncPartialTask) Reset() { + *x = Task_SyncPartialTask{} mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Task_SyncResourceTypedTask) String() string { +func (x *Task_SyncPartialTask) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Task_SyncResourceTypedTask) ProtoMessage() {} +func (*Task_SyncPartialTask) ProtoMessage() {} -func (x *Task_SyncResourceTypedTask) ProtoReflect() protoreflect.Message { +func (x *Task_SyncPartialTask) ProtoReflect() protoreflect.Message { mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2734,44 +2720,165 @@ func (x *Task_SyncResourceTypedTask) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *Task_SyncResourceTypedTask) GetAnnotations() []*anypb.Any { +func (x *Task_SyncPartialTask) GetAnnotations() []*anypb.Any { if x != nil { return x.Annotations } return nil } -func (x *Task_SyncResourceTypedTask) GetResourceTypeId() string { +func (x *Task_SyncPartialTask) GetSyncMode() isTask_SyncPartialTask_SyncMode { if x != nil { - return x.ResourceTypeId + return x.SyncMode + } + return nil +} + +func (x *Task_SyncPartialTask) GetTargetedResources() *Task_SyncPartialTask_TargetedResources { + if x != nil { + if x, ok := x.SyncMode.(*Task_SyncPartialTask_TargetedResources_); ok { + return x.TargetedResources + } + } + return nil +} + +func (x *Task_SyncPartialTask) GetResourceTypeId() string { + if x != nil { + if x, ok := x.SyncMode.(*Task_SyncPartialTask_ResourceTypeId); ok { + return x.ResourceTypeId + } } return "" } -func (x *Task_SyncResourceTypedTask) SetAnnotations(v []*anypb.Any) { +func (x *Task_SyncPartialTask) SetAnnotations(v []*anypb.Any) { x.Annotations = v } -func (x *Task_SyncResourceTypedTask) SetResourceTypeId(v string) { - x.ResourceTypeId = v +func (x *Task_SyncPartialTask) SetTargetedResources(v *Task_SyncPartialTask_TargetedResources) { + if v == nil { + x.SyncMode = nil + return + } + x.SyncMode = &Task_SyncPartialTask_TargetedResources_{v} +} + +func (x *Task_SyncPartialTask) SetResourceTypeId(v string) { + x.SyncMode = &Task_SyncPartialTask_ResourceTypeId{v} +} + +func (x *Task_SyncPartialTask) HasSyncMode() bool { + if x == nil { + return false + } + return x.SyncMode != nil +} + +func (x *Task_SyncPartialTask) HasTargetedResources() bool { + if x == nil { + return false + } + _, ok := x.SyncMode.(*Task_SyncPartialTask_TargetedResources_) + return ok +} + +func (x *Task_SyncPartialTask) HasResourceTypeId() bool { + if x == nil { + return false + } + _, ok := x.SyncMode.(*Task_SyncPartialTask_ResourceTypeId) + return ok } -type Task_SyncResourceTypedTask_builder struct { +func (x *Task_SyncPartialTask) ClearSyncMode() { + x.SyncMode = nil +} + +func (x *Task_SyncPartialTask) ClearTargetedResources() { + if _, ok := x.SyncMode.(*Task_SyncPartialTask_TargetedResources_); ok { + x.SyncMode = nil + } +} + +func (x *Task_SyncPartialTask) ClearResourceTypeId() { + if _, ok := x.SyncMode.(*Task_SyncPartialTask_ResourceTypeId); ok { + x.SyncMode = nil + } +} + +const Task_SyncPartialTask_SyncMode_not_set_case case_Task_SyncPartialTask_SyncMode = 0 +const Task_SyncPartialTask_TargetedResources_case case_Task_SyncPartialTask_SyncMode = 2 +const Task_SyncPartialTask_ResourceTypeId_case case_Task_SyncPartialTask_SyncMode = 3 + +func (x *Task_SyncPartialTask) WhichSyncMode() case_Task_SyncPartialTask_SyncMode { + if x == nil { + return Task_SyncPartialTask_SyncMode_not_set_case + } + switch x.SyncMode.(type) { + case *Task_SyncPartialTask_TargetedResources_: + return Task_SyncPartialTask_TargetedResources_case + case *Task_SyncPartialTask_ResourceTypeId: + return Task_SyncPartialTask_ResourceTypeId_case + default: + return Task_SyncPartialTask_SyncMode_not_set_case + } +} + +type Task_SyncPartialTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. - Annotations []*anypb.Any - ResourceTypeId string + Annotations []*anypb.Any + // Fields of oneof SyncMode: + // Targeted resources to sync - includes entitlements and grants + TargetedResources *Task_SyncPartialTask_TargetedResources + // Single resource type to sync - skips entitlements and grants + ResourceTypeId *string + // -- end of SyncMode } -func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask { - m0 := &Task_SyncResourceTypedTask{} +func (b0 Task_SyncPartialTask_builder) Build() *Task_SyncPartialTask { + m0 := &Task_SyncPartialTask{} b, x := &b0, m0 _, _ = b, x x.Annotations = b.Annotations - x.ResourceTypeId = b.ResourceTypeId + if b.TargetedResources != nil { + x.SyncMode = &Task_SyncPartialTask_TargetedResources_{b.TargetedResources} + } + if b.ResourceTypeId != nil { + x.SyncMode = &Task_SyncPartialTask_ResourceTypeId{*b.ResourceTypeId} + } return m0 } +type case_Task_SyncPartialTask_SyncMode protoreflect.FieldNumber + +func (x case_Task_SyncPartialTask_SyncMode) String() string { + md := file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16].Descriptor() + if x == 0 { + return "not set" + } + return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x)) +} + +type isTask_SyncPartialTask_SyncMode interface { + isTask_SyncPartialTask_SyncMode() +} + +type Task_SyncPartialTask_TargetedResources_ struct { + // Targeted resources to sync - includes entitlements and grants + TargetedResources *Task_SyncPartialTask_TargetedResources `protobuf:"bytes,2,opt,name=targeted_resources,json=targetedResources,proto3,oneof"` +} + +type Task_SyncPartialTask_ResourceTypeId struct { + // Single resource type to sync - skips entitlements and grants + ResourceTypeId string `protobuf:"bytes,3,opt,name=resource_type_id,json=resourceTypeId,proto3,oneof"` +} + +func (*Task_SyncPartialTask_TargetedResources_) isTask_SyncPartialTask_SyncMode() {} + +func (*Task_SyncPartialTask_ResourceTypeId) isTask_SyncPartialTask_SyncMode() {} + type Task_EventFeedTask struct { state protoimpl.MessageState `protogen:"hybrid.v1"` Annotations []*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3" json:"annotations,omitempty"` @@ -4259,6 +4366,63 @@ func (b0 Task_CompactSyncs_builder) Build() *Task_CompactSyncs { return m0 } +type Task_SyncPartialTask_TargetedResources struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Resources []*v2.Resource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Task_SyncPartialTask_TargetedResources) Reset() { + *x = Task_SyncPartialTask_TargetedResources{} + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Task_SyncPartialTask_TargetedResources) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Task_SyncPartialTask_TargetedResources) ProtoMessage() {} + +func (x *Task_SyncPartialTask_TargetedResources) ProtoReflect() protoreflect.Message { + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *Task_SyncPartialTask_TargetedResources) GetResources() []*v2.Resource { + if x != nil { + return x.Resources + } + return nil +} + +func (x *Task_SyncPartialTask_TargetedResources) SetResources(v []*v2.Resource) { + x.Resources = v +} + +type Task_SyncPartialTask_TargetedResources_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Resources []*v2.Resource +} + +func (b0 Task_SyncPartialTask_TargetedResources_builder) Build() *Task_SyncPartialTask_TargetedResources { + m0 := &Task_SyncPartialTask_TargetedResources{} + b, x := &b0, m0 + _, _ = b, x + x.Resources = b.Resources + return m0 +} + type Task_CompactSyncs_CompactableSync struct { state protoimpl.MessageState `protogen:"hybrid.v1"` FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath,proto3" json:"file_path,omitempty"` @@ -4269,7 +4433,7 @@ type Task_CompactSyncs_CompactableSync struct { func (x *Task_CompactSyncs_CompactableSync) Reset() { *x = Task_CompactSyncs_CompactableSync{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4281,7 +4445,7 @@ func (x *Task_CompactSyncs_CompactableSync) String() string { func (*Task_CompactSyncs_CompactableSync) ProtoMessage() {} func (x *Task_CompactSyncs_CompactableSync) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4341,7 +4505,7 @@ type BatonServiceHelloRequest_BuildInfo struct { func (x *BatonServiceHelloRequest_BuildInfo) Reset() { *x = BatonServiceHelloRequest_BuildInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4353,7 +4517,7 @@ func (x *BatonServiceHelloRequest_BuildInfo) String() string { func (*BatonServiceHelloRequest_BuildInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_BuildInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4431,7 +4595,7 @@ type BatonServiceHelloRequest_OSInfo struct { func (x *BatonServiceHelloRequest_OSInfo) Reset() { *x = BatonServiceHelloRequest_OSInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4443,7 +4607,7 @@ func (x *BatonServiceHelloRequest_OSInfo) String() string { func (*BatonServiceHelloRequest_OSInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_OSInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4581,7 +4745,7 @@ type BatonServiceUploadAssetRequest_UploadMetadata struct { func (x *BatonServiceUploadAssetRequest_UploadMetadata) Reset() { *x = BatonServiceUploadAssetRequest_UploadMetadata{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4593,7 +4757,7 @@ func (x *BatonServiceUploadAssetRequest_UploadMetadata) String() string { func (*BatonServiceUploadAssetRequest_UploadMetadata) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadMetadata) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4665,7 +4829,7 @@ type BatonServiceUploadAssetRequest_UploadData struct { func (x *BatonServiceUploadAssetRequest_UploadData) Reset() { *x = BatonServiceUploadAssetRequest_UploadData{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4677,7 +4841,7 @@ func (x *BatonServiceUploadAssetRequest_UploadData) String() string { func (*BatonServiceUploadAssetRequest_UploadData) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadData) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4727,7 +4891,7 @@ type BatonServiceUploadAssetRequest_UploadEOF struct { func (x *BatonServiceUploadAssetRequest_UploadEOF) Reset() { *x = BatonServiceUploadAssetRequest_UploadEOF{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4739,7 +4903,7 @@ func (x *BatonServiceUploadAssetRequest_UploadEOF) String() string { func (*BatonServiceUploadAssetRequest_UploadEOF) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadEOF) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4803,7 +4967,7 @@ type BatonServiceFinishTaskRequest_Error struct { func (x *BatonServiceFinishTaskRequest_Error) Reset() { *x = BatonServiceFinishTaskRequest_Error{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4815,7 +4979,7 @@ func (x *BatonServiceFinishTaskRequest_Error) String() string { func (*BatonServiceFinishTaskRequest_Error) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Error) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4900,7 +5064,7 @@ type BatonServiceFinishTaskRequest_Success struct { func (x *BatonServiceFinishTaskRequest_Success) Reset() { *x = BatonServiceFinishTaskRequest_Success{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4912,7 +5076,7 @@ func (x *BatonServiceFinishTaskRequest_Success) String() string { func (*BatonServiceFinishTaskRequest_Success) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Success) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4977,7 +5141,7 @@ var File_c1_connectorapi_baton_v1_baton_proto protoreflect.FileDescriptor const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\n" + - "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xd1*\n" + + "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xc7+\n" + "\x04Task\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12=\n" + "\x06status\x18\x02 \x01(\x0e2%.c1.connectorapi.baton.v1.Task.StatusR\x06status\x12=\n" + @@ -5003,22 +5167,25 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\raction_invoke\x18u \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionInvokeTaskH\x00R\factionInvoke\x12V\n" + "\raction_status\x18v \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionStatusTaskH\x00R\factionStatus\x12]\n" + "\x10create_sync_diff\x18w \x01(\v21.c1.connectorapi.baton.v1.Task.CreateSyncDiffTaskH\x00R\x0ecreateSyncDiff\x12R\n" + - "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12f\n" + - "\x13sync_resource_typed\x18y \x01(\v24.c1.connectorapi.baton.v1.Task.SyncResourceTypedTaskH\x00R\x11syncResourceTyped\x12\x14\n" + + "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12S\n" + + "\fsync_partial\x18y \x01(\v2..c1.connectorapi.baton.v1.Task.SyncPartialTaskH\x00R\vsyncPartial\x12\x14\n" + "\x05debug\x18\x03 \x01(\bR\x05debug\x1aB\n" + "\bNoneTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1aC\n" + "\tHelloTask\x126\n" + - "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\xca\x02\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\x88\x02\n" + "\fSyncFullTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12,\n" + "\x12skip_expand_grants\x18\x02 \x01(\bR\x10skipExpandGrants\x12?\n" + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x12Q\n" + - "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x12@\n" + - "\x1dpartial_sync_resource_type_id\x18\x05 \x01(\tR\x19partialSyncResourceTypeId\x1ay\n" + - "\x15SyncResourceTypedTask\x126\n" + - "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12(\n" + - "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x1a~\n" + + "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a\xc3\x02\n" + + "\x0fSyncPartialTask\x126\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12q\n" + + "\x12targeted_resources\x18\x02 \x01(\v2@.c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResourcesH\x00R\x11targetedResources\x12*\n" + + "\x10resource_type_id\x18\x03 \x01(\tH\x00R\x0eresourceTypeId\x1aL\n" + + "\x11TargetedResources\x127\n" + + "\tresources\x18\x01 \x03(\v2\x19.c1.connector.v2.ResourceR\tresourcesB\v\n" + + "\tsync_mode\x1a~\n" + "\rEventFeedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x125\n" + "\bstart_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x1a\xf3\x01\n" + @@ -5192,7 +5359,7 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\x0eStartDebugging\x12/.c1.connectorapi.baton.v1.StartDebuggingRequest\x1a0.c1.connectorapi.baton.v1.StartDebuggingResponse\"\x00B7Z5gitlab.com/ductone/c1/pkg/pb/c1/connectorapi/baton/v1b\x06proto3" var file_c1_connectorapi_baton_v1_baton_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (Task_Status)(0), // 0: c1.connectorapi.baton.v1.Task.Status (*Task)(nil), // 1: c1.connectorapi.baton.v1.Task @@ -5211,7 +5378,7 @@ var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (*Task_NoneTask)(nil), // 14: c1.connectorapi.baton.v1.Task.NoneTask (*Task_HelloTask)(nil), // 15: c1.connectorapi.baton.v1.Task.HelloTask (*Task_SyncFullTask)(nil), // 16: c1.connectorapi.baton.v1.Task.SyncFullTask - (*Task_SyncResourceTypedTask)(nil), // 17: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask + (*Task_SyncPartialTask)(nil), // 17: c1.connectorapi.baton.v1.Task.SyncPartialTask (*Task_EventFeedTask)(nil), // 18: c1.connectorapi.baton.v1.Task.EventFeedTask (*Task_GrantTask)(nil), // 19: c1.connectorapi.baton.v1.Task.GrantTask (*Task_RevokeTask)(nil), // 20: c1.connectorapi.baton.v1.Task.RevokeTask @@ -5230,29 +5397,30 @@ var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (*Task_ActionStatusTask)(nil), // 33: c1.connectorapi.baton.v1.Task.ActionStatusTask (*Task_CreateSyncDiffTask)(nil), // 34: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask (*Task_CompactSyncs)(nil), // 35: c1.connectorapi.baton.v1.Task.CompactSyncs - (*Task_CompactSyncs_CompactableSync)(nil), // 36: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - (*BatonServiceHelloRequest_BuildInfo)(nil), // 37: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - (*BatonServiceHelloRequest_OSInfo)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - (*BatonServiceUploadAssetRequest_UploadData)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - (*BatonServiceFinishTaskRequest_Error)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - (*BatonServiceFinishTaskRequest_Success)(nil), // 43: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - (*v2.ConnectorMetadata)(nil), // 44: c1.connector.v2.ConnectorMetadata - (*anypb.Any)(nil), // 45: google.protobuf.Any - (*durationpb.Duration)(nil), // 46: google.protobuf.Duration - (*status.Status)(nil), // 47: google.rpc.Status - (*v2.Resource)(nil), // 48: c1.connector.v2.Resource - (*timestamppb.Timestamp)(nil), // 49: google.protobuf.Timestamp - (*v2.Entitlement)(nil), // 50: c1.connector.v2.Entitlement - (*v2.Grant)(nil), // 51: c1.connector.v2.Grant - (*v2.AccountInfo)(nil), // 52: c1.connector.v2.AccountInfo - (*v2.CredentialOptions)(nil), // 53: c1.connector.v2.CredentialOptions - (*v2.EncryptionConfig)(nil), // 54: c1.connector.v2.EncryptionConfig - (*v2.ResourceId)(nil), // 55: c1.connector.v2.ResourceId - (*v2.TicketRequest)(nil), // 56: c1.connector.v2.TicketRequest - (*v2.TicketSchema)(nil), // 57: c1.connector.v2.TicketSchema - (*structpb.Struct)(nil), // 58: google.protobuf.Struct + (*Task_SyncPartialTask_TargetedResources)(nil), // 36: c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResources + (*Task_CompactSyncs_CompactableSync)(nil), // 37: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + (*BatonServiceHelloRequest_BuildInfo)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + (*BatonServiceHelloRequest_OSInfo)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + (*BatonServiceUploadAssetRequest_UploadData)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + (*BatonServiceFinishTaskRequest_Error)(nil), // 43: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + (*BatonServiceFinishTaskRequest_Success)(nil), // 44: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + (*v2.ConnectorMetadata)(nil), // 45: c1.connector.v2.ConnectorMetadata + (*anypb.Any)(nil), // 46: google.protobuf.Any + (*durationpb.Duration)(nil), // 47: google.protobuf.Duration + (*status.Status)(nil), // 48: google.rpc.Status + (*v2.Resource)(nil), // 49: c1.connector.v2.Resource + (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp + (*v2.Entitlement)(nil), // 51: c1.connector.v2.Entitlement + (*v2.Grant)(nil), // 52: c1.connector.v2.Grant + (*v2.AccountInfo)(nil), // 53: c1.connector.v2.AccountInfo + (*v2.CredentialOptions)(nil), // 54: c1.connector.v2.CredentialOptions + (*v2.EncryptionConfig)(nil), // 55: c1.connector.v2.EncryptionConfig + (*v2.ResourceId)(nil), // 56: c1.connector.v2.ResourceId + (*v2.TicketRequest)(nil), // 57: c1.connector.v2.TicketRequest + (*v2.TicketSchema)(nil), // 58: c1.connector.v2.TicketSchema + (*structpb.Struct)(nil), // 59: google.protobuf.Struct } var file_c1_connectorapi_baton_v1_baton_proto_depIdxs = []int32{ 0, // 0: c1.connectorapi.baton.v1.Task.status:type_name -> c1.connectorapi.baton.v1.Task.Status @@ -5277,87 +5445,89 @@ var file_c1_connectorapi_baton_v1_baton_proto_depIdxs = []int32{ 33, // 19: c1.connectorapi.baton.v1.Task.action_status:type_name -> c1.connectorapi.baton.v1.Task.ActionStatusTask 34, // 20: c1.connectorapi.baton.v1.Task.create_sync_diff:type_name -> c1.connectorapi.baton.v1.Task.CreateSyncDiffTask 35, // 21: c1.connectorapi.baton.v1.Task.compact_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs - 17, // 22: c1.connectorapi.baton.v1.Task.sync_resource_typed:type_name -> c1.connectorapi.baton.v1.Task.SyncResourceTypedTask - 37, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - 38, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - 44, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata - 45, // 26: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any - 45, // 27: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any + 17, // 22: c1.connectorapi.baton.v1.Task.sync_partial:type_name -> c1.connectorapi.baton.v1.Task.SyncPartialTask + 38, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + 39, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + 45, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata + 46, // 26: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any + 46, // 27: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any 1, // 28: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.task:type_name -> c1.connectorapi.baton.v1.Task - 46, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration - 46, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration - 45, // 31: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any - 45, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any - 46, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration - 45, // 34: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any - 39, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - 40, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - 41, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - 45, // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any - 47, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status - 42, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - 43, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - 45, // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any - 45, // 43: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any - 45, // 44: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any - 45, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any - 48, // 46: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource - 45, // 47: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask.annotations:type_name -> google.protobuf.Any - 45, // 48: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any - 49, // 49: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp - 50, // 50: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement - 48, // 51: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource - 45, // 52: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any - 46, // 53: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration - 51, // 54: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant - 45, // 55: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any - 52, // 56: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo - 53, // 57: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 54, // 58: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 48, // 59: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource - 55, // 60: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId - 55, // 61: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId - 55, // 62: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId - 53, // 63: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 54, // 64: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 56, // 65: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest - 57, // 66: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema - 45, // 67: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any - 25, // 68: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask - 29, // 69: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask - 45, // 70: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any - 45, // 71: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any - 45, // 72: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any - 45, // 73: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any - 58, // 74: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct - 45, // 75: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any - 45, // 76: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any - 45, // 77: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any - 36, // 78: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - 45, // 79: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any - 45, // 80: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any - 45, // 81: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any - 45, // 82: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any - 45, // 83: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any - 45, // 84: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any - 45, // 85: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any - 2, // 86: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest - 4, // 87: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest - 6, // 88: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest - 10, // 89: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest - 8, // 90: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest - 12, // 91: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest - 3, // 92: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse - 5, // 93: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse - 7, // 94: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse - 11, // 95: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse - 9, // 96: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse - 13, // 97: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse - 92, // [92:98] is the sub-list for method output_type - 86, // [86:92] is the sub-list for method input_type - 86, // [86:86] is the sub-list for extension type_name - 86, // [86:86] is the sub-list for extension extendee - 0, // [0:86] is the sub-list for field type_name + 47, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration + 47, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration + 46, // 31: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any + 46, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any + 47, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration + 46, // 34: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any + 40, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + 41, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + 42, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + 46, // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any + 48, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status + 43, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + 44, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + 46, // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any + 46, // 43: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any + 46, // 44: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any + 46, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any + 49, // 46: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource + 46, // 47: c1.connectorapi.baton.v1.Task.SyncPartialTask.annotations:type_name -> google.protobuf.Any + 36, // 48: c1.connectorapi.baton.v1.Task.SyncPartialTask.targeted_resources:type_name -> c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResources + 46, // 49: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any + 50, // 50: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp + 51, // 51: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement + 49, // 52: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource + 46, // 53: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any + 47, // 54: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration + 52, // 55: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant + 46, // 56: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any + 53, // 57: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo + 54, // 58: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 55, // 59: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 49, // 60: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource + 56, // 61: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId + 56, // 62: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId + 56, // 63: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId + 54, // 64: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 55, // 65: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 57, // 66: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest + 58, // 67: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema + 46, // 68: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any + 25, // 69: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask + 29, // 70: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask + 46, // 71: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any + 46, // 72: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any + 46, // 73: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any + 46, // 74: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any + 59, // 75: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct + 46, // 76: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any + 46, // 77: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any + 46, // 78: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any + 37, // 79: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + 46, // 80: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any + 49, // 81: c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResources.resources:type_name -> c1.connector.v2.Resource + 46, // 82: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any + 46, // 83: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any + 46, // 84: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any + 46, // 85: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any + 46, // 86: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any + 46, // 87: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any + 2, // 88: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest + 4, // 89: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest + 6, // 90: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest + 10, // 91: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest + 8, // 92: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest + 12, // 93: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest + 3, // 94: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse + 5, // 95: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse + 7, // 96: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse + 11, // 97: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse + 9, // 98: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse + 13, // 99: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse + 94, // [94:100] is the sub-list for method output_type + 88, // [88:94] is the sub-list for method input_type + 88, // [88:88] is the sub-list for extension type_name + 88, // [88:88] is the sub-list for extension extendee + 0, // [0:88] is the sub-list for field type_name } func init() { file_c1_connectorapi_baton_v1_baton_proto_init() } @@ -5387,7 +5557,7 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { (*Task_ActionStatus)(nil), (*Task_CreateSyncDiff)(nil), (*Task_CompactSyncs_)(nil), - (*Task_SyncResourceTyped)(nil), + (*Task_SyncPartial)(nil), } file_c1_connectorapi_baton_v1_baton_proto_msgTypes[7].OneofWrappers = []any{ (*BatonServiceUploadAssetRequest_Metadata)(nil), @@ -5398,13 +5568,17 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { (*BatonServiceFinishTaskRequest_Error_)(nil), (*BatonServiceFinishTaskRequest_Success_)(nil), } + file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16].OneofWrappers = []any{ + (*Task_SyncPartialTask_TargetedResources_)(nil), + (*Task_SyncPartialTask_ResourceTypeId)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_c1_connectorapi_baton_v1_baton_proto_rawDesc), len(file_c1_connectorapi_baton_v1_baton_proto_rawDesc)), NumEnums: 1, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 1, }, diff --git a/pb/c1/connectorapi/baton/v1/baton.pb.validate.go b/pb/c1/connectorapi/baton/v1/baton.pb.validate.go index 2471f54a9..d84430efd 100644 --- a/pb/c1/connectorapi/baton/v1/baton.pb.validate.go +++ b/pb/c1/connectorapi/baton/v1/baton.pb.validate.go @@ -924,7 +924,7 @@ func (m *Task) validate(all bool) error { } } - case *Task_SyncResourceTyped: + case *Task_SyncPartial: if v == nil { err := TaskValidationError{ field: "TaskType", @@ -937,11 +937,11 @@ func (m *Task) validate(all bool) error { } if all { - switch v := interface{}(m.GetSyncResourceTyped()).(type) { + switch v := interface{}(m.GetSyncPartial()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { errors = append(errors, TaskValidationError{ - field: "SyncResourceTyped", + field: "SyncPartial", reason: "embedded message failed validation", cause: err, }) @@ -949,16 +949,16 @@ func (m *Task) validate(all bool) error { case interface{ Validate() error }: if err := v.Validate(); err != nil { errors = append(errors, TaskValidationError{ - field: "SyncResourceTyped", + field: "SyncPartial", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetSyncResourceTyped()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetSyncPartial()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return TaskValidationError{ - field: "SyncResourceTyped", + field: "SyncPartial", reason: "embedded message failed validation", cause: err, } @@ -3493,8 +3493,6 @@ func (m *Task_SyncFullTask) validate(all bool) error { } - // no validation rules for PartialSyncResourceTypeId - if len(errors) > 0 { return Task_SyncFullTaskMultiError(errors) } @@ -3575,22 +3573,22 @@ var _ interface { ErrorName() string } = Task_SyncFullTaskValidationError{} -// Validate checks the field values on Task_SyncResourceTypedTask with the -// rules defined in the proto definition for this message. If any rules are +// Validate checks the field values on Task_SyncPartialTask with the rules +// defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. -func (m *Task_SyncResourceTypedTask) Validate() error { +func (m *Task_SyncPartialTask) Validate() error { return m.validate(false) } -// ValidateAll checks the field values on Task_SyncResourceTypedTask with the -// rules defined in the proto definition for this message. If any rules are +// ValidateAll checks the field values on Task_SyncPartialTask with the rules +// defined in the proto definition for this message. If any rules are // violated, the result is a list of violation errors wrapped in -// Task_SyncResourceTypedTaskMultiError, or nil if none found. -func (m *Task_SyncResourceTypedTask) ValidateAll() error { +// Task_SyncPartialTaskMultiError, or nil if none found. +func (m *Task_SyncPartialTask) ValidateAll() error { return m.validate(true) } -func (m *Task_SyncResourceTypedTask) validate(all bool) error { +func (m *Task_SyncPartialTask) validate(all bool) error { if m == nil { return nil } @@ -3604,7 +3602,7 @@ func (m *Task_SyncResourceTypedTask) validate(all bool) error { switch v := interface{}(item).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { - errors = append(errors, Task_SyncResourceTypedTaskValidationError{ + errors = append(errors, Task_SyncPartialTaskValidationError{ field: fmt.Sprintf("Annotations[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -3612,7 +3610,7 @@ func (m *Task_SyncResourceTypedTask) validate(all bool) error { } case interface{ Validate() error }: if err := v.Validate(); err != nil { - errors = append(errors, Task_SyncResourceTypedTaskValidationError{ + errors = append(errors, Task_SyncPartialTaskValidationError{ field: fmt.Sprintf("Annotations[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -3621,7 +3619,7 @@ func (m *Task_SyncResourceTypedTask) validate(all bool) error { } } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { - return Task_SyncResourceTypedTaskValidationError{ + return Task_SyncPartialTaskValidationError{ field: fmt.Sprintf("Annotations[%v]", idx), reason: "embedded message failed validation", cause: err, @@ -3631,22 +3629,78 @@ func (m *Task_SyncResourceTypedTask) validate(all bool) error { } - // no validation rules for ResourceTypeId + switch v := m.SyncMode.(type) { + case *Task_SyncPartialTask_TargetedResources_: + if v == nil { + err := Task_SyncPartialTaskValidationError{ + field: "SyncMode", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetTargetedResources()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, Task_SyncPartialTaskValidationError{ + field: "TargetedResources", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, Task_SyncPartialTaskValidationError{ + field: "TargetedResources", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTargetedResources()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Task_SyncPartialTaskValidationError{ + field: "TargetedResources", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Task_SyncPartialTask_ResourceTypeId: + if v == nil { + err := Task_SyncPartialTaskValidationError{ + field: "SyncMode", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + // no validation rules for ResourceTypeId + default: + _ = v // ensures v is used + } if len(errors) > 0 { - return Task_SyncResourceTypedTaskMultiError(errors) + return Task_SyncPartialTaskMultiError(errors) } return nil } -// Task_SyncResourceTypedTaskMultiError is an error wrapping multiple -// validation errors returned by Task_SyncResourceTypedTask.ValidateAll() if -// the designated constraints aren't met. -type Task_SyncResourceTypedTaskMultiError []error +// Task_SyncPartialTaskMultiError is an error wrapping multiple validation +// errors returned by Task_SyncPartialTask.ValidateAll() if the designated +// constraints aren't met. +type Task_SyncPartialTaskMultiError []error // Error returns a concatenation of all the error messages it wraps. -func (m Task_SyncResourceTypedTaskMultiError) Error() string { +func (m Task_SyncPartialTaskMultiError) Error() string { msgs := make([]string, 0, len(m)) for _, err := range m { msgs = append(msgs, err.Error()) @@ -3655,11 +3709,11 @@ func (m Task_SyncResourceTypedTaskMultiError) Error() string { } // AllErrors returns a list of validation violation errors. -func (m Task_SyncResourceTypedTaskMultiError) AllErrors() []error { return m } +func (m Task_SyncPartialTaskMultiError) AllErrors() []error { return m } -// Task_SyncResourceTypedTaskValidationError is the validation error returned -// by Task_SyncResourceTypedTask.Validate if the designated constraints aren't met. -type Task_SyncResourceTypedTaskValidationError struct { +// Task_SyncPartialTaskValidationError is the validation error returned by +// Task_SyncPartialTask.Validate if the designated constraints aren't met. +type Task_SyncPartialTaskValidationError struct { field string reason string cause error @@ -3667,24 +3721,24 @@ type Task_SyncResourceTypedTaskValidationError struct { } // Field function returns field value. -func (e Task_SyncResourceTypedTaskValidationError) Field() string { return e.field } +func (e Task_SyncPartialTaskValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e Task_SyncResourceTypedTaskValidationError) Reason() string { return e.reason } +func (e Task_SyncPartialTaskValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e Task_SyncResourceTypedTaskValidationError) Cause() error { return e.cause } +func (e Task_SyncPartialTaskValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e Task_SyncResourceTypedTaskValidationError) Key() bool { return e.key } +func (e Task_SyncPartialTaskValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e Task_SyncResourceTypedTaskValidationError) ErrorName() string { - return "Task_SyncResourceTypedTaskValidationError" +func (e Task_SyncPartialTaskValidationError) ErrorName() string { + return "Task_SyncPartialTaskValidationError" } // Error satisfies the builtin error interface -func (e Task_SyncResourceTypedTaskValidationError) Error() string { +func (e Task_SyncPartialTaskValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -3696,14 +3750,14 @@ func (e Task_SyncResourceTypedTaskValidationError) Error() string { } return fmt.Sprintf( - "invalid %sTask_SyncResourceTypedTask.%s: %s%s", + "invalid %sTask_SyncPartialTask.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = Task_SyncResourceTypedTaskValidationError{} +var _ error = Task_SyncPartialTaskValidationError{} var _ interface { Field() string @@ -3711,7 +3765,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = Task_SyncResourceTypedTaskValidationError{} +} = Task_SyncPartialTaskValidationError{} // Validate checks the field values on Task_EventFeedTask with the rules // defined in the proto definition for this message. If any rules are @@ -6572,6 +6626,146 @@ var _ interface { ErrorName() string } = Task_CompactSyncsValidationError{} +// Validate checks the field values on Task_SyncPartialTask_TargetedResources +// with the rules defined in the proto definition for this message. If any +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. +func (m *Task_SyncPartialTask_TargetedResources) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on +// Task_SyncPartialTask_TargetedResources with the rules defined in the proto +// definition for this message. If any rules are violated, the result is a +// list of violation errors wrapped in +// Task_SyncPartialTask_TargetedResourcesMultiError, or nil if none found. +func (m *Task_SyncPartialTask_TargetedResources) ValidateAll() error { + return m.validate(true) +} + +func (m *Task_SyncPartialTask_TargetedResources) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + for idx, item := range m.GetResources() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, Task_SyncPartialTask_TargetedResourcesValidationError{ + field: fmt.Sprintf("Resources[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, Task_SyncPartialTask_TargetedResourcesValidationError{ + field: fmt.Sprintf("Resources[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return Task_SyncPartialTask_TargetedResourcesValidationError{ + field: fmt.Sprintf("Resources[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return Task_SyncPartialTask_TargetedResourcesMultiError(errors) + } + + return nil +} + +// Task_SyncPartialTask_TargetedResourcesMultiError is an error wrapping +// multiple validation errors returned by +// Task_SyncPartialTask_TargetedResources.ValidateAll() if the designated +// constraints aren't met. +type Task_SyncPartialTask_TargetedResourcesMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m Task_SyncPartialTask_TargetedResourcesMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m Task_SyncPartialTask_TargetedResourcesMultiError) AllErrors() []error { return m } + +// Task_SyncPartialTask_TargetedResourcesValidationError is the validation +// error returned by Task_SyncPartialTask_TargetedResources.Validate if the +// designated constraints aren't met. +type Task_SyncPartialTask_TargetedResourcesValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e Task_SyncPartialTask_TargetedResourcesValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e Task_SyncPartialTask_TargetedResourcesValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e Task_SyncPartialTask_TargetedResourcesValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e Task_SyncPartialTask_TargetedResourcesValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e Task_SyncPartialTask_TargetedResourcesValidationError) ErrorName() string { + return "Task_SyncPartialTask_TargetedResourcesValidationError" +} + +// Error satisfies the builtin error interface +func (e Task_SyncPartialTask_TargetedResourcesValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTask_SyncPartialTask_TargetedResources.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = Task_SyncPartialTask_TargetedResourcesValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = Task_SyncPartialTask_TargetedResourcesValidationError{} + // Validate checks the field values on Task_CompactSyncs_CompactableSync with // the rules defined in the proto definition for this message. If any rules // are violated, the first error encountered is returned, or nil if there are diff --git a/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go b/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go index ed072ceb7..e45049ed4 100644 --- a/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go +++ b/pb/c1/connectorapi/baton/v1/baton_protoopaque.pb.go @@ -317,10 +317,10 @@ func (x *Task) GetCompactSyncs() *Task_CompactSyncs { return nil } -func (x *Task) GetSyncResourceTyped() *Task_SyncResourceTypedTask { +func (x *Task) GetSyncPartial() *Task_SyncPartialTask { if x != nil { - if x, ok := x.xxx_hidden_TaskType.(*task_SyncResourceTyped); ok { - return x.SyncResourceTyped + if x, ok := x.xxx_hidden_TaskType.(*task_SyncPartial); ok { + return x.SyncPartial } } return nil @@ -509,12 +509,12 @@ func (x *Task) SetCompactSyncs(v *Task_CompactSyncs) { x.xxx_hidden_TaskType = &task_CompactSyncs_{v} } -func (x *Task) SetSyncResourceTyped(v *Task_SyncResourceTypedTask) { +func (x *Task) SetSyncPartial(v *Task_SyncPartialTask) { if v == nil { x.xxx_hidden_TaskType = nil return } - x.xxx_hidden_TaskType = &task_SyncResourceTyped{v} + x.xxx_hidden_TaskType = &task_SyncPartial{v} } func (x *Task) SetDebug(v bool) { @@ -696,11 +696,11 @@ func (x *Task) HasCompactSyncs() bool { return ok } -func (x *Task) HasSyncResourceTyped() bool { +func (x *Task) HasSyncPartial() bool { if x == nil { return false } - _, ok := x.xxx_hidden_TaskType.(*task_SyncResourceTyped) + _, ok := x.xxx_hidden_TaskType.(*task_SyncPartial) return ok } @@ -834,8 +834,8 @@ func (x *Task) ClearCompactSyncs() { } } -func (x *Task) ClearSyncResourceTyped() { - if _, ok := x.xxx_hidden_TaskType.(*task_SyncResourceTyped); ok { +func (x *Task) ClearSyncPartial() { + if _, ok := x.xxx_hidden_TaskType.(*task_SyncPartial); ok { x.xxx_hidden_TaskType = nil } } @@ -862,7 +862,7 @@ const Task_ActionInvoke_case case_Task_TaskType = 117 const Task_ActionStatus_case case_Task_TaskType = 118 const Task_CreateSyncDiff_case case_Task_TaskType = 119 const Task_CompactSyncs_case case_Task_TaskType = 120 -const Task_SyncResourceTyped_case case_Task_TaskType = 121 +const Task_SyncPartial_case case_Task_TaskType = 121 func (x *Task) WhichTaskType() case_Task_TaskType { if x == nil { @@ -911,8 +911,8 @@ func (x *Task) WhichTaskType() case_Task_TaskType { return Task_CreateSyncDiff_case case *task_CompactSyncs_: return Task_CompactSyncs_case - case *task_SyncResourceTyped: - return Task_SyncResourceTyped_case + case *task_SyncPartial: + return Task_SyncPartial_case default: return Task_TaskType_not_set_case } @@ -945,7 +945,7 @@ type Task_builder struct { ActionStatus *Task_ActionStatusTask CreateSyncDiff *Task_CreateSyncDiffTask CompactSyncs *Task_CompactSyncs - SyncResourceTyped *Task_SyncResourceTypedTask + SyncPartial *Task_SyncPartialTask // -- end of xxx_hidden_TaskType Debug bool } @@ -1019,8 +1019,8 @@ func (b0 Task_builder) Build() *Task { if b.CompactSyncs != nil { x.xxx_hidden_TaskType = &task_CompactSyncs_{b.CompactSyncs} } - if b.SyncResourceTyped != nil { - x.xxx_hidden_TaskType = &task_SyncResourceTyped{b.SyncResourceTyped} + if b.SyncPartial != nil { + x.xxx_hidden_TaskType = &task_SyncPartial{b.SyncPartial} } x.xxx_hidden_Debug = b.Debug return m0 @@ -1124,8 +1124,8 @@ type task_CompactSyncs_ struct { CompactSyncs *Task_CompactSyncs `protobuf:"bytes,120,opt,name=compact_syncs,json=compactSyncs,proto3,oneof"` } -type task_SyncResourceTyped struct { - SyncResourceTyped *Task_SyncResourceTypedTask `protobuf:"bytes,121,opt,name=sync_resource_typed,json=syncResourceTyped,proto3,oneof"` +type task_SyncPartial struct { + SyncPartial *Task_SyncPartialTask `protobuf:"bytes,121,opt,name=sync_partial,json=syncPartial,proto3,oneof"` } func (*task_None) isTask_TaskType() {} @@ -1170,7 +1170,7 @@ func (*task_CreateSyncDiff) isTask_TaskType() {} func (*task_CompactSyncs_) isTask_TaskType() {} -func (*task_SyncResourceTyped) isTask_TaskType() {} +func (*task_SyncPartial) isTask_TaskType() {} type BatonServiceHelloRequest struct { state protoimpl.MessageState `protogen:"opaque.v1"` @@ -2551,7 +2551,6 @@ type Task_SyncFullTask struct { xxx_hidden_SkipExpandGrants bool `protobuf:"varint,2,opt,name=skip_expand_grants,json=skipExpandGrants,proto3"` xxx_hidden_SkipEntitlementsAndGrants bool `protobuf:"varint,3,opt,name=skip_entitlements_and_grants,json=skipEntitlementsAndGrants,proto3"` xxx_hidden_TargetedSyncResources *[]*v2.Resource `protobuf:"bytes,4,rep,name=targeted_sync_resources,json=targetedSyncResources,proto3"` - xxx_hidden_PartialSyncResourceTypeId string `protobuf:"bytes,5,opt,name=partial_sync_resource_type_id,json=partialSyncResourceTypeId,proto3"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2613,13 +2612,6 @@ func (x *Task_SyncFullTask) GetTargetedSyncResources() []*v2.Resource { return nil } -func (x *Task_SyncFullTask) GetPartialSyncResourceTypeId() string { - if x != nil { - return x.xxx_hidden_PartialSyncResourceTypeId - } - return "" -} - func (x *Task_SyncFullTask) SetAnnotations(v []*anypb.Any) { x.xxx_hidden_Annotations = &v } @@ -2636,10 +2628,6 @@ func (x *Task_SyncFullTask) SetTargetedSyncResources(v []*v2.Resource) { x.xxx_hidden_TargetedSyncResources = &v } -func (x *Task_SyncFullTask) SetPartialSyncResourceTypeId(v string) { - x.xxx_hidden_PartialSyncResourceTypeId = v -} - type Task_SyncFullTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. @@ -2647,10 +2635,6 @@ type Task_SyncFullTask_builder struct { SkipExpandGrants bool SkipEntitlementsAndGrants bool TargetedSyncResources []*v2.Resource - // partial_sync_resource_type_id triggers a partial sync for a single resource type. - // When set, only resources of this type are synced (with parent discovery). - // Entitlements and grants are never synced for partial syncs. - PartialSyncResourceTypeId string } func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { @@ -2661,33 +2645,34 @@ func (b0 Task_SyncFullTask_builder) Build() *Task_SyncFullTask { x.xxx_hidden_SkipExpandGrants = b.SkipExpandGrants x.xxx_hidden_SkipEntitlementsAndGrants = b.SkipEntitlementsAndGrants x.xxx_hidden_TargetedSyncResources = &b.TargetedSyncResources - x.xxx_hidden_PartialSyncResourceTypeId = b.PartialSyncResourceTypeId return m0 } -// Deprecated: Use SyncFullTask.partial_sync_resource_type_id instead. -type Task_SyncResourceTypedTask struct { - state protoimpl.MessageState `protogen:"opaque.v1"` - xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` - xxx_hidden_ResourceTypeId string `protobuf:"bytes,2,opt,name=resource_type_id,json=resourceTypeId,proto3"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +// SyncPartialTask is a partial sync task that syncs either targeted resources or a single resource type. +// When using targeted_resources, entitlements and grants are included. +// When using resource_type_id, only resources are synced (entitlements and grants are skipped). +type Task_SyncPartialTask struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` + xxx_hidden_SyncMode isTask_SyncPartialTask_SyncMode `protobuf_oneof:"sync_mode"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Task_SyncResourceTypedTask) Reset() { - *x = Task_SyncResourceTypedTask{} +func (x *Task_SyncPartialTask) Reset() { + *x = Task_SyncPartialTask{} mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Task_SyncResourceTypedTask) String() string { +func (x *Task_SyncPartialTask) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Task_SyncResourceTypedTask) ProtoMessage() {} +func (*Task_SyncPartialTask) ProtoMessage() {} -func (x *Task_SyncResourceTypedTask) ProtoReflect() protoreflect.Message { +func (x *Task_SyncPartialTask) ProtoReflect() protoreflect.Message { mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2699,7 +2684,7 @@ func (x *Task_SyncResourceTypedTask) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *Task_SyncResourceTypedTask) GetAnnotations() []*anypb.Any { +func (x *Task_SyncPartialTask) GetAnnotations() []*anypb.Any { if x != nil { if x.xxx_hidden_Annotations != nil { return *x.xxx_hidden_Annotations @@ -2708,37 +2693,151 @@ func (x *Task_SyncResourceTypedTask) GetAnnotations() []*anypb.Any { return nil } -func (x *Task_SyncResourceTypedTask) GetResourceTypeId() string { +func (x *Task_SyncPartialTask) GetTargetedResources() *Task_SyncPartialTask_TargetedResources { if x != nil { - return x.xxx_hidden_ResourceTypeId + if x, ok := x.xxx_hidden_SyncMode.(*task_SyncPartialTask_TargetedResources_); ok { + return x.TargetedResources + } + } + return nil +} + +func (x *Task_SyncPartialTask) GetResourceTypeId() string { + if x != nil { + if x, ok := x.xxx_hidden_SyncMode.(*task_SyncPartialTask_ResourceTypeId); ok { + return x.ResourceTypeId + } } return "" } -func (x *Task_SyncResourceTypedTask) SetAnnotations(v []*anypb.Any) { +func (x *Task_SyncPartialTask) SetAnnotations(v []*anypb.Any) { x.xxx_hidden_Annotations = &v } -func (x *Task_SyncResourceTypedTask) SetResourceTypeId(v string) { - x.xxx_hidden_ResourceTypeId = v +func (x *Task_SyncPartialTask) SetTargetedResources(v *Task_SyncPartialTask_TargetedResources) { + if v == nil { + x.xxx_hidden_SyncMode = nil + return + } + x.xxx_hidden_SyncMode = &task_SyncPartialTask_TargetedResources_{v} +} + +func (x *Task_SyncPartialTask) SetResourceTypeId(v string) { + x.xxx_hidden_SyncMode = &task_SyncPartialTask_ResourceTypeId{v} +} + +func (x *Task_SyncPartialTask) HasSyncMode() bool { + if x == nil { + return false + } + return x.xxx_hidden_SyncMode != nil } -type Task_SyncResourceTypedTask_builder struct { +func (x *Task_SyncPartialTask) HasTargetedResources() bool { + if x == nil { + return false + } + _, ok := x.xxx_hidden_SyncMode.(*task_SyncPartialTask_TargetedResources_) + return ok +} + +func (x *Task_SyncPartialTask) HasResourceTypeId() bool { + if x == nil { + return false + } + _, ok := x.xxx_hidden_SyncMode.(*task_SyncPartialTask_ResourceTypeId) + return ok +} + +func (x *Task_SyncPartialTask) ClearSyncMode() { + x.xxx_hidden_SyncMode = nil +} + +func (x *Task_SyncPartialTask) ClearTargetedResources() { + if _, ok := x.xxx_hidden_SyncMode.(*task_SyncPartialTask_TargetedResources_); ok { + x.xxx_hidden_SyncMode = nil + } +} + +func (x *Task_SyncPartialTask) ClearResourceTypeId() { + if _, ok := x.xxx_hidden_SyncMode.(*task_SyncPartialTask_ResourceTypeId); ok { + x.xxx_hidden_SyncMode = nil + } +} + +const Task_SyncPartialTask_SyncMode_not_set_case case_Task_SyncPartialTask_SyncMode = 0 +const Task_SyncPartialTask_TargetedResources_case case_Task_SyncPartialTask_SyncMode = 2 +const Task_SyncPartialTask_ResourceTypeId_case case_Task_SyncPartialTask_SyncMode = 3 + +func (x *Task_SyncPartialTask) WhichSyncMode() case_Task_SyncPartialTask_SyncMode { + if x == nil { + return Task_SyncPartialTask_SyncMode_not_set_case + } + switch x.xxx_hidden_SyncMode.(type) { + case *task_SyncPartialTask_TargetedResources_: + return Task_SyncPartialTask_TargetedResources_case + case *task_SyncPartialTask_ResourceTypeId: + return Task_SyncPartialTask_ResourceTypeId_case + default: + return Task_SyncPartialTask_SyncMode_not_set_case + } +} + +type Task_SyncPartialTask_builder struct { _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. - Annotations []*anypb.Any - ResourceTypeId string + Annotations []*anypb.Any + // Fields of oneof xxx_hidden_SyncMode: + // Targeted resources to sync - includes entitlements and grants + TargetedResources *Task_SyncPartialTask_TargetedResources + // Single resource type to sync - skips entitlements and grants + ResourceTypeId *string + // -- end of xxx_hidden_SyncMode } -func (b0 Task_SyncResourceTypedTask_builder) Build() *Task_SyncResourceTypedTask { - m0 := &Task_SyncResourceTypedTask{} +func (b0 Task_SyncPartialTask_builder) Build() *Task_SyncPartialTask { + m0 := &Task_SyncPartialTask{} b, x := &b0, m0 _, _ = b, x x.xxx_hidden_Annotations = &b.Annotations - x.xxx_hidden_ResourceTypeId = b.ResourceTypeId + if b.TargetedResources != nil { + x.xxx_hidden_SyncMode = &task_SyncPartialTask_TargetedResources_{b.TargetedResources} + } + if b.ResourceTypeId != nil { + x.xxx_hidden_SyncMode = &task_SyncPartialTask_ResourceTypeId{*b.ResourceTypeId} + } return m0 } +type case_Task_SyncPartialTask_SyncMode protoreflect.FieldNumber + +func (x case_Task_SyncPartialTask_SyncMode) String() string { + md := file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16].Descriptor() + if x == 0 { + return "not set" + } + return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x)) +} + +type isTask_SyncPartialTask_SyncMode interface { + isTask_SyncPartialTask_SyncMode() +} + +type task_SyncPartialTask_TargetedResources_ struct { + // Targeted resources to sync - includes entitlements and grants + TargetedResources *Task_SyncPartialTask_TargetedResources `protobuf:"bytes,2,opt,name=targeted_resources,json=targetedResources,proto3,oneof"` +} + +type task_SyncPartialTask_ResourceTypeId struct { + // Single resource type to sync - skips entitlements and grants + ResourceTypeId string `protobuf:"bytes,3,opt,name=resource_type_id,json=resourceTypeId,proto3,oneof"` +} + +func (*task_SyncPartialTask_TargetedResources_) isTask_SyncPartialTask_SyncMode() {} + +func (*task_SyncPartialTask_ResourceTypeId) isTask_SyncPartialTask_SyncMode() {} + type Task_EventFeedTask struct { state protoimpl.MessageState `protogen:"opaque.v1"` xxx_hidden_Annotations *[]*anypb.Any `protobuf:"bytes,1,rep,name=annotations,proto3"` @@ -4259,6 +4358,65 @@ func (b0 Task_CompactSyncs_builder) Build() *Task_CompactSyncs { return m0 } +type Task_SyncPartialTask_TargetedResources struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Resources *[]*v2.Resource `protobuf:"bytes,1,rep,name=resources,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Task_SyncPartialTask_TargetedResources) Reset() { + *x = Task_SyncPartialTask_TargetedResources{} + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Task_SyncPartialTask_TargetedResources) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Task_SyncPartialTask_TargetedResources) ProtoMessage() {} + +func (x *Task_SyncPartialTask_TargetedResources) ProtoReflect() protoreflect.Message { + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *Task_SyncPartialTask_TargetedResources) GetResources() []*v2.Resource { + if x != nil { + if x.xxx_hidden_Resources != nil { + return *x.xxx_hidden_Resources + } + } + return nil +} + +func (x *Task_SyncPartialTask_TargetedResources) SetResources(v []*v2.Resource) { + x.xxx_hidden_Resources = &v +} + +type Task_SyncPartialTask_TargetedResources_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Resources []*v2.Resource +} + +func (b0 Task_SyncPartialTask_TargetedResources_builder) Build() *Task_SyncPartialTask_TargetedResources { + m0 := &Task_SyncPartialTask_TargetedResources{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Resources = &b.Resources + return m0 +} + type Task_CompactSyncs_CompactableSync struct { state protoimpl.MessageState `protogen:"opaque.v1"` xxx_hidden_FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath,proto3"` @@ -4269,7 +4427,7 @@ type Task_CompactSyncs_CompactableSync struct { func (x *Task_CompactSyncs_CompactableSync) Reset() { *x = Task_CompactSyncs_CompactableSync{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4281,7 +4439,7 @@ func (x *Task_CompactSyncs_CompactableSync) String() string { func (*Task_CompactSyncs_CompactableSync) ProtoMessage() {} func (x *Task_CompactSyncs_CompactableSync) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[35] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4341,7 +4499,7 @@ type BatonServiceHelloRequest_BuildInfo struct { func (x *BatonServiceHelloRequest_BuildInfo) Reset() { *x = BatonServiceHelloRequest_BuildInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4353,7 +4511,7 @@ func (x *BatonServiceHelloRequest_BuildInfo) String() string { func (*BatonServiceHelloRequest_BuildInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_BuildInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[36] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4431,7 +4589,7 @@ type BatonServiceHelloRequest_OSInfo struct { func (x *BatonServiceHelloRequest_OSInfo) Reset() { *x = BatonServiceHelloRequest_OSInfo{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4443,7 +4601,7 @@ func (x *BatonServiceHelloRequest_OSInfo) String() string { func (*BatonServiceHelloRequest_OSInfo) ProtoMessage() {} func (x *BatonServiceHelloRequest_OSInfo) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[37] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4581,7 +4739,7 @@ type BatonServiceUploadAssetRequest_UploadMetadata struct { func (x *BatonServiceUploadAssetRequest_UploadMetadata) Reset() { *x = BatonServiceUploadAssetRequest_UploadMetadata{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4593,7 +4751,7 @@ func (x *BatonServiceUploadAssetRequest_UploadMetadata) String() string { func (*BatonServiceUploadAssetRequest_UploadMetadata) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadMetadata) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[38] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4666,7 +4824,7 @@ type BatonServiceUploadAssetRequest_UploadData struct { func (x *BatonServiceUploadAssetRequest_UploadData) Reset() { *x = BatonServiceUploadAssetRequest_UploadData{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4678,7 +4836,7 @@ func (x *BatonServiceUploadAssetRequest_UploadData) String() string { func (*BatonServiceUploadAssetRequest_UploadData) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadData) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[39] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4728,7 +4886,7 @@ type BatonServiceUploadAssetRequest_UploadEOF struct { func (x *BatonServiceUploadAssetRequest_UploadEOF) Reset() { *x = BatonServiceUploadAssetRequest_UploadEOF{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4740,7 +4898,7 @@ func (x *BatonServiceUploadAssetRequest_UploadEOF) String() string { func (*BatonServiceUploadAssetRequest_UploadEOF) ProtoMessage() {} func (x *BatonServiceUploadAssetRequest_UploadEOF) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[40] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4805,7 +4963,7 @@ type BatonServiceFinishTaskRequest_Error struct { func (x *BatonServiceFinishTaskRequest_Error) Reset() { *x = BatonServiceFinishTaskRequest_Error{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4817,7 +4975,7 @@ func (x *BatonServiceFinishTaskRequest_Error) String() string { func (*BatonServiceFinishTaskRequest_Error) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Error) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[41] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4903,7 +5061,7 @@ type BatonServiceFinishTaskRequest_Success struct { func (x *BatonServiceFinishTaskRequest_Success) Reset() { *x = BatonServiceFinishTaskRequest_Success{} - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4915,7 +5073,7 @@ func (x *BatonServiceFinishTaskRequest_Success) String() string { func (*BatonServiceFinishTaskRequest_Success) ProtoMessage() {} func (x *BatonServiceFinishTaskRequest_Success) ProtoReflect() protoreflect.Message { - mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[42] + mi := &file_c1_connectorapi_baton_v1_baton_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4982,7 +5140,7 @@ var File_c1_connectorapi_baton_v1_baton_proto protoreflect.FileDescriptor const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\n" + - "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xd1*\n" + + "$c1/connectorapi/baton/v1/baton.proto\x12\x18c1.connectorapi.baton.v1\x1a\x1fc1/connector/v2/connector.proto\x1a!c1/connector/v2/entitlement.proto\x1a\x1bc1/connector/v2/grant.proto\x1a\x1ec1/connector/v2/resource.proto\x1a\x1cc1/connector/v2/ticket.proto\x1a\x19google/protobuf/any.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x17validate/validate.proto\"\xc7+\n" + "\x04Task\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12=\n" + "\x06status\x18\x02 \x01(\x0e2%.c1.connectorapi.baton.v1.Task.StatusR\x06status\x12=\n" + @@ -5008,22 +5166,25 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\raction_invoke\x18u \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionInvokeTaskH\x00R\factionInvoke\x12V\n" + "\raction_status\x18v \x01(\v2/.c1.connectorapi.baton.v1.Task.ActionStatusTaskH\x00R\factionStatus\x12]\n" + "\x10create_sync_diff\x18w \x01(\v21.c1.connectorapi.baton.v1.Task.CreateSyncDiffTaskH\x00R\x0ecreateSyncDiff\x12R\n" + - "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12f\n" + - "\x13sync_resource_typed\x18y \x01(\v24.c1.connectorapi.baton.v1.Task.SyncResourceTypedTaskH\x00R\x11syncResourceTyped\x12\x14\n" + + "\rcompact_syncs\x18x \x01(\v2+.c1.connectorapi.baton.v1.Task.CompactSyncsH\x00R\fcompactSyncs\x12S\n" + + "\fsync_partial\x18y \x01(\v2..c1.connectorapi.baton.v1.Task.SyncPartialTaskH\x00R\vsyncPartial\x12\x14\n" + "\x05debug\x18\x03 \x01(\bR\x05debug\x1aB\n" + "\bNoneTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1aC\n" + "\tHelloTask\x126\n" + - "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\xca\x02\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x1a\x88\x02\n" + "\fSyncFullTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12,\n" + "\x12skip_expand_grants\x18\x02 \x01(\bR\x10skipExpandGrants\x12?\n" + "\x1cskip_entitlements_and_grants\x18\x03 \x01(\bR\x19skipEntitlementsAndGrants\x12Q\n" + - "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x12@\n" + - "\x1dpartial_sync_resource_type_id\x18\x05 \x01(\tR\x19partialSyncResourceTypeId\x1ay\n" + - "\x15SyncResourceTypedTask\x126\n" + - "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12(\n" + - "\x10resource_type_id\x18\x02 \x01(\tR\x0eresourceTypeId\x1a~\n" + + "\x17targeted_sync_resources\x18\x04 \x03(\v2\x19.c1.connector.v2.ResourceR\x15targetedSyncResources\x1a\xc3\x02\n" + + "\x0fSyncPartialTask\x126\n" + + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x12q\n" + + "\x12targeted_resources\x18\x02 \x01(\v2@.c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResourcesH\x00R\x11targetedResources\x12*\n" + + "\x10resource_type_id\x18\x03 \x01(\tH\x00R\x0eresourceTypeId\x1aL\n" + + "\x11TargetedResources\x127\n" + + "\tresources\x18\x01 \x03(\v2\x19.c1.connector.v2.ResourceR\tresourcesB\v\n" + + "\tsync_mode\x1a~\n" + "\rEventFeedTask\x126\n" + "\vannotations\x18\x01 \x03(\v2\x14.google.protobuf.AnyR\vannotations\x125\n" + "\bstart_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x1a\xf3\x01\n" + @@ -5197,7 +5358,7 @@ const file_c1_connectorapi_baton_v1_baton_proto_rawDesc = "" + "\x0eStartDebugging\x12/.c1.connectorapi.baton.v1.StartDebuggingRequest\x1a0.c1.connectorapi.baton.v1.StartDebuggingResponse\"\x00B7Z5gitlab.com/ductone/c1/pkg/pb/c1/connectorapi/baton/v1b\x06proto3" var file_c1_connectorapi_baton_v1_baton_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_c1_connectorapi_baton_v1_baton_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (Task_Status)(0), // 0: c1.connectorapi.baton.v1.Task.Status (*Task)(nil), // 1: c1.connectorapi.baton.v1.Task @@ -5216,7 +5377,7 @@ var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (*Task_NoneTask)(nil), // 14: c1.connectorapi.baton.v1.Task.NoneTask (*Task_HelloTask)(nil), // 15: c1.connectorapi.baton.v1.Task.HelloTask (*Task_SyncFullTask)(nil), // 16: c1.connectorapi.baton.v1.Task.SyncFullTask - (*Task_SyncResourceTypedTask)(nil), // 17: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask + (*Task_SyncPartialTask)(nil), // 17: c1.connectorapi.baton.v1.Task.SyncPartialTask (*Task_EventFeedTask)(nil), // 18: c1.connectorapi.baton.v1.Task.EventFeedTask (*Task_GrantTask)(nil), // 19: c1.connectorapi.baton.v1.Task.GrantTask (*Task_RevokeTask)(nil), // 20: c1.connectorapi.baton.v1.Task.RevokeTask @@ -5235,29 +5396,30 @@ var file_c1_connectorapi_baton_v1_baton_proto_goTypes = []any{ (*Task_ActionStatusTask)(nil), // 33: c1.connectorapi.baton.v1.Task.ActionStatusTask (*Task_CreateSyncDiffTask)(nil), // 34: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask (*Task_CompactSyncs)(nil), // 35: c1.connectorapi.baton.v1.Task.CompactSyncs - (*Task_CompactSyncs_CompactableSync)(nil), // 36: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - (*BatonServiceHelloRequest_BuildInfo)(nil), // 37: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - (*BatonServiceHelloRequest_OSInfo)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - (*BatonServiceUploadAssetRequest_UploadData)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - (*BatonServiceFinishTaskRequest_Error)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - (*BatonServiceFinishTaskRequest_Success)(nil), // 43: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - (*v2.ConnectorMetadata)(nil), // 44: c1.connector.v2.ConnectorMetadata - (*anypb.Any)(nil), // 45: google.protobuf.Any - (*durationpb.Duration)(nil), // 46: google.protobuf.Duration - (*status.Status)(nil), // 47: google.rpc.Status - (*v2.Resource)(nil), // 48: c1.connector.v2.Resource - (*timestamppb.Timestamp)(nil), // 49: google.protobuf.Timestamp - (*v2.Entitlement)(nil), // 50: c1.connector.v2.Entitlement - (*v2.Grant)(nil), // 51: c1.connector.v2.Grant - (*v2.AccountInfo)(nil), // 52: c1.connector.v2.AccountInfo - (*v2.CredentialOptions)(nil), // 53: c1.connector.v2.CredentialOptions - (*v2.EncryptionConfig)(nil), // 54: c1.connector.v2.EncryptionConfig - (*v2.ResourceId)(nil), // 55: c1.connector.v2.ResourceId - (*v2.TicketRequest)(nil), // 56: c1.connector.v2.TicketRequest - (*v2.TicketSchema)(nil), // 57: c1.connector.v2.TicketSchema - (*structpb.Struct)(nil), // 58: google.protobuf.Struct + (*Task_SyncPartialTask_TargetedResources)(nil), // 36: c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResources + (*Task_CompactSyncs_CompactableSync)(nil), // 37: c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + (*BatonServiceHelloRequest_BuildInfo)(nil), // 38: c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + (*BatonServiceHelloRequest_OSInfo)(nil), // 39: c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + (*BatonServiceUploadAssetRequest_UploadMetadata)(nil), // 40: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + (*BatonServiceUploadAssetRequest_UploadData)(nil), // 41: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + (*BatonServiceUploadAssetRequest_UploadEOF)(nil), // 42: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + (*BatonServiceFinishTaskRequest_Error)(nil), // 43: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + (*BatonServiceFinishTaskRequest_Success)(nil), // 44: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + (*v2.ConnectorMetadata)(nil), // 45: c1.connector.v2.ConnectorMetadata + (*anypb.Any)(nil), // 46: google.protobuf.Any + (*durationpb.Duration)(nil), // 47: google.protobuf.Duration + (*status.Status)(nil), // 48: google.rpc.Status + (*v2.Resource)(nil), // 49: c1.connector.v2.Resource + (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp + (*v2.Entitlement)(nil), // 51: c1.connector.v2.Entitlement + (*v2.Grant)(nil), // 52: c1.connector.v2.Grant + (*v2.AccountInfo)(nil), // 53: c1.connector.v2.AccountInfo + (*v2.CredentialOptions)(nil), // 54: c1.connector.v2.CredentialOptions + (*v2.EncryptionConfig)(nil), // 55: c1.connector.v2.EncryptionConfig + (*v2.ResourceId)(nil), // 56: c1.connector.v2.ResourceId + (*v2.TicketRequest)(nil), // 57: c1.connector.v2.TicketRequest + (*v2.TicketSchema)(nil), // 58: c1.connector.v2.TicketSchema + (*structpb.Struct)(nil), // 59: google.protobuf.Struct } var file_c1_connectorapi_baton_v1_baton_proto_depIdxs = []int32{ 0, // 0: c1.connectorapi.baton.v1.Task.status:type_name -> c1.connectorapi.baton.v1.Task.Status @@ -5282,87 +5444,89 @@ var file_c1_connectorapi_baton_v1_baton_proto_depIdxs = []int32{ 33, // 19: c1.connectorapi.baton.v1.Task.action_status:type_name -> c1.connectorapi.baton.v1.Task.ActionStatusTask 34, // 20: c1.connectorapi.baton.v1.Task.create_sync_diff:type_name -> c1.connectorapi.baton.v1.Task.CreateSyncDiffTask 35, // 21: c1.connectorapi.baton.v1.Task.compact_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs - 17, // 22: c1.connectorapi.baton.v1.Task.sync_resource_typed:type_name -> c1.connectorapi.baton.v1.Task.SyncResourceTypedTask - 37, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo - 38, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo - 44, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata - 45, // 26: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any - 45, // 27: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any + 17, // 22: c1.connectorapi.baton.v1.Task.sync_partial:type_name -> c1.connectorapi.baton.v1.Task.SyncPartialTask + 38, // 23: c1.connectorapi.baton.v1.BatonServiceHelloRequest.build_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.BuildInfo + 39, // 24: c1.connectorapi.baton.v1.BatonServiceHelloRequest.os_info:type_name -> c1.connectorapi.baton.v1.BatonServiceHelloRequest.OSInfo + 45, // 25: c1.connectorapi.baton.v1.BatonServiceHelloRequest.connector_metadata:type_name -> c1.connector.v2.ConnectorMetadata + 46, // 26: c1.connectorapi.baton.v1.BatonServiceHelloRequest.annotations:type_name -> google.protobuf.Any + 46, // 27: c1.connectorapi.baton.v1.BatonServiceHelloResponse.annotations:type_name -> google.protobuf.Any 1, // 28: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.task:type_name -> c1.connectorapi.baton.v1.Task - 46, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration - 46, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration - 45, // 31: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any - 45, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any - 46, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration - 45, // 34: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any - 39, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata - 40, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData - 41, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF - 45, // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any - 47, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status - 42, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error - 43, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success - 45, // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any - 45, // 43: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any - 45, // 44: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any - 45, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any - 48, // 46: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource - 45, // 47: c1.connectorapi.baton.v1.Task.SyncResourceTypedTask.annotations:type_name -> google.protobuf.Any - 45, // 48: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any - 49, // 49: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp - 50, // 50: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement - 48, // 51: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource - 45, // 52: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any - 46, // 53: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration - 51, // 54: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant - 45, // 55: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any - 52, // 56: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo - 53, // 57: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 54, // 58: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 48, // 59: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource - 55, // 60: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId - 55, // 61: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId - 55, // 62: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId - 53, // 63: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions - 54, // 64: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig - 56, // 65: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest - 57, // 66: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema - 45, // 67: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any - 25, // 68: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask - 29, // 69: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask - 45, // 70: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any - 45, // 71: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any - 45, // 72: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any - 45, // 73: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any - 58, // 74: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct - 45, // 75: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any - 45, // 76: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any - 45, // 77: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any - 36, // 78: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync - 45, // 79: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any - 45, // 80: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any - 45, // 81: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any - 45, // 82: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any - 45, // 83: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any - 45, // 84: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any - 45, // 85: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any - 2, // 86: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest - 4, // 87: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest - 6, // 88: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest - 10, // 89: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest - 8, // 90: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest - 12, // 91: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest - 3, // 92: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse - 5, // 93: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse - 7, // 94: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse - 11, // 95: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse - 9, // 96: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse - 13, // 97: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse - 92, // [92:98] is the sub-list for method output_type - 86, // [86:92] is the sub-list for method input_type - 86, // [86:86] is the sub-list for extension type_name - 86, // [86:86] is the sub-list for extension extendee - 0, // [0:86] is the sub-list for field type_name + 47, // 29: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_poll:type_name -> google.protobuf.Duration + 47, // 30: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.next_heartbeat:type_name -> google.protobuf.Duration + 46, // 31: c1.connectorapi.baton.v1.BatonServiceGetTaskResponse.annotations:type_name -> google.protobuf.Any + 46, // 32: c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest.annotations:type_name -> google.protobuf.Any + 47, // 33: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.next_heartbeat:type_name -> google.protobuf.Duration + 46, // 34: c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse.annotations:type_name -> google.protobuf.Any + 40, // 35: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.metadata:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata + 41, // 36: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.data:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadData + 42, // 37: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.eof:type_name -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF + 46, // 38: c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse.annotations:type_name -> google.protobuf.Any + 48, // 39: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.status:type_name -> google.rpc.Status + 43, // 40: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.error:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error + 44, // 41: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.success:type_name -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success + 46, // 42: c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse.annotations:type_name -> google.protobuf.Any + 46, // 43: c1.connectorapi.baton.v1.Task.NoneTask.annotations:type_name -> google.protobuf.Any + 46, // 44: c1.connectorapi.baton.v1.Task.HelloTask.annotations:type_name -> google.protobuf.Any + 46, // 45: c1.connectorapi.baton.v1.Task.SyncFullTask.annotations:type_name -> google.protobuf.Any + 49, // 46: c1.connectorapi.baton.v1.Task.SyncFullTask.targeted_sync_resources:type_name -> c1.connector.v2.Resource + 46, // 47: c1.connectorapi.baton.v1.Task.SyncPartialTask.annotations:type_name -> google.protobuf.Any + 36, // 48: c1.connectorapi.baton.v1.Task.SyncPartialTask.targeted_resources:type_name -> c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResources + 46, // 49: c1.connectorapi.baton.v1.Task.EventFeedTask.annotations:type_name -> google.protobuf.Any + 50, // 50: c1.connectorapi.baton.v1.Task.EventFeedTask.start_at:type_name -> google.protobuf.Timestamp + 51, // 51: c1.connectorapi.baton.v1.Task.GrantTask.entitlement:type_name -> c1.connector.v2.Entitlement + 49, // 52: c1.connectorapi.baton.v1.Task.GrantTask.principal:type_name -> c1.connector.v2.Resource + 46, // 53: c1.connectorapi.baton.v1.Task.GrantTask.annotations:type_name -> google.protobuf.Any + 47, // 54: c1.connectorapi.baton.v1.Task.GrantTask.duration:type_name -> google.protobuf.Duration + 52, // 55: c1.connectorapi.baton.v1.Task.RevokeTask.grant:type_name -> c1.connector.v2.Grant + 46, // 56: c1.connectorapi.baton.v1.Task.RevokeTask.annotations:type_name -> google.protobuf.Any + 53, // 57: c1.connectorapi.baton.v1.Task.CreateAccountTask.account_info:type_name -> c1.connector.v2.AccountInfo + 54, // 58: c1.connectorapi.baton.v1.Task.CreateAccountTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 55, // 59: c1.connectorapi.baton.v1.Task.CreateAccountTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 49, // 60: c1.connectorapi.baton.v1.Task.CreateResourceTask.resource:type_name -> c1.connector.v2.Resource + 56, // 61: c1.connectorapi.baton.v1.Task.DeleteResourceTask.resource_id:type_name -> c1.connector.v2.ResourceId + 56, // 62: c1.connectorapi.baton.v1.Task.DeleteResourceTask.parent_resource_id:type_name -> c1.connector.v2.ResourceId + 56, // 63: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.resource_id:type_name -> c1.connector.v2.ResourceId + 54, // 64: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.credential_options:type_name -> c1.connector.v2.CredentialOptions + 55, // 65: c1.connectorapi.baton.v1.Task.RotateCredentialsTask.encryption_configs:type_name -> c1.connector.v2.EncryptionConfig + 57, // 66: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_request:type_name -> c1.connector.v2.TicketRequest + 58, // 67: c1.connectorapi.baton.v1.Task.CreateTicketTask.ticket_schema:type_name -> c1.connector.v2.TicketSchema + 46, // 68: c1.connectorapi.baton.v1.Task.CreateTicketTask.annotations:type_name -> google.protobuf.Any + 25, // 69: c1.connectorapi.baton.v1.Task.BulkCreateTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.CreateTicketTask + 29, // 70: c1.connectorapi.baton.v1.Task.BulkGetTicketsTask.ticket_requests:type_name -> c1.connectorapi.baton.v1.Task.GetTicketTask + 46, // 71: c1.connectorapi.baton.v1.Task.ListTicketSchemasTask.annotations:type_name -> google.protobuf.Any + 46, // 72: c1.connectorapi.baton.v1.Task.GetTicketTask.annotations:type_name -> google.protobuf.Any + 46, // 73: c1.connectorapi.baton.v1.Task.ActionListSchemasTask.annotations:type_name -> google.protobuf.Any + 46, // 74: c1.connectorapi.baton.v1.Task.ActionGetSchemaTask.annotations:type_name -> google.protobuf.Any + 59, // 75: c1.connectorapi.baton.v1.Task.ActionInvokeTask.args:type_name -> google.protobuf.Struct + 46, // 76: c1.connectorapi.baton.v1.Task.ActionInvokeTask.annotations:type_name -> google.protobuf.Any + 46, // 77: c1.connectorapi.baton.v1.Task.ActionStatusTask.annotations:type_name -> google.protobuf.Any + 46, // 78: c1.connectorapi.baton.v1.Task.CreateSyncDiffTask.annotations:type_name -> google.protobuf.Any + 37, // 79: c1.connectorapi.baton.v1.Task.CompactSyncs.compactable_syncs:type_name -> c1.connectorapi.baton.v1.Task.CompactSyncs.CompactableSync + 46, // 80: c1.connectorapi.baton.v1.Task.CompactSyncs.annotations:type_name -> google.protobuf.Any + 49, // 81: c1.connectorapi.baton.v1.Task.SyncPartialTask.TargetedResources.resources:type_name -> c1.connector.v2.Resource + 46, // 82: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadMetadata.annotations:type_name -> google.protobuf.Any + 46, // 83: c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest.UploadEOF.annotations:type_name -> google.protobuf.Any + 46, // 84: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.annotations:type_name -> google.protobuf.Any + 46, // 85: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Error.response:type_name -> google.protobuf.Any + 46, // 86: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.annotations:type_name -> google.protobuf.Any + 46, // 87: c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest.Success.response:type_name -> google.protobuf.Any + 2, // 88: c1.connectorapi.baton.v1.BatonService.Hello:input_type -> c1.connectorapi.baton.v1.BatonServiceHelloRequest + 4, // 89: c1.connectorapi.baton.v1.BatonService.GetTask:input_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskRequest + 6, // 90: c1.connectorapi.baton.v1.BatonService.Heartbeat:input_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatRequest + 10, // 91: c1.connectorapi.baton.v1.BatonService.FinishTask:input_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskRequest + 8, // 92: c1.connectorapi.baton.v1.BatonService.UploadAsset:input_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetRequest + 12, // 93: c1.connectorapi.baton.v1.BatonService.StartDebugging:input_type -> c1.connectorapi.baton.v1.StartDebuggingRequest + 3, // 94: c1.connectorapi.baton.v1.BatonService.Hello:output_type -> c1.connectorapi.baton.v1.BatonServiceHelloResponse + 5, // 95: c1.connectorapi.baton.v1.BatonService.GetTask:output_type -> c1.connectorapi.baton.v1.BatonServiceGetTaskResponse + 7, // 96: c1.connectorapi.baton.v1.BatonService.Heartbeat:output_type -> c1.connectorapi.baton.v1.BatonServiceHeartbeatResponse + 11, // 97: c1.connectorapi.baton.v1.BatonService.FinishTask:output_type -> c1.connectorapi.baton.v1.BatonServiceFinishTaskResponse + 9, // 98: c1.connectorapi.baton.v1.BatonService.UploadAsset:output_type -> c1.connectorapi.baton.v1.BatonServiceUploadAssetResponse + 13, // 99: c1.connectorapi.baton.v1.BatonService.StartDebugging:output_type -> c1.connectorapi.baton.v1.StartDebuggingResponse + 94, // [94:100] is the sub-list for method output_type + 88, // [88:94] is the sub-list for method input_type + 88, // [88:88] is the sub-list for extension type_name + 88, // [88:88] is the sub-list for extension extendee + 0, // [0:88] is the sub-list for field type_name } func init() { file_c1_connectorapi_baton_v1_baton_proto_init() } @@ -5392,7 +5556,7 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { (*task_ActionStatus)(nil), (*task_CreateSyncDiff)(nil), (*task_CompactSyncs_)(nil), - (*task_SyncResourceTyped)(nil), + (*task_SyncPartial)(nil), } file_c1_connectorapi_baton_v1_baton_proto_msgTypes[7].OneofWrappers = []any{ (*batonServiceUploadAssetRequest_Metadata)(nil), @@ -5403,13 +5567,17 @@ func file_c1_connectorapi_baton_v1_baton_proto_init() { (*batonServiceFinishTaskRequest_Error_)(nil), (*batonServiceFinishTaskRequest_Success_)(nil), } + file_c1_connectorapi_baton_v1_baton_proto_msgTypes[16].OneofWrappers = []any{ + (*task_SyncPartialTask_TargetedResources_)(nil), + (*task_SyncPartialTask_ResourceTypeId)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_c1_connectorapi_baton_v1_baton_proto_rawDesc), len(file_c1_connectorapi_baton_v1_baton_proto_rawDesc)), NumEnums: 1, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/cli/commands.go b/pkg/cli/commands.go index fbc735a40..2e56e53c8 100644 --- a/pkg/cli/commands.go +++ b/pkg/cli/commands.go @@ -321,10 +321,6 @@ func MakeMainCommand[T field.Configurable]( ), ) default: - if v.GetString("partial-sync-resource-type") != "" { - opts = append(opts, - connectorrunner.WithPartialSyncResourceType(v.GetString("partial-sync-resource-type"))) - } if len(v.GetStringSlice("sync-resources")) > 0 { opts = append(opts, connectorrunner.WithTargetedSyncResources(v.GetStringSlice("sync-resources"))) diff --git a/pkg/connectorrunner/runner.go b/pkg/connectorrunner/runner.go index c6e91706d..d705f052b 100644 --- a/pkg/connectorrunner/runner.go +++ b/pkg/connectorrunner/runner.go @@ -350,7 +350,6 @@ type runnerConfig struct { skipGrants bool sessionStoreEnabled bool syncResourceTypeIDs []string - partialSyncResourceTypeID string } func WithSessionStoreEnabled() Option { @@ -569,13 +568,6 @@ func WithSyncResourceTypeIDs(resourceTypeIDs []string) Option { } } -func WithPartialSyncResourceType(resourceTypeID string) Option { - return func(ctx context.Context, cfg *runnerConfig) error { - cfg.partialSyncResourceTypeID = resourceTypeID - return nil - } -} - func WithTicketingEnabled() Option { return func(ctx context.Context, cfg *runnerConfig) error { cfg.ticketingEnabled = true @@ -814,21 +806,15 @@ func NewConnectorRunner(ctx context.Context, c types.ConnectorServer, opts ...Op } tm = local.NewLocalCompactor(ctx, cfg.syncCompactorConfig.outputPath, configs) default: - if cfg.partialSyncResourceTypeID != "" { - tm, err = local.NewPartialSyncResourceType(ctx, cfg.c1zPath, cfg.partialSyncResourceTypeID, - local.PartialSyncWithTmpDir(cfg.tempDir), - ) - } else { - tm, err = local.NewSyncer(ctx, cfg.c1zPath, - local.WithTmpDir(cfg.tempDir), - local.WithExternalResourceC1Z(cfg.externalResourceC1Z), - local.WithExternalResourceEntitlementIdFilter(cfg.externalResourceEntitlementIdFilter), - local.WithTargetedSyncResources(resources), - local.WithSkipEntitlementsAndGrants(cfg.skipEntitlementsAndGrants), - local.WithSkipGrants(cfg.skipGrants), - local.WithSyncResourceTypeIDs(cfg.syncResourceTypeIDs), - ) - } + tm, err = local.NewSyncer(ctx, cfg.c1zPath, + local.WithTmpDir(cfg.tempDir), + local.WithExternalResourceC1Z(cfg.externalResourceC1Z), + local.WithExternalResourceEntitlementIdFilter(cfg.externalResourceEntitlementIdFilter), + local.WithTargetedSyncResources(resources), + local.WithSkipEntitlementsAndGrants(cfg.skipEntitlementsAndGrants), + local.WithSkipGrants(cfg.skipGrants), + local.WithSyncResourceTypeIDs(cfg.syncResourceTypeIDs), + ) if err != nil { return nil, err } @@ -849,7 +835,6 @@ func NewConnectorRunner(ctx context.Context, c types.ConnectorServer, opts ...Op cfg.externalResourceEntitlementIdFilter, resources, cfg.syncResourceTypeIDs, - cfg.partialSyncResourceTypeID, ) if err != nil { return nil, err diff --git a/pkg/field/defaults.go b/pkg/field/defaults.go index a5c41ca7f..bdaabe960 100644 --- a/pkg/field/defaults.go +++ b/pkg/field/defaults.go @@ -114,10 +114,6 @@ var ( WithDescription("The resource type IDs to sync"), WithPersistent(true), WithExportTarget(ExportTargetNone)) - partialSyncResourceTypeField = StringField("partial-sync-resource-type", - WithDescription("Run a partial sync for a single resource type, automatically discovering parent resources"), - WithPersistent(true), - WithExportTarget(ExportTargetNone)) diffSyncsField = BoolField( "diff-syncs", WithDescription("Create a new partial SyncID from a base and applied sync."), @@ -294,7 +290,6 @@ var DefaultFields = []SchemaField{ skipFullSync, targetedSyncResourceIDs, syncResourceTypeIDs, - partialSyncResourceTypeField, skipEntitlementsAndGrants, skipGrants, externalResourceC1ZField, diff --git a/pkg/types/tasks/tasks.go b/pkg/types/tasks/tasks.go index b09d13f34..c30fa5a93 100644 --- a/pkg/types/tasks/tasks.go +++ b/pkg/types/tasks/tasks.go @@ -66,8 +66,8 @@ func (tt TaskType) String() string { return "action_status" case CreateSyncDiff: return "create_sync_diff" - case SyncResourceTypedType: - return "sync_resource_typed" + case PartialSyncType: + return "sync_partial" default: return "unknown" } @@ -106,5 +106,5 @@ const ( ActionStatusType CreateSyncDiff ListStaticEntitlementsType - SyncResourceTypedType + PartialSyncType ) diff --git a/proto/c1/connectorapi/baton/v1/baton.proto b/proto/c1/connectorapi/baton/v1/baton.proto index 56b02ceba..4853b1eb0 100644 --- a/proto/c1/connectorapi/baton/v1/baton.proto +++ b/proto/c1/connectorapi/baton/v1/baton.proto @@ -50,16 +50,24 @@ message Task { bool skip_expand_grants = 2; bool skip_entitlements_and_grants = 3; repeated connector.v2.Resource targeted_sync_resources = 4; - // partial_sync_resource_type_id triggers a partial sync for a single resource type. - // When set, only resources of this type are synced (with parent discovery). - // Entitlements and grants are never synced for partial syncs. - string partial_sync_resource_type_id = 5; } - // Deprecated: Use SyncFullTask.partial_sync_resource_type_id instead. - message SyncResourceTypedTask { + // SyncPartialTask is a partial sync task that syncs either targeted resources or a single resource type. + // When using targeted_resources, entitlements and grants are included. + // When using resource_type_id, only resources are synced (entitlements and grants are skipped). + message SyncPartialTask { + message TargetedResources { + repeated connector.v2.Resource resources = 1; + } + repeated google.protobuf.Any annotations = 1; - string resource_type_id = 2; + + oneof sync_mode { + // Targeted resources to sync - includes entitlements and grants + TargetedResources targeted_resources = 2; + // Single resource type to sync - skips entitlements and grants + string resource_type_id = 3; + } } message EventFeedTask { @@ -185,7 +193,7 @@ message Task { ActionStatusTask action_status = 118; CreateSyncDiffTask create_sync_diff = 119; CompactSyncs compact_syncs = 120; - SyncResourceTypedTask sync_resource_typed = 121; + SyncPartialTask sync_partial = 121; } bool debug = 3; }