diff --git a/backend/gen/go/db/job-hooks.sql.go b/backend/gen/go/db/job-hooks.sql.go
index 52b29034ab..9e3c042e91 100644
--- a/backend/gen/go/db/job-hooks.sql.go
+++ b/backend/gen/go/db/job-hooks.sql.go
@@ -129,7 +129,7 @@ SELECT id, name, description, job_id, config, created_by_user_id, created_at, up
 FROM neosync_api.job_hooks
 WHERE job_id = $1
   AND enabled = true
-  AND hook_timing = 'post_sync'
+  AND hook_timing = 'postSync'
 ORDER BY priority, created_at, id ASC
 `
 
@@ -172,7 +172,7 @@ SELECT id, name, description, job_id, config, created_by_user_id, created_at, up
 FROM neosync_api.job_hooks
 WHERE job_id = $1
   AND enabled = true
-  AND hook_timing = 'pre_sync'
+  AND hook_timing = 'preSync'
 ORDER BY priority, created_at, id ASC
 `
 
@@ -238,3 +238,88 @@ func (q *Queries) RemoveJobHookById(ctx context.Context, db DBTX, id pgtype.UUID
 	_, err := db.Exec(ctx, removeJobHookById, id)
 	return err
 }
+
+const setJobHookEnabled = `-- name: SetJobHookEnabled :one
+UPDATE neosync_api.job_hooks
+SET enabled = $1,
+    updated_by_user_id = $2
+WHERE id = $2
+RETURNING id, name, description, job_id, config, created_by_user_id, created_at, updated_by_user_id, updated_at, enabled, priority, hook_timing, connection_id
+`
+
+type SetJobHookEnabledParams struct {
+	Enabled         bool
+	UpdatedByUserID pgtype.UUID
+}
+
+func (q *Queries) SetJobHookEnabled(ctx context.Context, db DBTX, arg SetJobHookEnabledParams) (NeosyncApiJobHook, error) {
+	row := db.QueryRow(ctx, setJobHookEnabled, arg.Enabled, arg.UpdatedByUserID)
+	var i NeosyncApiJobHook
+	err := row.Scan(
+		&i.ID,
+		&i.Name,
+		&i.Description,
+		&i.JobID,
+		&i.Config,
+		&i.CreatedByUserID,
+		&i.CreatedAt,
+		&i.UpdatedByUserID,
+		&i.UpdatedAt,
+		&i.Enabled,
+		&i.Priority,
+		&i.HookTiming,
+		&i.ConnectionID,
+	)
+	return i, err
+}
+
+const updateJobHook = `-- name: UpdateJobHook :one
+UPDATE neosync_api.job_hooks
+SET name = $1,
+    description = $2,
+    config = $3,
+    enabled = $4,
+    priority = $5,
+    updated_by_user_id = $6
+WHERE id = $7
+RETURNING id, name, description, job_id, config, created_by_user_id, created_at, updated_by_user_id, updated_at, enabled, priority, hook_timing, connection_id
+`
+
+type UpdateJobHookParams struct {
+	Name            string
+	Description     string
+	Config          []byte
+	Enabled         bool
+	Priority        int32
+	UpdatedByUserID pgtype.UUID
+	ID              pgtype.UUID
+}
+
+func (q *Queries) UpdateJobHook(ctx context.Context, db DBTX, arg UpdateJobHookParams) (NeosyncApiJobHook, error) {
+	row := db.QueryRow(ctx, updateJobHook,
+		arg.Name,
+		arg.Description,
+		arg.Config,
+		arg.Enabled,
+		arg.Priority,
+		arg.UpdatedByUserID,
+		arg.ID,
+	)
+	var i NeosyncApiJobHook
+	err := row.Scan(
+		&i.ID,
+		&i.Name,
+		&i.Description,
+		&i.JobID,
+		&i.Config,
+		&i.CreatedByUserID,
+		&i.CreatedAt,
+		&i.UpdatedByUserID,
+		&i.UpdatedAt,
+		&i.Enabled,
+		&i.Priority,
+		&i.HookTiming,
+		&i.ConnectionID,
+	)
+	return i, err
+}
diff --git a/backend/gen/go/db/mock_Querier.go b/backend/gen/go/db/mock_Querier.go
index 99293f255c..9f3f6fe5f9 100644
--- a/backend/gen/go/db/mock_Querier.go
+++ b/backend/gen/go/db/mock_Querier.go
@@ -1036,6 +1036,64 @@ func (_c *MockQuerier_DeleteUserDefinedTransformerById_Call) RunAndReturn(run fu
 	return _c
 }
 
+// DoesJobHaveConnectionId provides a mock function with given fields: ctx, db, arg
+func (_m *MockQuerier) DoesJobHaveConnectionId(ctx context.Context, db DBTX, arg DoesJobHaveConnectionIdParams) (bool, error) {
+	ret := _m.Called(ctx, db, arg)
+
+	if len(ret) == 0 {
+		panic("no return value specified for DoesJobHaveConnectionId")
+	}
+
+	var r0 bool
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, DBTX, DoesJobHaveConnectionIdParams) (bool, error)); ok {
+		return rf(ctx, db, arg)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, DBTX, DoesJobHaveConnectionIdParams) bool); ok {
+		r0 = rf(ctx, db, arg)
+	} else {
+		r0 = ret.Get(0).(bool)
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, DBTX, DoesJobHaveConnectionIdParams) error); ok {
+		r1 = rf(ctx, db, arg)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockQuerier_DoesJobHaveConnectionId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DoesJobHaveConnectionId'
+type MockQuerier_DoesJobHaveConnectionId_Call struct {
+	*mock.Call
+}
+
+// DoesJobHaveConnectionId is a helper method to define mock.On call
+//   - ctx context.Context
+//   - db DBTX
+//   - arg DoesJobHaveConnectionIdParams
+func (_e *MockQuerier_Expecter) DoesJobHaveConnectionId(ctx interface{}, db interface{}, arg interface{}) *MockQuerier_DoesJobHaveConnectionId_Call {
+	return &MockQuerier_DoesJobHaveConnectionId_Call{Call: _e.mock.On("DoesJobHaveConnectionId", ctx, db, arg)}
+}
+
+func (_c *MockQuerier_DoesJobHaveConnectionId_Call) Run(run func(ctx context.Context, db DBTX, arg DoesJobHaveConnectionIdParams)) *MockQuerier_DoesJobHaveConnectionId_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(DBTX), args[2].(DoesJobHaveConnectionIdParams))
+	})
+	return _c
+}
+
+func (_c *MockQuerier_DoesJobHaveConnectionId_Call) Return(_a0 bool, _a1 error) *MockQuerier_DoesJobHaveConnectionId_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockQuerier_DoesJobHaveConnectionId_Call) RunAndReturn(run func(context.Context, DBTX, DoesJobHaveConnectionIdParams) (bool, error)) *MockQuerier_DoesJobHaveConnectionId_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // GetAccount provides a mock function with given fields: ctx, db, id
 func (_m *MockQuerier) GetAccount(ctx context.Context, db DBTX, id pgtype.UUID) (NeosyncApiAccount, error) {
 	ret := _m.Called(ctx, db, id)
@@ -4346,6 +4404,64 @@ func (_c *MockQuerier_SetAnonymousUser_Call) RunAndReturn(run func(context.Conte
 	return _c
 }
 
+// SetJobHookEnabled provides a mock function with given fields: ctx, db, arg
+func (_m *MockQuerier) SetJobHookEnabled(ctx context.Context, db DBTX, arg SetJobHookEnabledParams) (NeosyncApiJobHook, error) {
+	ret := _m.Called(ctx, db, arg)
+
+	if len(ret) == 0 {
+		panic("no return value specified for SetJobHookEnabled")
+	}
+
+	var r0 NeosyncApiJobHook
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, DBTX, SetJobHookEnabledParams) (NeosyncApiJobHook, error)); ok {
+		return rf(ctx, db, arg)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, DBTX, SetJobHookEnabledParams) NeosyncApiJobHook); ok {
+		r0 = rf(ctx, db, arg)
+	} else {
+		r0 = ret.Get(0).(NeosyncApiJobHook)
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, DBTX, SetJobHookEnabledParams) error); ok {
+		r1 = rf(ctx, db, arg)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockQuerier_SetJobHookEnabled_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetJobHookEnabled'
+type MockQuerier_SetJobHookEnabled_Call struct {
+	*mock.Call
+}
+
+// SetJobHookEnabled is a helper method to define mock.On call
+//   - ctx context.Context
+//   - db DBTX
+//   - arg SetJobHookEnabledParams
+func (_e *MockQuerier_Expecter) SetJobHookEnabled(ctx interface{}, db interface{}, arg interface{}) *MockQuerier_SetJobHookEnabled_Call {
+	return &MockQuerier_SetJobHookEnabled_Call{Call: _e.mock.On("SetJobHookEnabled", ctx, db, arg)}
+}
+
+func (_c *MockQuerier_SetJobHookEnabled_Call) Run(run func(ctx context.Context, db DBTX, arg SetJobHookEnabledParams)) *MockQuerier_SetJobHookEnabled_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(DBTX), args[2].(SetJobHookEnabledParams))
+	})
+	return _c
+}
+
+func (_c *MockQuerier_SetJobHookEnabled_Call) Return(_a0 NeosyncApiJobHook, _a1 error) *MockQuerier_SetJobHookEnabled_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockQuerier_SetJobHookEnabled_Call) RunAndReturn(run func(context.Context, DBTX, SetJobHookEnabledParams) (NeosyncApiJobHook, error)) *MockQuerier_SetJobHookEnabled_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // SetJobSyncOptions provides a mock function with given fields: ctx, db, arg
 func (_m *MockQuerier) SetJobSyncOptions(ctx context.Context, db DBTX, arg SetJobSyncOptionsParams) (NeosyncApiJob, error) {
 	ret := _m.Called(ctx, db, arg)
@@ -4916,6 +5032,64 @@ func (_c *MockQuerier_UpdateJobConnectionDestination_Call) RunAndReturn(run func
 	return _c
 }
 
+// UpdateJobHook provides a mock function with given fields: ctx, db, arg
+func (_m *MockQuerier) UpdateJobHook(ctx context.Context, db DBTX, arg UpdateJobHookParams) (NeosyncApiJobHook, error) {
+	ret := _m.Called(ctx, db, arg)
+
+	if len(ret) == 0 {
+		panic("no return value specified for UpdateJobHook")
+	}
+
+	var r0 NeosyncApiJobHook
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, DBTX, UpdateJobHookParams) (NeosyncApiJobHook, error)); ok {
+		return rf(ctx, db, arg)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, DBTX, UpdateJobHookParams) NeosyncApiJobHook); ok {
+		r0 = rf(ctx, db, arg)
+	} else {
+		r0 = ret.Get(0).(NeosyncApiJobHook)
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, DBTX, UpdateJobHookParams) error); ok {
+		r1 = rf(ctx, db, arg)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockQuerier_UpdateJobHook_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateJobHook'
+type MockQuerier_UpdateJobHook_Call struct {
+	*mock.Call
+}
+
+// UpdateJobHook is a helper method to define mock.On call
+//   - ctx context.Context
+//   - db DBTX
+//   - arg UpdateJobHookParams
+func (_e *MockQuerier_Expecter) UpdateJobHook(ctx interface{}, db interface{}, arg interface{}) *MockQuerier_UpdateJobHook_Call {
+	return &MockQuerier_UpdateJobHook_Call{Call: _e.mock.On("UpdateJobHook", ctx, db, arg)}
+}
+
+func (_c *MockQuerier_UpdateJobHook_Call) Run(run func(ctx context.Context, db DBTX, arg UpdateJobHookParams)) *MockQuerier_UpdateJobHook_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(DBTX), args[2].(UpdateJobHookParams))
+	})
+	return _c
+}
+
+func (_c *MockQuerier_UpdateJobHook_Call) Return(_a0 NeosyncApiJobHook, _a1 error) *MockQuerier_UpdateJobHook_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockQuerier_UpdateJobHook_Call) RunAndReturn(run func(context.Context, DBTX, UpdateJobHookParams) (NeosyncApiJobHook, error)) *MockQuerier_UpdateJobHook_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // UpdateJobMappings provides a mock function with given fields: ctx, db, arg
 func (_m *MockQuerier) UpdateJobMappings(ctx context.Context, db DBTX, arg UpdateJobMappingsParams) (NeosyncApiJob, error) {
 	ret := _m.Called(ctx, db, arg)
diff --git a/backend/gen/go/db/querier.go b/backend/gen/go/db/querier.go
index 7c40475041..adaf40fec3 100644
--- a/backend/gen/go/db/querier.go
+++ b/backend/gen/go/db/querier.go
@@ -89,6 +89,7 @@ type Querier interface {
 	RemoveJobHookById(ctx context.Context, db DBTX, id pgtype.UUID) error
 	SetAccountCreatedAt(ctx context.Context, db DBTX, arg SetAccountCreatedAtParams) (NeosyncApiAccount, error)
 	SetAnonymousUser(ctx context.Context, db DBTX) (NeosyncApiUser, error)
+	SetJobHookEnabled(ctx context.Context, db DBTX, arg SetJobHookEnabledParams) (NeosyncApiJobHook, error)
 	SetJobSyncOptions(ctx context.Context, db DBTX, arg SetJobSyncOptionsParams) (NeosyncApiJob, error)
 	SetJobWorkflowOptions(ctx context.Context, db DBTX, arg SetJobWorkflowOptionsParams) (NeosyncApiJob, error)
 	SetNewAccountStripeCustomerId(ctx context.Context, db DBTX, arg SetNewAccountStripeCustomerIdParams) (NeosyncApiAccount, error)
@@ -99,6 +100,7 @@ type Querier interface {
 	UpdateActiveAccountInvitesToExpired(ctx context.Context, db DBTX, arg UpdateActiveAccountInvitesToExpiredParams) (NeosyncApiAccountInvite, error)
 	UpdateConnection(ctx context.Context, db DBTX, arg UpdateConnectionParams) (NeosyncApiConnection, error)
 	UpdateJobConnectionDestination(ctx context.Context, db DBTX, arg UpdateJobConnectionDestinationParams) (NeosyncApiJobDestinationConnectionAssociation, error)
+	UpdateJobHook(ctx context.Context, db DBTX, arg UpdateJobHookParams) (NeosyncApiJobHook, error)
 	UpdateJobMappings(ctx context.Context, db DBTX, arg UpdateJobMappingsParams) (NeosyncApiJob, error)
 	UpdateJobSchedule(ctx context.Context, db DBTX, arg UpdateJobScheduleParams) (NeosyncApiJob, error)
 	UpdateJobSource(ctx context.Context, db DBTX, arg UpdateJobSourceParams) (NeosyncApiJob, error)
diff --git a/backend/gen/go/protos/mgmt/v1alpha1/job.pb.go b/backend/gen/go/protos/mgmt/v1alpha1/job.pb.go
index a72dead7fa..6e60b969ae 100644
--- a/backend/gen/go/protos/mgmt/v1alpha1/job.pb.go
+++ b/backend/gen/go/protos/mgmt/v1alpha1/job.pb.go
@@ -8475,6 +8475,254 @@ func (x *IsJobHookNameAvailableResponse) GetIsAvailable() bool {
 	return false
 }
 
+type UpdateJobHookRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The unique identifier of the hook
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Name of the hook for display/reference.
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// Description of what this hook does.
+	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// The unique identifier of the job this hook belongs to.
+	JobId string `protobuf:"bytes,4,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"`
+	// Hook-type specific configuration.
+	Config *JobHookConfig `protobuf:"bytes,5,opt,name=config,proto3" json:"config,omitempty"`
+	// Whether or not the hook is enabled.
+	Enabled bool `protobuf:"varint,6,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	// The priority of the hook (0-100). This determines the execution order. Lower values are higher priority (priority=0 is the highest).
+	// Tie Breaking is determined by the following: (priority, created_at, id) in ascending order.
+	Priority uint32 `protobuf:"varint,7,opt,name=priority,proto3" json:"priority,omitempty"`
+}
+
+func (x *UpdateJobHookRequest) Reset() {
+	*x = UpdateJobHookRequest{}
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[142]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *UpdateJobHookRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateJobHookRequest) ProtoMessage() {}
+
+func (x *UpdateJobHookRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[142]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateJobHookRequest.ProtoReflect.Descriptor instead.
+func (*UpdateJobHookRequest) Descriptor() ([]byte, []int) {
+	return file_mgmt_v1alpha1_job_proto_rawDescGZIP(), []int{142}
+}
+
+func (x *UpdateJobHookRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *UpdateJobHookRequest) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *UpdateJobHookRequest) GetDescription() string {
+	if x != nil {
+		return x.Description
+	}
+	return ""
+}
+
+func (x *UpdateJobHookRequest) GetJobId() string {
+	if x != nil {
+		return x.JobId
+	}
+	return ""
+}
+
+func (x *UpdateJobHookRequest) GetConfig() *JobHookConfig {
+	if x != nil {
+		return x.Config
+	}
+	return nil
+}
+
+func (x *UpdateJobHookRequest) GetEnabled() bool {
+	if x != nil {
+		return x.Enabled
+	}
+	return false
+}
+
+func (x *UpdateJobHookRequest) GetPriority() uint32 {
+	if x != nil {
+		return x.Priority
+	}
+	return 0
+}
+
+type UpdateJobHookResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The updated job hook
+	Hook *JobHook `protobuf:"bytes,1,opt,name=hook,proto3" json:"hook,omitempty"`
+}
+
+func (x *UpdateJobHookResponse) Reset() {
+	*x = UpdateJobHookResponse{}
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[143]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *UpdateJobHookResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateJobHookResponse) ProtoMessage() {}
+
+func (x *UpdateJobHookResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[143]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use UpdateJobHookResponse.ProtoReflect.Descriptor instead.
+func (*UpdateJobHookResponse) Descriptor() ([]byte, []int) {
+	return file_mgmt_v1alpha1_job_proto_rawDescGZIP(), []int{143}
+}
+
+func (x *UpdateJobHookResponse) GetHook() *JobHook {
+	if x != nil {
+		return x.Hook
+	}
+	return nil
+}
+
+type SetJobHookEnabledRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The unique identifier of the hook
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Whether or not the hook is enabled.
+	Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"`
+}
+
+func (x *SetJobHookEnabledRequest) Reset() {
+	*x = SetJobHookEnabledRequest{}
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[144]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *SetJobHookEnabledRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetJobHookEnabledRequest) ProtoMessage() {}
+
+func (x *SetJobHookEnabledRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[144]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetJobHookEnabledRequest.ProtoReflect.Descriptor instead.
+func (*SetJobHookEnabledRequest) Descriptor() ([]byte, []int) {
+	return file_mgmt_v1alpha1_job_proto_rawDescGZIP(), []int{144}
+}
+
+func (x *SetJobHookEnabledRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *SetJobHookEnabledRequest) GetEnabled() bool {
+	if x != nil {
+		return x.Enabled
+	}
+	return false
+}
+
+type SetJobHookEnabledResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The updated job hook
+	Hook *JobHook `protobuf:"bytes,1,opt,name=hook,proto3" json:"hook,omitempty"`
+}
+
+func (x *SetJobHookEnabledResponse) Reset() {
+	*x = SetJobHookEnabledResponse{}
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[145]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *SetJobHookEnabledResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SetJobHookEnabledResponse) ProtoMessage() {}
+
+func (x *SetJobHookEnabledResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[145]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetJobHookEnabledResponse.ProtoReflect.Descriptor instead.
+func (*SetJobHookEnabledResponse) Descriptor() ([]byte, []int) {
+	return file_mgmt_v1alpha1_job_proto_rawDescGZIP(), []int{145}
+}
+
+func (x *SetJobHookEnabledResponse) GetHook() *JobHook {
+	if x != nil {
+		return x.Hook
+	}
+	return nil
+}
+
 type PostgresSourceConnectionOptions_NewColumnAdditionStrategy struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -8489,7 +8737,7 @@ type PostgresSourceConnectionOptions_NewColumnAdditionStrategy struct {
 
 func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy) Reset() {
 	*x = PostgresSourceConnectionOptions_NewColumnAdditionStrategy{}
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[142]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[146]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -8501,7 +8749,7 @@ func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy) String() str
 func (*PostgresSourceConnectionOptions_NewColumnAdditionStrategy) ProtoMessage() {}
 
 func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy) ProtoReflect() protoreflect.Message {
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[142]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[146]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8569,7 +8817,7 @@ type PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob struct {
 
 func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob) Reset() {
 	*x = PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob{}
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[143]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[147]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -8581,7 +8829,7 @@ func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob) Stri
 func (*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob) ProtoMessage() {}
 
 func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob) ProtoReflect() protoreflect.Message {
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[143]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[147]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8606,7 +8854,7 @@ type PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap struct {
 
 func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap) Reset() {
 	*x = PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap{}
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[144]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[148]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -8618,7 +8866,7 @@ func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap) Stri
 func (*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap) ProtoMessage() {}
 
 func (x *PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap) ProtoReflect() protoreflect.Message {
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[144]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[148]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8650,7 +8898,7 @@ type JobHookConfig_JobSqlHook struct {
 
 func (x *JobHookConfig_JobSqlHook) Reset() {
 	*x = JobHookConfig_JobSqlHook{}
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[145]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[149]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -8662,7 +8910,7 @@ func (x *JobHookConfig_JobSqlHook) String() string {
 func (*JobHookConfig_JobSqlHook) ProtoMessage() {}
 
 func (x *JobHookConfig_JobSqlHook) ProtoReflect() protoreflect.Message {
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[145]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[149]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -8713,7 +8961,7 @@ type JobHookConfig_JobSqlHook_Timing struct {
 
 func (x *JobHookConfig_JobSqlHook_Timing) Reset() {
 	*x = JobHookConfig_JobSqlHook_Timing{}
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[146]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[150]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -8725,7 +8973,7 @@ func (x *JobHookConfig_JobSqlHook_Timing) String() string {
 func (*JobHookConfig_JobSqlHook_Timing) ProtoMessage() {}
 
 func (x *JobHookConfig_JobSqlHook_Timing) ProtoReflect() protoreflect.Message {
-	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[146]
+	mi := &file_mgmt_v1alpha1_job_proto_msgTypes[150]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -10073,295 +10321,340 @@ var file_mgmt_v1alpha1_job_proto_rawDesc = []byte{
 	0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61,
 	0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69,
 	0x73, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2a, 0x6f,
-	0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4a,
-	0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
-	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f, 0x42, 0x5f, 0x53,
-	0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12,
-	0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x41,
-	0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54,
-	0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x2a,
-	0xa7, 0x01, 0x0a, 0x0e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f, 0x53,
-	0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
-	0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f,
-	0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44,
-	0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f, 0x53,
-	0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12,
-	0x1c, 0x0a, 0x18, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54,
-	0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1a, 0x0a,
-	0x16, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53,
-	0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x92, 0x02, 0x0a, 0x0c, 0x4a, 0x6f,
-	0x62, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x1a, 0x4a, 0x4f,
-	0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53,
-	0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f,
-	0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e,
-	0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55,
-	0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47,
-	0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54,
-	0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12,
-	0x18, 0x0a, 0x14, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55,
-	0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x4a, 0x4f, 0x42,
-	0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43,
-	0x45, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55,
-	0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41,
-	0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e,
-	0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x07,
-	0x12, 0x1c, 0x0a, 0x18, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54,
-	0x55, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10, 0x08, 0x2a, 0x7c,
-	0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x22, 0x0a, 0x1e, 0x4c,
-	0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x4e, 0x4f, 0x5f, 0x54, 0x49, 0x4d,
-	0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
-	0x1a, 0x0a, 0x16, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x46, 0x49,
-	0x46, 0x54, 0x45, 0x45, 0x4e, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c,
-	0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x48, 0x4f,
-	0x55, 0x52, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44,
-	0x4f, 0x57, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x44, 0x41, 0x59, 0x10, 0x03, 0x2a, 0x77, 0x0a, 0x08,
-	0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x4f, 0x47, 0x5f,
-	0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
-	0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c,
-	0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f,
-	0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e,
-	0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03,
-	0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52,
-	0x52, 0x4f, 0x52, 0x10, 0x04, 0x32, 0x86, 0x1c, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12,
-	0x1d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
-	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47,
-	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x47, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x6d, 0x67, 0x6d,
-	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f,
-	0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
-	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
-	0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x44,
-	0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a,
-	0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74,
-	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a,
-	0x12, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61,
-	0x62, 0x6c, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61,
-	0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
-	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73,
-	0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x11, 0x55, 0x70,
-	0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12,
-	0x27, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c,
-	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a,
-	0x6f, 0x62, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a,
-	0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72,
-	0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75,
-	0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x95, 0x01, 0x0a, 0x20, 0x53, 0x65, 0x74, 0x4a,
-	0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x71, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x12, 0x36, 0x2e, 0x6d,
-	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74,
-	0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x71, 0x6c, 0x43, 0x6f, 0x6e, 0x6e,
-	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x53, 0x71, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75,
-	0x62, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
-	0x8f, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73,
-	0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74,
-	0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a,
-	0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e,
-	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x00, 0x12, 0x8f, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44,
+	0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xa2,
+	0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69,
+	0x64, 0x12, 0x2d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
+	0x19, 0xba, 0x48, 0x16, 0x72, 0x14, 0x32, 0x12, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39,
+	0x2d, 0x5d, 0x7b, 0x33, 0x2c, 0x31, 0x30, 0x30, 0x7d, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x29, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0b,
+	0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x06, 0x6a,
+	0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
+	0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x06,
+	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d,
+	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62,
+	0x48, 0x6f, 0x6f, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x08,
+	0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09,
+	0xba, 0x48, 0x06, 0x2a, 0x04, 0x18, 0x64, 0x28, 0x00, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72,
+	0x69, 0x74, 0x79, 0x22, 0x43, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
+	0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x04,
+	0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x67, 0x6d,
+	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x48, 0x6f,
+	0x6f, 0x6b, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x22, 0x4e, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x4a,
+	0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18,
+	0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x47, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x4a,
+	0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x68, 0x6f, 0x6f,
+	0x6b, 0x2a, 0x6f, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a,
+	0x0a, 0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53,
+	0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4a, 0x4f,
+	0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44,
+	0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4a, 0x4f, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53,
+	0x5f, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x4a, 0x4f, 0x42,
+	0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44,
+	0x10, 0x04, 0x2a, 0xa7, 0x01, 0x0a, 0x0e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54,
+	0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49,
+	0x54, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55,
+	0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54,
+	0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44,
+	0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f, 0x53,
+	0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x03,
+	0x12, 0x1a, 0x0a, 0x16, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x5f, 0x53, 0x54, 0x41,
+	0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x92, 0x02, 0x0a,
+	0x0c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a,
+	0x1a, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f,
+	0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a,
+	0x16, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f,
+	0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4a, 0x4f, 0x42,
+	0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x4e,
+	0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e,
+	0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45,
+	0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54,
+	0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17,
+	0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43,
+	0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x4a, 0x4f, 0x42,
+	0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x52, 0x4d,
+	0x49, 0x4e, 0x41, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x4a, 0x4f, 0x42, 0x5f,
+	0x52, 0x55, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45,
+	0x44, 0x10, 0x07, 0x12, 0x1c, 0x0a, 0x18, 0x4a, 0x4f, 0x42, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x53,
+	0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x44, 0x5f, 0x4f, 0x55, 0x54, 0x10,
+	0x08, 0x2a, 0x7c, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x22,
+	0x0a, 0x1e, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x4e, 0x4f, 0x5f,
+	0x54, 0x49, 0x4d, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
+	0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57,
+	0x5f, 0x46, 0x49, 0x46, 0x54, 0x45, 0x45, 0x4e, 0x5f, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x17,
+	0x0a, 0x13, 0x4c, 0x4f, 0x47, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x4f, 0x4e, 0x45,
+	0x5f, 0x48, 0x4f, 0x55, 0x52, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x4f, 0x47, 0x5f, 0x57,
+	0x49, 0x4e, 0x44, 0x4f, 0x57, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x44, 0x41, 0x59, 0x10, 0x03, 0x2a,
+	0x77, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x15, 0x4c,
+	0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
+	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45,
+	0x56, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c,
+	0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12,
+	0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52,
+	0x4e, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c,
+	0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x32, 0xce, 0x1d, 0x0a, 0x0a, 0x4a, 0x6f, 0x62,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4a, 0x6f,
+	0x62, 0x73, 0x12, 0x1d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x1e, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e,
+	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65,
+	0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x67,
+	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a,
+	0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74,
+	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+	0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x67, 0x6d,
+	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50,
+	0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1f, 0x2e, 0x6d, 0x67,
+	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d,
+	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x12, 0x6b, 0x0a, 0x12, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61,
+	0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65,
+	0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x29, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x2e, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61,
+	0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a,
+	0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75,
+	0x6c, 0x65, 0x12, 0x27, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x63, 0x68, 0x65,
+	0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x67,
+	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
+	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x53,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
+	0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x95, 0x01, 0x0a, 0x20, 0x53,
+	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x71, 0x6c, 0x43, 0x6f,
+	0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x12,
+	0x36, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x71, 0x6c, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x6f,
+	0x75, 0x72, 0x63, 0x65, 0x53, 0x71, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x8f, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
+	0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
+	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44,
 	0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65,
-	0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74,
-	0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x6d, 0x67, 0x6d,
-	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
-	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x00, 0x12, 0x92, 0x01, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
-	0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e,
-	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
-	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x6d, 0x67,
+	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61,
+	0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x8f, 0x01, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a,
+	0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e,
+	0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f,
 	0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e,
-	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36,
-	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
-	0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x08, 0x50, 0x61, 0x75, 0x73,
-	0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4a, 0x6f,
-	0x62, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x67,
-	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a,
-	0x6f, 0x62, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74,
-	0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f,
-	0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x75, 0x6e, 0x73,
-	0x12, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
-	0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x4e, 0x65, 0x78,
-	0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
-	0x59, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
-	0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0e, 0x47, 0x65,
-	0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x6d,
-	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74,
-	0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65,
-	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0a, 0x47,
-	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74,
+	0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e,
+	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x92, 0x01, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x2e, 0x6d, 0x67, 0x6d,
+	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+	0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
+	0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x36, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x73, 0x74, 0x69,
+	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x08, 0x50,
+	0x61, 0x75, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4a, 0x6f, 0x62,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4a, 0x6f, 0x62,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a, 0x10, 0x47, 0x65,
+	0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x26,
+	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47,
+	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x63,
+	0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x5f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x4e, 0x65, 0x78, 0x74, 0x52,
+	0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x4e, 0x65, 0x78, 0x74, 0x52, 0x75,
+	0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74,
 	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62,
-	0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x67,
-	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a,
-	0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
-	0x12, 0x62, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65,
-	0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65,
-	0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x67, 0x6d,
-	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f,
-	0x62, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75,
-	0x6e, 0x12, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
-	0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62,
-	0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d,
-	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
-	0x00, 0x12, 0x59, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75,
-	0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
-	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52,
-	0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c,
-	0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x12, 0x22, 0x2e, 0x6d,
-	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e,
-	0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
-	0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0f, 0x54, 0x65, 0x72, 0x6d, 0x69,
-	0x6e, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x12, 0x25, 0x2e, 0x6d, 0x67, 0x6d,
-	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69,
-	0x6e, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75,
-	0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, 0x0a, 0x13, 0x47,
-	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x74, 0x72, 0x65,
-	0x61, 0x6d, 0x12, 0x29, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73,
-	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e,
+	0x4e, 0x65, 0x78, 0x74, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a,
+	0x0e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12,
+	0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
+	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53,
+	0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x20, 0x2e, 0x6d,
+	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74,
+	0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
+	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47,
+	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
 	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65,
-	0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61,
-	0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x74, 0x0a,
-	0x15, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4a, 0x6f,
+	0x62, 0x52, 0x75, 0x6e, 0x12, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
+	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x44, 0x65, 0x6c,
+	0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74,
+	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+	0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
+	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+	0x73, 0x65, 0x22, 0x00, 0x12, 0x59, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
+	0x62, 0x52, 0x75, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75,
+	0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
+	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a,
+	0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x59, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x12,
+	0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0f, 0x54, 0x65,
+	0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x12, 0x25, 0x2e,
+	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x65,
+	0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4a, 0x6f,
+	0x62, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70,
+	0x0a, 0x13, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53,
+	0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x29, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
+	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c,
+	0x6f, 0x67, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x2a, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x75, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x53, 0x74,
+	0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01,
+	0x12, 0x74, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
+	0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x6d, 0x67, 0x6d, 0x74,
+	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62,
+	0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
 	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72,
-	0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
-	0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x79, 0x6e,
-	0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53,
-	0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6e, 0x0a,
-	0x13, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x70, 0x70,
-	0x69, 0x6e, 0x67, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
-	0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x2a, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x70, 0x70, 0x69,
-	0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a,
-	0x0d, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x23,
-	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47,
-	0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75,
-	0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x53,
-	0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x23, 0x2e, 0x6d,
-	0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74,
-	0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0e, 0x53, 0x65, 0x74,
-	0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x67,
-	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52,
-	0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x56, 0x0a, 0x0b,
-	0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x21, 0x2e, 0x6d, 0x67,
-	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a,
-	0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
+	0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62,
+	0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x67,
+	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a,
+	0x6f, 0x62, 0x53, 0x79, 0x6e, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x79, 0x6e, 0x63, 0x4f,
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x12, 0x6e, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x4d,
+	0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+	0x4a, 0x6f, 0x62, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x4d, 0x61,
+	0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x12, 0x5c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+	0x74, 0x12, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c,
+	0x0a, 0x0d, 0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12,
+	0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x0e,
+	0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x12, 0x24,
+	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53,
+	0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x75, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+	0x78, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12,
+	0x56, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x21,
 	0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47,
-	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f,
-	0x6f, 0x6b, 0x12, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x43, 0x72, 0x65,
-	0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x2e, 0x6d, 0x67, 0x6d,
-	0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
-	0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74,
-	0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a,
-	0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e,
-	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65,
-	0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x16, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x48, 0x6f,
-	0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12,
-	0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x49, 0x73, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61,
-	0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e,
-	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73,
-	0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c,
-	0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc4,
-	0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x4a, 0x6f, 0x62, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
-	0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x75, 0x63,
-	0x6c, 0x65, 0x75, 0x73, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x6e, 0x65, 0x6f, 0x73, 0x79, 0x6e,
-	0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f,
-	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x76, 0x31, 0x61,
-	0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x6d, 0x67, 0x6d, 0x74, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, 0x67, 0x6d, 0x74, 0x2e,
-	0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x0d, 0x4d, 0x67, 0x6d, 0x74, 0x5c,
-	0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x19, 0x4d, 0x67, 0x6d, 0x74, 0x5c,
-	0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
-	0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x67, 0x6d, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61,
-	0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x22, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f,
+	0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61,
+	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f,
+	0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d,
+	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x2e,
+	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72,
+	0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x2e, 0x6d, 0x67,
+	0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x16, 0x49, 0x73, 0x4a, 0x6f,
+	0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
+	0x6c, 0x65, 0x12, 0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65,
+	0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x2d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x2e, 0x49, 0x73, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76,
+	0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x00, 0x12, 0x5c, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f,
+	0x6f, 0x6b, 0x12, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f,
+	0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
+	0x68, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x45, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x64, 0x12, 0x27, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x45,
+	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e,
+	0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65,
+	0x74, 0x4a, 0x6f, 0x62, 0x48, 0x6f, 0x6f, 0x6b, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc4, 0x01, 0x0a, 0x11, 0x63, 0x6f,
+	0x6d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42,
+	0x08, 0x4a, 0x6f, 0x62, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x75, 0x63, 0x6c, 0x65, 0x75, 0x73, 0x63,
+	0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x6e, 0x65, 0x6f, 0x73, 0x79, 0x6e, 0x63, 0x2f, 0x62, 0x61, 0x63,
+	0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x73, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x3b, 0x6d, 0x67, 0x6d, 0x74, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03,
+	0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, 0x67, 0x6d, 0x74, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0xca, 0x02, 0x0d, 0x4d, 0x67, 0x6d, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0xe2, 0x02, 0x19, 0x4d, 0x67, 0x6d, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
+	0x02, 0x0e, 0x4d, 0x67, 0x6d, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -10377,7 +10670,7 @@ func file_mgmt_v1alpha1_job_proto_rawDescGZIP() []byte {
 }
 
 var file_mgmt_v1alpha1_job_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
-var file_mgmt_v1alpha1_job_proto_msgTypes = make([]protoimpl.MessageInfo, 147)
+var file_mgmt_v1alpha1_job_proto_msgTypes = make([]protoimpl.MessageInfo, 151)
 var file_mgmt_v1alpha1_job_proto_goTypes = []any{
 	(JobStatus)(0),      // 0: mgmt.v1alpha1.JobStatus
 	(ActivityStatus)(0), // 1: mgmt.v1alpha1.ActivityStatus
@@ -10527,14 +10820,18 @@ var file_mgmt_v1alpha1_job_proto_goTypes = []any{
 	(*DeleteJobHookResponse)(nil),                                             // 145: mgmt.v1alpha1.DeleteJobHookResponse
 	(*IsJobHookNameAvailableRequest)(nil),                                     // 146: mgmt.v1alpha1.IsJobHookNameAvailableRequest
 	(*IsJobHookNameAvailableResponse)(nil),                                    // 147: mgmt.v1alpha1.IsJobHookNameAvailableResponse
-	(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy)(nil),         // 148: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy
-	(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob)(nil), // 149: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.HaltJob
-	(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap)(nil), // 150: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.AutoMap
-	(*JobHookConfig_JobSqlHook)(nil),                                          // 151: mgmt.v1alpha1.JobHookConfig.JobSqlHook
-	(*JobHookConfig_JobSqlHook_Timing)(nil),                                   // 152: mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing
-	(TransformerSource)(0),                                                    // 153: mgmt.v1alpha1.TransformerSource
-	(*TransformerConfig)(nil),                                                 // 154: mgmt.v1alpha1.TransformerConfig
-	(*timestamppb.Timestamp)(nil),                                             // 155: google.protobuf.Timestamp
+	(*UpdateJobHookRequest)(nil),                                              // 148: mgmt.v1alpha1.UpdateJobHookRequest
+	(*UpdateJobHookResponse)(nil),                                             // 149: mgmt.v1alpha1.UpdateJobHookResponse
+	(*SetJobHookEnabledRequest)(nil),                                          // 150: mgmt.v1alpha1.SetJobHookEnabledRequest
+	(*SetJobHookEnabledResponse)(nil),                                         // 151: mgmt.v1alpha1.SetJobHookEnabledResponse
+	(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy)(nil),         // 152: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy
+	(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob)(nil), // 153: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.HaltJob
+	(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap)(nil), // 154: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.AutoMap
+	(*JobHookConfig_JobSqlHook)(nil),                                          // 155: mgmt.v1alpha1.JobHookConfig.JobSqlHook
+	(*JobHookConfig_JobSqlHook_Timing)(nil),                                   // 156: mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing
+	(TransformerSource)(0),                                                    // 157: mgmt.v1alpha1.TransformerSource
+	(*TransformerConfig)(nil),                                                 // 158: mgmt.v1alpha1.TransformerConfig
+	(*timestamppb.Timestamp)(nil),                                             // 159: google.protobuf.Timestamp
 }
 var file_mgmt_v1alpha1_job_proto_depIdxs = []int32{
 	88,  // 0: mgmt.v1alpha1.GetJobsResponse.jobs:type_name -> mgmt.v1alpha1.Job
@@ -10560,7 +10857,7 @@ var file_mgmt_v1alpha1_job_proto_depIdxs = []int32{
 	53,  // 20: mgmt.v1alpha1.DynamoDBSourceUnmappedTransformConfig.n:type_name -> mgmt.v1alpha1.JobMappingTransformer
 	53,  // 21: mgmt.v1alpha1.DynamoDBSourceUnmappedTransformConfig.s:type_name -> mgmt.v1alpha1.JobMappingTransformer
 	23,  // 22: mgmt.v1alpha1.PostgresSourceConnectionOptions.schemas:type_name -> mgmt.v1alpha1.PostgresSourceSchemaOption
-	148, // 23: mgmt.v1alpha1.PostgresSourceConnectionOptions.new_column_addition_strategy:type_name -> mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy
+	152, // 23: mgmt.v1alpha1.PostgresSourceConnectionOptions.new_column_addition_strategy:type_name -> mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy
 	24,  // 24: mgmt.v1alpha1.PostgresSourceSchemaOption.tables:type_name -> mgmt.v1alpha1.PostgresSourceTableOption
 	26,  // 25: mgmt.v1alpha1.MysqlSourceConnectionOptions.schemas:type_name -> mgmt.v1alpha1.MysqlSourceSchemaOption
 	27,  // 26: mgmt.v1alpha1.MysqlSourceSchemaOption.tables:type_name -> mgmt.v1alpha1.MysqlSourceTableOption
@@ -10594,8 +10891,8 @@ var file_mgmt_v1alpha1_job_proto_depIdxs = []int32{
 	134, // 54: mgmt.v1alpha1.CreateJobRequest.hooks:type_name -> mgmt.v1alpha1.NewJobHook
 	51,  // 55: mgmt.v1alpha1.ActivityOptions.retry_policy:type_name -> mgmt.v1alpha1.RetryPolicy
 	88,  // 56: mgmt.v1alpha1.CreateJobResponse.job:type_name -> mgmt.v1alpha1.Job
-	153, // 57: mgmt.v1alpha1.JobMappingTransformer.source:type_name -> mgmt.v1alpha1.TransformerSource
-	154, // 58: mgmt.v1alpha1.JobMappingTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig
+	157, // 57: mgmt.v1alpha1.JobMappingTransformer.source:type_name -> mgmt.v1alpha1.TransformerSource
+	158, // 58: mgmt.v1alpha1.JobMappingTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig
 	53,  // 59: mgmt.v1alpha1.JobMapping.transformer:type_name -> mgmt.v1alpha1.JobMappingTransformer
 	88,  // 60: mgmt.v1alpha1.GetJobResponse.job:type_name -> mgmt.v1alpha1.Job
 	88,  // 61: mgmt.v1alpha1.UpdateJobScheduleResponse.job:type_name -> mgmt.v1alpha1.Job
@@ -10620,17 +10917,17 @@ var file_mgmt_v1alpha1_job_proto_depIdxs = []int32{
 	88,  // 80: mgmt.v1alpha1.CreateJobDestinationConnectionsResponse.job:type_name -> mgmt.v1alpha1.Job
 	102, // 81: mgmt.v1alpha1.GetJobRunsResponse.job_runs:type_name -> mgmt.v1alpha1.JobRun
 	102, // 82: mgmt.v1alpha1.GetJobRunResponse.job_run:type_name -> mgmt.v1alpha1.JobRun
-	155, // 83: mgmt.v1alpha1.Job.created_at:type_name -> google.protobuf.Timestamp
-	155, // 84: mgmt.v1alpha1.Job.updated_at:type_name -> google.protobuf.Timestamp
+	159, // 83: mgmt.v1alpha1.Job.created_at:type_name -> google.protobuf.Timestamp
+	159, // 84: mgmt.v1alpha1.Job.updated_at:type_name -> google.protobuf.Timestamp
 	8,   // 85: mgmt.v1alpha1.Job.source:type_name -> mgmt.v1alpha1.JobSource
 	11,  // 86: mgmt.v1alpha1.Job.destinations:type_name -> mgmt.v1alpha1.JobDestination
 	54,  // 87: mgmt.v1alpha1.Job.mappings:type_name -> mgmt.v1alpha1.JobMapping
 	50,  // 88: mgmt.v1alpha1.Job.sync_options:type_name -> mgmt.v1alpha1.ActivityOptions
 	49,  // 89: mgmt.v1alpha1.Job.workflow_options:type_name -> mgmt.v1alpha1.WorkflowOptions
 	125, // 90: mgmt.v1alpha1.Job.virtual_foreign_keys:type_name -> mgmt.v1alpha1.VirtualForeignConstraint
-	155, // 91: mgmt.v1alpha1.JobRecentRun.start_time:type_name -> google.protobuf.Timestamp
+	159, // 91: mgmt.v1alpha1.JobRecentRun.start_time:type_name -> google.protobuf.Timestamp
 	89,  // 92: mgmt.v1alpha1.GetJobRecentRunsResponse.recent_runs:type_name -> mgmt.v1alpha1.JobRecentRun
-	155, // 93: mgmt.v1alpha1.JobNextRuns.next_run_times:type_name -> google.protobuf.Timestamp
+	159, // 93: mgmt.v1alpha1.JobNextRuns.next_run_times:type_name -> google.protobuf.Timestamp
 	92,  // 94: mgmt.v1alpha1.GetJobNextRunsResponse.next_runs:type_name -> mgmt.v1alpha1.JobNextRuns
 	0,   // 95: mgmt.v1alpha1.GetJobStatusResponse.status:type_name -> mgmt.v1alpha1.JobStatus
 	0,   // 96: mgmt.v1alpha1.JobStatusRecord.status:type_name -> mgmt.v1alpha1.JobStatus
@@ -10638,20 +10935,20 @@ var file_mgmt_v1alpha1_job_proto_depIdxs = []int32{
 	1,   // 98: mgmt.v1alpha1.PendingActivity.status:type_name -> mgmt.v1alpha1.ActivityStatus
 	100, // 99: mgmt.v1alpha1.PendingActivity.last_failure:type_name -> mgmt.v1alpha1.ActivityFailure
 	2,   // 100: mgmt.v1alpha1.JobRun.status:type_name -> mgmt.v1alpha1.JobRunStatus
-	155, // 101: mgmt.v1alpha1.JobRun.started_at:type_name -> google.protobuf.Timestamp
-	155, // 102: mgmt.v1alpha1.JobRun.completed_at:type_name -> google.protobuf.Timestamp
+	159, // 101: mgmt.v1alpha1.JobRun.started_at:type_name -> google.protobuf.Timestamp
+	159, // 102: mgmt.v1alpha1.JobRun.completed_at:type_name -> google.protobuf.Timestamp
 	101, // 103: mgmt.v1alpha1.JobRun.pending_activities:type_name -> mgmt.v1alpha1.PendingActivity
-	155, // 104: mgmt.v1alpha1.JobRunEventTask.event_time:type_name -> google.protobuf.Timestamp
+	159, // 104: mgmt.v1alpha1.JobRunEventTask.event_time:type_name -> google.protobuf.Timestamp
 	103, // 105: mgmt.v1alpha1.JobRunEventTask.error:type_name -> mgmt.v1alpha1.JobRunEventTaskError
 	105, // 106: mgmt.v1alpha1.JobRunEventMetadata.sync_metadata:type_name -> mgmt.v1alpha1.JobRunSyncMetadata
-	155, // 107: mgmt.v1alpha1.JobRunEvent.start_time:type_name -> google.protobuf.Timestamp
-	155, // 108: mgmt.v1alpha1.JobRunEvent.close_time:type_name -> google.protobuf.Timestamp
+	159, // 107: mgmt.v1alpha1.JobRunEvent.start_time:type_name -> google.protobuf.Timestamp
+	159, // 108: mgmt.v1alpha1.JobRunEvent.close_time:type_name -> google.protobuf.Timestamp
 	106, // 109: mgmt.v1alpha1.JobRunEvent.metadata:type_name -> mgmt.v1alpha1.JobRunEventMetadata
 	104, // 110: mgmt.v1alpha1.JobRunEvent.tasks:type_name -> mgmt.v1alpha1.JobRunEventTask
 	107, // 111: mgmt.v1alpha1.GetJobRunEventsResponse.events:type_name -> mgmt.v1alpha1.JobRunEvent
 	3,   // 112: mgmt.v1alpha1.GetJobRunLogsStreamRequest.window:type_name -> mgmt.v1alpha1.LogWindow
 	4,   // 113: mgmt.v1alpha1.GetJobRunLogsStreamRequest.log_levels:type_name -> mgmt.v1alpha1.LogLevel
-	155, // 114: mgmt.v1alpha1.GetJobRunLogsStreamResponse.timestamp:type_name -> google.protobuf.Timestamp
+	159, // 114: mgmt.v1alpha1.GetJobRunLogsStreamResponse.timestamp:type_name -> google.protobuf.Timestamp
 	49,  // 115: mgmt.v1alpha1.SetJobWorkflowOptionsRequest.worfklow_options:type_name -> mgmt.v1alpha1.WorkflowOptions
 	88,  // 116: mgmt.v1alpha1.SetJobWorkflowOptionsResponse.job:type_name -> mgmt.v1alpha1.Job
 	50,  // 117: mgmt.v1alpha1.SetJobSyncOptionsRequest.sync_options:type_name -> mgmt.v1alpha1.ActivityOptions
@@ -10665,94 +10962,101 @@ var file_mgmt_v1alpha1_job_proto_depIdxs = []int32{
 	126, // 125: mgmt.v1alpha1.SetRunContextRequest.id:type_name -> mgmt.v1alpha1.RunContextKey
 	126, // 126: mgmt.v1alpha1.SetRunContextsRequest.id:type_name -> mgmt.v1alpha1.RunContextKey
 	135, // 127: mgmt.v1alpha1.JobHook.config:type_name -> mgmt.v1alpha1.JobHookConfig
-	155, // 128: mgmt.v1alpha1.JobHook.created_at:type_name -> google.protobuf.Timestamp
-	155, // 129: mgmt.v1alpha1.JobHook.updated_at:type_name -> google.protobuf.Timestamp
+	159, // 128: mgmt.v1alpha1.JobHook.created_at:type_name -> google.protobuf.Timestamp
+	159, // 129: mgmt.v1alpha1.JobHook.updated_at:type_name -> google.protobuf.Timestamp
 	135, // 130: mgmt.v1alpha1.NewJobHook.config:type_name -> mgmt.v1alpha1.JobHookConfig
-	151, // 131: mgmt.v1alpha1.JobHookConfig.sql:type_name -> mgmt.v1alpha1.JobHookConfig.JobSqlHook
+	155, // 131: mgmt.v1alpha1.JobHookConfig.sql:type_name -> mgmt.v1alpha1.JobHookConfig.JobSqlHook
 	133, // 132: mgmt.v1alpha1.GetJobHooksResponse.hooks:type_name -> mgmt.v1alpha1.JobHook
 	133, // 133: mgmt.v1alpha1.GetJobHookResponse.hook:type_name -> mgmt.v1alpha1.JobHook
 	134, // 134: mgmt.v1alpha1.CreateJobHookRequest.hook:type_name -> mgmt.v1alpha1.NewJobHook
 	133, // 135: mgmt.v1alpha1.CreateJobHookResponse.hook:type_name -> mgmt.v1alpha1.JobHook
-	149, // 136: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.halt_job:type_name -> mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.HaltJob
-	150, // 137: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.auto_map:type_name -> mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.AutoMap
-	152, // 138: mgmt.v1alpha1.JobHookConfig.JobSqlHook.timing:type_name -> mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing
-	136, // 139: mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing.pre_sync:type_name -> mgmt.v1alpha1.JobHookTimingPreSync
-	137, // 140: mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing.post_sync:type_name -> mgmt.v1alpha1.JobHookTimingPostSync
-	6,   // 141: mgmt.v1alpha1.JobService.GetJobs:input_type -> mgmt.v1alpha1.GetJobsRequest
-	55,  // 142: mgmt.v1alpha1.JobService.GetJob:input_type -> mgmt.v1alpha1.GetJobRequest
-	48,  // 143: mgmt.v1alpha1.JobService.CreateJob:input_type -> mgmt.v1alpha1.CreateJobRequest
-	76,  // 144: mgmt.v1alpha1.JobService.DeleteJob:input_type -> mgmt.v1alpha1.DeleteJobRequest
-	78,  // 145: mgmt.v1alpha1.JobService.IsJobNameAvailable:input_type -> mgmt.v1alpha1.IsJobNameAvailableRequest
-	57,  // 146: mgmt.v1alpha1.JobService.UpdateJobSchedule:input_type -> mgmt.v1alpha1.UpdateJobScheduleRequest
-	61,  // 147: mgmt.v1alpha1.JobService.UpdateJobSourceConnection:input_type -> mgmt.v1alpha1.UpdateJobSourceConnectionRequest
-	68,  // 148: mgmt.v1alpha1.JobService.SetJobSourceSqlConnectionSubsets:input_type -> mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest
-	70,  // 149: mgmt.v1alpha1.JobService.UpdateJobDestinationConnection:input_type -> mgmt.v1alpha1.UpdateJobDestinationConnectionRequest
-	72,  // 150: mgmt.v1alpha1.JobService.DeleteJobDestinationConnection:input_type -> mgmt.v1alpha1.DeleteJobDestinationConnectionRequest
-	74,  // 151: mgmt.v1alpha1.JobService.CreateJobDestinationConnections:input_type -> mgmt.v1alpha1.CreateJobDestinationConnectionsRequest
-	59,  // 152: mgmt.v1alpha1.JobService.PauseJob:input_type -> mgmt.v1alpha1.PauseJobRequest
-	90,  // 153: mgmt.v1alpha1.JobService.GetJobRecentRuns:input_type -> mgmt.v1alpha1.GetJobRecentRunsRequest
-	93,  // 154: mgmt.v1alpha1.JobService.GetJobNextRuns:input_type -> mgmt.v1alpha1.GetJobNextRunsRequest
-	95,  // 155: mgmt.v1alpha1.JobService.GetJobStatus:input_type -> mgmt.v1alpha1.GetJobStatusRequest
-	98,  // 156: mgmt.v1alpha1.JobService.GetJobStatuses:input_type -> mgmt.v1alpha1.GetJobStatusesRequest
-	80,  // 157: mgmt.v1alpha1.JobService.GetJobRuns:input_type -> mgmt.v1alpha1.GetJobRunsRequest
-	108, // 158: mgmt.v1alpha1.JobService.GetJobRunEvents:input_type -> mgmt.v1alpha1.GetJobRunEventsRequest
-	82,  // 159: mgmt.v1alpha1.JobService.GetJobRun:input_type -> mgmt.v1alpha1.GetJobRunRequest
-	110, // 160: mgmt.v1alpha1.JobService.DeleteJobRun:input_type -> mgmt.v1alpha1.DeleteJobRunRequest
-	84,  // 161: mgmt.v1alpha1.JobService.CreateJobRun:input_type -> mgmt.v1alpha1.CreateJobRunRequest
-	86,  // 162: mgmt.v1alpha1.JobService.CancelJobRun:input_type -> mgmt.v1alpha1.CancelJobRunRequest
-	112, // 163: mgmt.v1alpha1.JobService.TerminateJobRun:input_type -> mgmt.v1alpha1.TerminateJobRunRequest
-	114, // 164: mgmt.v1alpha1.JobService.GetJobRunLogsStream:input_type -> mgmt.v1alpha1.GetJobRunLogsStreamRequest
-	116, // 165: mgmt.v1alpha1.JobService.SetJobWorkflowOptions:input_type -> mgmt.v1alpha1.SetJobWorkflowOptionsRequest
-	118, // 166: mgmt.v1alpha1.JobService.SetJobSyncOptions:input_type -> mgmt.v1alpha1.SetJobSyncOptionsRequest
-	120, // 167: mgmt.v1alpha1.JobService.ValidateJobMappings:input_type -> mgmt.v1alpha1.ValidateJobMappingsRequest
-	127, // 168: mgmt.v1alpha1.JobService.GetRunContext:input_type -> mgmt.v1alpha1.GetRunContextRequest
-	129, // 169: mgmt.v1alpha1.JobService.SetRunContext:input_type -> mgmt.v1alpha1.SetRunContextRequest
-	131, // 170: mgmt.v1alpha1.JobService.SetRunContexts:input_type -> mgmt.v1alpha1.SetRunContextsRequest
-	138, // 171: mgmt.v1alpha1.JobService.GetJobHooks:input_type -> mgmt.v1alpha1.GetJobHooksRequest
-	140, // 172: mgmt.v1alpha1.JobService.GetJobHook:input_type -> mgmt.v1alpha1.GetJobHookRequest
-	142, // 173: mgmt.v1alpha1.JobService.CreateJobHook:input_type -> mgmt.v1alpha1.CreateJobHookRequest
-	144, // 174: mgmt.v1alpha1.JobService.DeleteJobHook:input_type -> mgmt.v1alpha1.DeleteJobHookRequest
-	146, // 175: mgmt.v1alpha1.JobService.IsJobHookNameAvailable:input_type -> mgmt.v1alpha1.IsJobHookNameAvailableRequest
-	7,   // 176: mgmt.v1alpha1.JobService.GetJobs:output_type -> mgmt.v1alpha1.GetJobsResponse
-	56,  // 177: mgmt.v1alpha1.JobService.GetJob:output_type -> mgmt.v1alpha1.GetJobResponse
-	52,  // 178: mgmt.v1alpha1.JobService.CreateJob:output_type -> mgmt.v1alpha1.CreateJobResponse
-	77,  // 179: mgmt.v1alpha1.JobService.DeleteJob:output_type -> mgmt.v1alpha1.DeleteJobResponse
-	79,  // 180: mgmt.v1alpha1.JobService.IsJobNameAvailable:output_type -> mgmt.v1alpha1.IsJobNameAvailableResponse
-	58,  // 181: mgmt.v1alpha1.JobService.UpdateJobSchedule:output_type -> mgmt.v1alpha1.UpdateJobScheduleResponse
-	62,  // 182: mgmt.v1alpha1.JobService.UpdateJobSourceConnection:output_type -> mgmt.v1alpha1.UpdateJobSourceConnectionResponse
-	69,  // 183: mgmt.v1alpha1.JobService.SetJobSourceSqlConnectionSubsets:output_type -> mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsResponse
-	71,  // 184: mgmt.v1alpha1.JobService.UpdateJobDestinationConnection:output_type -> mgmt.v1alpha1.UpdateJobDestinationConnectionResponse
-	73,  // 185: mgmt.v1alpha1.JobService.DeleteJobDestinationConnection:output_type -> mgmt.v1alpha1.DeleteJobDestinationConnectionResponse
-	75,  // 186: mgmt.v1alpha1.JobService.CreateJobDestinationConnections:output_type -> mgmt.v1alpha1.CreateJobDestinationConnectionsResponse
-	60,  // 187: mgmt.v1alpha1.JobService.PauseJob:output_type -> mgmt.v1alpha1.PauseJobResponse
-	91,  // 188: mgmt.v1alpha1.JobService.GetJobRecentRuns:output_type -> mgmt.v1alpha1.GetJobRecentRunsResponse
-	94,  // 189: mgmt.v1alpha1.JobService.GetJobNextRuns:output_type -> mgmt.v1alpha1.GetJobNextRunsResponse
-	96,  // 190: mgmt.v1alpha1.JobService.GetJobStatus:output_type -> mgmt.v1alpha1.GetJobStatusResponse
-	99,  // 191: mgmt.v1alpha1.JobService.GetJobStatuses:output_type -> mgmt.v1alpha1.GetJobStatusesResponse
-	81,  // 192: mgmt.v1alpha1.JobService.GetJobRuns:output_type -> mgmt.v1alpha1.GetJobRunsResponse
-	109, // 193: mgmt.v1alpha1.JobService.GetJobRunEvents:output_type -> mgmt.v1alpha1.GetJobRunEventsResponse
-	83,  // 194: mgmt.v1alpha1.JobService.GetJobRun:output_type -> mgmt.v1alpha1.GetJobRunResponse
-	111, // 195: mgmt.v1alpha1.JobService.DeleteJobRun:output_type -> mgmt.v1alpha1.DeleteJobRunResponse
-	85,  // 196: mgmt.v1alpha1.JobService.CreateJobRun:output_type -> mgmt.v1alpha1.CreateJobRunResponse
-	87,  // 197: mgmt.v1alpha1.JobService.CancelJobRun:output_type -> mgmt.v1alpha1.CancelJobRunResponse
-	113, // 198: mgmt.v1alpha1.JobService.TerminateJobRun:output_type -> mgmt.v1alpha1.TerminateJobRunResponse
-	115, // 199: mgmt.v1alpha1.JobService.GetJobRunLogsStream:output_type -> mgmt.v1alpha1.GetJobRunLogsStreamResponse
-	117, // 200: mgmt.v1alpha1.JobService.SetJobWorkflowOptions:output_type -> mgmt.v1alpha1.SetJobWorkflowOptionsResponse
-	119, // 201: mgmt.v1alpha1.JobService.SetJobSyncOptions:output_type -> mgmt.v1alpha1.SetJobSyncOptionsResponse
-	123, // 202: mgmt.v1alpha1.JobService.ValidateJobMappings:output_type -> mgmt.v1alpha1.ValidateJobMappingsResponse
-	128, // 203: mgmt.v1alpha1.JobService.GetRunContext:output_type -> mgmt.v1alpha1.GetRunContextResponse
-	130, // 204: mgmt.v1alpha1.JobService.SetRunContext:output_type -> mgmt.v1alpha1.SetRunContextResponse
-	132, // 205: mgmt.v1alpha1.JobService.SetRunContexts:output_type -> mgmt.v1alpha1.SetRunContextsResponse
-	139, // 206: mgmt.v1alpha1.JobService.GetJobHooks:output_type -> mgmt.v1alpha1.GetJobHooksResponse
-	141, // 207: mgmt.v1alpha1.JobService.GetJobHook:output_type -> mgmt.v1alpha1.GetJobHookResponse
-	143, // 208: mgmt.v1alpha1.JobService.CreateJobHook:output_type -> mgmt.v1alpha1.CreateJobHookResponse
-	145, // 209: mgmt.v1alpha1.JobService.DeleteJobHook:output_type -> mgmt.v1alpha1.DeleteJobHookResponse
-	147, // 210: mgmt.v1alpha1.JobService.IsJobHookNameAvailable:output_type -> mgmt.v1alpha1.IsJobHookNameAvailableResponse
-	176, // [176:211] is the sub-list for method output_type
-	141, // [141:176] is the sub-list for method input_type
-	141, // [141:141] is the sub-list for extension type_name
-	141, // [141:141] is the sub-list for extension extendee
-	0,   // [0:141] is the sub-list for field type_name
+	135, // 136: mgmt.v1alpha1.UpdateJobHookRequest.config:type_name -> mgmt.v1alpha1.JobHookConfig
+	133, // 137: mgmt.v1alpha1.UpdateJobHookResponse.hook:type_name -> mgmt.v1alpha1.JobHook
+	133, // 138: mgmt.v1alpha1.SetJobHookEnabledResponse.hook:type_name -> mgmt.v1alpha1.JobHook
+	153, // 139: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.halt_job:type_name -> mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.HaltJob
+	154, // 140: mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.auto_map:type_name -> mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.AutoMap
+	156, // 141: mgmt.v1alpha1.JobHookConfig.JobSqlHook.timing:type_name -> mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing
+	136, // 142: mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing.pre_sync:type_name -> mgmt.v1alpha1.JobHookTimingPreSync
+	137, // 143: mgmt.v1alpha1.JobHookConfig.JobSqlHook.Timing.post_sync:type_name -> mgmt.v1alpha1.JobHookTimingPostSync
+	6,   // 144: mgmt.v1alpha1.JobService.GetJobs:input_type -> mgmt.v1alpha1.GetJobsRequest
+	55,  // 145: mgmt.v1alpha1.JobService.GetJob:input_type -> mgmt.v1alpha1.GetJobRequest
+	48,  // 146: mgmt.v1alpha1.JobService.CreateJob:input_type -> mgmt.v1alpha1.CreateJobRequest
+	76,  // 147: mgmt.v1alpha1.JobService.DeleteJob:input_type -> mgmt.v1alpha1.DeleteJobRequest
+	78,  // 148: mgmt.v1alpha1.JobService.IsJobNameAvailable:input_type -> mgmt.v1alpha1.IsJobNameAvailableRequest
+	57,  // 149: mgmt.v1alpha1.JobService.UpdateJobSchedule:input_type -> mgmt.v1alpha1.UpdateJobScheduleRequest
+	61,  // 150: mgmt.v1alpha1.JobService.UpdateJobSourceConnection:input_type -> mgmt.v1alpha1.UpdateJobSourceConnectionRequest
+	68,  // 151: mgmt.v1alpha1.JobService.SetJobSourceSqlConnectionSubsets:input_type -> mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest
+	70,  // 152: mgmt.v1alpha1.JobService.UpdateJobDestinationConnection:input_type -> mgmt.v1alpha1.UpdateJobDestinationConnectionRequest
+	72,  // 153: mgmt.v1alpha1.JobService.DeleteJobDestinationConnection:input_type -> mgmt.v1alpha1.DeleteJobDestinationConnectionRequest
+	74,  // 154: mgmt.v1alpha1.JobService.CreateJobDestinationConnections:input_type -> mgmt.v1alpha1.CreateJobDestinationConnectionsRequest
+	59,  // 155: mgmt.v1alpha1.JobService.PauseJob:input_type -> mgmt.v1alpha1.PauseJobRequest
+	90,  // 156: mgmt.v1alpha1.JobService.GetJobRecentRuns:input_type -> mgmt.v1alpha1.GetJobRecentRunsRequest
+	93,  // 157: mgmt.v1alpha1.JobService.GetJobNextRuns:input_type -> mgmt.v1alpha1.GetJobNextRunsRequest
+	95,  // 158: mgmt.v1alpha1.JobService.GetJobStatus:input_type -> mgmt.v1alpha1.GetJobStatusRequest
+	98,  // 159: mgmt.v1alpha1.JobService.GetJobStatuses:input_type -> mgmt.v1alpha1.GetJobStatusesRequest
+	80,  // 160: mgmt.v1alpha1.JobService.GetJobRuns:input_type -> mgmt.v1alpha1.GetJobRunsRequest
+	108, // 161: mgmt.v1alpha1.JobService.GetJobRunEvents:input_type -> mgmt.v1alpha1.GetJobRunEventsRequest
+	82,  // 162: mgmt.v1alpha1.JobService.GetJobRun:input_type -> mgmt.v1alpha1.GetJobRunRequest
+	110, // 163: mgmt.v1alpha1.JobService.DeleteJobRun:input_type -> mgmt.v1alpha1.DeleteJobRunRequest
+	84,  // 164: mgmt.v1alpha1.JobService.CreateJobRun:input_type -> mgmt.v1alpha1.CreateJobRunRequest
+	86,  // 165: mgmt.v1alpha1.JobService.CancelJobRun:input_type -> mgmt.v1alpha1.CancelJobRunRequest
+	112, // 166: mgmt.v1alpha1.JobService.TerminateJobRun:input_type -> mgmt.v1alpha1.TerminateJobRunRequest
+	114, // 167: mgmt.v1alpha1.JobService.GetJobRunLogsStream:input_type -> mgmt.v1alpha1.GetJobRunLogsStreamRequest
+	116, // 168: mgmt.v1alpha1.JobService.SetJobWorkflowOptions:input_type -> mgmt.v1alpha1.SetJobWorkflowOptionsRequest
+	118, // 169: mgmt.v1alpha1.JobService.SetJobSyncOptions:input_type -> mgmt.v1alpha1.SetJobSyncOptionsRequest
+	120, // 170: mgmt.v1alpha1.JobService.ValidateJobMappings:input_type -> mgmt.v1alpha1.ValidateJobMappingsRequest
+	127, // 171: mgmt.v1alpha1.JobService.GetRunContext:input_type -> mgmt.v1alpha1.GetRunContextRequest
+	129, // 172: mgmt.v1alpha1.JobService.SetRunContext:input_type -> mgmt.v1alpha1.SetRunContextRequest
+	131, // 173: mgmt.v1alpha1.JobService.SetRunContexts:input_type -> mgmt.v1alpha1.SetRunContextsRequest
+	138, // 174: mgmt.v1alpha1.JobService.GetJobHooks:input_type -> mgmt.v1alpha1.GetJobHooksRequest
+	140, // 175: mgmt.v1alpha1.JobService.GetJobHook:input_type -> mgmt.v1alpha1.GetJobHookRequest
+	142, // 176: mgmt.v1alpha1.JobService.CreateJobHook:input_type -> mgmt.v1alpha1.CreateJobHookRequest
+	144, // 177: mgmt.v1alpha1.JobService.DeleteJobHook:input_type -> mgmt.v1alpha1.DeleteJobHookRequest
+	146, // 178: mgmt.v1alpha1.JobService.IsJobHookNameAvailable:input_type -> mgmt.v1alpha1.IsJobHookNameAvailableRequest
+	148, // 179: mgmt.v1alpha1.JobService.UpdateJobHook:input_type -> mgmt.v1alpha1.UpdateJobHookRequest
+	150, // 180: mgmt.v1alpha1.JobService.SetJobHookEnabled:input_type -> mgmt.v1alpha1.SetJobHookEnabledRequest
+	7,   // 181: mgmt.v1alpha1.JobService.GetJobs:output_type -> mgmt.v1alpha1.GetJobsResponse
+	56,  // 182: mgmt.v1alpha1.JobService.GetJob:output_type -> mgmt.v1alpha1.GetJobResponse
+	52,  // 183: mgmt.v1alpha1.JobService.CreateJob:output_type -> mgmt.v1alpha1.CreateJobResponse
+	77,  // 184: mgmt.v1alpha1.JobService.DeleteJob:output_type -> mgmt.v1alpha1.DeleteJobResponse
+	79,  // 185: mgmt.v1alpha1.JobService.IsJobNameAvailable:output_type -> mgmt.v1alpha1.IsJobNameAvailableResponse
+	58,  // 186: mgmt.v1alpha1.JobService.UpdateJobSchedule:output_type -> mgmt.v1alpha1.UpdateJobScheduleResponse
+	62,  // 187: mgmt.v1alpha1.JobService.UpdateJobSourceConnection:output_type -> mgmt.v1alpha1.UpdateJobSourceConnectionResponse
+	69,  // 188: mgmt.v1alpha1.JobService.SetJobSourceSqlConnectionSubsets:output_type -> mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsResponse
+	71,  // 189: mgmt.v1alpha1.JobService.UpdateJobDestinationConnection:output_type -> mgmt.v1alpha1.UpdateJobDestinationConnectionResponse
+	73,  // 190: mgmt.v1alpha1.JobService.DeleteJobDestinationConnection:output_type -> mgmt.v1alpha1.DeleteJobDestinationConnectionResponse
+	75,  // 191: mgmt.v1alpha1.JobService.CreateJobDestinationConnections:output_type -> mgmt.v1alpha1.CreateJobDestinationConnectionsResponse
+	60,  // 192: mgmt.v1alpha1.JobService.PauseJob:output_type -> mgmt.v1alpha1.PauseJobResponse
+	91,  // 193: mgmt.v1alpha1.JobService.GetJobRecentRuns:output_type -> mgmt.v1alpha1.GetJobRecentRunsResponse
+	94,  // 194: mgmt.v1alpha1.JobService.GetJobNextRuns:output_type -> mgmt.v1alpha1.GetJobNextRunsResponse
+	96,  // 195: mgmt.v1alpha1.JobService.GetJobStatus:output_type -> mgmt.v1alpha1.GetJobStatusResponse
+	99,  // 196: mgmt.v1alpha1.JobService.GetJobStatuses:output_type -> mgmt.v1alpha1.GetJobStatusesResponse
+	81,  // 197: mgmt.v1alpha1.JobService.GetJobRuns:output_type -> mgmt.v1alpha1.GetJobRunsResponse
+	109, // 198: mgmt.v1alpha1.JobService.GetJobRunEvents:output_type -> mgmt.v1alpha1.GetJobRunEventsResponse
+	83,  // 199: mgmt.v1alpha1.JobService.GetJobRun:output_type -> mgmt.v1alpha1.GetJobRunResponse
+	111, // 200: mgmt.v1alpha1.JobService.DeleteJobRun:output_type -> mgmt.v1alpha1.DeleteJobRunResponse
+	85,  // 201: mgmt.v1alpha1.JobService.CreateJobRun:output_type -> mgmt.v1alpha1.CreateJobRunResponse
+	87,  // 202: mgmt.v1alpha1.JobService.CancelJobRun:output_type -> mgmt.v1alpha1.CancelJobRunResponse
+	113, // 203: mgmt.v1alpha1.JobService.TerminateJobRun:output_type -> mgmt.v1alpha1.TerminateJobRunResponse
+	115, // 204: mgmt.v1alpha1.JobService.GetJobRunLogsStream:output_type -> mgmt.v1alpha1.GetJobRunLogsStreamResponse
+	117, // 205: mgmt.v1alpha1.JobService.SetJobWorkflowOptions:output_type -> mgmt.v1alpha1.SetJobWorkflowOptionsResponse
+	119, // 206: mgmt.v1alpha1.JobService.SetJobSyncOptions:output_type -> mgmt.v1alpha1.SetJobSyncOptionsResponse
+	123, // 207: mgmt.v1alpha1.JobService.ValidateJobMappings:output_type -> mgmt.v1alpha1.ValidateJobMappingsResponse
+	128, // 208: mgmt.v1alpha1.JobService.GetRunContext:output_type -> mgmt.v1alpha1.GetRunContextResponse
+	130, // 209: mgmt.v1alpha1.JobService.SetRunContext:output_type -> mgmt.v1alpha1.SetRunContextResponse
+	132, // 210: mgmt.v1alpha1.JobService.SetRunContexts:output_type -> mgmt.v1alpha1.SetRunContextsResponse
+	139, // 211: mgmt.v1alpha1.JobService.GetJobHooks:output_type -> mgmt.v1alpha1.GetJobHooksResponse
+	141, // 212: mgmt.v1alpha1.JobService.GetJobHook:output_type -> mgmt.v1alpha1.GetJobHookResponse
+	143, // 213: mgmt.v1alpha1.JobService.CreateJobHook:output_type -> mgmt.v1alpha1.CreateJobHookResponse
+	145, // 214: mgmt.v1alpha1.JobService.DeleteJobHook:output_type -> mgmt.v1alpha1.DeleteJobHookResponse
+	147, // 215: mgmt.v1alpha1.JobService.IsJobHookNameAvailable:output_type -> mgmt.v1alpha1.IsJobHookNameAvailableResponse
+	149, // 216: mgmt.v1alpha1.JobService.UpdateJobHook:output_type -> mgmt.v1alpha1.UpdateJobHookResponse
+	151, // 217: mgmt.v1alpha1.JobService.SetJobHookEnabled:output_type -> mgmt.v1alpha1.SetJobHookEnabledResponse
+	181, // [181:218] is the sub-list for method output_type
+	144, // [144:181] is the sub-list for method input_type
+	144, // [144:144] is the sub-list for extension type_name
+	144, // [144:144] is the sub-list for extension extendee
+	0,   // [0:144] is the sub-list for field type_name
 }
 
 func init() { file_mgmt_v1alpha1_job_proto_init() }
@@ -10819,11 +11123,11 @@ func file_mgmt_v1alpha1_job_proto_init() {
 	file_mgmt_v1alpha1_job_proto_msgTypes[129].OneofWrappers = []any{
 		(*JobHookConfig_Sql)(nil),
 	}
-	file_mgmt_v1alpha1_job_proto_msgTypes[142].OneofWrappers = []any{
+	file_mgmt_v1alpha1_job_proto_msgTypes[146].OneofWrappers = []any{
 		(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_HaltJob_)(nil),
 		(*PostgresSourceConnectionOptions_NewColumnAdditionStrategy_AutoMap_)(nil),
 	}
-	file_mgmt_v1alpha1_job_proto_msgTypes[146].OneofWrappers = []any{
+	file_mgmt_v1alpha1_job_proto_msgTypes[150].OneofWrappers = []any{
 		(*JobHookConfig_JobSqlHook_Timing_PreSync)(nil),
 		(*JobHookConfig_JobSqlHook_Timing_PostSync)(nil),
 	}
@@ -10833,7 +11137,7 @@ func file_mgmt_v1alpha1_job_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_mgmt_v1alpha1_job_proto_rawDesc,
 			NumEnums:      6,
-			NumMessages:   147,
+			NumMessages:   151,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/backend/gen/go/protos/mgmt/v1alpha1/job.pb.json.go b/backend/gen/go/protos/mgmt/v1alpha1/job.pb.json.go
index 220d1862b2..14874cea98 100644
--- a/backend/gen/go/protos/mgmt/v1alpha1/job.pb.json.go
+++ b/backend/gen/go/protos/mgmt/v1alpha1/job.pb.json.go
@@ -1476,3 +1476,43 @@ func (msg *IsJobHookNameAvailableResponse) MarshalJSON() ([]byte, error) {
 func (msg *IsJobHookNameAvailableResponse) UnmarshalJSON(b []byte) error {
 	return protojson.UnmarshalOptions{}.Unmarshal(b, msg)
 }
+
+// MarshalJSON implements json.Marshaler
+func (msg *UpdateJobHookRequest) MarshalJSON() ([]byte, error) {
+	return protojson.MarshalOptions{}.Marshal(msg)
+}
+
+// UnmarshalJSON implements json.Unmarshaler
+func (msg *UpdateJobHookRequest) UnmarshalJSON(b []byte) error {
+	return protojson.UnmarshalOptions{}.Unmarshal(b, msg)
+}
+
+// MarshalJSON implements json.Marshaler
+func (msg *UpdateJobHookResponse) MarshalJSON() ([]byte, error) {
+	return protojson.MarshalOptions{}.Marshal(msg)
+}
+
+// UnmarshalJSON implements json.Unmarshaler
+func (msg *UpdateJobHookResponse) UnmarshalJSON(b []byte) error {
+	return protojson.UnmarshalOptions{}.Unmarshal(b, msg)
+}
+
+// MarshalJSON implements json.Marshaler
+func (msg *SetJobHookEnabledRequest) MarshalJSON() ([]byte, error) {
+	return protojson.MarshalOptions{}.Marshal(msg)
+}
+
+// UnmarshalJSON implements json.Unmarshaler
+func (msg *SetJobHookEnabledRequest) UnmarshalJSON(b []byte) error {
+	return protojson.UnmarshalOptions{}.Unmarshal(b, msg)
+}
+
+// MarshalJSON implements json.Marshaler
+func (msg *SetJobHookEnabledResponse) MarshalJSON() ([]byte, error) {
+	return protojson.MarshalOptions{}.Marshal(msg)
+}
+
+// UnmarshalJSON implements json.Unmarshaler
+func (msg *SetJobHookEnabledResponse) UnmarshalJSON(b []byte) error {
+	return protojson.UnmarshalOptions{}.Unmarshal(b, msg)
+}
diff --git a/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/job.connect.go b/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/job.connect.go
index 4735252c2b..2177b68fec 100644
--- a/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/job.connect.go
+++ b/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/job.connect.go
@@ -125,6 +125,12 @@ const (
 	// JobServiceIsJobHookNameAvailableProcedure is the fully-qualified name of the JobService's
 	// IsJobHookNameAvailable RPC.
 	JobServiceIsJobHookNameAvailableProcedure = "/mgmt.v1alpha1.JobService/IsJobHookNameAvailable"
+	// JobServiceUpdateJobHookProcedure is the fully-qualified name of the JobService's UpdateJobHook
+	// RPC.
+	JobServiceUpdateJobHookProcedure = "/mgmt.v1alpha1.JobService/UpdateJobHook"
+	// JobServiceSetJobHookEnabledProcedure is the fully-qualified name of the JobService's
+	// SetJobHookEnabled RPC.
+	JobServiceSetJobHookEnabledProcedure = "/mgmt.v1alpha1.JobService/SetJobHookEnabled"
 )
 
 // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package.
@@ -165,6 +171,8 @@ var (
 	jobServiceCreateJobHookMethodDescriptor                    = jobServiceServiceDescriptor.Methods().ByName("CreateJobHook")
 	jobServiceDeleteJobHookMethodDescriptor                    = jobServiceServiceDescriptor.Methods().ByName("DeleteJobHook")
 	jobServiceIsJobHookNameAvailableMethodDescriptor           = jobServiceServiceDescriptor.Methods().ByName("IsJobHookNameAvailable")
+	jobServiceUpdateJobHookMethodDescriptor                    = jobServiceServiceDescriptor.Methods().ByName("UpdateJobHook")
+	jobServiceSetJobHookEnabledMethodDescriptor                = jobServiceServiceDescriptor.Methods().ByName("SetJobHookEnabled")
 )
 
 // JobServiceClient is a client for the mgmt.v1alpha1.JobService service.
@@ -220,6 +228,10 @@ type JobServiceClient interface {
 	DeleteJobHook(context.Context, *connect.Request[v1alpha1.DeleteJobHookRequest]) (*connect.Response[v1alpha1.DeleteJobHookResponse], error)
 	// Check if a specific job hook name is available
 	IsJobHookNameAvailable(context.Context, *connect.Request[v1alpha1.IsJobHookNameAvailableRequest]) (*connect.Response[v1alpha1.IsJobHookNameAvailableResponse], error)
+	// Updates a job hook
+	UpdateJobHook(context.Context, *connect.Request[v1alpha1.UpdateJobHookRequest]) (*connect.Response[v1alpha1.UpdateJobHookResponse], error)
+	// Enables or disables a job hook
+	SetJobHookEnabled(context.Context, *connect.Request[v1alpha1.SetJobHookEnabledRequest]) (*connect.Response[v1alpha1.SetJobHookEnabledResponse], error)
 }
 
 // NewJobServiceClient constructs a client for the mgmt.v1alpha1.JobService service. By default, it
@@ -442,6 +454,18 @@ func NewJobServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...
 			connect.WithSchema(jobServiceIsJobHookNameAvailableMethodDescriptor),
 			connect.WithClientOptions(opts...),
 		),
+		updateJobHook: connect.NewClient[v1alpha1.UpdateJobHookRequest, v1alpha1.UpdateJobHookResponse](
+			httpClient,
+			baseURL+JobServiceUpdateJobHookProcedure,
+			connect.WithSchema(jobServiceUpdateJobHookMethodDescriptor),
+			connect.WithClientOptions(opts...),
+		),
+		setJobHookEnabled: connect.NewClient[v1alpha1.SetJobHookEnabledRequest, v1alpha1.SetJobHookEnabledResponse](
+			httpClient,
+			baseURL+JobServiceSetJobHookEnabledProcedure,
+			connect.WithSchema(jobServiceSetJobHookEnabledMethodDescriptor),
+			connect.WithClientOptions(opts...),
+		),
 	}
 }
 
@@ -482,6 +506,8 @@ type jobServiceClient struct {
 	createJobHook                    *connect.Client[v1alpha1.CreateJobHookRequest, v1alpha1.CreateJobHookResponse]
 	deleteJobHook                    *connect.Client[v1alpha1.DeleteJobHookRequest, v1alpha1.DeleteJobHookResponse]
 	isJobHookNameAvailable           *connect.Client[v1alpha1.IsJobHookNameAvailableRequest, v1alpha1.IsJobHookNameAvailableResponse]
+	updateJobHook                    *connect.Client[v1alpha1.UpdateJobHookRequest, v1alpha1.UpdateJobHookResponse]
+	setJobHookEnabled                *connect.Client[v1alpha1.SetJobHookEnabledRequest, v1alpha1.SetJobHookEnabledResponse]
 }
 
 // GetJobs calls mgmt.v1alpha1.JobService.GetJobs.
@@ -659,6 +685,16 @@ func (c *jobServiceClient) IsJobHookNameAvailable(ctx context.Context, req *conn
 	return c.isJobHookNameAvailable.CallUnary(ctx, req)
 }
 
+// UpdateJobHook calls mgmt.v1alpha1.JobService.UpdateJobHook.
+func (c *jobServiceClient) UpdateJobHook(ctx context.Context, req *connect.Request[v1alpha1.UpdateJobHookRequest]) (*connect.Response[v1alpha1.UpdateJobHookResponse], error) {
+	return c.updateJobHook.CallUnary(ctx, req)
+}
+
+// SetJobHookEnabled calls mgmt.v1alpha1.JobService.SetJobHookEnabled.
+func (c *jobServiceClient) SetJobHookEnabled(ctx context.Context, req *connect.Request[v1alpha1.SetJobHookEnabledRequest]) (*connect.Response[v1alpha1.SetJobHookEnabledResponse], error) {
+	return c.setJobHookEnabled.CallUnary(ctx, req)
+}
+
 // JobServiceHandler is an implementation of the mgmt.v1alpha1.JobService service.
 type JobServiceHandler interface {
 	GetJobs(context.Context, *connect.Request[v1alpha1.GetJobsRequest]) (*connect.Response[v1alpha1.GetJobsResponse], error)
@@ -712,6 +748,10 @@ type JobServiceHandler interface {
 	DeleteJobHook(context.Context, *connect.Request[v1alpha1.DeleteJobHookRequest]) (*connect.Response[v1alpha1.DeleteJobHookResponse], error)
 	// Check if a specific job hook name is available
 	IsJobHookNameAvailable(context.Context, *connect.Request[v1alpha1.IsJobHookNameAvailableRequest]) (*connect.Response[v1alpha1.IsJobHookNameAvailableResponse], error)
+	// Updates a job hook
+	UpdateJobHook(context.Context, *connect.Request[v1alpha1.UpdateJobHookRequest]) (*connect.Response[v1alpha1.UpdateJobHookResponse], error)
+	// Enables or disables a job hook
+	SetJobHookEnabled(context.Context, *connect.Request[v1alpha1.SetJobHookEnabledRequest]) (*connect.Response[v1alpha1.SetJobHookEnabledResponse], error)
 }
 
 // NewJobServiceHandler builds an HTTP handler from the service implementation. It returns the path
@@ -930,6 +970,18 @@ func NewJobServiceHandler(svc JobServiceHandler, opts ...connect.HandlerOption)
 		connect.WithSchema(jobServiceIsJobHookNameAvailableMethodDescriptor),
 		connect.WithHandlerOptions(opts...),
 	)
+	jobServiceUpdateJobHookHandler := connect.NewUnaryHandler(
+		JobServiceUpdateJobHookProcedure,
+		svc.UpdateJobHook,
+		connect.WithSchema(jobServiceUpdateJobHookMethodDescriptor),
+		connect.WithHandlerOptions(opts...),
+	)
+	jobServiceSetJobHookEnabledHandler := connect.NewUnaryHandler(
+		JobServiceSetJobHookEnabledProcedure,
+		svc.SetJobHookEnabled,
+		connect.WithSchema(jobServiceSetJobHookEnabledMethodDescriptor),
+		connect.WithHandlerOptions(opts...),
+	)
 	return "/mgmt.v1alpha1.JobService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		switch r.URL.Path {
 		case JobServiceGetJobsProcedure:
@@ -1002,6 +1054,10 @@ func NewJobServiceHandler(svc JobServiceHandler, opts ...connect.HandlerOption)
 			jobServiceDeleteJobHookHandler.ServeHTTP(w, r)
 		case JobServiceIsJobHookNameAvailableProcedure:
 			jobServiceIsJobHookNameAvailableHandler.ServeHTTP(w, r)
+		case JobServiceUpdateJobHookProcedure:
+			jobServiceUpdateJobHookHandler.ServeHTTP(w, r)
+		case JobServiceSetJobHookEnabledProcedure:
+			jobServiceSetJobHookEnabledHandler.ServeHTTP(w, r)
 		default:
 			http.NotFound(w, r)
 		}
@@ -1150,3 +1206,11 @@ func (UnimplementedJobServiceHandler) DeleteJobHook(context.Context, *connect.Re
 func (UnimplementedJobServiceHandler) IsJobHookNameAvailable(context.Context, *connect.Request[v1alpha1.IsJobHookNameAvailableRequest]) (*connect.Response[v1alpha1.IsJobHookNameAvailableResponse], error) {
 	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("mgmt.v1alpha1.JobService.IsJobHookNameAvailable is not implemented"))
 }
+
+func (UnimplementedJobServiceHandler) UpdateJobHook(context.Context, *connect.Request[v1alpha1.UpdateJobHookRequest]) (*connect.Response[v1alpha1.UpdateJobHookResponse], error) {
+	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("mgmt.v1alpha1.JobService.UpdateJobHook is not implemented"))
+}
+
+func (UnimplementedJobServiceHandler) SetJobHookEnabled(context.Context, *connect.Request[v1alpha1.SetJobHookEnabledRequest]) (*connect.Response[v1alpha1.SetJobHookEnabledResponse], error) {
+	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("mgmt.v1alpha1.JobService.SetJobHookEnabled is not implemented"))
+}
diff --git a/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceClient.go b/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceClient.go
index 1f454dafc7..ab3bce2fca 100644
--- a/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceClient.go
+++ b/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceClient.go
@@ -1499,6 +1499,65 @@ func (_c *MockJobServiceClient_PauseJob_Call) RunAndReturn(run func(context.Cont
 	return _c
 }
 
+// SetJobHookEnabled provides a mock function with given fields: _a0, _a1
+func (_m *MockJobServiceClient) SetJobHookEnabled(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) (*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], error) {
+	ret := _m.Called(_a0, _a1)
+
+	if len(ret) == 0 {
+		panic("no return value specified for SetJobHookEnabled")
+	}
+
+	var r0 *connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse]
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) (*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], error)); ok {
+		return rf(_a0, _a1)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) *connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse]); ok {
+		r0 = rf(_a0, _a1)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse])
+		}
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) error); ok {
+		r1 = rf(_a0, _a1)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockJobServiceClient_SetJobHookEnabled_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetJobHookEnabled'
+type MockJobServiceClient_SetJobHookEnabled_Call struct {
+	*mock.Call
+}
+
+// SetJobHookEnabled is a helper method to define mock.On call
+//   - _a0 context.Context
+//   - _a1 *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]
+func (_e *MockJobServiceClient_Expecter) SetJobHookEnabled(_a0 interface{}, _a1 interface{}) *MockJobServiceClient_SetJobHookEnabled_Call {
+	return &MockJobServiceClient_SetJobHookEnabled_Call{Call: _e.mock.On("SetJobHookEnabled", _a0, _a1)}
+}
+
+func (_c *MockJobServiceClient_SetJobHookEnabled_Call) Run(run func(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest])) *MockJobServiceClient_SetJobHookEnabled_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(*connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]))
+	})
+	return _c
+}
+
+func (_c *MockJobServiceClient_SetJobHookEnabled_Call) Return(_a0 *connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], _a1 error) *MockJobServiceClient_SetJobHookEnabled_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockJobServiceClient_SetJobHookEnabled_Call) RunAndReturn(run func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) (*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], error)) *MockJobServiceClient_SetJobHookEnabled_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // SetJobSourceSqlConnectionSubsets provides a mock function with given fields: _a0, _a1
 func (_m *MockJobServiceClient) SetJobSourceSqlConnectionSubsets(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.SetJobSourceSqlConnectionSubsetsRequest]) (*connect.Response[mgmtv1alpha1.SetJobSourceSqlConnectionSubsetsResponse], error) {
 	ret := _m.Called(_a0, _a1)
@@ -1901,6 +1960,65 @@ func (_c *MockJobServiceClient_UpdateJobDestinationConnection_Call) RunAndReturn
 	return _c
 }
 
+// UpdateJobHook provides a mock function with given fields: _a0, _a1
+func (_m *MockJobServiceClient) UpdateJobHook(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobHookResponse], error) {
+	ret := _m.Called(_a0, _a1)
+
+	if len(ret) == 0 {
+		panic("no return value specified for UpdateJobHook")
+	}
+
+	var r0 *connect.Response[mgmtv1alpha1.UpdateJobHookResponse]
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobHookResponse], error)); ok {
+		return rf(_a0, _a1)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) *connect.Response[mgmtv1alpha1.UpdateJobHookResponse]); ok {
+		r0 = rf(_a0, _a1)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(*connect.Response[mgmtv1alpha1.UpdateJobHookResponse])
+		}
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) error); ok {
+		r1 = rf(_a0, _a1)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockJobServiceClient_UpdateJobHook_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateJobHook'
+type MockJobServiceClient_UpdateJobHook_Call struct {
+	*mock.Call
+}
+
+// UpdateJobHook is a helper method to define mock.On call
+//   - _a0 context.Context
+//   - _a1 *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]
+func (_e *MockJobServiceClient_Expecter) UpdateJobHook(_a0 interface{}, _a1 interface{}) *MockJobServiceClient_UpdateJobHook_Call {
+	return &MockJobServiceClient_UpdateJobHook_Call{Call: _e.mock.On("UpdateJobHook", _a0, _a1)}
+}
+
+func (_c *MockJobServiceClient_UpdateJobHook_Call) Run(run func(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.UpdateJobHookRequest])) *MockJobServiceClient_UpdateJobHook_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(*connect.Request[mgmtv1alpha1.UpdateJobHookRequest]))
+	})
+	return _c
+}
+
+func (_c *MockJobServiceClient_UpdateJobHook_Call) Return(_a0 *connect.Response[mgmtv1alpha1.UpdateJobHookResponse], _a1 error) *MockJobServiceClient_UpdateJobHook_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockJobServiceClient_UpdateJobHook_Call) RunAndReturn(run func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobHookResponse], error)) *MockJobServiceClient_UpdateJobHook_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // UpdateJobSchedule provides a mock function with given fields: _a0, _a1
 func (_m *MockJobServiceClient) UpdateJobSchedule(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.UpdateJobScheduleRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobScheduleResponse], error) {
 	ret := _m.Called(_a0, _a1)
diff --git a/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceHandler.go b/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceHandler.go
index e79f5044e1..716320d115 100644
--- a/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceHandler.go
+++ b/backend/gen/go/protos/mgmt/v1alpha1/mgmtv1alpha1connect/mock_JobServiceHandler.go
@@ -1488,6 +1488,65 @@ func (_c *MockJobServiceHandler_PauseJob_Call) RunAndReturn(run func(context.Con
 	return _c
 }
 
+// SetJobHookEnabled provides a mock function with given fields: _a0, _a1
+func (_m *MockJobServiceHandler) SetJobHookEnabled(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) (*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], error) {
+	ret := _m.Called(_a0, _a1)
+
+	if len(ret) == 0 {
+		panic("no return value specified for SetJobHookEnabled")
+	}
+
+	var r0 *connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse]
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) (*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], error)); ok {
+		return rf(_a0, _a1)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) *connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse]); ok {
+		r0 = rf(_a0, _a1)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse])
+		}
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) error); ok {
+		r1 = rf(_a0, _a1)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockJobServiceHandler_SetJobHookEnabled_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SetJobHookEnabled'
+type MockJobServiceHandler_SetJobHookEnabled_Call struct {
+	*mock.Call
+}
+
+// SetJobHookEnabled is a helper method to define mock.On call
+//   - _a0 context.Context
+//   - _a1 *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]
+func (_e *MockJobServiceHandler_Expecter) SetJobHookEnabled(_a0 interface{}, _a1 interface{}) *MockJobServiceHandler_SetJobHookEnabled_Call {
+	return &MockJobServiceHandler_SetJobHookEnabled_Call{Call: _e.mock.On("SetJobHookEnabled", _a0, _a1)}
+}
+
+func (_c *MockJobServiceHandler_SetJobHookEnabled_Call) Run(run func(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest])) *MockJobServiceHandler_SetJobHookEnabled_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(*connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]))
+	})
+	return _c
+}
+
+func (_c *MockJobServiceHandler_SetJobHookEnabled_Call) Return(_a0 *connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], _a1 error) *MockJobServiceHandler_SetJobHookEnabled_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockJobServiceHandler_SetJobHookEnabled_Call) RunAndReturn(run func(context.Context, *connect.Request[mgmtv1alpha1.SetJobHookEnabledRequest]) (*connect.Response[mgmtv1alpha1.SetJobHookEnabledResponse], error)) *MockJobServiceHandler_SetJobHookEnabled_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // SetJobSourceSqlConnectionSubsets provides a mock function with given fields: _a0, _a1
 func (_m *MockJobServiceHandler) SetJobSourceSqlConnectionSubsets(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.SetJobSourceSqlConnectionSubsetsRequest]) (*connect.Response[mgmtv1alpha1.SetJobSourceSqlConnectionSubsetsResponse], error) {
 	ret := _m.Called(_a0, _a1)
@@ -1901,6 +1960,65 @@ func (_c *MockJobServiceHandler_UpdateJobDestinationConnection_Call) RunAndRetur
 	return _c
 }
 
+// UpdateJobHook provides a mock function with given fields: _a0, _a1
+func (_m *MockJobServiceHandler) UpdateJobHook(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobHookResponse], error) {
+	ret := _m.Called(_a0, _a1)
+
+	if len(ret) == 0 {
+		panic("no return value specified for UpdateJobHook")
+	}
+
+	var r0 *connect.Response[mgmtv1alpha1.UpdateJobHookResponse]
+	var r1 error
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobHookResponse], error)); ok {
+		return rf(_a0, _a1)
+	}
+	if rf, ok := ret.Get(0).(func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) *connect.Response[mgmtv1alpha1.UpdateJobHookResponse]); ok {
+		r0 = rf(_a0, _a1)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(*connect.Response[mgmtv1alpha1.UpdateJobHookResponse])
+		}
+	}
+
+	if rf, ok := ret.Get(1).(func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) error); ok {
+		r1 = rf(_a0, _a1)
+	} else {
+		r1 = ret.Error(1)
+	}
+
+	return r0, r1
+}
+
+// MockJobServiceHandler_UpdateJobHook_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'UpdateJobHook'
+type MockJobServiceHandler_UpdateJobHook_Call struct {
+	*mock.Call
+}
+
+// UpdateJobHook is a helper method to define mock.On call
+//   - _a0 context.Context
+//   - _a1 *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]
+func (_e *MockJobServiceHandler_Expecter) UpdateJobHook(_a0 interface{}, _a1 interface{}) *MockJobServiceHandler_UpdateJobHook_Call {
+	return &MockJobServiceHandler_UpdateJobHook_Call{Call: _e.mock.On("UpdateJobHook", _a0, _a1)}
+}
+
+func (_c *MockJobServiceHandler_UpdateJobHook_Call) Run(run func(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.UpdateJobHookRequest])) *MockJobServiceHandler_UpdateJobHook_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(*connect.Request[mgmtv1alpha1.UpdateJobHookRequest]))
+	})
+	return _c
+}
+
+func (_c *MockJobServiceHandler_UpdateJobHook_Call) Return(_a0 *connect.Response[mgmtv1alpha1.UpdateJobHookResponse], _a1 error) *MockJobServiceHandler_UpdateJobHook_Call {
+	_c.Call.Return(_a0, _a1)
+	return _c
+}
+
+func (_c *MockJobServiceHandler_UpdateJobHook_Call) RunAndReturn(run func(context.Context, *connect.Request[mgmtv1alpha1.UpdateJobHookRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobHookResponse], error)) *MockJobServiceHandler_UpdateJobHook_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
 // UpdateJobSchedule provides a mock function with given fields: _a0, _a1
 func (_m *MockJobServiceHandler) UpdateJobSchedule(_a0 context.Context, _a1 *connect.Request[mgmtv1alpha1.UpdateJobScheduleRequest]) (*connect.Response[mgmtv1alpha1.UpdateJobScheduleResponse], error) {
 	ret := _m.Called(_a0, _a1)
diff --git a/backend/internal/ee/hooks/jobs/service.go b/backend/internal/ee/hooks/jobs/service.go
index 7ab1832eb2..a699fee610 100644
--- a/backend/internal/ee/hooks/jobs/service.go
+++ b/backend/internal/ee/hooks/jobs/service.go
@@ -30,6 +30,8 @@ type Interface interface {
 	CreateJobHook(ctx context.Context, req *mgmtv1alpha1.CreateJobHookRequest) (*mgmtv1alpha1.CreateJobHookResponse, error)
 	DeleteJobHook(ctx context.Context, req *mgmtv1alpha1.DeleteJobHookRequest) (*mgmtv1alpha1.DeleteJobHookResponse, error)
 	IsJobHookNameAvailable(ctx context.Context, req *mgmtv1alpha1.IsJobHookNameAvailableRequest) (*mgmtv1alpha1.IsJobHookNameAvailableResponse, error)
+	UpdateJobHook(ctx context.Context, req *mgmtv1alpha1.UpdateJobHookRequest) (*mgmtv1alpha1.UpdateJobHookResponse, error)
+	SetJobHookEnabled(ctx context.Context, req *mgmtv1alpha1.SetJobHookEnabledRequest) (*mgmtv1alpha1.SetJobHookEnabledResponse, error)
 }
 
 type config struct {
@@ -285,6 +287,115 @@ func (s *Service) CreateJobHook(
 	return &mgmtv1alpha1.CreateJobHookResponse{Hook: dto}, nil
 }
 
+func (s *Service) UpdateJobHook(
+	ctx context.Context,
+	req *mgmtv1alpha1.UpdateJobHookRequest,
+) (*mgmtv1alpha1.UpdateJobHookResponse, error) {
+	getResp, err := s.GetJobHook(ctx, &mgmtv1alpha1.GetJobHookRequest{Id: req.GetId()})
+	if err != nil {
+		return nil, err
+	}
+
+	logger := logger_interceptor.GetLoggerFromContextOrDefault(ctx)
+	logger = logger.With("hookId", req.GetId())
+
+	useruuid, err := s.getUserUuid(ctx)
+	if err != nil {
+		return nil, err
+	}
+	jobuuid, err := neosyncdb.ToUuid(getResp.GetHook().GetJobId())
+	if err != nil {
+		return nil, err
+	}
+
+	isValid, err := s.verifyHookHasValidConnections(
+		ctx,
+		req.GetConfig(),
+		jobuuid,
+	)
+	if err != nil {
+		return nil, fmt.Errorf("unable to validate if job hook has valid connections: %w", err)
+	}
+	if !isValid {
+		logger.Debug("job hook creation did not pass connection id verification")
+		return nil, nucleuserrors.NewBadRequest("connection id specified in hook is not a part of job")
+	}
+
+	config, err := req.GetConfig().MarshalJSON()
+	if err != nil {
+		return nil, fmt.Errorf("unable to map config to valid json for db storage: %w", err)
+	}
+
+	priority, err := safeInt32(req.GetPriority())
+	if err != nil {
+		return nil, err
+	}
+
+	hookuuid, err := neosyncdb.ToUuid(getResp.GetHook().GetId())
+	if err != nil {
+		return nil, err
+	}
+
+	updatedhook, err := s.db.Q.UpdateJobHook(ctx, s.db.Db, db_queries.UpdateJobHookParams{
+		Name:            req.GetName(),
+		Description:     req.GetDescription(),
+		Config:          config,
+		Enabled:         req.GetEnabled(),
+		Priority:        priority,
+		UpdatedByUserID: *useruuid,
+		ID:              hookuuid,
+	})
+	if err != nil {
+		return nil, fmt.Errorf("unable to update job hook: %w", err)
+	}
+
+	dto, err := dtomaps.ToJobHookDto(&updatedhook)
+	if err != nil {
+		return nil, err
+	}
+
+	return &mgmtv1alpha1.UpdateJobHookResponse{Hook: dto}, nil
+}
+
+func (s *Service) SetJobHookEnabled(
+	ctx context.Context,
+	req *mgmtv1alpha1.SetJobHookEnabledRequest,
+) (*mgmtv1alpha1.SetJobHookEnabledResponse, error) {
+	getResp, err := s.GetJobHook(ctx, &mgmtv1alpha1.GetJobHookRequest{Id: req.GetId()})
+	if err != nil {
+		return nil, err
+	}
+
+	logger := logger_interceptor.GetLoggerFromContextOrDefault(ctx)
+	logger = logger.With("hookId", req.GetId())
+
+	if req.GetEnabled() == getResp.GetHook().GetEnabled() {
+		logger.Debug("hook enabled flag unchanged, no need to update")
+		return &mgmtv1alpha1.SetJobHookEnabledResponse{Hook: getResp.GetHook()}, nil
+	}
+
+	useruuid, err := s.getUserUuid(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	logger.Debug(fmt.Sprintf("attempting to update job hook enabled status from %v to %v", getResp.GetHook().GetEnabled(), req.GetEnabled()))
+	updatedHook, err := s.db.Q.SetJobHookEnabled(ctx, s.db.Db, db_queries.SetJobHookEnabledParams{
+		Enabled:         req.GetEnabled(),
+		UpdatedByUserID: *useruuid,
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	dto, err := dtomaps.ToJobHookDto(&updatedHook)
+	if err != nil {
+		return nil, err
+	}
+
+	return &mgmtv1alpha1.SetJobHookEnabledResponse{Hook: dto}, nil
+}
+
 type verifyUserJobResponse struct {
 	JobUuid     pgtype.UUID
 	AccountUuid pgtype.UUID
diff --git a/backend/protos/mgmt/v1alpha1/job.proto b/backend/protos/mgmt/v1alpha1/job.proto
index 0ea08e7652..7f9889267d 100644
--- a/backend/protos/mgmt/v1alpha1/job.proto
+++ b/backend/protos/mgmt/v1alpha1/job.proto
@@ -985,6 +985,45 @@ message IsJobHookNameAvailableResponse {
   bool is_available = 1;
 }
 
+message UpdateJobHookRequest {
+  // The unique identifier of the hook
+  string id = 1 [(buf.validate.field).string.uuid = true];
+
+  // Name of the hook for display/reference.
+  string name = 2 [(buf.validate.field).string.pattern = "^[a-z0-9-]{3,100}$"];
+  // Description of what this hook does.
+  string description = 3 [(buf.validate.field).string.min_len = 1];
+  // The unique identifier of the job this hook belongs to.
+  string job_id = 4 [(buf.validate.field).string.uuid = true];
+
+  // Hook-type specific configuration.
+  JobHookConfig config = 5;
+  // Whether or not the hook is enabled.
+  bool enabled = 6;
+
+  // The priority of the hook (0-100). This determines the execution order. Lower values are higher priority (priority=0 is the highest).
+  // Tie Breaking is determined by the following: (priority, created_at, id) in ascending order.
+  uint32 priority = 7 [(buf.validate.field).uint32 = {
+    gte: 0
+    lte: 100
+  }];
+}
+message UpdateJobHookResponse {
+  // The updated job hook
+  JobHook hook = 1;
+}
+
+message SetJobHookEnabledRequest {
+  // The unique identifier of the hook
+  string id = 1 [(buf.validate.field).string.uuid = true];
+  // Whether or not the hook is enabled.
+  bool enabled = 2;
+}
+message SetJobHookEnabledResponse {
+  // The updated job hook
+  JobHook hook = 1;
+}
+
 service JobService {
   rpc GetJobs(GetJobsRequest) returns (GetJobsResponse) {}
   rpc GetJob(GetJobRequest) returns (GetJobResponse) {}
@@ -1040,4 +1079,8 @@ service JobService {
   rpc DeleteJobHook(DeleteJobHookRequest) returns (DeleteJobHookResponse) {}
   // Check if a specific job hook name is available
   rpc IsJobHookNameAvailable(IsJobHookNameAvailableRequest) returns (IsJobHookNameAvailableResponse) {}
+  // Updates a job hook
+  rpc UpdateJobHook(UpdateJobHookRequest) returns (UpdateJobHookResponse) {}
+  // Enables or disables a job hook
+  rpc SetJobHookEnabled(SetJobHookEnabledRequest) returns (SetJobHookEnabledResponse) {}
 }
diff --git a/backend/sql/postgresql/queries/job-hooks.sql b/backend/sql/postgresql/queries/job-hooks.sql
index f6e3ad8819..b93059ee44 100644
--- a/backend/sql/postgresql/queries/job-hooks.sql
+++ b/backend/sql/postgresql/queries/job-hooks.sql
@@ -20,7 +20,7 @@ SELECT *
 FROM neosync_api.job_hooks
 WHERE job_id = $1
   AND enabled = true
-  AND hook_timing = 'pre_sync'
+  AND hook_timing = 'preSync'
 ORDER BY priority, created_at, id ASC;
 
 -- name: GetPostSyncJobHooksToExecute :many
@@ -28,7 +28,7 @@ SELECT *
 FROM neosync_api.job_hooks
 WHERE job_id = $1
   AND enabled = true
-  AND hook_timing = 'post_sync'
+  AND hook_timing = 'postSync'
 ORDER BY priority, created_at, id ASC;
 
 -- name: IsJobHookNameAvailable :one
@@ -37,3 +37,22 @@ SELECT NOT EXISTS(
   FROM neosync_api.job_hooks
   WHERE job_id = $1 and name = $2
 );
+
+-- name: SetJobHookEnabled :one
+UPDATE neosync_api.job_hooks
+SET enabled = $1,
+    updated_by_user_id = $2
+WHERE id = $2
+RETURNING *;
+
+
+-- name: UpdateJobHook :one
+UPDATE neosync_api.job_hooks
+SET name = $1,
+    description = $2,
+    config = $3,
+    enabled = $4,
+    priority = $5,
+    updated_by_user_id = $6
+WHERE id = $7
+RETURNING *;
diff --git a/docs/openapi/mgmt/v1alpha1/job.openapi.yaml b/docs/openapi/mgmt/v1alpha1/job.openapi.yaml
index 6aa9e2953f..3dd5a99182 100644
--- a/docs/openapi/mgmt/v1alpha1/job.openapi.yaml
+++ b/docs/openapi/mgmt/v1alpha1/job.openapi.yaml
@@ -1174,6 +1174,78 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/mgmt.v1alpha1.IsJobHookNameAvailableResponse'
+  /mgmt.v1alpha1.JobService/UpdateJobHook:
+    post:
+      tags:
+        - mgmt.v1alpha1.JobService
+      summary: UpdateJobHook
+      description: Updates a job hook
+      operationId: mgmt.v1alpha1.JobService.UpdateJobHook
+      parameters:
+        - name: Connect-Protocol-Version
+          in: header
+          required: true
+          schema:
+            $ref: '#/components/schemas/connect-protocol-version'
+        - name: Connect-Timeout-Ms
+          in: header
+          schema:
+            $ref: '#/components/schemas/connect-timeout-header'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/mgmt.v1alpha1.UpdateJobHookRequest'
+        required: true
+      responses:
+        default:
+          description: Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/connect.error'
+        "200":
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/mgmt.v1alpha1.UpdateJobHookResponse'
+  /mgmt.v1alpha1.JobService/SetJobHookEnabled:
+    post:
+      tags:
+        - mgmt.v1alpha1.JobService
+      summary: SetJobHookEnabled
+      description: Enables or disables a job hook
+      operationId: mgmt.v1alpha1.JobService.SetJobHookEnabled
+      parameters:
+        - name: Connect-Protocol-Version
+          in: header
+          required: true
+          schema:
+            $ref: '#/components/schemas/connect-protocol-version'
+        - name: Connect-Timeout-Ms
+          in: header
+          schema:
+            $ref: '#/components/schemas/connect-timeout-header'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/mgmt.v1alpha1.SetJobHookEnabledRequest'
+        required: true
+      responses:
+        default:
+          description: Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/connect.error'
+        "200":
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/mgmt.v1alpha1.SetJobHookEnabledResponse'
 components:
   schemas:
     mgmt.v1alpha1.ActivityStatus:
@@ -4472,6 +4544,30 @@ components:
           description: The Neosync Account ID
       title: RunContextKey
       additionalProperties: false
+    mgmt.v1alpha1.SetJobHookEnabledRequest:
+      type: object
+      properties:
+        id:
+          type: string
+          title: id
+          format: uuid
+          description: The unique identifier of the hook
+        enabled:
+          type: boolean
+          title: enabled
+          description: Whether or not the hook is enabled.
+      title: SetJobHookEnabledRequest
+      additionalProperties: false
+    mgmt.v1alpha1.SetJobHookEnabledResponse:
+      type: object
+      properties:
+        hook:
+          allOf:
+            - title: hook
+              description: The updated job hook
+            - $ref: '#/components/schemas/mgmt.v1alpha1.JobHook'
+      title: SetJobHookEnabledResponse
+      additionalProperties: false
     mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest:
       type: object
       properties:
@@ -5542,6 +5638,57 @@ components:
             - $ref: '#/components/schemas/mgmt.v1alpha1.Job'
       title: UpdateJobDestinationConnectionResponse
       additionalProperties: false
+    mgmt.v1alpha1.UpdateJobHookRequest:
+      type: object
+      properties:
+        id:
+          type: string
+          title: id
+          format: uuid
+          description: The unique identifier of the hook
+        name:
+          type: string
+          title: name
+          pattern: ^[a-z0-9-]{3,100}$
+          description: Name of the hook for display/reference.
+        description:
+          type: string
+          title: description
+          minLength: 1
+          description: Description of what this hook does.
+        jobId:
+          type: string
+          title: job_id
+          format: uuid
+          description: The unique identifier of the job this hook belongs to.
+        config:
+          allOf:
+            - title: config
+              description: Hook-type specific configuration.
+            - $ref: '#/components/schemas/mgmt.v1alpha1.JobHookConfig'
+        enabled:
+          type: boolean
+          title: enabled
+          description: Whether or not the hook is enabled.
+        priority:
+          type: integer
+          title: priority
+          maximum: 100
+          description: |-
+            The priority of the hook (0-100). This determines the execution order. Lower values are higher priority (priority=0 is the highest).
+             Tie Breaking is determined by the following: (priority, created_at, id) in ascending order.
+      title: UpdateJobHookRequest
+      additionalProperties: false
+    mgmt.v1alpha1.UpdateJobHookResponse:
+      type: object
+      properties:
+        hook:
+          allOf:
+            - title: hook
+              description: The updated job hook
+            - $ref: '#/components/schemas/mgmt.v1alpha1.JobHook'
+      title: UpdateJobHookResponse
+      additionalProperties: false
     mgmt.v1alpha1.UpdateJobScheduleRequest:
       type: object
       allOf:
diff --git a/docs/openapi/neosync.mgmt.v1alpha1.yaml b/docs/openapi/neosync.mgmt.v1alpha1.yaml
index 1f8218f7aa..8ab429bee9 100644
--- a/docs/openapi/neosync.mgmt.v1alpha1.yaml
+++ b/docs/openapi/neosync.mgmt.v1alpha1.yaml
@@ -2507,6 +2507,80 @@ paths:
               schema:
                 $ref: '#/components/schemas/connect.error'
       security: []
+  /mgmt.v1alpha1.JobService/UpdateJobHook:
+    post:
+      tags:
+        - mgmt.v1alpha1.JobService
+      summary: UpdateJobHook
+      description: Updates a job hook
+      operationId: mgmt.v1alpha1.JobService.UpdateJobHook
+      parameters:
+        - name: Connect-Protocol-Version
+          in: header
+          required: true
+          schema:
+            $ref: '#/components/schemas/connect-protocol-version'
+        - name: Connect-Timeout-Ms
+          in: header
+          schema:
+            $ref: '#/components/schemas/connect-timeout-header'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/mgmt.v1alpha1.UpdateJobHookRequest'
+        required: true
+      responses:
+        '200':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/mgmt.v1alpha1.UpdateJobHookResponse'
+        default:
+          description: Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/connect.error'
+      security: []
+  /mgmt.v1alpha1.JobService/SetJobHookEnabled:
+    post:
+      tags:
+        - mgmt.v1alpha1.JobService
+      summary: SetJobHookEnabled
+      description: Enables or disables a job hook
+      operationId: mgmt.v1alpha1.JobService.SetJobHookEnabled
+      parameters:
+        - name: Connect-Protocol-Version
+          in: header
+          required: true
+          schema:
+            $ref: '#/components/schemas/connect-protocol-version'
+        - name: Connect-Timeout-Ms
+          in: header
+          schema:
+            $ref: '#/components/schemas/connect-timeout-header'
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/mgmt.v1alpha1.SetJobHookEnabledRequest'
+        required: true
+      responses:
+        '200':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/mgmt.v1alpha1.SetJobHookEnabledResponse'
+        default:
+          description: Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/connect.error'
+      security: []
   /mgmt.v1alpha1.MetricsService/GetDailyMetricCount:
     post:
       tags:
@@ -11093,6 +11167,30 @@ components:
           description: The Neosync Account ID
       title: RunContextKey
       additionalProperties: false
+    mgmt.v1alpha1.SetJobHookEnabledRequest:
+      type: object
+      properties:
+        id:
+          type: string
+          title: id
+          format: uuid
+          description: The unique identifier of the hook
+        enabled:
+          type: boolean
+          title: enabled
+          description: Whether or not the hook is enabled.
+      title: SetJobHookEnabledRequest
+      additionalProperties: false
+    mgmt.v1alpha1.SetJobHookEnabledResponse:
+      type: object
+      properties:
+        hook:
+          allOf:
+            - title: hook
+              description: The updated job hook
+            - $ref: '#/components/schemas/mgmt.v1alpha1.JobHook'
+      title: SetJobHookEnabledResponse
+      additionalProperties: false
     mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest:
       type: object
       properties:
@@ -11256,6 +11354,58 @@ components:
             - $ref: '#/components/schemas/mgmt.v1alpha1.Job'
       title: UpdateJobDestinationConnectionResponse
       additionalProperties: false
+    mgmt.v1alpha1.UpdateJobHookRequest:
+      type: object
+      properties:
+        id:
+          type: string
+          title: id
+          format: uuid
+          description: The unique identifier of the hook
+        name:
+          type: string
+          title: name
+          pattern: ^[a-z0-9-]{3,100}$
+          description: Name of the hook for display/reference.
+        description:
+          type: string
+          title: description
+          minLength: 1
+          description: Description of what this hook does.
+        jobId:
+          type: string
+          title: job_id
+          format: uuid
+          description: The unique identifier of the job this hook belongs to.
+        config:
+          allOf:
+            - title: config
+              description: Hook-type specific configuration.
+            - $ref: '#/components/schemas/mgmt.v1alpha1.JobHookConfig'
+        enabled:
+          type: boolean
+          title: enabled
+          description: Whether or not the hook is enabled.
+        priority:
+          type: integer
+          title: priority
+          maximum: 100
+          description: >-
+            The priority of the hook (0-100). This determines the execution
+            order. Lower values are higher priority (priority=0 is the highest).
+             Tie Breaking is determined by the following: (priority, created_at, id) in ascending order.
+      title: UpdateJobHookRequest
+      additionalProperties: false
+    mgmt.v1alpha1.UpdateJobHookResponse:
+      type: object
+      properties:
+        hook:
+          allOf:
+            - title: hook
+              description: The updated job hook
+            - $ref: '#/components/schemas/mgmt.v1alpha1.JobHook'
+      title: UpdateJobHookResponse
+      additionalProperties: false
     mgmt.v1alpha1.UpdateJobScheduleRequest:
       type: object
       allOf:
diff --git a/docs/protos/mgmt/v1alpha1/job.proto.mdx b/docs/protos/mgmt/v1alpha1/job.proto.mdx
index 18f8795378..29fe131b83 100644
--- a/docs/protos/mgmt/v1alpha1/job.proto.mdx
+++ b/docs/protos/mgmt/v1alpha1/job.proto.mdx
@@ -513,96 +513,112 @@ _**package** mgmt.v1alpha1_
 <ProtoMessage key={123} message={{"name":"RunContextKey","longName":"RunContextKey","fullName":"mgmt.v1alpha1.RunContextKey","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job_run_id","description":"The Neosync Run ID","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"external_id","description":"An opaque identifier that will be used to store specific items","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"account_id","description":"The Neosync Account ID","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
+### `SetJobHookEnabledRequest`
+<ProtoMessage key={124} message={{"name":"SetJobHookEnabledRequest","longName":"SetJobHookEnabledRequest","fullName":"mgmt.v1alpha1.SetJobHookEnabledRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the hook","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"enabled","description":"Whether or not the hook is enabled.","label":"","type":"bool","longType":"bool","fullType":"bool","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+
+
+### `SetJobHookEnabledResponse`
+<ProtoMessage key={125} message={{"name":"SetJobHookEnabledResponse","longName":"SetJobHookEnabledResponse","fullName":"mgmt.v1alpha1.SetJobHookEnabledResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"hook","description":"The updated job hook","label":"","type":"JobHook","longType":"JobHook","fullType":"mgmt.v1alpha1.JobHook","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobhook"}]}} />
+
+
 ### `SetJobSourceSqlConnectionSubsetsRequest`
-<ProtoMessage key={124} message={{"name":"SetJobSourceSqlConnectionSubsetsRequest","longName":"SetJobSourceSqlConnectionSubsetsRequest","fullName":"mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the job to update subsets for","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"schemas","description":"The subset configuration","label":"","type":"JobSourceSqlSubetSchemas","longType":"JobSourceSqlSubetSchemas","fullType":"mgmt.v1alpha1.JobSourceSqlSubetSchemas","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobsourcesqlsubetschemas"},{"name":"subset_by_foreign_key_constraints","description":"Whether or not to have subsets follow foreign key constraints (for connections that support it)","label":"","type":"bool","longType":"bool","fullType":"bool","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+<ProtoMessage key={126} message={{"name":"SetJobSourceSqlConnectionSubsetsRequest","longName":"SetJobSourceSqlConnectionSubsetsRequest","fullName":"mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the job to update subsets for","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"schemas","description":"The subset configuration","label":"","type":"JobSourceSqlSubetSchemas","longType":"JobSourceSqlSubetSchemas","fullType":"mgmt.v1alpha1.JobSourceSqlSubetSchemas","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobsourcesqlsubetschemas"},{"name":"subset_by_foreign_key_constraints","description":"Whether or not to have subsets follow foreign key constraints (for connections that support it)","label":"","type":"bool","longType":"bool","fullType":"bool","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
 ### `SetJobSourceSqlConnectionSubsetsResponse`
-<ProtoMessage key={125} message={{"name":"SetJobSourceSqlConnectionSubsetsResponse","longName":"SetJobSourceSqlConnectionSubsetsResponse","fullName":"mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+<ProtoMessage key={127} message={{"name":"SetJobSourceSqlConnectionSubsetsResponse","longName":"SetJobSourceSqlConnectionSubsetsResponse","fullName":"mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
 
 
 ### `SetJobSyncOptionsRequest`
-<ProtoMessage key={126} message={{"name":"SetJobSyncOptionsRequest","longName":"SetJobSyncOptionsRequest","fullName":"mgmt.v1alpha1.SetJobSyncOptionsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the job","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"sync_options","description":"The sync options object. The entire object must be provided and will fully overwrite the previous result","label":"","type":"ActivityOptions","longType":"ActivityOptions","fullType":"mgmt.v1alpha1.ActivityOptions","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#activityoptions"}]}} />
+<ProtoMessage key={128} message={{"name":"SetJobSyncOptionsRequest","longName":"SetJobSyncOptionsRequest","fullName":"mgmt.v1alpha1.SetJobSyncOptionsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the job","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"sync_options","description":"The sync options object. The entire object must be provided and will fully overwrite the previous result","label":"","type":"ActivityOptions","longType":"ActivityOptions","fullType":"mgmt.v1alpha1.ActivityOptions","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#activityoptions"}]}} />
 
 
 ### `SetJobSyncOptionsResponse`
-<ProtoMessage key={127} message={{"name":"SetJobSyncOptionsResponse","longName":"SetJobSyncOptionsResponse","fullName":"mgmt.v1alpha1.SetJobSyncOptionsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+<ProtoMessage key={129} message={{"name":"SetJobSyncOptionsResponse","longName":"SetJobSyncOptionsResponse","fullName":"mgmt.v1alpha1.SetJobSyncOptionsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
 
 
 ### `SetJobWorkflowOptionsRequest`
-<ProtoMessage key={128} message={{"name":"SetJobWorkflowOptionsRequest","longName":"SetJobWorkflowOptionsRequest","fullName":"mgmt.v1alpha1.SetJobWorkflowOptionsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the job","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"worfklow_options","description":"The workflow options object. The entire object must be provided and will fully overwrite the previous result","label":"","type":"WorkflowOptions","longType":"WorkflowOptions","fullType":"mgmt.v1alpha1.WorkflowOptions","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#workflowoptions"}]}} />
+<ProtoMessage key={130} message={{"name":"SetJobWorkflowOptionsRequest","longName":"SetJobWorkflowOptionsRequest","fullName":"mgmt.v1alpha1.SetJobWorkflowOptionsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the job","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"worfklow_options","description":"The workflow options object. The entire object must be provided and will fully overwrite the previous result","label":"","type":"WorkflowOptions","longType":"WorkflowOptions","fullType":"mgmt.v1alpha1.WorkflowOptions","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#workflowoptions"}]}} />
 
 
 ### `SetJobWorkflowOptionsResponse`
-<ProtoMessage key={129} message={{"name":"SetJobWorkflowOptionsResponse","longName":"SetJobWorkflowOptionsResponse","fullName":"mgmt.v1alpha1.SetJobWorkflowOptionsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+<ProtoMessage key={131} message={{"name":"SetJobWorkflowOptionsResponse","longName":"SetJobWorkflowOptionsResponse","fullName":"mgmt.v1alpha1.SetJobWorkflowOptionsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
 
 
 ### `SetRunContextRequest`
-<ProtoMessage key={130} message={{"name":"SetRunContextRequest","longName":"SetRunContextRequest","fullName":"mgmt.v1alpha1.SetRunContextRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"RunContextKey","longType":"RunContextKey","fullType":"mgmt.v1alpha1.RunContextKey","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#runcontextkey"},{"name":"value","description":"An opaque value that is to be determined by the key","label":"","type":"bytes","longType":"bytes","fullType":"bytes","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+<ProtoMessage key={132} message={{"name":"SetRunContextRequest","longName":"SetRunContextRequest","fullName":"mgmt.v1alpha1.SetRunContextRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"RunContextKey","longType":"RunContextKey","fullType":"mgmt.v1alpha1.RunContextKey","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#runcontextkey"},{"name":"value","description":"An opaque value that is to be determined by the key","label":"","type":"bytes","longType":"bytes","fullType":"bytes","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
 ### `SetRunContextResponse`
-<ProtoMessage key={131} message={{"name":"SetRunContextResponse","longName":"SetRunContextResponse","fullName":"mgmt.v1alpha1.SetRunContextResponse","description":"","hasExtensions":false,"hasFields":false,"hasOneofs":false,"extensions":[],"fields":[]}} />
+<ProtoMessage key={133} message={{"name":"SetRunContextResponse","longName":"SetRunContextResponse","fullName":"mgmt.v1alpha1.SetRunContextResponse","description":"","hasExtensions":false,"hasFields":false,"hasOneofs":false,"extensions":[],"fields":[]}} />
 
 
 ### `SetRunContextsRequest`
-<ProtoMessage key={132} message={{"name":"SetRunContextsRequest","longName":"SetRunContextsRequest","fullName":"mgmt.v1alpha1.SetRunContextsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"RunContextKey","longType":"RunContextKey","fullType":"mgmt.v1alpha1.RunContextKey","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#runcontextkey"},{"name":"value","description":"An opaque value that is to be determined by the key","label":"","type":"bytes","longType":"bytes","fullType":"bytes","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+<ProtoMessage key={134} message={{"name":"SetRunContextsRequest","longName":"SetRunContextsRequest","fullName":"mgmt.v1alpha1.SetRunContextsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"RunContextKey","longType":"RunContextKey","fullType":"mgmt.v1alpha1.RunContextKey","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#runcontextkey"},{"name":"value","description":"An opaque value that is to be determined by the key","label":"","type":"bytes","longType":"bytes","fullType":"bytes","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
 ### `SetRunContextsResponse`
-<ProtoMessage key={133} message={{"name":"SetRunContextsResponse","longName":"SetRunContextsResponse","fullName":"mgmt.v1alpha1.SetRunContextsResponse","description":"","hasExtensions":false,"hasFields":false,"hasOneofs":false,"extensions":[],"fields":[]}} />
+<ProtoMessage key={135} message={{"name":"SetRunContextsResponse","longName":"SetRunContextsResponse","fullName":"mgmt.v1alpha1.SetRunContextsResponse","description":"","hasExtensions":false,"hasFields":false,"hasOneofs":false,"extensions":[],"fields":[]}} />
 
 
 ### `TerminateJobRunRequest`
-<ProtoMessage key={134} message={{"name":"TerminateJobRunRequest","longName":"TerminateJobRunRequest","fullName":"mgmt.v1alpha1.TerminateJobRunRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job_run_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"account_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+<ProtoMessage key={136} message={{"name":"TerminateJobRunRequest","longName":"TerminateJobRunRequest","fullName":"mgmt.v1alpha1.TerminateJobRunRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job_run_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"account_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
 ### `TerminateJobRunResponse`
-<ProtoMessage key={135} message={{"name":"TerminateJobRunResponse","longName":"TerminateJobRunResponse","fullName":"mgmt.v1alpha1.TerminateJobRunResponse","description":"","hasExtensions":false,"hasFields":false,"hasOneofs":false,"extensions":[],"fields":[]}} />
+<ProtoMessage key={137} message={{"name":"TerminateJobRunResponse","longName":"TerminateJobRunResponse","fullName":"mgmt.v1alpha1.TerminateJobRunResponse","description":"","hasExtensions":false,"hasFields":false,"hasOneofs":false,"extensions":[],"fields":[]}} />
 
 
 ### `UpdateJobDestinationConnectionRequest`
-<ProtoMessage key={136} message={{"name":"UpdateJobDestinationConnectionRequest","longName":"UpdateJobDestinationConnectionRequest","fullName":"mgmt.v1alpha1.UpdateJobDestinationConnectionRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"connection_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"options","description":"","label":"","type":"JobDestinationOptions","longType":"JobDestinationOptions","fullType":"mgmt.v1alpha1.JobDestinationOptions","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobdestinationoptions"},{"name":"destination_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+<ProtoMessage key={138} message={{"name":"UpdateJobDestinationConnectionRequest","longName":"UpdateJobDestinationConnectionRequest","fullName":"mgmt.v1alpha1.UpdateJobDestinationConnectionRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"connection_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"options","description":"","label":"","type":"JobDestinationOptions","longType":"JobDestinationOptions","fullType":"mgmt.v1alpha1.JobDestinationOptions","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobdestinationoptions"},{"name":"destination_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
 ### `UpdateJobDestinationConnectionResponse`
-<ProtoMessage key={137} message={{"name":"UpdateJobDestinationConnectionResponse","longName":"UpdateJobDestinationConnectionResponse","fullName":"mgmt.v1alpha1.UpdateJobDestinationConnectionResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+<ProtoMessage key={139} message={{"name":"UpdateJobDestinationConnectionResponse","longName":"UpdateJobDestinationConnectionResponse","fullName":"mgmt.v1alpha1.UpdateJobDestinationConnectionResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+
+
+### `UpdateJobHookRequest`
+<ProtoMessage key={140} message={{"name":"UpdateJobHookRequest","longName":"UpdateJobHookRequest","fullName":"mgmt.v1alpha1.UpdateJobHookRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"The unique identifier of the hook","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"name","description":"Name of the hook for display/reference.","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"description","description":"Description of what this hook does.","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"job_id","description":"The unique identifier of the job this hook belongs to.","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"config","description":"Hook-type specific configuration.","label":"","type":"JobHookConfig","longType":"JobHookConfig","fullType":"mgmt.v1alpha1.JobHookConfig","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobhookconfig"},{"name":"enabled","description":"Whether or not the hook is enabled.","label":"","type":"bool","longType":"bool","fullType":"bool","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"priority","description":"The priority of the hook (0-100). This determines the execution order. Lower values are higher priority (priority=0 is the highest).\nTie Breaking is determined by the following: (priority, created_at, id) in ascending order.","label":"","type":"uint32","longType":"uint32","fullType":"uint32","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+
+
+### `UpdateJobHookResponse`
+<ProtoMessage key={141} message={{"name":"UpdateJobHookResponse","longName":"UpdateJobHookResponse","fullName":"mgmt.v1alpha1.UpdateJobHookResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"hook","description":"The updated job hook","label":"","type":"JobHook","longType":"JobHook","fullType":"mgmt.v1alpha1.JobHook","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobhook"}]}} />
 
 
 ### `UpdateJobScheduleRequest`
-<ProtoMessage key={138} message={{"name":"UpdateJobScheduleRequest","longName":"UpdateJobScheduleRequest","fullName":"mgmt.v1alpha1.UpdateJobScheduleRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":true,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"cron_schedule","description":"","label":"optional","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":true,"oneofdecl":"_cron_schedule","defaultValue":""}]}} />
+<ProtoMessage key={142} message={{"name":"UpdateJobScheduleRequest","longName":"UpdateJobScheduleRequest","fullName":"mgmt.v1alpha1.UpdateJobScheduleRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":true,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"cron_schedule","description":"","label":"optional","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":true,"oneofdecl":"_cron_schedule","defaultValue":""}]}} />
 
 
 ### `UpdateJobScheduleResponse`
-<ProtoMessage key={139} message={{"name":"UpdateJobScheduleResponse","longName":"UpdateJobScheduleResponse","fullName":"mgmt.v1alpha1.UpdateJobScheduleResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+<ProtoMessage key={143} message={{"name":"UpdateJobScheduleResponse","longName":"UpdateJobScheduleResponse","fullName":"mgmt.v1alpha1.UpdateJobScheduleResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
 
 
 ### `UpdateJobSourceConnectionRequest`
-<ProtoMessage key={140} message={{"name":"UpdateJobSourceConnectionRequest","longName":"UpdateJobSourceConnectionRequest","fullName":"mgmt.v1alpha1.UpdateJobSourceConnectionRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"source","description":"","label":"","type":"JobSource","longType":"JobSource","fullType":"mgmt.v1alpha1.JobSource","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobsource"},{"name":"mappings","description":"","label":"repeated","type":"JobMapping","longType":"JobMapping","fullType":"mgmt.v1alpha1.JobMapping","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobmapping"},{"name":"virtual_foreign_keys","description":"","label":"repeated","type":"VirtualForeignConstraint","longType":"VirtualForeignConstraint","fullType":"mgmt.v1alpha1.VirtualForeignConstraint","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#virtualforeignconstraint"}]}} />
+<ProtoMessage key={144} message={{"name":"UpdateJobSourceConnectionRequest","longName":"UpdateJobSourceConnectionRequest","fullName":"mgmt.v1alpha1.UpdateJobSourceConnectionRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"source","description":"","label":"","type":"JobSource","longType":"JobSource","fullType":"mgmt.v1alpha1.JobSource","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobsource"},{"name":"mappings","description":"","label":"repeated","type":"JobMapping","longType":"JobMapping","fullType":"mgmt.v1alpha1.JobMapping","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobmapping"},{"name":"virtual_foreign_keys","description":"","label":"repeated","type":"VirtualForeignConstraint","longType":"VirtualForeignConstraint","fullType":"mgmt.v1alpha1.VirtualForeignConstraint","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#virtualforeignconstraint"}]}} />
 
 
 ### `UpdateJobSourceConnectionResponse`
-<ProtoMessage key={141} message={{"name":"UpdateJobSourceConnectionResponse","longName":"UpdateJobSourceConnectionResponse","fullName":"mgmt.v1alpha1.UpdateJobSourceConnectionResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
+<ProtoMessage key={145} message={{"name":"UpdateJobSourceConnectionResponse","longName":"UpdateJobSourceConnectionResponse","fullName":"mgmt.v1alpha1.UpdateJobSourceConnectionResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"job","description":"","label":"","type":"Job","longType":"Job","fullType":"mgmt.v1alpha1.Job","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#job"}]}} />
 
 
 ### `ValidateJobMappingsRequest`
-<ProtoMessage key={142} message={{"name":"ValidateJobMappingsRequest","longName":"ValidateJobMappingsRequest","fullName":"mgmt.v1alpha1.ValidateJobMappingsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"account_id","description":"The unique account identifier that this job will be associated with","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"mappings","description":"","label":"repeated","type":"JobMapping","longType":"JobMapping","fullType":"mgmt.v1alpha1.JobMapping","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobmapping"},{"name":"connection_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"virtual_foreign_keys","description":"","label":"repeated","type":"VirtualForeignConstraint","longType":"VirtualForeignConstraint","fullType":"mgmt.v1alpha1.VirtualForeignConstraint","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#virtualforeignconstraint"}]}} />
+<ProtoMessage key={146} message={{"name":"ValidateJobMappingsRequest","longName":"ValidateJobMappingsRequest","fullName":"mgmt.v1alpha1.ValidateJobMappingsRequest","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"account_id","description":"The unique account identifier that this job will be associated with","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"mappings","description":"","label":"repeated","type":"JobMapping","longType":"JobMapping","fullType":"mgmt.v1alpha1.JobMapping","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#jobmapping"},{"name":"connection_id","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"virtual_foreign_keys","description":"","label":"repeated","type":"VirtualForeignConstraint","longType":"VirtualForeignConstraint","fullType":"mgmt.v1alpha1.VirtualForeignConstraint","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#virtualforeignconstraint"}]}} />
 
 
 ### `ValidateJobMappingsResponse`
-<ProtoMessage key={143} message={{"name":"ValidateJobMappingsResponse","longName":"ValidateJobMappingsResponse","fullName":"mgmt.v1alpha1.ValidateJobMappingsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"column_errors","description":"","label":"repeated","type":"ColumnError","longType":"ColumnError","fullType":"mgmt.v1alpha1.ColumnError","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#columnerror"},{"name":"database_errors","description":"","label":"","type":"DatabaseError","longType":"DatabaseError","fullType":"mgmt.v1alpha1.DatabaseError","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#databaseerror"}]}} />
+<ProtoMessage key={147} message={{"name":"ValidateJobMappingsResponse","longName":"ValidateJobMappingsResponse","fullName":"mgmt.v1alpha1.ValidateJobMappingsResponse","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"column_errors","description":"","label":"repeated","type":"ColumnError","longType":"ColumnError","fullType":"mgmt.v1alpha1.ColumnError","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#columnerror"},{"name":"database_errors","description":"","label":"","type":"DatabaseError","longType":"DatabaseError","fullType":"mgmt.v1alpha1.DatabaseError","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#databaseerror"}]}} />
 
 
 ### `VirtualForeignConstraint`
-<ProtoMessage key={144} message={{"name":"VirtualForeignConstraint","longName":"VirtualForeignConstraint","fullName":"mgmt.v1alpha1.VirtualForeignConstraint","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"schema","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"table","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"columns","description":"","label":"repeated","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"foreign_key","description":"","label":"","type":"VirtualForeignKey","longType":"VirtualForeignKey","fullType":"mgmt.v1alpha1.VirtualForeignKey","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#virtualforeignkey"}]}} />
+<ProtoMessage key={148} message={{"name":"VirtualForeignConstraint","longName":"VirtualForeignConstraint","fullName":"mgmt.v1alpha1.VirtualForeignConstraint","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"schema","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"table","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"columns","description":"","label":"repeated","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"foreign_key","description":"","label":"","type":"VirtualForeignKey","longType":"VirtualForeignKey","fullType":"mgmt.v1alpha1.VirtualForeignKey","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":"","typeLink":"/api/mgmt/v1alpha1/job.proto#virtualforeignkey"}]}} />
 
 
 ### `VirtualForeignKey`
-<ProtoMessage key={145} message={{"name":"VirtualForeignKey","longName":"VirtualForeignKey","fullName":"mgmt.v1alpha1.VirtualForeignKey","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"schema","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"table","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"columns","description":"","label":"repeated","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
+<ProtoMessage key={149} message={{"name":"VirtualForeignKey","longName":"VirtualForeignKey","fullName":"mgmt.v1alpha1.VirtualForeignKey","description":"","hasExtensions":false,"hasFields":true,"hasOneofs":false,"extensions":[],"fields":[{"name":"schema","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"table","description":"","label":"","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""},{"name":"columns","description":"","label":"repeated","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":false,"oneofdecl":"","defaultValue":""}]}} />
 
 
 ### `WorkflowOptions`
-<ProtoMessage key={146} message={{"name":"WorkflowOptions","longName":"WorkflowOptions","fullName":"mgmt.v1alpha1.WorkflowOptions","description":"Config that contains various timeouts that are configured in the underlying temporal workflow\nMore options will come in the future as needed","hasExtensions":false,"hasFields":true,"hasOneofs":true,"extensions":[],"fields":[{"name":"run_timeout","description":"The timeout for a single workflow run.\nMeasured in seconds","label":"optional","type":"int64","longType":"int64","fullType":"int64","ismap":false,"isoneof":true,"oneofdecl":"_run_timeout","defaultValue":""}]}} />
+<ProtoMessage key={150} message={{"name":"WorkflowOptions","longName":"WorkflowOptions","fullName":"mgmt.v1alpha1.WorkflowOptions","description":"Config that contains various timeouts that are configured in the underlying temporal workflow\nMore options will come in the future as needed","hasExtensions":false,"hasFields":true,"hasOneofs":true,"extensions":[],"fields":[{"name":"run_timeout","description":"The timeout for a single workflow run.\nMeasured in seconds","label":"optional","type":"int64","longType":"int64","fullType":"int64","ismap":false,"isoneof":true,"oneofdecl":"_run_timeout","defaultValue":""}]}} />
 
 ---
 ## Enums
@@ -780,6 +796,14 @@ _**package** mgmt.v1alpha1_
 <ProtoServiceMethod key={'IsJobHookNameAvailable-34'} method={{"name":"IsJobHookNameAvailable","description":"Check if a specific job hook name is available","requestType":"IsJobHookNameAvailableRequest","requestLongType":"IsJobHookNameAvailableRequest","requestFullType":"mgmt.v1alpha1.IsJobHookNameAvailableRequest","requestStreaming":false,"responseType":"IsJobHookNameAvailableResponse","responseLongType":"IsJobHookNameAvailableResponse","responseFullType":"mgmt.v1alpha1.IsJobHookNameAvailableResponse","responseStreaming":false,"requestTypeLink":"/api/mgmt/v1alpha1/job.proto#isjobhooknameavailablerequest","responseTypeLink":"/api/mgmt/v1alpha1/job.proto#isjobhooknameavailableresponse"}} />
 
 
+#### `UpdateJobHook`
+<ProtoServiceMethod key={'UpdateJobHook-35'} method={{"name":"UpdateJobHook","description":"Updates a job hook","requestType":"UpdateJobHookRequest","requestLongType":"UpdateJobHookRequest","requestFullType":"mgmt.v1alpha1.UpdateJobHookRequest","requestStreaming":false,"responseType":"UpdateJobHookResponse","responseLongType":"UpdateJobHookResponse","responseFullType":"mgmt.v1alpha1.UpdateJobHookResponse","responseStreaming":false,"requestTypeLink":"/api/mgmt/v1alpha1/job.proto#updatejobhookrequest","responseTypeLink":"/api/mgmt/v1alpha1/job.proto#updatejobhookresponse"}} />
+
+
+#### `SetJobHookEnabled`
+<ProtoServiceMethod key={'SetJobHookEnabled-36'} method={{"name":"SetJobHookEnabled","description":"Enables or disables a job hook","requestType":"SetJobHookEnabledRequest","requestLongType":"SetJobHookEnabledRequest","requestFullType":"mgmt.v1alpha1.SetJobHookEnabledRequest","requestStreaming":false,"responseType":"SetJobHookEnabledResponse","responseLongType":"SetJobHookEnabledResponse","responseFullType":"mgmt.v1alpha1.SetJobHookEnabledResponse","responseStreaming":false,"requestTypeLink":"/api/mgmt/v1alpha1/job.proto#setjobhookenabledrequest","responseTypeLink":"/api/mgmt/v1alpha1/job.proto#setjobhookenabledresponse"}} />
+
+
 ---
 
 
diff --git a/docs/protos/proto_docs.json b/docs/protos/proto_docs.json
index 1fdfb85f1d..c72f6e1471 100644
--- a/docs/protos/proto_docs.json
+++ b/docs/protos/proto_docs.json
@@ -13747,6 +13747,66 @@
             }
           ]
         },
+        {
+          "name": "SetJobHookEnabledRequest",
+          "longName": "SetJobHookEnabledRequest",
+          "fullName": "mgmt.v1alpha1.SetJobHookEnabledRequest",
+          "description": "",
+          "hasExtensions": false,
+          "hasFields": true,
+          "hasOneofs": false,
+          "extensions": [],
+          "fields": [
+            {
+              "name": "id",
+              "description": "The unique identifier of the hook",
+              "label": "",
+              "type": "string",
+              "longType": "string",
+              "fullType": "string",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "enabled",
+              "description": "Whether or not the hook is enabled.",
+              "label": "",
+              "type": "bool",
+              "longType": "bool",
+              "fullType": "bool",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            }
+          ]
+        },
+        {
+          "name": "SetJobHookEnabledResponse",
+          "longName": "SetJobHookEnabledResponse",
+          "fullName": "mgmt.v1alpha1.SetJobHookEnabledResponse",
+          "description": "",
+          "hasExtensions": false,
+          "hasFields": true,
+          "hasOneofs": false,
+          "extensions": [],
+          "fields": [
+            {
+              "name": "hook",
+              "description": "The updated job hook",
+              "label": "",
+              "type": "JobHook",
+              "longType": "JobHook",
+              "fullType": "mgmt.v1alpha1.JobHook",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            }
+          ]
+        },
         {
           "name": "SetJobSourceSqlConnectionSubsetsRequest",
           "longName": "SetJobSourceSqlConnectionSubsetsRequest",
@@ -14164,6 +14224,126 @@
             }
           ]
         },
+        {
+          "name": "UpdateJobHookRequest",
+          "longName": "UpdateJobHookRequest",
+          "fullName": "mgmt.v1alpha1.UpdateJobHookRequest",
+          "description": "",
+          "hasExtensions": false,
+          "hasFields": true,
+          "hasOneofs": false,
+          "extensions": [],
+          "fields": [
+            {
+              "name": "id",
+              "description": "The unique identifier of the hook",
+              "label": "",
+              "type": "string",
+              "longType": "string",
+              "fullType": "string",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "name",
+              "description": "Name of the hook for display/reference.",
+              "label": "",
+              "type": "string",
+              "longType": "string",
+              "fullType": "string",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "description",
+              "description": "Description of what this hook does.",
+              "label": "",
+              "type": "string",
+              "longType": "string",
+              "fullType": "string",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "job_id",
+              "description": "The unique identifier of the job this hook belongs to.",
+              "label": "",
+              "type": "string",
+              "longType": "string",
+              "fullType": "string",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "config",
+              "description": "Hook-type specific configuration.",
+              "label": "",
+              "type": "JobHookConfig",
+              "longType": "JobHookConfig",
+              "fullType": "mgmt.v1alpha1.JobHookConfig",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "enabled",
+              "description": "Whether or not the hook is enabled.",
+              "label": "",
+              "type": "bool",
+              "longType": "bool",
+              "fullType": "bool",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            },
+            {
+              "name": "priority",
+              "description": "The priority of the hook (0-100). This determines the execution order. Lower values are higher priority (priority=0 is the highest).\nTie Breaking is determined by the following: (priority, created_at, id) in ascending order.",
+              "label": "",
+              "type": "uint32",
+              "longType": "uint32",
+              "fullType": "uint32",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            }
+          ]
+        },
+        {
+          "name": "UpdateJobHookResponse",
+          "longName": "UpdateJobHookResponse",
+          "fullName": "mgmt.v1alpha1.UpdateJobHookResponse",
+          "description": "",
+          "hasExtensions": false,
+          "hasFields": true,
+          "hasOneofs": false,
+          "extensions": [],
+          "fields": [
+            {
+              "name": "hook",
+              "description": "The updated job hook",
+              "label": "",
+              "type": "JobHook",
+              "longType": "JobHook",
+              "fullType": "mgmt.v1alpha1.JobHook",
+              "ismap": false,
+              "isoneof": false,
+              "oneofdecl": "",
+              "defaultValue": ""
+            }
+          ]
+        },
         {
           "name": "UpdateJobScheduleRequest",
           "longName": "UpdateJobScheduleRequest",
@@ -14963,6 +15143,30 @@
               "responseLongType": "IsJobHookNameAvailableResponse",
               "responseFullType": "mgmt.v1alpha1.IsJobHookNameAvailableResponse",
               "responseStreaming": false
+            },
+            {
+              "name": "UpdateJobHook",
+              "description": "Updates a job hook",
+              "requestType": "UpdateJobHookRequest",
+              "requestLongType": "UpdateJobHookRequest",
+              "requestFullType": "mgmt.v1alpha1.UpdateJobHookRequest",
+              "requestStreaming": false,
+              "responseType": "UpdateJobHookResponse",
+              "responseLongType": "UpdateJobHookResponse",
+              "responseFullType": "mgmt.v1alpha1.UpdateJobHookResponse",
+              "responseStreaming": false
+            },
+            {
+              "name": "SetJobHookEnabled",
+              "description": "Enables or disables a job hook",
+              "requestType": "SetJobHookEnabledRequest",
+              "requestLongType": "SetJobHookEnabledRequest",
+              "requestFullType": "mgmt.v1alpha1.SetJobHookEnabledRequest",
+              "requestStreaming": false,
+              "responseType": "SetJobHookEnabledResponse",
+              "responseLongType": "SetJobHookEnabledResponse",
+              "responseFullType": "mgmt.v1alpha1.SetJobHookEnabledResponse",
+              "responseStreaming": false
             }
           ]
         }
diff --git a/frontend/packages/sdk/src/client/mgmt/v1alpha1/job-JobService_connectquery.ts b/frontend/packages/sdk/src/client/mgmt/v1alpha1/job-JobService_connectquery.ts
index 734c1a76fe..22a7929631 100644
--- a/frontend/packages/sdk/src/client/mgmt/v1alpha1/job-JobService_connectquery.ts
+++ b/frontend/packages/sdk/src/client/mgmt/v1alpha1/job-JobService_connectquery.ts
@@ -4,7 +4,7 @@
 // @ts-nocheck
 
 import { MethodKind } from "@bufbuild/protobuf";
-import { CancelJobRunRequest, CancelJobRunResponse, CreateJobDestinationConnectionsRequest, CreateJobDestinationConnectionsResponse, CreateJobHookRequest, CreateJobHookResponse, CreateJobRequest, CreateJobResponse, CreateJobRunRequest, CreateJobRunResponse, DeleteJobDestinationConnectionRequest, DeleteJobDestinationConnectionResponse, DeleteJobHookRequest, DeleteJobHookResponse, DeleteJobRequest, DeleteJobResponse, DeleteJobRunRequest, DeleteJobRunResponse, GetJobHookRequest, GetJobHookResponse, GetJobHooksRequest, GetJobHooksResponse, GetJobNextRunsRequest, GetJobNextRunsResponse, GetJobRecentRunsRequest, GetJobRecentRunsResponse, GetJobRequest, GetJobResponse, GetJobRunEventsRequest, GetJobRunEventsResponse, GetJobRunRequest, GetJobRunResponse, GetJobRunsRequest, GetJobRunsResponse, GetJobsRequest, GetJobsResponse, GetJobStatusesRequest, GetJobStatusesResponse, GetJobStatusRequest, GetJobStatusResponse, GetRunContextRequest, GetRunContextResponse, IsJobHookNameAvailableRequest, IsJobHookNameAvailableResponse, IsJobNameAvailableRequest, IsJobNameAvailableResponse, PauseJobRequest, PauseJobResponse, SetJobSourceSqlConnectionSubsetsRequest, SetJobSourceSqlConnectionSubsetsResponse, SetJobSyncOptionsRequest, SetJobSyncOptionsResponse, SetJobWorkflowOptionsRequest, SetJobWorkflowOptionsResponse, SetRunContextRequest, SetRunContextResponse, TerminateJobRunRequest, TerminateJobRunResponse, UpdateJobDestinationConnectionRequest, UpdateJobDestinationConnectionResponse, UpdateJobScheduleRequest, UpdateJobScheduleResponse, UpdateJobSourceConnectionRequest, UpdateJobSourceConnectionResponse, ValidateJobMappingsRequest, ValidateJobMappingsResponse } from "./job_pb.js";
+import { CancelJobRunRequest, CancelJobRunResponse, CreateJobDestinationConnectionsRequest, CreateJobDestinationConnectionsResponse, CreateJobHookRequest, CreateJobHookResponse, CreateJobRequest, CreateJobResponse, CreateJobRunRequest, CreateJobRunResponse, DeleteJobDestinationConnectionRequest, DeleteJobDestinationConnectionResponse, DeleteJobHookRequest, DeleteJobHookResponse, DeleteJobRequest, DeleteJobResponse, DeleteJobRunRequest, DeleteJobRunResponse, GetJobHookRequest, GetJobHookResponse, GetJobHooksRequest, GetJobHooksResponse, GetJobNextRunsRequest, GetJobNextRunsResponse, GetJobRecentRunsRequest, GetJobRecentRunsResponse, GetJobRequest, GetJobResponse, GetJobRunEventsRequest, GetJobRunEventsResponse, GetJobRunRequest, GetJobRunResponse, GetJobRunsRequest, GetJobRunsResponse, GetJobsRequest, GetJobsResponse, GetJobStatusesRequest, GetJobStatusesResponse, GetJobStatusRequest, GetJobStatusResponse, GetRunContextRequest, GetRunContextResponse, IsJobHookNameAvailableRequest, IsJobHookNameAvailableResponse, IsJobNameAvailableRequest, IsJobNameAvailableResponse, PauseJobRequest, PauseJobResponse, SetJobHookEnabledRequest, SetJobHookEnabledResponse, SetJobSourceSqlConnectionSubsetsRequest, SetJobSourceSqlConnectionSubsetsResponse, SetJobSyncOptionsRequest, SetJobSyncOptionsResponse, SetJobWorkflowOptionsRequest, SetJobWorkflowOptionsResponse, SetRunContextRequest, SetRunContextResponse, TerminateJobRunRequest, TerminateJobRunResponse, UpdateJobDestinationConnectionRequest, UpdateJobDestinationConnectionResponse, UpdateJobHookRequest, UpdateJobHookResponse, UpdateJobScheduleRequest, UpdateJobScheduleResponse, UpdateJobSourceConnectionRequest, UpdateJobSourceConnectionResponse, ValidateJobMappingsRequest, ValidateJobMappingsResponse } from "./job_pb.js";
 
 /**
  * @generated from rpc mgmt.v1alpha1.JobService.GetJobs
@@ -495,3 +495,35 @@ export const isJobHookNameAvailable = {
     typeName: "mgmt.v1alpha1.JobService"
   }
 } as const;
+
+/**
+ * Updates a job hook
+ *
+ * @generated from rpc mgmt.v1alpha1.JobService.UpdateJobHook
+ */
+export const updateJobHook = {
+  localName: "updateJobHook",
+  name: "UpdateJobHook",
+  kind: MethodKind.Unary,
+  I: UpdateJobHookRequest,
+  O: UpdateJobHookResponse,
+  service: {
+    typeName: "mgmt.v1alpha1.JobService"
+  }
+} as const;
+
+/**
+ * Enables or disables a job hook
+ *
+ * @generated from rpc mgmt.v1alpha1.JobService.SetJobHookEnabled
+ */
+export const setJobHookEnabled = {
+  localName: "setJobHookEnabled",
+  name: "SetJobHookEnabled",
+  kind: MethodKind.Unary,
+  I: SetJobHookEnabledRequest,
+  O: SetJobHookEnabledResponse,
+  service: {
+    typeName: "mgmt.v1alpha1.JobService"
+  }
+} as const;
diff --git a/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_connect.ts b/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_connect.ts
index 2b17d4963e..84ebe58ab5 100644
--- a/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_connect.ts
+++ b/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_connect.ts
@@ -3,7 +3,7 @@
 /* eslint-disable */
 // @ts-nocheck
 
-import { CancelJobRunRequest, CancelJobRunResponse, CreateJobDestinationConnectionsRequest, CreateJobDestinationConnectionsResponse, CreateJobHookRequest, CreateJobHookResponse, CreateJobRequest, CreateJobResponse, CreateJobRunRequest, CreateJobRunResponse, DeleteJobDestinationConnectionRequest, DeleteJobDestinationConnectionResponse, DeleteJobHookRequest, DeleteJobHookResponse, DeleteJobRequest, DeleteJobResponse, DeleteJobRunRequest, DeleteJobRunResponse, GetJobHookRequest, GetJobHookResponse, GetJobHooksRequest, GetJobHooksResponse, GetJobNextRunsRequest, GetJobNextRunsResponse, GetJobRecentRunsRequest, GetJobRecentRunsResponse, GetJobRequest, GetJobResponse, GetJobRunEventsRequest, GetJobRunEventsResponse, GetJobRunLogsStreamRequest, GetJobRunLogsStreamResponse, GetJobRunRequest, GetJobRunResponse, GetJobRunsRequest, GetJobRunsResponse, GetJobsRequest, GetJobsResponse, GetJobStatusesRequest, GetJobStatusesResponse, GetJobStatusRequest, GetJobStatusResponse, GetRunContextRequest, GetRunContextResponse, IsJobHookNameAvailableRequest, IsJobHookNameAvailableResponse, IsJobNameAvailableRequest, IsJobNameAvailableResponse, PauseJobRequest, PauseJobResponse, SetJobSourceSqlConnectionSubsetsRequest, SetJobSourceSqlConnectionSubsetsResponse, SetJobSyncOptionsRequest, SetJobSyncOptionsResponse, SetJobWorkflowOptionsRequest, SetJobWorkflowOptionsResponse, SetRunContextRequest, SetRunContextResponse, SetRunContextsRequest, SetRunContextsResponse, TerminateJobRunRequest, TerminateJobRunResponse, UpdateJobDestinationConnectionRequest, UpdateJobDestinationConnectionResponse, UpdateJobScheduleRequest, UpdateJobScheduleResponse, UpdateJobSourceConnectionRequest, UpdateJobSourceConnectionResponse, ValidateJobMappingsRequest, ValidateJobMappingsResponse } from "./job_pb.js";
+import { CancelJobRunRequest, CancelJobRunResponse, CreateJobDestinationConnectionsRequest, CreateJobDestinationConnectionsResponse, CreateJobHookRequest, CreateJobHookResponse, CreateJobRequest, CreateJobResponse, CreateJobRunRequest, CreateJobRunResponse, DeleteJobDestinationConnectionRequest, DeleteJobDestinationConnectionResponse, DeleteJobHookRequest, DeleteJobHookResponse, DeleteJobRequest, DeleteJobResponse, DeleteJobRunRequest, DeleteJobRunResponse, GetJobHookRequest, GetJobHookResponse, GetJobHooksRequest, GetJobHooksResponse, GetJobNextRunsRequest, GetJobNextRunsResponse, GetJobRecentRunsRequest, GetJobRecentRunsResponse, GetJobRequest, GetJobResponse, GetJobRunEventsRequest, GetJobRunEventsResponse, GetJobRunLogsStreamRequest, GetJobRunLogsStreamResponse, GetJobRunRequest, GetJobRunResponse, GetJobRunsRequest, GetJobRunsResponse, GetJobsRequest, GetJobsResponse, GetJobStatusesRequest, GetJobStatusesResponse, GetJobStatusRequest, GetJobStatusResponse, GetRunContextRequest, GetRunContextResponse, IsJobHookNameAvailableRequest, IsJobHookNameAvailableResponse, IsJobNameAvailableRequest, IsJobNameAvailableResponse, PauseJobRequest, PauseJobResponse, SetJobHookEnabledRequest, SetJobHookEnabledResponse, SetJobSourceSqlConnectionSubsetsRequest, SetJobSourceSqlConnectionSubsetsResponse, SetJobSyncOptionsRequest, SetJobSyncOptionsResponse, SetJobWorkflowOptionsRequest, SetJobWorkflowOptionsResponse, SetRunContextRequest, SetRunContextResponse, SetRunContextsRequest, SetRunContextsResponse, TerminateJobRunRequest, TerminateJobRunResponse, UpdateJobDestinationConnectionRequest, UpdateJobDestinationConnectionResponse, UpdateJobHookRequest, UpdateJobHookResponse, UpdateJobScheduleRequest, UpdateJobScheduleResponse, UpdateJobSourceConnectionRequest, UpdateJobSourceConnectionResponse, ValidateJobMappingsRequest, ValidateJobMappingsResponse } from "./job_pb.js";
 import { MethodKind } from "@bufbuild/protobuf";
 
 /**
@@ -359,6 +359,28 @@ export const JobService = {
       O: IsJobHookNameAvailableResponse,
       kind: MethodKind.Unary,
     },
+    /**
+     * Updates a job hook
+     *
+     * @generated from rpc mgmt.v1alpha1.JobService.UpdateJobHook
+     */
+    updateJobHook: {
+      name: "UpdateJobHook",
+      I: UpdateJobHookRequest,
+      O: UpdateJobHookResponse,
+      kind: MethodKind.Unary,
+    },
+    /**
+     * Enables or disables a job hook
+     *
+     * @generated from rpc mgmt.v1alpha1.JobService.SetJobHookEnabled
+     */
+    setJobHookEnabled: {
+      name: "SetJobHookEnabled",
+      I: SetJobHookEnabledRequest,
+      O: SetJobHookEnabledResponse,
+      kind: MethodKind.Unary,
+    },
   }
 } as const;
 
diff --git a/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_pb.ts b/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_pb.ts
index 71b43ab527..d220cd762c 100644
--- a/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_pb.ts
+++ b/frontend/packages/sdk/src/client/mgmt/v1alpha1/job_pb.ts
@@ -7114,3 +7114,216 @@ export class IsJobHookNameAvailableResponse extends Message<IsJobHookNameAvailab
   }
 }
 
+/**
+ * @generated from message mgmt.v1alpha1.UpdateJobHookRequest
+ */
+export class UpdateJobHookRequest extends Message<UpdateJobHookRequest> {
+  /**
+   * The unique identifier of the hook
+   *
+   * @generated from field: string id = 1;
+   */
+  id = "";
+
+  /**
+   * Name of the hook for display/reference.
+   *
+   * @generated from field: string name = 2;
+   */
+  name = "";
+
+  /**
+   * Description of what this hook does.
+   *
+   * @generated from field: string description = 3;
+   */
+  description = "";
+
+  /**
+   * The unique identifier of the job this hook belongs to.
+   *
+   * @generated from field: string job_id = 4;
+   */
+  jobId = "";
+
+  /**
+   * Hook-type specific configuration.
+   *
+   * @generated from field: mgmt.v1alpha1.JobHookConfig config = 5;
+   */
+  config?: JobHookConfig;
+
+  /**
+   * Whether or not the hook is enabled.
+   *
+   * @generated from field: bool enabled = 6;
+   */
+  enabled = false;
+
+  /**
+   * The priority of the hook (0-100). This determines the execution order. Lower values are higher priority (priority=0 is the highest).
+   * Tie Breaking is determined by the following: (priority, created_at, id) in ascending order.
+   *
+   * @generated from field: uint32 priority = 7;
+   */
+  priority = 0;
+
+  constructor(data?: PartialMessage<UpdateJobHookRequest>) {
+    super();
+    proto3.util.initPartial(data, this);
+  }
+
+  static readonly runtime: typeof proto3 = proto3;
+  static readonly typeName = "mgmt.v1alpha1.UpdateJobHookRequest";
+  static readonly fields: FieldList = proto3.util.newFieldList(() => [
+    { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
+    { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
+    { no: 3, name: "description", kind: "scalar", T: 9 /* ScalarType.STRING */ },
+    { no: 4, name: "job_id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
+    { no: 5, name: "config", kind: "message", T: JobHookConfig },
+    { no: 6, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
+    { no: 7, name: "priority", kind: "scalar", T: 13 /* ScalarType.UINT32 */ },
+  ]);
+
+  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateJobHookRequest {
+    return new UpdateJobHookRequest().fromBinary(bytes, options);
+  }
+
+  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateJobHookRequest {
+    return new UpdateJobHookRequest().fromJson(jsonValue, options);
+  }
+
+  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateJobHookRequest {
+    return new UpdateJobHookRequest().fromJsonString(jsonString, options);
+  }
+
+  static equals(a: UpdateJobHookRequest | PlainMessage<UpdateJobHookRequest> | undefined, b: UpdateJobHookRequest | PlainMessage<UpdateJobHookRequest> | undefined): boolean {
+    return proto3.util.equals(UpdateJobHookRequest, a, b);
+  }
+}
+
+/**
+ * @generated from message mgmt.v1alpha1.UpdateJobHookResponse
+ */
+export class UpdateJobHookResponse extends Message<UpdateJobHookResponse> {
+  /**
+   * The updated job hook
+   *
+   * @generated from field: mgmt.v1alpha1.JobHook hook = 1;
+   */
+  hook?: JobHook;
+
+  constructor(data?: PartialMessage<UpdateJobHookResponse>) {
+    super();
+    proto3.util.initPartial(data, this);
+  }
+
+  static readonly runtime: typeof proto3 = proto3;
+  static readonly typeName = "mgmt.v1alpha1.UpdateJobHookResponse";
+  static readonly fields: FieldList = proto3.util.newFieldList(() => [
+    { no: 1, name: "hook", kind: "message", T: JobHook },
+  ]);
+
+  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateJobHookResponse {
+    return new UpdateJobHookResponse().fromBinary(bytes, options);
+  }
+
+  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateJobHookResponse {
+    return new UpdateJobHookResponse().fromJson(jsonValue, options);
+  }
+
+  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateJobHookResponse {
+    return new UpdateJobHookResponse().fromJsonString(jsonString, options);
+  }
+
+  static equals(a: UpdateJobHookResponse | PlainMessage<UpdateJobHookResponse> | undefined, b: UpdateJobHookResponse | PlainMessage<UpdateJobHookResponse> | undefined): boolean {
+    return proto3.util.equals(UpdateJobHookResponse, a, b);
+  }
+}
+
+/**
+ * @generated from message mgmt.v1alpha1.SetJobHookEnabledRequest
+ */
+export class SetJobHookEnabledRequest extends Message<SetJobHookEnabledRequest> {
+  /**
+   * The unique identifier of the hook
+   *
+   * @generated from field: string id = 1;
+   */
+  id = "";
+
+  /**
+   * Whether or not the hook is enabled.
+   *
+   * @generated from field: bool enabled = 2;
+   */
+  enabled = false;
+
+  constructor(data?: PartialMessage<SetJobHookEnabledRequest>) {
+    super();
+    proto3.util.initPartial(data, this);
+  }
+
+  static readonly runtime: typeof proto3 = proto3;
+  static readonly typeName = "mgmt.v1alpha1.SetJobHookEnabledRequest";
+  static readonly fields: FieldList = proto3.util.newFieldList(() => [
+    { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
+    { no: 2, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
+  ]);
+
+  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SetJobHookEnabledRequest {
+    return new SetJobHookEnabledRequest().fromBinary(bytes, options);
+  }
+
+  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SetJobHookEnabledRequest {
+    return new SetJobHookEnabledRequest().fromJson(jsonValue, options);
+  }
+
+  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SetJobHookEnabledRequest {
+    return new SetJobHookEnabledRequest().fromJsonString(jsonString, options);
+  }
+
+  static equals(a: SetJobHookEnabledRequest | PlainMessage<SetJobHookEnabledRequest> | undefined, b: SetJobHookEnabledRequest | PlainMessage<SetJobHookEnabledRequest> | undefined): boolean {
+    return proto3.util.equals(SetJobHookEnabledRequest, a, b);
+  }
+}
+
+/**
+ * @generated from message mgmt.v1alpha1.SetJobHookEnabledResponse
+ */
+export class SetJobHookEnabledResponse extends Message<SetJobHookEnabledResponse> {
+  /**
+   * The updated job hook
+   *
+   * @generated from field: mgmt.v1alpha1.JobHook hook = 1;
+   */
+  hook?: JobHook;
+
+  constructor(data?: PartialMessage<SetJobHookEnabledResponse>) {
+    super();
+    proto3.util.initPartial(data, this);
+  }
+
+  static readonly runtime: typeof proto3 = proto3;
+  static readonly typeName = "mgmt.v1alpha1.SetJobHookEnabledResponse";
+  static readonly fields: FieldList = proto3.util.newFieldList(() => [
+    { no: 1, name: "hook", kind: "message", T: JobHook },
+  ]);
+
+  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SetJobHookEnabledResponse {
+    return new SetJobHookEnabledResponse().fromBinary(bytes, options);
+  }
+
+  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SetJobHookEnabledResponse {
+    return new SetJobHookEnabledResponse().fromJson(jsonValue, options);
+  }
+
+  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SetJobHookEnabledResponse {
+    return new SetJobHookEnabledResponse().fromJsonString(jsonString, options);
+  }
+
+  static equals(a: SetJobHookEnabledResponse | PlainMessage<SetJobHookEnabledResponse> | undefined, b: SetJobHookEnabledResponse | PlainMessage<SetJobHookEnabledResponse> | undefined): boolean {
+    return proto3.util.equals(SetJobHookEnabledResponse, a, b);
+  }
+}
+
diff --git a/python/src/neosync/mgmt/v1alpha1/job_pb2.py b/python/src/neosync/mgmt/v1alpha1/job_pb2.py
index 2d9e9b10ec..b632e5c6f0 100644
--- a/python/src/neosync/mgmt/v1alpha1/job_pb2.py
+++ b/python/src/neosync/mgmt/v1alpha1/job_pb2.py
@@ -27,7 +27,7 @@
 from mgmt.v1alpha1 import transformer_pb2 as mgmt_dot_v1alpha1_dot_transformer__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17mgmt/v1alpha1/job.proto\x12\rmgmt.v1alpha1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1fmgmt/v1alpha1/transformer.proto\"9\n\x0eGetJobsRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"9\n\x0fGetJobsResponse\x12&\n\x04jobs\x18\x01 \x03(\x0b\x32\x12.mgmt.v1alpha1.JobR\x04jobs\"N\n\tJobSource\x12\x41\n\x07options\x18\x01 \x01(\x0b\x32\x1f.mgmt.v1alpha1.JobSourceOptionsB\x06\xbaH\x03\xc8\x01\x01R\x07options\"\xe9\x04\n\x10JobSourceOptions\x12L\n\x08postgres\x18\x01 \x01(\x0b\x32..mgmt.v1alpha1.PostgresSourceConnectionOptionsH\x00R\x08postgres\x12\x44\n\x06\x61ws_s3\x18\x02 \x01(\x0b\x32+.mgmt.v1alpha1.AwsS3SourceConnectionOptionsH\x00R\x05\x61wsS3\x12\x43\n\x05mysql\x18\x03 \x01(\x0b\x32+.mgmt.v1alpha1.MysqlSourceConnectionOptionsH\x00R\x05mysql\x12\x42\n\x08generate\x18\x04 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateSourceOptionsH\x00R\x08generate\x12I\n\x0b\x61i_generate\x18\x05 \x01(\x0b\x32&.mgmt.v1alpha1.AiGenerateSourceOptionsH\x00R\naiGenerate\x12I\n\x07mongodb\x18\x06 \x01(\x0b\x32-.mgmt.v1alpha1.MongoDBSourceConnectionOptionsH\x00R\x07mongodb\x12L\n\x08\x64ynamodb\x18\x07 \x01(\x0b\x32..mgmt.v1alpha1.DynamoDBSourceConnectionOptionsH\x00R\x08\x64ynamodb\x12\x43\n\x05mssql\x18\x08 \x01(\x0b\x32+.mgmt.v1alpha1.MssqlSourceConnectionOptionsH\x00R\x05mssqlB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\x85\x01\n\x14\x43reateJobDestination\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12>\n\x07options\x18\x02 \x01(\x0b\x32$.mgmt.v1alpha1.JobDestinationOptionsR\x07options\"\x85\x01\n\x0eJobDestination\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12>\n\x07options\x18\x02 \x01(\x0b\x32$.mgmt.v1alpha1.JobDestinationOptionsR\x07options\x12\x0e\n\x02id\x18\x03 \x01(\tR\x02id\"\xb6\x03\n\x17\x41iGenerateSourceOptions\x12\x32\n\x10\x61i_connection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0e\x61iConnectionId\x12O\n\x07schemas\x18\x02 \x03(\x0b\x32+.mgmt.v1alpha1.AiGenerateSourceSchemaOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x07schemas\x12\x44\n\x17\x66k_source_connection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x14\x66kSourceConnectionId\x88\x01\x01\x12&\n\nmodel_name\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tmodelName\x12$\n\x0buser_prompt\x18\x05 \x01(\tH\x01R\nuserPrompt\x88\x01\x01\x12>\n\x13generate_batch_size\x18\x06 \x01(\x03\x42\t\xbaH\x06\"\x04\x18\x64(\x01H\x02R\x11generateBatchSize\x88\x01\x01\x42\x1a\n\x18_fk_source_connection_idB\x0e\n\x0c_user_promptB\x16\n\x14_generate_batch_size\"\x8d\x01\n\x1c\x41iGenerateSourceSchemaOption\x12\x1f\n\x06schema\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06schema\x12L\n\x06tables\x18\x02 \x03(\x0b\x32*.mgmt.v1alpha1.AiGenerateSourceTableOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x06tables\"e\n\x1b\x41iGenerateSourceTableOption\x12\x1d\n\x05table\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05table\x12\'\n\trow_count\x18\x02 \x01(\x03\x42\n\xbaH\x07\"\x05\x18\xe8\x07(\x01R\x08rowCount\"\xc8\x01\n\x15GenerateSourceOptions\x12M\n\x07schemas\x18\x01 \x03(\x0b\x32).mgmt.v1alpha1.GenerateSourceSchemaOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x07schemas\x12\x44\n\x17\x66k_source_connection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x14\x66kSourceConnectionId\x88\x01\x01\x42\x1a\n\x18_fk_source_connection_id\"\x89\x01\n\x1aGenerateSourceSchemaOption\x12\x1f\n\x06schema\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06schema\x12J\n\x06tables\x18\x02 \x03(\x0b\x32(.mgmt.v1alpha1.GenerateSourceTableOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x06tables\"`\n\x19GenerateSourceTableOption\x12\x1d\n\x05table\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05table\x12$\n\trow_count\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x08rowCount\"O\n\x1eMongoDBSourceConnectionOptions\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\"\xaf\x02\n\x1f\x44ynamoDBSourceConnectionOptions\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12@\n\x06tables\x18\x02 \x03(\x0b\x32(.mgmt.v1alpha1.DynamoDBSourceTableOptionR\x06tables\x12\x65\n\x13unmapped_transforms\x18\x03 \x01(\x0b\x32\x34.mgmt.v1alpha1.DynamoDBSourceUnmappedTransformConfigR\x12unmappedTransforms\x12\x34\n\x16\x65nable_consistent_read\x18\x04 \x01(\x08R\x14\x65nableConsistentRead\"\x83\x02\n%DynamoDBSourceUnmappedTransformConfig\x12\x32\n\x01\x62\x18\x01 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x01\x62\x12>\n\x07\x62oolean\x18\x02 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x07\x62oolean\x12\x32\n\x01n\x18\x04 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x01n\x12\x32\n\x01s\x18\x06 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x01s\"s\n\x19\x44ynamoDBSourceTableOption\x12\x1d\n\x05table\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"\xec\x05\n\x1fPostgresSourceConnectionOptions\x12\x41\n\x1bhalt_on_new_column_addition\x18\x01 \x01(\x08H\x00R\x17haltOnNewColumnAddition\x88\x01\x01\x12\x43\n\x07schemas\x18\x02 \x03(\x0b\x32).mgmt.v1alpha1.PostgresSourceSchemaOptionR\x07schemas\x12-\n\rconnection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12H\n!subset_by_foreign_key_constraints\x18\x04 \x01(\x08R\x1dsubsetByForeignKeyConstraints\x12\x89\x01\n\x1cnew_column_addition_strategy\x18\x05 \x01(\x0b\x32H.mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategyR\x19newColumnAdditionStrategy\x1a\x9b\x02\n\x19NewColumnAdditionStrategy\x12m\n\x08halt_job\x18\x01 \x01(\x0b\x32P.mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.HaltJobH\x00R\x07haltJob\x12m\n\x08\x61uto_map\x18\x02 \x01(\x0b\x32P.mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.AutoMapH\x00R\x07\x61utoMap\x1a\t\n\x07HaltJob\x1a\t\n\x07\x41utoMapB\n\n\x08strategyB\x1e\n\x1c_halt_on_new_column_addition\"v\n\x1aPostgresSourceSchemaOption\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12@\n\x06tables\x18\x02 \x03(\x0b\x32(.mgmt.v1alpha1.PostgresSourceTableOptionR\x06tables\"j\n\x19PostgresSourceTableOption\x12\x14\n\x05table\x18\x01 \x01(\tR\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"\x97\x02\n\x1cMysqlSourceConnectionOptions\x12<\n\x1bhalt_on_new_column_addition\x18\x01 \x01(\x08R\x17haltOnNewColumnAddition\x12@\n\x07schemas\x18\x02 \x03(\x0b\x32&.mgmt.v1alpha1.MysqlSourceSchemaOptionR\x07schemas\x12-\n\rconnection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12H\n!subset_by_foreign_key_constraints\x18\x04 \x01(\x08R\x1dsubsetByForeignKeyConstraints\"p\n\x17MysqlSourceSchemaOption\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12=\n\x06tables\x18\x02 \x03(\x0b\x32%.mgmt.v1alpha1.MysqlSourceTableOptionR\x06tables\"g\n\x16MysqlSourceTableOption\x12\x14\n\x05table\x18\x01 \x01(\tR\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"\x97\x02\n\x1cMssqlSourceConnectionOptions\x12<\n\x1bhalt_on_new_column_addition\x18\x01 \x01(\x08R\x17haltOnNewColumnAddition\x12@\n\x07schemas\x18\x02 \x03(\x0b\x32&.mgmt.v1alpha1.MssqlSourceSchemaOptionR\x07schemas\x12-\n\rconnection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12H\n!subset_by_foreign_key_constraints\x18\x04 \x01(\x08R\x1dsubsetByForeignKeyConstraints\"p\n\x17MssqlSourceSchemaOption\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12=\n\x06tables\x18\x02 \x03(\x0b\x32%.mgmt.v1alpha1.MssqlSourceTableOptionR\x06tables\"g\n\x16MssqlSourceTableOption\x12\x14\n\x05table\x18\x01 \x01(\tR\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"M\n\x1c\x41wsS3SourceConnectionOptions\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\"\xcf\x05\n\x15JobDestinationOptions\x12`\n\x10postgres_options\x18\x01 \x01(\x0b\x32\x33.mgmt.v1alpha1.PostgresDestinationConnectionOptionsH\x00R\x0fpostgresOptions\x12X\n\x0e\x61ws_s3_options\x18\x02 \x01(\x0b\x32\x30.mgmt.v1alpha1.AwsS3DestinationConnectionOptionsH\x00R\x0c\x61wsS3Options\x12W\n\rmysql_options\x18\x03 \x01(\x0b\x32\x30.mgmt.v1alpha1.MysqlDestinationConnectionOptionsH\x00R\x0cmysqlOptions\x12]\n\x0fmongodb_options\x18\x04 \x01(\x0b\x32\x32.mgmt.v1alpha1.MongoDBDestinationConnectionOptionsH\x00R\x0emongodbOptions\x12v\n\x18gcp_cloudstorage_options\x18\x05 \x01(\x0b\x32:.mgmt.v1alpha1.GcpCloudStorageDestinationConnectionOptionsH\x00R\x16gcpCloudstorageOptions\x12`\n\x10\x64ynamodb_options\x18\x06 \x01(\x0b\x32\x33.mgmt.v1alpha1.DynamoDBDestinationConnectionOptionsH\x00R\x0f\x64ynamodbOptions\x12W\n\rmssql_options\x18\x07 \x01(\x0b\x32\x30.mgmt.v1alpha1.MssqlDestinationConnectionOptionsH\x00R\x0cmssqlOptionsB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"%\n#MongoDBDestinationConnectionOptions\"-\n+GcpCloudStorageDestinationConnectionOptions\"}\n$DynamoDBDestinationConnectionOptions\x12U\n\x0etable_mappings\x18\x01 \x03(\x0b\x32..mgmt.v1alpha1.DynamoDBDestinationTableMappingR\rtableMappings\"q\n\x1f\x44ynamoDBDestinationTableMapping\x12!\n\x0csource_table\x18\x01 \x01(\tR\x0bsourceTable\x12+\n\x11\x64\x65stination_table\x18\x02 \x01(\tR\x10\x64\x65stinationTable\"\xa4\x03\n$PostgresDestinationConnectionOptions\x12Q\n\x0etruncate_table\x18\x01 \x01(\x0b\x32*.mgmt.v1alpha1.PostgresTruncateTableConfigR\rtruncateTable\x12*\n\x11init_table_schema\x18\x02 \x01(\x08R\x0finitTableSchema\x12H\n\x0bon_conflict\x18\x03 \x01(\x0b\x32\'.mgmt.v1alpha1.PostgresOnConflictConfigR\nonConflict\x12=\n\x1bskip_foreign_key_violations\x18\x04 \x01(\x08R\x18skipForeignKeyViolations\x12\x30\n\x05\x62\x61tch\x18\x05 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\x12\x30\n\rmax_in_flight\x18\x06 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x42\x10\n\x0e_max_in_flight\"9\n\x18PostgresOnConflictConfig\x12\x1d\n\ndo_nothing\x18\x01 \x01(\x08R\tdoNothing\"m\n\x1bPostgresTruncateTableConfig\x12\x34\n\x16truncate_before_insert\x18\x01 \x01(\x08R\x14truncateBeforeInsert\x12\x18\n\x07\x63\x61scade\x18\x02 \x01(\x08R\x07\x63\x61scade\"\x9b\x03\n!MysqlDestinationConnectionOptions\x12N\n\x0etruncate_table\x18\x01 \x01(\x0b\x32\'.mgmt.v1alpha1.MysqlTruncateTableConfigR\rtruncateTable\x12*\n\x11init_table_schema\x18\x02 \x01(\x08R\x0finitTableSchema\x12\x45\n\x0bon_conflict\x18\x03 \x01(\x0b\x32$.mgmt.v1alpha1.MysqlOnConflictConfigR\nonConflict\x12=\n\x1bskip_foreign_key_violations\x18\x04 \x01(\x08R\x18skipForeignKeyViolations\x12\x30\n\x05\x62\x61tch\x18\x05 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\x12\x30\n\rmax_in_flight\x18\x06 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x42\x10\n\x0e_max_in_flight\"P\n\x18MysqlTruncateTableConfig\x12\x34\n\x16truncate_before_insert\x18\x01 \x01(\x08R\x14truncateBeforeInsert\"6\n\x15MysqlOnConflictConfig\x12\x1d\n\ndo_nothing\x18\x01 \x01(\x08R\tdoNothing\"\x9b\x03\n!MssqlDestinationConnectionOptions\x12N\n\x0etruncate_table\x18\x01 \x01(\x0b\x32\'.mgmt.v1alpha1.MssqlTruncateTableConfigR\rtruncateTable\x12*\n\x11init_table_schema\x18\x02 \x01(\x08R\x0finitTableSchema\x12\x45\n\x0bon_conflict\x18\x03 \x01(\x0b\x32$.mgmt.v1alpha1.MssqlOnConflictConfigR\nonConflict\x12=\n\x1bskip_foreign_key_violations\x18\x04 \x01(\x08R\x18skipForeignKeyViolations\x12\x30\n\x05\x62\x61tch\x18\x05 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\x12\x30\n\rmax_in_flight\x18\x06 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x42\x10\n\x0e_max_in_flight\"P\n\x18MssqlTruncateTableConfig\x12\x34\n\x16truncate_before_insert\x18\x01 \x01(\x08R\x14truncateBeforeInsert\"6\n\x15MssqlOnConflictConfig\x12\x1d\n\ndo_nothing\x18\x01 \x01(\x08R\tdoNothing\"\xb9\x04\n!AwsS3DestinationConnectionOptions\x12\x62\n\rstorage_class\x18\x01 \x01(\x0e\x32=.mgmt.v1alpha1.AwsS3DestinationConnectionOptions.StorageClassR\x0cstorageClass\x12\x30\n\rmax_in_flight\x18\x02 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x12\x1d\n\x07timeout\x18\x03 \x01(\tH\x01R\x07timeout\x88\x01\x01\x12\x30\n\x05\x62\x61tch\x18\x04 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\"\x8e\x02\n\x0cStorageClass\x12\x1d\n\x19STORAGE_CLASS_UNSPECIFIED\x10\x00\x12\x1a\n\x16STORAGE_CLASS_STANDARD\x10\x01\x12$\n STORAGE_CLASS_REDUCED_REDUNDANCY\x10\x02\x12\x19\n\x15STORAGE_CLASS_GLACIER\x10\x03\x12\x1d\n\x19STORAGE_CLASS_STANDARD_IA\x10\x04\x12\x1c\n\x18STORAGE_CLASS_ONEZONE_IA\x10\x05\x12%\n!STORAGE_CLASS_INTELLIGENT_TIERING\x10\x06\x12\x1e\n\x1aSTORAGE_CLASS_DEEP_ARCHIVE\x10\x07\x42\x10\n\x0e_max_in_flightB\n\n\x08_timeout\"Z\n\x0b\x42\x61tchConfig\x12\x19\n\x05\x63ount\x18\x01 \x01(\rH\x00R\x05\x63ount\x88\x01\x01\x12\x1b\n\x06period\x18\x02 \x01(\tH\x01R\x06period\x88\x01\x01\x42\x08\n\x06_countB\t\n\x07_period\"\xa3\x05\n\x10\x43reateJobRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x34\n\x08job_name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x07jobName\x12(\n\rcron_schedule\x18\x03 \x01(\tH\x00R\x0c\x63ronSchedule\x88\x01\x01\x12\x35\n\x08mappings\x18\x04 \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12\x30\n\x06source\x18\x05 \x01(\x0b\x32\x18.mgmt.v1alpha1.JobSourceR\x06source\x12G\n\x0c\x64\x65stinations\x18\x06 \x03(\x0b\x32#.mgmt.v1alpha1.CreateJobDestinationR\x0c\x64\x65stinations\x12(\n\x10initiate_job_run\x18\x07 \x01(\x08R\x0einitiateJobRun\x12I\n\x10workflow_options\x18\x08 \x01(\x0b\x32\x1e.mgmt.v1alpha1.WorkflowOptionsR\x0fworkflowOptions\x12\x41\n\x0csync_options\x18\t \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityOptionsR\x0bsyncOptions\x12Y\n\x14virtual_foreign_keys\x18\n \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeys\x12/\n\x05hooks\x18\x0b \x03(\x0b\x32\x19.mgmt.v1alpha1.NewJobHookR\x05hooksB\x10\n\x0e_cron_schedule\"G\n\x0fWorkflowOptions\x12$\n\x0brun_timeout\x18\x08 \x01(\x03H\x00R\nrunTimeout\x88\x01\x01\x42\x0e\n\x0c_run_timeout\"\x95\x02\n\x0f\x41\x63tivityOptions\x12G\n\x19schedule_to_close_timeout\x18\x01 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01H\x00R\x16scheduleToCloseTimeout\x88\x01\x01\x12\x41\n\x16start_to_close_timeout\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01H\x01R\x13startToCloseTimeout\x88\x01\x01\x12=\n\x0cretry_policy\x18\x03 \x01(\x0b\x32\x1a.mgmt.v1alpha1.RetryPolicyR\x0bretryPolicyB\x1c\n\x1a_schedule_to_close_timeoutB\x19\n\x17_start_to_close_timeout\"[\n\x0bRetryPolicy\x12\x37\n\x10maximum_attempts\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x00H\x00R\x0fmaximumAttempts\x88\x01\x01\x42\x13\n\x11_maximum_attempts\"9\n\x11\x43reateJobResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\x8b\x01\n\x15JobMappingTransformer\x12\x38\n\x06source\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x03 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\"\x9a\x01\n\nJobMapping\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x16\n\x06\x63olumn\x18\x03 \x01(\tR\x06\x63olumn\x12\x46\n\x0btransformer\x18\x05 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x0btransformer\")\n\rGetJobRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"6\n\x0eGetJobResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"p\n\x18UpdateJobScheduleRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12(\n\rcron_schedule\x18\x02 \x01(\tH\x00R\x0c\x63ronSchedule\x88\x01\x01\x42\x10\n\x0e_cron_schedule\"A\n\x19UpdateJobScheduleResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"c\n\x0fPauseJobRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x14\n\x05pause\x18\x02 \x01(\x08R\x05pause\x12\x17\n\x04note\x18\x03 \x01(\tH\x00R\x04note\x88\x01\x01\x42\x07\n\x05_note\"8\n\x10PauseJobResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\x80\x02\n UpdateJobSourceConnectionRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x30\n\x06source\x18\x02 \x01(\x0b\x32\x18.mgmt.v1alpha1.JobSourceR\x06source\x12\x35\n\x08mappings\x18\x03 \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12Y\n\x14virtual_foreign_keys\x18\x04 \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeys\"I\n!UpdateJobSourceConnectionResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"r\n\x1aPostgresSourceSchemaSubset\x12T\n\x10postgres_schemas\x18\x01 \x03(\x0b\x32).mgmt.v1alpha1.PostgresSourceSchemaOptionR\x0fpostgresSchemas\"f\n\x17MysqlSourceSchemaSubset\x12K\n\rmysql_schemas\x18\x01 \x03(\x0b\x32&.mgmt.v1alpha1.MysqlSourceSchemaOptionR\x0cmysqlSchemas\"^\n\x1a\x44ynamoDBSourceSchemaSubset\x12@\n\x06tables\x18\x01 \x03(\x0b\x32(.mgmt.v1alpha1.DynamoDBSourceTableOptionR\x06tables\"f\n\x17MssqlSourceSchemaSubset\x12K\n\rmssql_schemas\x18\x01 \x03(\x0b\x32&.mgmt.v1alpha1.MssqlSourceSchemaOptionR\x0cmssqlSchemas\"\xf2\x02\n\x18JobSourceSqlSubetSchemas\x12T\n\x0fpostgres_subset\x18\x02 \x01(\x0b\x32).mgmt.v1alpha1.PostgresSourceSchemaSubsetH\x00R\x0epostgresSubset\x12K\n\x0cmysql_subset\x18\x03 \x01(\x0b\x32&.mgmt.v1alpha1.MysqlSourceSchemaSubsetH\x00R\x0bmysqlSubset\x12T\n\x0f\x64ynamodb_subset\x18\x04 \x01(\x0b\x32).mgmt.v1alpha1.DynamoDBSourceSchemaSubsetH\x00R\x0e\x64ynamodbSubset\x12K\n\x0cmssql_subset\x18\x05 \x01(\x0b\x32&.mgmt.v1alpha1.MssqlSourceSchemaSubsetH\x00R\x0bmssqlSubsetB\x10\n\x07schemas\x12\x05\xbaH\x02\x08\x01\"\xd0\x01\n\'SetJobSourceSqlConnectionSubsetsRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x41\n\x07schemas\x18\x02 \x01(\x0b\x32\'.mgmt.v1alpha1.JobSourceSqlSubetSchemasR\x07schemas\x12H\n!subset_by_foreign_key_constraints\x18\x03 \x01(\x08R\x1dsubsetByForeignKeyConstraints\"P\n(SetJobSourceSqlConnectionSubsetsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\xde\x01\n%UpdateJobDestinationConnectionRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\x12-\n\rconnection_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12>\n\x07options\x18\x03 \x01(\x0b\x32$.mgmt.v1alpha1.JobDestinationOptionsR\x07options\x12%\n\x0e\x64\x65stination_id\x18\x04 \x01(\tR\rdestinationId\"N\n&UpdateJobDestinationConnectionResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"X\n%DeleteJobDestinationConnectionRequest\x12/\n\x0e\x64\x65stination_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rdestinationId\"(\n&DeleteJobDestinationConnectionResponse\"\x92\x01\n&CreateJobDestinationConnectionsRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\x12G\n\x0c\x64\x65stinations\x18\x02 \x03(\x0b\x32#.mgmt.v1alpha1.CreateJobDestinationR\x0c\x64\x65stinations\"O\n\'CreateJobDestinationConnectionsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\",\n\x10\x44\x65leteJobRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"\x13\n\x11\x44\x65leteJobResponse\"s\n\x19IsJobNameAvailableRequest\x12-\n\x04name\x18\x01 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"?\n\x1aIsJobNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"g\n\x11GetJobRunsRequest\x12!\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x05jobId\x12)\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\taccountIdB\x04\n\x02id\"F\n\x12GetJobRunsResponse\x12\x30\n\x08job_runs\x18\x01 \x03(\x0b\x32\x15.mgmt.v1alpha1.JobRunR\x07jobRuns\"Y\n\x10GetJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"C\n\x11GetJobRunResponse\x12.\n\x07job_run\x18\x01 \x01(\x0b\x32\x15.mgmt.v1alpha1.JobRunR\x06jobRun\"6\n\x13\x43reateJobRunRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\"\x16\n\x14\x43reateJobRunResponse\"\\\n\x13\x43\x61ncelJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"\x16\n\x14\x43\x61ncelJobRunResponse\"\xe9\x05\n\x03Job\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12+\n\x12\x63reated_by_user_id\x18\x02 \x01(\tR\x0f\x63reatedByUserId\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12+\n\x12updated_by_user_id\x18\x04 \x01(\tR\x0fupdatedByUserId\x12\x39\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x12\n\x04name\x18\x06 \x01(\tR\x04name\x12\x30\n\x06source\x18\x07 \x01(\x0b\x32\x18.mgmt.v1alpha1.JobSourceR\x06source\x12\x41\n\x0c\x64\x65stinations\x18\x08 \x03(\x0b\x32\x1d.mgmt.v1alpha1.JobDestinationR\x0c\x64\x65stinations\x12\x35\n\x08mappings\x18\t \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12(\n\rcron_schedule\x18\n \x01(\tH\x00R\x0c\x63ronSchedule\x88\x01\x01\x12\x1d\n\naccount_id\x18\x0b \x01(\tR\taccountId\x12\x41\n\x0csync_options\x18\x0c \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityOptionsR\x0bsyncOptions\x12I\n\x10workflow_options\x18\r \x01(\x0b\x32\x1e.mgmt.v1alpha1.WorkflowOptionsR\x0fworkflowOptions\x12Y\n\x14virtual_foreign_keys\x18\x0e \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeysB\x10\n\x0e_cron_schedule\"g\n\x0cJobRecentRun\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x1c\n\njob_run_id\x18\x02 \x01(\tR\x08jobRunId\":\n\x17GetJobRecentRunsRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\"X\n\x18GetJobRecentRunsResponse\x12<\n\x0brecent_runs\x18\x01 \x03(\x0b\x32\x1b.mgmt.v1alpha1.JobRecentRunR\nrecentRuns\"O\n\x0bJobNextRuns\x12@\n\x0enext_run_times\x18\x01 \x03(\x0b\x32\x1a.google.protobuf.TimestampR\x0cnextRunTimes\".\n\x15GetJobNextRunsRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"Q\n\x16GetJobNextRunsResponse\x12\x37\n\tnext_runs\x18\x01 \x01(\x0b\x32\x1a.mgmt.v1alpha1.JobNextRunsR\x08nextRuns\",\n\x13GetJobStatusRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"H\n\x14GetJobStatusResponse\x12\x30\n\x06status\x18\x01 \x01(\x0e\x32\x18.mgmt.v1alpha1.JobStatusR\x06status\"Z\n\x0fJobStatusRecord\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x30\n\x06status\x18\x02 \x01(\x0e\x32\x18.mgmt.v1alpha1.JobStatusR\x06status\"@\n\x15GetJobStatusesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"T\n\x16GetJobStatusesResponse\x12:\n\x08statuses\x18\x01 \x03(\x0b\x32\x1e.mgmt.v1alpha1.JobStatusRecordR\x08statuses\"+\n\x0f\x41\x63tivityFailure\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xc6\x01\n\x0fPendingActivity\x12\x35\n\x06status\x18\x01 \x01(\x0e\x32\x1d.mgmt.v1alpha1.ActivityStatusR\x06status\x12#\n\ractivity_name\x18\x02 \x01(\tR\x0c\x61\x63tivityName\x12\x46\n\x0clast_failure\x18\x03 \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityFailureH\x00R\x0blastFailure\x88\x01\x01\x42\x0f\n\r_last_failure\"\xd7\x02\n\x06JobRun\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x33\n\x06status\x18\x04 \x01(\x0e\x32\x1b.mgmt.v1alpha1.JobRunStatusR\x06status\x12\x39\n\nstarted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x42\n\x0c\x63ompleted_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x0b\x63ompletedAt\x88\x01\x01\x12M\n\x12pending_activities\x18\x08 \x03(\x0b\x32\x1e.mgmt.v1alpha1.PendingActivityR\x11pendingActivitiesB\x0f\n\r_completed_at\"Q\n\x14JobRunEventTaskError\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x1f\n\x0bretry_state\x18\x02 \x01(\tR\nretryState\"\xab\x01\n\x0fJobRunEventTask\x12\x0e\n\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x39\n\nevent_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\teventTime\x12\x39\n\x05\x65rror\x18\x04 \x01(\x0b\x32#.mgmt.v1alpha1.JobRunEventTaskErrorR\x05\x65rror\"B\n\x12JobRunSyncMetadata\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\"r\n\x13JobRunEventMetadata\x12H\n\rsync_metadata\x18\x01 \x01(\x0b\x32!.mgmt.v1alpha1.JobRunSyncMetadataH\x00R\x0csyncMetadataB\x11\n\x08metadata\x12\x05\xbaH\x02\x08\x01\"\x9d\x02\n\x0bJobRunEvent\x12\x0e\n\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x39\n\nstart_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x39\n\nclose_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcloseTime\x12>\n\x08metadata\x18\x05 \x01(\x0b\x32\".mgmt.v1alpha1.JobRunEventMetadataR\x08metadata\x12\x34\n\x05tasks\x18\x06 \x03(\x0b\x32\x1e.mgmt.v1alpha1.JobRunEventTaskR\x05tasks\"_\n\x16GetJobRunEventsRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"u\n\x17GetJobRunEventsResponse\x12\x32\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x1a.mgmt.v1alpha1.JobRunEventR\x06\x65vents\x12&\n\x0fis_run_complete\x18\x02 \x01(\x08R\risRunComplete\"\\\n\x13\x44\x65leteJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"\x16\n\x14\x44\x65leteJobRunResponse\"_\n\x16TerminateJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"\x19\n\x17TerminateJobRunResponse\"\xb2\x02\n\x1aGetJobRunLogsStreamRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x30\n\x06window\x18\x03 \x01(\x0e\x32\x18.mgmt.v1alpha1.LogWindowR\x06window\x12\x1f\n\x0bshould_tail\x18\x04 \x01(\x08R\nshouldTail\x12\x30\n\rmax_log_lines\x18\x05 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01H\x00R\x0bmaxLogLines\x88\x01\x01\x12\x36\n\nlog_levels\x18\x06 \x03(\x0e\x32\x17.mgmt.v1alpha1.LogLevelR\tlogLevelsB\x10\n\x0e_max_log_lines\"\x85\x01\n\x1bGetJobRunLogsStreamResponse\x12\x19\n\x08log_line\x18\x01 \x01(\tR\x07logLine\x12=\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\ttimestamp\x88\x01\x01\x42\x0c\n\n_timestamp\"\x83\x01\n\x1cSetJobWorkflowOptionsRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12I\n\x10worfklow_options\x18\x02 \x01(\x0b\x32\x1e.mgmt.v1alpha1.WorkflowOptionsR\x0fworfklowOptions\"E\n\x1dSetJobWorkflowOptionsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"w\n\x18SetJobSyncOptionsRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x41\n\x0csync_options\x18\x02 \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityOptionsR\x0bsyncOptions\"A\n\x19SetJobSyncOptionsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\xfc\x01\n\x1aValidateJobMappingsRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x35\n\x08mappings\x18\x02 \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12Y\n\x14virtual_foreign_keys\x18\x04 \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeys\"k\n\x0b\x43olumnError\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x16\n\x06\x63olumn\x18\x03 \x01(\tR\x06\x63olumn\x12\x16\n\x06\x65rrors\x18\x04 \x03(\tR\x06\x65rrors\"\'\n\rDatabaseError\x12\x16\n\x06\x65rrors\x18\x01 \x03(\tR\x06\x65rrors\"\xa5\x01\n\x1bValidateJobMappingsResponse\x12?\n\rcolumn_errors\x18\x01 \x03(\x0b\x32\x1a.mgmt.v1alpha1.ColumnErrorR\x0c\x63olumnErrors\x12\x45\n\x0f\x64\x61tabase_errors\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.DatabaseErrorR\x0e\x64\x61tabaseErrors\"[\n\x11VirtualForeignKey\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x18\n\x07\x63olumns\x18\x03 \x03(\tR\x07\x63olumns\"\xa5\x01\n\x18VirtualForeignConstraint\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x18\n\x07\x63olumns\x18\x03 \x03(\tR\x07\x63olumns\x12\x41\n\x0b\x66oreign_key\x18\x04 \x01(\x0b\x32 .mgmt.v1alpha1.VirtualForeignKeyR\nforeignKey\"\x88\x01\n\rRunContextKey\x12%\n\njob_run_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08jobRunId\x12(\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nexternalId\x12&\n\naccount_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\taccountId\"D\n\x14GetRunContextRequest\x12,\n\x02id\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.RunContextKeyR\x02id\"-\n\x15GetRunContextResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"Z\n\x14SetRunContextRequest\x12,\n\x02id\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.RunContextKeyR\x02id\x12\x14\n\x05value\x18\x02 \x01(\x0cR\x05value\"\x17\n\x15SetRunContextResponse\"[\n\x15SetRunContextsRequest\x12,\n\x02id\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.RunContextKeyR\x02id\x12\x14\n\x05value\x18\x02 \x01(\x0cR\x05value\"\x18\n\x16SetRunContextsResponse\"\xad\x03\n\x07JobHook\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x15\n\x06job_id\x18\x04 \x01(\tR\x05jobId\x12\x34\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1c.mgmt.v1alpha1.JobHookConfigR\x06\x63onfig\x12+\n\x12\x63reated_by_user_id\x18\x06 \x01(\tR\x0f\x63reatedByUserId\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12+\n\x12updated_by_user_id\x18\x08 \x01(\tR\x0fupdatedByUserId\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x18\n\x07\x65nabled\x18\n \x01(\x08R\x07\x65nabled\x12%\n\x08priority\x18\x0b \x01(\rB\t\xbaH\x06*\x04\x18\x64(\x00R\x08priority\"\xdd\x01\n\nNewJobHook\x12-\n\x04name\x18\x01 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12)\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x64\x65scription\x12\x34\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x1c.mgmt.v1alpha1.JobHookConfigR\x06\x63onfig\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12%\n\x08priority\x18\x05 \x01(\rB\t\xbaH\x06*\x04\x18\x64(\x00R\x08priority\"\xa5\x03\n\rJobHookConfig\x12;\n\x03sql\x18\x05 \x01(\x0b\x32\'.mgmt.v1alpha1.JobHookConfig.JobSqlHookH\x00R\x03sql\x1a\xc5\x02\n\nJobSqlHook\x12\x1d\n\x05query\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05query\x12-\n\rconnection_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12\x46\n\x06timing\x18\x03 \x01(\x0b\x32..mgmt.v1alpha1.JobHookConfig.JobSqlHook.TimingR\x06timing\x1a\xa0\x01\n\x06Timing\x12@\n\x08pre_sync\x18\x03 \x01(\x0b\x32#.mgmt.v1alpha1.JobHookTimingPreSyncH\x00R\x07preSync\x12\x43\n\tpost_sync\x18\x04 \x01(\x0b\x32$.mgmt.v1alpha1.JobHookTimingPostSyncH\x00R\x08postSyncB\x0f\n\x06timing\x12\x05\xbaH\x02\x08\x01\x42\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\x16\n\x14JobHookTimingPreSync\"\x17\n\x15JobHookTimingPostSync\"5\n\x12GetJobHooksRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\"C\n\x13GetJobHooksResponse\x12,\n\x05hooks\x18\x01 \x03(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x05hooks\"-\n\x11GetJobHookRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"@\n\x12GetJobHookResponse\x12*\n\x04hook\x18\x01 \x01(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x04hook\"\\\n\x14\x43reateJobHookRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12-\n\x04hook\x18\x02 \x01(\x0b\x32\x19.mgmt.v1alpha1.NewJobHookR\x04hook\"C\n\x15\x43reateJobHookResponse\x12*\n\x04hook\x18\x01 \x01(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x04hook\"0\n\x14\x44\x65leteJobHookRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"\x17\n\x15\x44\x65leteJobHookResponse\"J\n\x1dIsJobHookNameAvailableRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"C\n\x1eIsJobHookNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable*o\n\tJobStatus\x12\x1a\n\x16JOB_STATUS_UNSPECIFIED\x10\x00\x12\x16\n\x12JOB_STATUS_ENABLED\x10\x01\x12\x15\n\x11JOB_STATUS_PAUSED\x10\x03\x12\x17\n\x13JOB_STATUS_DISABLED\x10\x04*\xa7\x01\n\x0e\x41\x63tivityStatus\x12\x1f\n\x1b\x41\x43TIVITY_STATUS_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x41\x43TIVITY_STATUS_SCHEDULED\x10\x01\x12\x1b\n\x17\x41\x43TIVITY_STATUS_STARTED\x10\x02\x12\x1c\n\x18\x41\x43TIVITY_STATUS_CANCELED\x10\x03\x12\x1a\n\x16\x41\x43TIVITY_STATUS_FAILED\x10\x04*\x92\x02\n\x0cJobRunStatus\x12\x1e\n\x1aJOB_RUN_STATUS_UNSPECIFIED\x10\x00\x12\x1a\n\x16JOB_RUN_STATUS_PENDING\x10\x01\x12\x1a\n\x16JOB_RUN_STATUS_RUNNING\x10\x02\x12\x1b\n\x17JOB_RUN_STATUS_COMPLETE\x10\x03\x12\x18\n\x14JOB_RUN_STATUS_ERROR\x10\x04\x12\x1b\n\x17JOB_RUN_STATUS_CANCELED\x10\x05\x12\x1d\n\x19JOB_RUN_STATUS_TERMINATED\x10\x06\x12\x19\n\x15JOB_RUN_STATUS_FAILED\x10\x07\x12\x1c\n\x18JOB_RUN_STATUS_TIMED_OUT\x10\x08*|\n\tLogWindow\x12\"\n\x1eLOG_WINDOW_NO_TIME_UNSPECIFIED\x10\x00\x12\x1a\n\x16LOG_WINDOW_FIFTEEN_MIN\x10\x01\x12\x17\n\x13LOG_WINDOW_ONE_HOUR\x10\x02\x12\x16\n\x12LOG_WINDOW_ONE_DAY\x10\x03*w\n\x08LogLevel\x12\x19\n\x15LOG_LEVEL_UNSPECIFIED\x10\x00\x12\x13\n\x0fLOG_LEVEL_DEBUG\x10\x01\x12\x12\n\x0eLOG_LEVEL_INFO\x10\x02\x12\x12\n\x0eLOG_LEVEL_WARN\x10\x03\x12\x13\n\x0fLOG_LEVEL_ERROR\x10\x04\x32\x86\x1c\n\nJobService\x12J\n\x07GetJobs\x12\x1d.mgmt.v1alpha1.GetJobsRequest\x1a\x1e.mgmt.v1alpha1.GetJobsResponse\"\x00\x12G\n\x06GetJob\x12\x1c.mgmt.v1alpha1.GetJobRequest\x1a\x1d.mgmt.v1alpha1.GetJobResponse\"\x00\x12P\n\tCreateJob\x12\x1f.mgmt.v1alpha1.CreateJobRequest\x1a .mgmt.v1alpha1.CreateJobResponse\"\x00\x12P\n\tDeleteJob\x12\x1f.mgmt.v1alpha1.DeleteJobRequest\x1a .mgmt.v1alpha1.DeleteJobResponse\"\x00\x12k\n\x12IsJobNameAvailable\x12(.mgmt.v1alpha1.IsJobNameAvailableRequest\x1a).mgmt.v1alpha1.IsJobNameAvailableResponse\"\x00\x12h\n\x11UpdateJobSchedule\x12\'.mgmt.v1alpha1.UpdateJobScheduleRequest\x1a(.mgmt.v1alpha1.UpdateJobScheduleResponse\"\x00\x12\x80\x01\n\x19UpdateJobSourceConnection\x12/.mgmt.v1alpha1.UpdateJobSourceConnectionRequest\x1a\x30.mgmt.v1alpha1.UpdateJobSourceConnectionResponse\"\x00\x12\x95\x01\n SetJobSourceSqlConnectionSubsets\x12\x36.mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest\x1a\x37.mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsResponse\"\x00\x12\x8f\x01\n\x1eUpdateJobDestinationConnection\x12\x34.mgmt.v1alpha1.UpdateJobDestinationConnectionRequest\x1a\x35.mgmt.v1alpha1.UpdateJobDestinationConnectionResponse\"\x00\x12\x8f\x01\n\x1e\x44\x65leteJobDestinationConnection\x12\x34.mgmt.v1alpha1.DeleteJobDestinationConnectionRequest\x1a\x35.mgmt.v1alpha1.DeleteJobDestinationConnectionResponse\"\x00\x12\x92\x01\n\x1f\x43reateJobDestinationConnections\x12\x35.mgmt.v1alpha1.CreateJobDestinationConnectionsRequest\x1a\x36.mgmt.v1alpha1.CreateJobDestinationConnectionsResponse\"\x00\x12M\n\x08PauseJob\x12\x1e.mgmt.v1alpha1.PauseJobRequest\x1a\x1f.mgmt.v1alpha1.PauseJobResponse\"\x00\x12\x65\n\x10GetJobRecentRuns\x12&.mgmt.v1alpha1.GetJobRecentRunsRequest\x1a\'.mgmt.v1alpha1.GetJobRecentRunsResponse\"\x00\x12_\n\x0eGetJobNextRuns\x12$.mgmt.v1alpha1.GetJobNextRunsRequest\x1a%.mgmt.v1alpha1.GetJobNextRunsResponse\"\x00\x12Y\n\x0cGetJobStatus\x12\".mgmt.v1alpha1.GetJobStatusRequest\x1a#.mgmt.v1alpha1.GetJobStatusResponse\"\x00\x12_\n\x0eGetJobStatuses\x12$.mgmt.v1alpha1.GetJobStatusesRequest\x1a%.mgmt.v1alpha1.GetJobStatusesResponse\"\x00\x12S\n\nGetJobRuns\x12 .mgmt.v1alpha1.GetJobRunsRequest\x1a!.mgmt.v1alpha1.GetJobRunsResponse\"\x00\x12\x62\n\x0fGetJobRunEvents\x12%.mgmt.v1alpha1.GetJobRunEventsRequest\x1a&.mgmt.v1alpha1.GetJobRunEventsResponse\"\x00\x12P\n\tGetJobRun\x12\x1f.mgmt.v1alpha1.GetJobRunRequest\x1a .mgmt.v1alpha1.GetJobRunResponse\"\x00\x12Y\n\x0c\x44\x65leteJobRun\x12\".mgmt.v1alpha1.DeleteJobRunRequest\x1a#.mgmt.v1alpha1.DeleteJobRunResponse\"\x00\x12Y\n\x0c\x43reateJobRun\x12\".mgmt.v1alpha1.CreateJobRunRequest\x1a#.mgmt.v1alpha1.CreateJobRunResponse\"\x00\x12Y\n\x0c\x43\x61ncelJobRun\x12\".mgmt.v1alpha1.CancelJobRunRequest\x1a#.mgmt.v1alpha1.CancelJobRunResponse\"\x00\x12\x62\n\x0fTerminateJobRun\x12%.mgmt.v1alpha1.TerminateJobRunRequest\x1a&.mgmt.v1alpha1.TerminateJobRunResponse\"\x00\x12p\n\x13GetJobRunLogsStream\x12).mgmt.v1alpha1.GetJobRunLogsStreamRequest\x1a*.mgmt.v1alpha1.GetJobRunLogsStreamResponse\"\x00\x30\x01\x12t\n\x15SetJobWorkflowOptions\x12+.mgmt.v1alpha1.SetJobWorkflowOptionsRequest\x1a,.mgmt.v1alpha1.SetJobWorkflowOptionsResponse\"\x00\x12h\n\x11SetJobSyncOptions\x12\'.mgmt.v1alpha1.SetJobSyncOptionsRequest\x1a(.mgmt.v1alpha1.SetJobSyncOptionsResponse\"\x00\x12n\n\x13ValidateJobMappings\x12).mgmt.v1alpha1.ValidateJobMappingsRequest\x1a*.mgmt.v1alpha1.ValidateJobMappingsResponse\"\x00\x12\\\n\rGetRunContext\x12#.mgmt.v1alpha1.GetRunContextRequest\x1a$.mgmt.v1alpha1.GetRunContextResponse\"\x00\x12\\\n\rSetRunContext\x12#.mgmt.v1alpha1.SetRunContextRequest\x1a$.mgmt.v1alpha1.SetRunContextResponse\"\x00\x12\x61\n\x0eSetRunContexts\x12$.mgmt.v1alpha1.SetRunContextsRequest\x1a%.mgmt.v1alpha1.SetRunContextsResponse\"\x00(\x01\x12V\n\x0bGetJobHooks\x12!.mgmt.v1alpha1.GetJobHooksRequest\x1a\".mgmt.v1alpha1.GetJobHooksResponse\"\x00\x12S\n\nGetJobHook\x12 .mgmt.v1alpha1.GetJobHookRequest\x1a!.mgmt.v1alpha1.GetJobHookResponse\"\x00\x12\\\n\rCreateJobHook\x12#.mgmt.v1alpha1.CreateJobHookRequest\x1a$.mgmt.v1alpha1.CreateJobHookResponse\"\x00\x12\\\n\rDeleteJobHook\x12#.mgmt.v1alpha1.DeleteJobHookRequest\x1a$.mgmt.v1alpha1.DeleteJobHookResponse\"\x00\x12w\n\x16IsJobHookNameAvailable\x12,.mgmt.v1alpha1.IsJobHookNameAvailableRequest\x1a-.mgmt.v1alpha1.IsJobHookNameAvailableResponse\"\x00\x42\xc4\x01\n\x11\x63om.mgmt.v1alpha1B\x08JobProtoP\x01ZPgithub.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1;mgmtv1alpha1\xa2\x02\x03MXX\xaa\x02\rMgmt.V1alpha1\xca\x02\rMgmt\\V1alpha1\xe2\x02\x19Mgmt\\V1alpha1\\GPBMetadata\xea\x02\x0eMgmt::V1alpha1b\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17mgmt/v1alpha1/job.proto\x12\rmgmt.v1alpha1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1fmgmt/v1alpha1/transformer.proto\"9\n\x0eGetJobsRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"9\n\x0fGetJobsResponse\x12&\n\x04jobs\x18\x01 \x03(\x0b\x32\x12.mgmt.v1alpha1.JobR\x04jobs\"N\n\tJobSource\x12\x41\n\x07options\x18\x01 \x01(\x0b\x32\x1f.mgmt.v1alpha1.JobSourceOptionsB\x06\xbaH\x03\xc8\x01\x01R\x07options\"\xe9\x04\n\x10JobSourceOptions\x12L\n\x08postgres\x18\x01 \x01(\x0b\x32..mgmt.v1alpha1.PostgresSourceConnectionOptionsH\x00R\x08postgres\x12\x44\n\x06\x61ws_s3\x18\x02 \x01(\x0b\x32+.mgmt.v1alpha1.AwsS3SourceConnectionOptionsH\x00R\x05\x61wsS3\x12\x43\n\x05mysql\x18\x03 \x01(\x0b\x32+.mgmt.v1alpha1.MysqlSourceConnectionOptionsH\x00R\x05mysql\x12\x42\n\x08generate\x18\x04 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateSourceOptionsH\x00R\x08generate\x12I\n\x0b\x61i_generate\x18\x05 \x01(\x0b\x32&.mgmt.v1alpha1.AiGenerateSourceOptionsH\x00R\naiGenerate\x12I\n\x07mongodb\x18\x06 \x01(\x0b\x32-.mgmt.v1alpha1.MongoDBSourceConnectionOptionsH\x00R\x07mongodb\x12L\n\x08\x64ynamodb\x18\x07 \x01(\x0b\x32..mgmt.v1alpha1.DynamoDBSourceConnectionOptionsH\x00R\x08\x64ynamodb\x12\x43\n\x05mssql\x18\x08 \x01(\x0b\x32+.mgmt.v1alpha1.MssqlSourceConnectionOptionsH\x00R\x05mssqlB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\x85\x01\n\x14\x43reateJobDestination\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12>\n\x07options\x18\x02 \x01(\x0b\x32$.mgmt.v1alpha1.JobDestinationOptionsR\x07options\"\x85\x01\n\x0eJobDestination\x12#\n\rconnection_id\x18\x01 \x01(\tR\x0c\x63onnectionId\x12>\n\x07options\x18\x02 \x01(\x0b\x32$.mgmt.v1alpha1.JobDestinationOptionsR\x07options\x12\x0e\n\x02id\x18\x03 \x01(\tR\x02id\"\xb6\x03\n\x17\x41iGenerateSourceOptions\x12\x32\n\x10\x61i_connection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0e\x61iConnectionId\x12O\n\x07schemas\x18\x02 \x03(\x0b\x32+.mgmt.v1alpha1.AiGenerateSourceSchemaOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x07schemas\x12\x44\n\x17\x66k_source_connection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x14\x66kSourceConnectionId\x88\x01\x01\x12&\n\nmodel_name\x18\x04 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\tmodelName\x12$\n\x0buser_prompt\x18\x05 \x01(\tH\x01R\nuserPrompt\x88\x01\x01\x12>\n\x13generate_batch_size\x18\x06 \x01(\x03\x42\t\xbaH\x06\"\x04\x18\x64(\x01H\x02R\x11generateBatchSize\x88\x01\x01\x42\x1a\n\x18_fk_source_connection_idB\x0e\n\x0c_user_promptB\x16\n\x14_generate_batch_size\"\x8d\x01\n\x1c\x41iGenerateSourceSchemaOption\x12\x1f\n\x06schema\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06schema\x12L\n\x06tables\x18\x02 \x03(\x0b\x32*.mgmt.v1alpha1.AiGenerateSourceTableOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x06tables\"e\n\x1b\x41iGenerateSourceTableOption\x12\x1d\n\x05table\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05table\x12\'\n\trow_count\x18\x02 \x01(\x03\x42\n\xbaH\x07\"\x05\x18\xe8\x07(\x01R\x08rowCount\"\xc8\x01\n\x15GenerateSourceOptions\x12M\n\x07schemas\x18\x01 \x03(\x0b\x32).mgmt.v1alpha1.GenerateSourceSchemaOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x07schemas\x12\x44\n\x17\x66k_source_connection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x14\x66kSourceConnectionId\x88\x01\x01\x42\x1a\n\x18_fk_source_connection_id\"\x89\x01\n\x1aGenerateSourceSchemaOption\x12\x1f\n\x06schema\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06schema\x12J\n\x06tables\x18\x02 \x03(\x0b\x32(.mgmt.v1alpha1.GenerateSourceTableOptionB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x06tables\"`\n\x19GenerateSourceTableOption\x12\x1d\n\x05table\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05table\x12$\n\trow_count\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x08rowCount\"O\n\x1eMongoDBSourceConnectionOptions\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\"\xaf\x02\n\x1f\x44ynamoDBSourceConnectionOptions\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12@\n\x06tables\x18\x02 \x03(\x0b\x32(.mgmt.v1alpha1.DynamoDBSourceTableOptionR\x06tables\x12\x65\n\x13unmapped_transforms\x18\x03 \x01(\x0b\x32\x34.mgmt.v1alpha1.DynamoDBSourceUnmappedTransformConfigR\x12unmappedTransforms\x12\x34\n\x16\x65nable_consistent_read\x18\x04 \x01(\x08R\x14\x65nableConsistentRead\"\x83\x02\n%DynamoDBSourceUnmappedTransformConfig\x12\x32\n\x01\x62\x18\x01 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x01\x62\x12>\n\x07\x62oolean\x18\x02 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x07\x62oolean\x12\x32\n\x01n\x18\x04 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x01n\x12\x32\n\x01s\x18\x06 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x01s\"s\n\x19\x44ynamoDBSourceTableOption\x12\x1d\n\x05table\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"\xec\x05\n\x1fPostgresSourceConnectionOptions\x12\x41\n\x1bhalt_on_new_column_addition\x18\x01 \x01(\x08H\x00R\x17haltOnNewColumnAddition\x88\x01\x01\x12\x43\n\x07schemas\x18\x02 \x03(\x0b\x32).mgmt.v1alpha1.PostgresSourceSchemaOptionR\x07schemas\x12-\n\rconnection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12H\n!subset_by_foreign_key_constraints\x18\x04 \x01(\x08R\x1dsubsetByForeignKeyConstraints\x12\x89\x01\n\x1cnew_column_addition_strategy\x18\x05 \x01(\x0b\x32H.mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategyR\x19newColumnAdditionStrategy\x1a\x9b\x02\n\x19NewColumnAdditionStrategy\x12m\n\x08halt_job\x18\x01 \x01(\x0b\x32P.mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.HaltJobH\x00R\x07haltJob\x12m\n\x08\x61uto_map\x18\x02 \x01(\x0b\x32P.mgmt.v1alpha1.PostgresSourceConnectionOptions.NewColumnAdditionStrategy.AutoMapH\x00R\x07\x61utoMap\x1a\t\n\x07HaltJob\x1a\t\n\x07\x41utoMapB\n\n\x08strategyB\x1e\n\x1c_halt_on_new_column_addition\"v\n\x1aPostgresSourceSchemaOption\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12@\n\x06tables\x18\x02 \x03(\x0b\x32(.mgmt.v1alpha1.PostgresSourceTableOptionR\x06tables\"j\n\x19PostgresSourceTableOption\x12\x14\n\x05table\x18\x01 \x01(\tR\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"\x97\x02\n\x1cMysqlSourceConnectionOptions\x12<\n\x1bhalt_on_new_column_addition\x18\x01 \x01(\x08R\x17haltOnNewColumnAddition\x12@\n\x07schemas\x18\x02 \x03(\x0b\x32&.mgmt.v1alpha1.MysqlSourceSchemaOptionR\x07schemas\x12-\n\rconnection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12H\n!subset_by_foreign_key_constraints\x18\x04 \x01(\x08R\x1dsubsetByForeignKeyConstraints\"p\n\x17MysqlSourceSchemaOption\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12=\n\x06tables\x18\x02 \x03(\x0b\x32%.mgmt.v1alpha1.MysqlSourceTableOptionR\x06tables\"g\n\x16MysqlSourceTableOption\x12\x14\n\x05table\x18\x01 \x01(\tR\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"\x97\x02\n\x1cMssqlSourceConnectionOptions\x12<\n\x1bhalt_on_new_column_addition\x18\x01 \x01(\x08R\x17haltOnNewColumnAddition\x12@\n\x07schemas\x18\x02 \x03(\x0b\x32&.mgmt.v1alpha1.MssqlSourceSchemaOptionR\x07schemas\x12-\n\rconnection_id\x18\x03 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12H\n!subset_by_foreign_key_constraints\x18\x04 \x01(\x08R\x1dsubsetByForeignKeyConstraints\"p\n\x17MssqlSourceSchemaOption\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12=\n\x06tables\x18\x02 \x03(\x0b\x32%.mgmt.v1alpha1.MssqlSourceTableOptionR\x06tables\"g\n\x16MssqlSourceTableOption\x12\x14\n\x05table\x18\x01 \x01(\tR\x05table\x12&\n\x0cwhere_clause\x18\x02 \x01(\tH\x00R\x0bwhereClause\x88\x01\x01\x42\x0f\n\r_where_clause\"M\n\x1c\x41wsS3SourceConnectionOptions\x12-\n\rconnection_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\"\xcf\x05\n\x15JobDestinationOptions\x12`\n\x10postgres_options\x18\x01 \x01(\x0b\x32\x33.mgmt.v1alpha1.PostgresDestinationConnectionOptionsH\x00R\x0fpostgresOptions\x12X\n\x0e\x61ws_s3_options\x18\x02 \x01(\x0b\x32\x30.mgmt.v1alpha1.AwsS3DestinationConnectionOptionsH\x00R\x0c\x61wsS3Options\x12W\n\rmysql_options\x18\x03 \x01(\x0b\x32\x30.mgmt.v1alpha1.MysqlDestinationConnectionOptionsH\x00R\x0cmysqlOptions\x12]\n\x0fmongodb_options\x18\x04 \x01(\x0b\x32\x32.mgmt.v1alpha1.MongoDBDestinationConnectionOptionsH\x00R\x0emongodbOptions\x12v\n\x18gcp_cloudstorage_options\x18\x05 \x01(\x0b\x32:.mgmt.v1alpha1.GcpCloudStorageDestinationConnectionOptionsH\x00R\x16gcpCloudstorageOptions\x12`\n\x10\x64ynamodb_options\x18\x06 \x01(\x0b\x32\x33.mgmt.v1alpha1.DynamoDBDestinationConnectionOptionsH\x00R\x0f\x64ynamodbOptions\x12W\n\rmssql_options\x18\x07 \x01(\x0b\x32\x30.mgmt.v1alpha1.MssqlDestinationConnectionOptionsH\x00R\x0cmssqlOptionsB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"%\n#MongoDBDestinationConnectionOptions\"-\n+GcpCloudStorageDestinationConnectionOptions\"}\n$DynamoDBDestinationConnectionOptions\x12U\n\x0etable_mappings\x18\x01 \x03(\x0b\x32..mgmt.v1alpha1.DynamoDBDestinationTableMappingR\rtableMappings\"q\n\x1f\x44ynamoDBDestinationTableMapping\x12!\n\x0csource_table\x18\x01 \x01(\tR\x0bsourceTable\x12+\n\x11\x64\x65stination_table\x18\x02 \x01(\tR\x10\x64\x65stinationTable\"\xa4\x03\n$PostgresDestinationConnectionOptions\x12Q\n\x0etruncate_table\x18\x01 \x01(\x0b\x32*.mgmt.v1alpha1.PostgresTruncateTableConfigR\rtruncateTable\x12*\n\x11init_table_schema\x18\x02 \x01(\x08R\x0finitTableSchema\x12H\n\x0bon_conflict\x18\x03 \x01(\x0b\x32\'.mgmt.v1alpha1.PostgresOnConflictConfigR\nonConflict\x12=\n\x1bskip_foreign_key_violations\x18\x04 \x01(\x08R\x18skipForeignKeyViolations\x12\x30\n\x05\x62\x61tch\x18\x05 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\x12\x30\n\rmax_in_flight\x18\x06 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x42\x10\n\x0e_max_in_flight\"9\n\x18PostgresOnConflictConfig\x12\x1d\n\ndo_nothing\x18\x01 \x01(\x08R\tdoNothing\"m\n\x1bPostgresTruncateTableConfig\x12\x34\n\x16truncate_before_insert\x18\x01 \x01(\x08R\x14truncateBeforeInsert\x12\x18\n\x07\x63\x61scade\x18\x02 \x01(\x08R\x07\x63\x61scade\"\x9b\x03\n!MysqlDestinationConnectionOptions\x12N\n\x0etruncate_table\x18\x01 \x01(\x0b\x32\'.mgmt.v1alpha1.MysqlTruncateTableConfigR\rtruncateTable\x12*\n\x11init_table_schema\x18\x02 \x01(\x08R\x0finitTableSchema\x12\x45\n\x0bon_conflict\x18\x03 \x01(\x0b\x32$.mgmt.v1alpha1.MysqlOnConflictConfigR\nonConflict\x12=\n\x1bskip_foreign_key_violations\x18\x04 \x01(\x08R\x18skipForeignKeyViolations\x12\x30\n\x05\x62\x61tch\x18\x05 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\x12\x30\n\rmax_in_flight\x18\x06 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x42\x10\n\x0e_max_in_flight\"P\n\x18MysqlTruncateTableConfig\x12\x34\n\x16truncate_before_insert\x18\x01 \x01(\x08R\x14truncateBeforeInsert\"6\n\x15MysqlOnConflictConfig\x12\x1d\n\ndo_nothing\x18\x01 \x01(\x08R\tdoNothing\"\x9b\x03\n!MssqlDestinationConnectionOptions\x12N\n\x0etruncate_table\x18\x01 \x01(\x0b\x32\'.mgmt.v1alpha1.MssqlTruncateTableConfigR\rtruncateTable\x12*\n\x11init_table_schema\x18\x02 \x01(\x08R\x0finitTableSchema\x12\x45\n\x0bon_conflict\x18\x03 \x01(\x0b\x32$.mgmt.v1alpha1.MssqlOnConflictConfigR\nonConflict\x12=\n\x1bskip_foreign_key_violations\x18\x04 \x01(\x08R\x18skipForeignKeyViolations\x12\x30\n\x05\x62\x61tch\x18\x05 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\x12\x30\n\rmax_in_flight\x18\x06 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x42\x10\n\x0e_max_in_flight\"P\n\x18MssqlTruncateTableConfig\x12\x34\n\x16truncate_before_insert\x18\x01 \x01(\x08R\x14truncateBeforeInsert\"6\n\x15MssqlOnConflictConfig\x12\x1d\n\ndo_nothing\x18\x01 \x01(\x08R\tdoNothing\"\xb9\x04\n!AwsS3DestinationConnectionOptions\x12\x62\n\rstorage_class\x18\x01 \x01(\x0e\x32=.mgmt.v1alpha1.AwsS3DestinationConnectionOptions.StorageClassR\x0cstorageClass\x12\x30\n\rmax_in_flight\x18\x02 \x01(\rB\x07\xbaH\x04*\x02(\x01H\x00R\x0bmaxInFlight\x88\x01\x01\x12\x1d\n\x07timeout\x18\x03 \x01(\tH\x01R\x07timeout\x88\x01\x01\x12\x30\n\x05\x62\x61tch\x18\x04 \x01(\x0b\x32\x1a.mgmt.v1alpha1.BatchConfigR\x05\x62\x61tch\"\x8e\x02\n\x0cStorageClass\x12\x1d\n\x19STORAGE_CLASS_UNSPECIFIED\x10\x00\x12\x1a\n\x16STORAGE_CLASS_STANDARD\x10\x01\x12$\n STORAGE_CLASS_REDUCED_REDUNDANCY\x10\x02\x12\x19\n\x15STORAGE_CLASS_GLACIER\x10\x03\x12\x1d\n\x19STORAGE_CLASS_STANDARD_IA\x10\x04\x12\x1c\n\x18STORAGE_CLASS_ONEZONE_IA\x10\x05\x12%\n!STORAGE_CLASS_INTELLIGENT_TIERING\x10\x06\x12\x1e\n\x1aSTORAGE_CLASS_DEEP_ARCHIVE\x10\x07\x42\x10\n\x0e_max_in_flightB\n\n\x08_timeout\"Z\n\x0b\x42\x61tchConfig\x12\x19\n\x05\x63ount\x18\x01 \x01(\rH\x00R\x05\x63ount\x88\x01\x01\x12\x1b\n\x06period\x18\x02 \x01(\tH\x01R\x06period\x88\x01\x01\x42\x08\n\x06_countB\t\n\x07_period\"\xa3\x05\n\x10\x43reateJobRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x34\n\x08job_name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x07jobName\x12(\n\rcron_schedule\x18\x03 \x01(\tH\x00R\x0c\x63ronSchedule\x88\x01\x01\x12\x35\n\x08mappings\x18\x04 \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12\x30\n\x06source\x18\x05 \x01(\x0b\x32\x18.mgmt.v1alpha1.JobSourceR\x06source\x12G\n\x0c\x64\x65stinations\x18\x06 \x03(\x0b\x32#.mgmt.v1alpha1.CreateJobDestinationR\x0c\x64\x65stinations\x12(\n\x10initiate_job_run\x18\x07 \x01(\x08R\x0einitiateJobRun\x12I\n\x10workflow_options\x18\x08 \x01(\x0b\x32\x1e.mgmt.v1alpha1.WorkflowOptionsR\x0fworkflowOptions\x12\x41\n\x0csync_options\x18\t \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityOptionsR\x0bsyncOptions\x12Y\n\x14virtual_foreign_keys\x18\n \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeys\x12/\n\x05hooks\x18\x0b \x03(\x0b\x32\x19.mgmt.v1alpha1.NewJobHookR\x05hooksB\x10\n\x0e_cron_schedule\"G\n\x0fWorkflowOptions\x12$\n\x0brun_timeout\x18\x08 \x01(\x03H\x00R\nrunTimeout\x88\x01\x01\x42\x0e\n\x0c_run_timeout\"\x95\x02\n\x0f\x41\x63tivityOptions\x12G\n\x19schedule_to_close_timeout\x18\x01 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01H\x00R\x16scheduleToCloseTimeout\x88\x01\x01\x12\x41\n\x16start_to_close_timeout\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01H\x01R\x13startToCloseTimeout\x88\x01\x01\x12=\n\x0cretry_policy\x18\x03 \x01(\x0b\x32\x1a.mgmt.v1alpha1.RetryPolicyR\x0bretryPolicyB\x1c\n\x1a_schedule_to_close_timeoutB\x19\n\x17_start_to_close_timeout\"[\n\x0bRetryPolicy\x12\x37\n\x10maximum_attempts\x18\x01 \x01(\x05\x42\x07\xbaH\x04\x1a\x02(\x00H\x00R\x0fmaximumAttempts\x88\x01\x01\x42\x13\n\x11_maximum_attempts\"9\n\x11\x43reateJobResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\x8b\x01\n\x15JobMappingTransformer\x12\x38\n\x06source\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x03 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\"\x9a\x01\n\nJobMapping\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x16\n\x06\x63olumn\x18\x03 \x01(\tR\x06\x63olumn\x12\x46\n\x0btransformer\x18\x05 \x01(\x0b\x32$.mgmt.v1alpha1.JobMappingTransformerR\x0btransformer\")\n\rGetJobRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"6\n\x0eGetJobResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"p\n\x18UpdateJobScheduleRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12(\n\rcron_schedule\x18\x02 \x01(\tH\x00R\x0c\x63ronSchedule\x88\x01\x01\x42\x10\n\x0e_cron_schedule\"A\n\x19UpdateJobScheduleResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"c\n\x0fPauseJobRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x14\n\x05pause\x18\x02 \x01(\x08R\x05pause\x12\x17\n\x04note\x18\x03 \x01(\tH\x00R\x04note\x88\x01\x01\x42\x07\n\x05_note\"8\n\x10PauseJobResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\x80\x02\n UpdateJobSourceConnectionRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x30\n\x06source\x18\x02 \x01(\x0b\x32\x18.mgmt.v1alpha1.JobSourceR\x06source\x12\x35\n\x08mappings\x18\x03 \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12Y\n\x14virtual_foreign_keys\x18\x04 \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeys\"I\n!UpdateJobSourceConnectionResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"r\n\x1aPostgresSourceSchemaSubset\x12T\n\x10postgres_schemas\x18\x01 \x03(\x0b\x32).mgmt.v1alpha1.PostgresSourceSchemaOptionR\x0fpostgresSchemas\"f\n\x17MysqlSourceSchemaSubset\x12K\n\rmysql_schemas\x18\x01 \x03(\x0b\x32&.mgmt.v1alpha1.MysqlSourceSchemaOptionR\x0cmysqlSchemas\"^\n\x1a\x44ynamoDBSourceSchemaSubset\x12@\n\x06tables\x18\x01 \x03(\x0b\x32(.mgmt.v1alpha1.DynamoDBSourceTableOptionR\x06tables\"f\n\x17MssqlSourceSchemaSubset\x12K\n\rmssql_schemas\x18\x01 \x03(\x0b\x32&.mgmt.v1alpha1.MssqlSourceSchemaOptionR\x0cmssqlSchemas\"\xf2\x02\n\x18JobSourceSqlSubetSchemas\x12T\n\x0fpostgres_subset\x18\x02 \x01(\x0b\x32).mgmt.v1alpha1.PostgresSourceSchemaSubsetH\x00R\x0epostgresSubset\x12K\n\x0cmysql_subset\x18\x03 \x01(\x0b\x32&.mgmt.v1alpha1.MysqlSourceSchemaSubsetH\x00R\x0bmysqlSubset\x12T\n\x0f\x64ynamodb_subset\x18\x04 \x01(\x0b\x32).mgmt.v1alpha1.DynamoDBSourceSchemaSubsetH\x00R\x0e\x64ynamodbSubset\x12K\n\x0cmssql_subset\x18\x05 \x01(\x0b\x32&.mgmt.v1alpha1.MssqlSourceSchemaSubsetH\x00R\x0bmssqlSubsetB\x10\n\x07schemas\x12\x05\xbaH\x02\x08\x01\"\xd0\x01\n\'SetJobSourceSqlConnectionSubsetsRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x41\n\x07schemas\x18\x02 \x01(\x0b\x32\'.mgmt.v1alpha1.JobSourceSqlSubetSchemasR\x07schemas\x12H\n!subset_by_foreign_key_constraints\x18\x03 \x01(\x08R\x1dsubsetByForeignKeyConstraints\"P\n(SetJobSourceSqlConnectionSubsetsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\xde\x01\n%UpdateJobDestinationConnectionRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\x12-\n\rconnection_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12>\n\x07options\x18\x03 \x01(\x0b\x32$.mgmt.v1alpha1.JobDestinationOptionsR\x07options\x12%\n\x0e\x64\x65stination_id\x18\x04 \x01(\tR\rdestinationId\"N\n&UpdateJobDestinationConnectionResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"X\n%DeleteJobDestinationConnectionRequest\x12/\n\x0e\x64\x65stination_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rdestinationId\"(\n&DeleteJobDestinationConnectionResponse\"\x92\x01\n&CreateJobDestinationConnectionsRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\x12G\n\x0c\x64\x65stinations\x18\x02 \x03(\x0b\x32#.mgmt.v1alpha1.CreateJobDestinationR\x0c\x64\x65stinations\"O\n\'CreateJobDestinationConnectionsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\",\n\x10\x44\x65leteJobRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"\x13\n\x11\x44\x65leteJobResponse\"s\n\x19IsJobNameAvailableRequest\x12-\n\x04name\x18\x01 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"?\n\x1aIsJobNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"g\n\x11GetJobRunsRequest\x12!\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\x05jobId\x12)\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01H\x00R\taccountIdB\x04\n\x02id\"F\n\x12GetJobRunsResponse\x12\x30\n\x08job_runs\x18\x01 \x03(\x0b\x32\x15.mgmt.v1alpha1.JobRunR\x07jobRuns\"Y\n\x10GetJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"C\n\x11GetJobRunResponse\x12.\n\x07job_run\x18\x01 \x01(\x0b\x32\x15.mgmt.v1alpha1.JobRunR\x06jobRun\"6\n\x13\x43reateJobRunRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\"\x16\n\x14\x43reateJobRunResponse\"\\\n\x13\x43\x61ncelJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"\x16\n\x14\x43\x61ncelJobRunResponse\"\xe9\x05\n\x03Job\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12+\n\x12\x63reated_by_user_id\x18\x02 \x01(\tR\x0f\x63reatedByUserId\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12+\n\x12updated_by_user_id\x18\x04 \x01(\tR\x0fupdatedByUserId\x12\x39\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x12\n\x04name\x18\x06 \x01(\tR\x04name\x12\x30\n\x06source\x18\x07 \x01(\x0b\x32\x18.mgmt.v1alpha1.JobSourceR\x06source\x12\x41\n\x0c\x64\x65stinations\x18\x08 \x03(\x0b\x32\x1d.mgmt.v1alpha1.JobDestinationR\x0c\x64\x65stinations\x12\x35\n\x08mappings\x18\t \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12(\n\rcron_schedule\x18\n \x01(\tH\x00R\x0c\x63ronSchedule\x88\x01\x01\x12\x1d\n\naccount_id\x18\x0b \x01(\tR\taccountId\x12\x41\n\x0csync_options\x18\x0c \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityOptionsR\x0bsyncOptions\x12I\n\x10workflow_options\x18\r \x01(\x0b\x32\x1e.mgmt.v1alpha1.WorkflowOptionsR\x0fworkflowOptions\x12Y\n\x14virtual_foreign_keys\x18\x0e \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeysB\x10\n\x0e_cron_schedule\"g\n\x0cJobRecentRun\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x1c\n\njob_run_id\x18\x02 \x01(\tR\x08jobRunId\":\n\x17GetJobRecentRunsRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\"X\n\x18GetJobRecentRunsResponse\x12<\n\x0brecent_runs\x18\x01 \x03(\x0b\x32\x1b.mgmt.v1alpha1.JobRecentRunR\nrecentRuns\"O\n\x0bJobNextRuns\x12@\n\x0enext_run_times\x18\x01 \x03(\x0b\x32\x1a.google.protobuf.TimestampR\x0cnextRunTimes\".\n\x15GetJobNextRunsRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"Q\n\x16GetJobNextRunsResponse\x12\x37\n\tnext_runs\x18\x01 \x01(\x0b\x32\x1a.mgmt.v1alpha1.JobNextRunsR\x08nextRuns\",\n\x13GetJobStatusRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"H\n\x14GetJobStatusResponse\x12\x30\n\x06status\x18\x01 \x01(\x0e\x32\x18.mgmt.v1alpha1.JobStatusR\x06status\"Z\n\x0fJobStatusRecord\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x30\n\x06status\x18\x02 \x01(\x0e\x32\x18.mgmt.v1alpha1.JobStatusR\x06status\"@\n\x15GetJobStatusesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"T\n\x16GetJobStatusesResponse\x12:\n\x08statuses\x18\x01 \x03(\x0b\x32\x1e.mgmt.v1alpha1.JobStatusRecordR\x08statuses\"+\n\x0f\x41\x63tivityFailure\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"\xc6\x01\n\x0fPendingActivity\x12\x35\n\x06status\x18\x01 \x01(\x0e\x32\x1d.mgmt.v1alpha1.ActivityStatusR\x06status\x12#\n\ractivity_name\x18\x02 \x01(\tR\x0c\x61\x63tivityName\x12\x46\n\x0clast_failure\x18\x03 \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityFailureH\x00R\x0blastFailure\x88\x01\x01\x42\x0f\n\r_last_failure\"\xd7\x02\n\x06JobRun\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x15\n\x06job_id\x18\x02 \x01(\tR\x05jobId\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x33\n\x06status\x18\x04 \x01(\x0e\x32\x1b.mgmt.v1alpha1.JobRunStatusR\x06status\x12\x39\n\nstarted_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartedAt\x12\x42\n\x0c\x63ompleted_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x0b\x63ompletedAt\x88\x01\x01\x12M\n\x12pending_activities\x18\x08 \x03(\x0b\x32\x1e.mgmt.v1alpha1.PendingActivityR\x11pendingActivitiesB\x0f\n\r_completed_at\"Q\n\x14JobRunEventTaskError\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x1f\n\x0bretry_state\x18\x02 \x01(\tR\nretryState\"\xab\x01\n\x0fJobRunEventTask\x12\x0e\n\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x39\n\nevent_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\teventTime\x12\x39\n\x05\x65rror\x18\x04 \x01(\x0b\x32#.mgmt.v1alpha1.JobRunEventTaskErrorR\x05\x65rror\"B\n\x12JobRunSyncMetadata\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\"r\n\x13JobRunEventMetadata\x12H\n\rsync_metadata\x18\x01 \x01(\x0b\x32!.mgmt.v1alpha1.JobRunSyncMetadataH\x00R\x0csyncMetadataB\x11\n\x08metadata\x12\x05\xbaH\x02\x08\x01\"\x9d\x02\n\x0bJobRunEvent\x12\x0e\n\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x39\n\nstart_time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x39\n\nclose_time\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcloseTime\x12>\n\x08metadata\x18\x05 \x01(\x0b\x32\".mgmt.v1alpha1.JobRunEventMetadataR\x08metadata\x12\x34\n\x05tasks\x18\x06 \x03(\x0b\x32\x1e.mgmt.v1alpha1.JobRunEventTaskR\x05tasks\"_\n\x16GetJobRunEventsRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"u\n\x17GetJobRunEventsResponse\x12\x32\n\x06\x65vents\x18\x01 \x03(\x0b\x32\x1a.mgmt.v1alpha1.JobRunEventR\x06\x65vents\x12&\n\x0fis_run_complete\x18\x02 \x01(\x08R\risRunComplete\"\\\n\x13\x44\x65leteJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"\x16\n\x14\x44\x65leteJobRunResponse\"_\n\x16TerminateJobRunRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"\x19\n\x17TerminateJobRunResponse\"\xb2\x02\n\x1aGetJobRunLogsStreamRequest\x12\x1c\n\njob_run_id\x18\x01 \x01(\tR\x08jobRunId\x12\'\n\naccount_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x30\n\x06window\x18\x03 \x01(\x0e\x32\x18.mgmt.v1alpha1.LogWindowR\x06window\x12\x1f\n\x0bshould_tail\x18\x04 \x01(\x08R\nshouldTail\x12\x30\n\rmax_log_lines\x18\x05 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01H\x00R\x0bmaxLogLines\x88\x01\x01\x12\x36\n\nlog_levels\x18\x06 \x03(\x0e\x32\x17.mgmt.v1alpha1.LogLevelR\tlogLevelsB\x10\n\x0e_max_log_lines\"\x85\x01\n\x1bGetJobRunLogsStreamResponse\x12\x19\n\x08log_line\x18\x01 \x01(\tR\x07logLine\x12=\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\ttimestamp\x88\x01\x01\x42\x0c\n\n_timestamp\"\x83\x01\n\x1cSetJobWorkflowOptionsRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12I\n\x10worfklow_options\x18\x02 \x01(\x0b\x32\x1e.mgmt.v1alpha1.WorkflowOptionsR\x0fworfklowOptions\"E\n\x1dSetJobWorkflowOptionsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"w\n\x18SetJobSyncOptionsRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x41\n\x0csync_options\x18\x02 \x01(\x0b\x32\x1e.mgmt.v1alpha1.ActivityOptionsR\x0bsyncOptions\"A\n\x19SetJobSyncOptionsResponse\x12$\n\x03job\x18\x01 \x01(\x0b\x32\x12.mgmt.v1alpha1.JobR\x03job\"\xfc\x01\n\x1aValidateJobMappingsRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x35\n\x08mappings\x18\x02 \x03(\x0b\x32\x19.mgmt.v1alpha1.JobMappingR\x08mappings\x12#\n\rconnection_id\x18\x03 \x01(\tR\x0c\x63onnectionId\x12Y\n\x14virtual_foreign_keys\x18\x04 \x03(\x0b\x32\'.mgmt.v1alpha1.VirtualForeignConstraintR\x12virtualForeignKeys\"k\n\x0b\x43olumnError\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x16\n\x06\x63olumn\x18\x03 \x01(\tR\x06\x63olumn\x12\x16\n\x06\x65rrors\x18\x04 \x03(\tR\x06\x65rrors\"\'\n\rDatabaseError\x12\x16\n\x06\x65rrors\x18\x01 \x03(\tR\x06\x65rrors\"\xa5\x01\n\x1bValidateJobMappingsResponse\x12?\n\rcolumn_errors\x18\x01 \x03(\x0b\x32\x1a.mgmt.v1alpha1.ColumnErrorR\x0c\x63olumnErrors\x12\x45\n\x0f\x64\x61tabase_errors\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.DatabaseErrorR\x0e\x64\x61tabaseErrors\"[\n\x11VirtualForeignKey\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x18\n\x07\x63olumns\x18\x03 \x03(\tR\x07\x63olumns\"\xa5\x01\n\x18VirtualForeignConstraint\x12\x16\n\x06schema\x18\x01 \x01(\tR\x06schema\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x18\n\x07\x63olumns\x18\x03 \x03(\tR\x07\x63olumns\x12\x41\n\x0b\x66oreign_key\x18\x04 \x01(\x0b\x32 .mgmt.v1alpha1.VirtualForeignKeyR\nforeignKey\"\x88\x01\n\rRunContextKey\x12%\n\njob_run_id\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08jobRunId\x12(\n\x0b\x65xternal_id\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\nexternalId\x12&\n\naccount_id\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\taccountId\"D\n\x14GetRunContextRequest\x12,\n\x02id\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.RunContextKeyR\x02id\"-\n\x15GetRunContextResponse\x12\x14\n\x05value\x18\x01 \x01(\x0cR\x05value\"Z\n\x14SetRunContextRequest\x12,\n\x02id\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.RunContextKeyR\x02id\x12\x14\n\x05value\x18\x02 \x01(\x0cR\x05value\"\x17\n\x15SetRunContextResponse\"[\n\x15SetRunContextsRequest\x12,\n\x02id\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.RunContextKeyR\x02id\x12\x14\n\x05value\x18\x02 \x01(\x0cR\x05value\"\x18\n\x16SetRunContextsResponse\"\xad\x03\n\x07JobHook\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x15\n\x06job_id\x18\x04 \x01(\tR\x05jobId\x12\x34\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1c.mgmt.v1alpha1.JobHookConfigR\x06\x63onfig\x12+\n\x12\x63reated_by_user_id\x18\x06 \x01(\tR\x0f\x63reatedByUserId\x12\x39\n\ncreated_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12+\n\x12updated_by_user_id\x18\x08 \x01(\tR\x0fupdatedByUserId\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x18\n\x07\x65nabled\x18\n \x01(\x08R\x07\x65nabled\x12%\n\x08priority\x18\x0b \x01(\rB\t\xbaH\x06*\x04\x18\x64(\x00R\x08priority\"\xdd\x01\n\nNewJobHook\x12-\n\x04name\x18\x01 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12)\n\x0b\x64\x65scription\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x64\x65scription\x12\x34\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x1c.mgmt.v1alpha1.JobHookConfigR\x06\x63onfig\x12\x18\n\x07\x65nabled\x18\x04 \x01(\x08R\x07\x65nabled\x12%\n\x08priority\x18\x05 \x01(\rB\t\xbaH\x06*\x04\x18\x64(\x00R\x08priority\"\xa5\x03\n\rJobHookConfig\x12;\n\x03sql\x18\x05 \x01(\x0b\x32\'.mgmt.v1alpha1.JobHookConfig.JobSqlHookH\x00R\x03sql\x1a\xc5\x02\n\nJobSqlHook\x12\x1d\n\x05query\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05query\x12-\n\rconnection_id\x18\x02 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x0c\x63onnectionId\x12\x46\n\x06timing\x18\x03 \x01(\x0b\x32..mgmt.v1alpha1.JobHookConfig.JobSqlHook.TimingR\x06timing\x1a\xa0\x01\n\x06Timing\x12@\n\x08pre_sync\x18\x03 \x01(\x0b\x32#.mgmt.v1alpha1.JobHookTimingPreSyncH\x00R\x07preSync\x12\x43\n\tpost_sync\x18\x04 \x01(\x0b\x32$.mgmt.v1alpha1.JobHookTimingPostSyncH\x00R\x08postSyncB\x0f\n\x06timing\x12\x05\xbaH\x02\x08\x01\x42\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\x16\n\x14JobHookTimingPreSync\"\x17\n\x15JobHookTimingPostSync\"5\n\x12GetJobHooksRequest\x12\x1f\n\x06job_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\"C\n\x13GetJobHooksResponse\x12,\n\x05hooks\x18\x01 \x03(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x05hooks\"-\n\x11GetJobHookRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"@\n\x12GetJobHookResponse\x12*\n\x04hook\x18\x01 \x01(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x04hook\"\\\n\x14\x43reateJobHookRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12-\n\x04hook\x18\x02 \x01(\x0b\x32\x19.mgmt.v1alpha1.NewJobHookR\x04hook\"C\n\x15\x43reateJobHookResponse\x12*\n\x04hook\x18\x01 \x01(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x04hook\"0\n\x14\x44\x65leteJobHookRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"\x17\n\x15\x44\x65leteJobHookResponse\"J\n\x1dIsJobHookNameAvailableRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"C\n\x1eIsJobHookNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"\xa2\x02\n\x14UpdateJobHookRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12)\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0b\x64\x65scription\x12\x1f\n\x06job_id\x18\x04 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x05jobId\x12\x34\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1c.mgmt.v1alpha1.JobHookConfigR\x06\x63onfig\x12\x18\n\x07\x65nabled\x18\x06 \x01(\x08R\x07\x65nabled\x12%\n\x08priority\x18\x07 \x01(\rB\t\xbaH\x06*\x04\x18\x64(\x00R\x08priority\"C\n\x15UpdateJobHookResponse\x12*\n\x04hook\x18\x01 \x01(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x04hook\"N\n\x18SetJobHookEnabledRequest\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x18\n\x07\x65nabled\x18\x02 \x01(\x08R\x07\x65nabled\"G\n\x19SetJobHookEnabledResponse\x12*\n\x04hook\x18\x01 \x01(\x0b\x32\x16.mgmt.v1alpha1.JobHookR\x04hook*o\n\tJobStatus\x12\x1a\n\x16JOB_STATUS_UNSPECIFIED\x10\x00\x12\x16\n\x12JOB_STATUS_ENABLED\x10\x01\x12\x15\n\x11JOB_STATUS_PAUSED\x10\x03\x12\x17\n\x13JOB_STATUS_DISABLED\x10\x04*\xa7\x01\n\x0e\x41\x63tivityStatus\x12\x1f\n\x1b\x41\x43TIVITY_STATUS_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x41\x43TIVITY_STATUS_SCHEDULED\x10\x01\x12\x1b\n\x17\x41\x43TIVITY_STATUS_STARTED\x10\x02\x12\x1c\n\x18\x41\x43TIVITY_STATUS_CANCELED\x10\x03\x12\x1a\n\x16\x41\x43TIVITY_STATUS_FAILED\x10\x04*\x92\x02\n\x0cJobRunStatus\x12\x1e\n\x1aJOB_RUN_STATUS_UNSPECIFIED\x10\x00\x12\x1a\n\x16JOB_RUN_STATUS_PENDING\x10\x01\x12\x1a\n\x16JOB_RUN_STATUS_RUNNING\x10\x02\x12\x1b\n\x17JOB_RUN_STATUS_COMPLETE\x10\x03\x12\x18\n\x14JOB_RUN_STATUS_ERROR\x10\x04\x12\x1b\n\x17JOB_RUN_STATUS_CANCELED\x10\x05\x12\x1d\n\x19JOB_RUN_STATUS_TERMINATED\x10\x06\x12\x19\n\x15JOB_RUN_STATUS_FAILED\x10\x07\x12\x1c\n\x18JOB_RUN_STATUS_TIMED_OUT\x10\x08*|\n\tLogWindow\x12\"\n\x1eLOG_WINDOW_NO_TIME_UNSPECIFIED\x10\x00\x12\x1a\n\x16LOG_WINDOW_FIFTEEN_MIN\x10\x01\x12\x17\n\x13LOG_WINDOW_ONE_HOUR\x10\x02\x12\x16\n\x12LOG_WINDOW_ONE_DAY\x10\x03*w\n\x08LogLevel\x12\x19\n\x15LOG_LEVEL_UNSPECIFIED\x10\x00\x12\x13\n\x0fLOG_LEVEL_DEBUG\x10\x01\x12\x12\n\x0eLOG_LEVEL_INFO\x10\x02\x12\x12\n\x0eLOG_LEVEL_WARN\x10\x03\x12\x13\n\x0fLOG_LEVEL_ERROR\x10\x04\x32\xce\x1d\n\nJobService\x12J\n\x07GetJobs\x12\x1d.mgmt.v1alpha1.GetJobsRequest\x1a\x1e.mgmt.v1alpha1.GetJobsResponse\"\x00\x12G\n\x06GetJob\x12\x1c.mgmt.v1alpha1.GetJobRequest\x1a\x1d.mgmt.v1alpha1.GetJobResponse\"\x00\x12P\n\tCreateJob\x12\x1f.mgmt.v1alpha1.CreateJobRequest\x1a .mgmt.v1alpha1.CreateJobResponse\"\x00\x12P\n\tDeleteJob\x12\x1f.mgmt.v1alpha1.DeleteJobRequest\x1a .mgmt.v1alpha1.DeleteJobResponse\"\x00\x12k\n\x12IsJobNameAvailable\x12(.mgmt.v1alpha1.IsJobNameAvailableRequest\x1a).mgmt.v1alpha1.IsJobNameAvailableResponse\"\x00\x12h\n\x11UpdateJobSchedule\x12\'.mgmt.v1alpha1.UpdateJobScheduleRequest\x1a(.mgmt.v1alpha1.UpdateJobScheduleResponse\"\x00\x12\x80\x01\n\x19UpdateJobSourceConnection\x12/.mgmt.v1alpha1.UpdateJobSourceConnectionRequest\x1a\x30.mgmt.v1alpha1.UpdateJobSourceConnectionResponse\"\x00\x12\x95\x01\n SetJobSourceSqlConnectionSubsets\x12\x36.mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsRequest\x1a\x37.mgmt.v1alpha1.SetJobSourceSqlConnectionSubsetsResponse\"\x00\x12\x8f\x01\n\x1eUpdateJobDestinationConnection\x12\x34.mgmt.v1alpha1.UpdateJobDestinationConnectionRequest\x1a\x35.mgmt.v1alpha1.UpdateJobDestinationConnectionResponse\"\x00\x12\x8f\x01\n\x1e\x44\x65leteJobDestinationConnection\x12\x34.mgmt.v1alpha1.DeleteJobDestinationConnectionRequest\x1a\x35.mgmt.v1alpha1.DeleteJobDestinationConnectionResponse\"\x00\x12\x92\x01\n\x1f\x43reateJobDestinationConnections\x12\x35.mgmt.v1alpha1.CreateJobDestinationConnectionsRequest\x1a\x36.mgmt.v1alpha1.CreateJobDestinationConnectionsResponse\"\x00\x12M\n\x08PauseJob\x12\x1e.mgmt.v1alpha1.PauseJobRequest\x1a\x1f.mgmt.v1alpha1.PauseJobResponse\"\x00\x12\x65\n\x10GetJobRecentRuns\x12&.mgmt.v1alpha1.GetJobRecentRunsRequest\x1a\'.mgmt.v1alpha1.GetJobRecentRunsResponse\"\x00\x12_\n\x0eGetJobNextRuns\x12$.mgmt.v1alpha1.GetJobNextRunsRequest\x1a%.mgmt.v1alpha1.GetJobNextRunsResponse\"\x00\x12Y\n\x0cGetJobStatus\x12\".mgmt.v1alpha1.GetJobStatusRequest\x1a#.mgmt.v1alpha1.GetJobStatusResponse\"\x00\x12_\n\x0eGetJobStatuses\x12$.mgmt.v1alpha1.GetJobStatusesRequest\x1a%.mgmt.v1alpha1.GetJobStatusesResponse\"\x00\x12S\n\nGetJobRuns\x12 .mgmt.v1alpha1.GetJobRunsRequest\x1a!.mgmt.v1alpha1.GetJobRunsResponse\"\x00\x12\x62\n\x0fGetJobRunEvents\x12%.mgmt.v1alpha1.GetJobRunEventsRequest\x1a&.mgmt.v1alpha1.GetJobRunEventsResponse\"\x00\x12P\n\tGetJobRun\x12\x1f.mgmt.v1alpha1.GetJobRunRequest\x1a .mgmt.v1alpha1.GetJobRunResponse\"\x00\x12Y\n\x0c\x44\x65leteJobRun\x12\".mgmt.v1alpha1.DeleteJobRunRequest\x1a#.mgmt.v1alpha1.DeleteJobRunResponse\"\x00\x12Y\n\x0c\x43reateJobRun\x12\".mgmt.v1alpha1.CreateJobRunRequest\x1a#.mgmt.v1alpha1.CreateJobRunResponse\"\x00\x12Y\n\x0c\x43\x61ncelJobRun\x12\".mgmt.v1alpha1.CancelJobRunRequest\x1a#.mgmt.v1alpha1.CancelJobRunResponse\"\x00\x12\x62\n\x0fTerminateJobRun\x12%.mgmt.v1alpha1.TerminateJobRunRequest\x1a&.mgmt.v1alpha1.TerminateJobRunResponse\"\x00\x12p\n\x13GetJobRunLogsStream\x12).mgmt.v1alpha1.GetJobRunLogsStreamRequest\x1a*.mgmt.v1alpha1.GetJobRunLogsStreamResponse\"\x00\x30\x01\x12t\n\x15SetJobWorkflowOptions\x12+.mgmt.v1alpha1.SetJobWorkflowOptionsRequest\x1a,.mgmt.v1alpha1.SetJobWorkflowOptionsResponse\"\x00\x12h\n\x11SetJobSyncOptions\x12\'.mgmt.v1alpha1.SetJobSyncOptionsRequest\x1a(.mgmt.v1alpha1.SetJobSyncOptionsResponse\"\x00\x12n\n\x13ValidateJobMappings\x12).mgmt.v1alpha1.ValidateJobMappingsRequest\x1a*.mgmt.v1alpha1.ValidateJobMappingsResponse\"\x00\x12\\\n\rGetRunContext\x12#.mgmt.v1alpha1.GetRunContextRequest\x1a$.mgmt.v1alpha1.GetRunContextResponse\"\x00\x12\\\n\rSetRunContext\x12#.mgmt.v1alpha1.SetRunContextRequest\x1a$.mgmt.v1alpha1.SetRunContextResponse\"\x00\x12\x61\n\x0eSetRunContexts\x12$.mgmt.v1alpha1.SetRunContextsRequest\x1a%.mgmt.v1alpha1.SetRunContextsResponse\"\x00(\x01\x12V\n\x0bGetJobHooks\x12!.mgmt.v1alpha1.GetJobHooksRequest\x1a\".mgmt.v1alpha1.GetJobHooksResponse\"\x00\x12S\n\nGetJobHook\x12 .mgmt.v1alpha1.GetJobHookRequest\x1a!.mgmt.v1alpha1.GetJobHookResponse\"\x00\x12\\\n\rCreateJobHook\x12#.mgmt.v1alpha1.CreateJobHookRequest\x1a$.mgmt.v1alpha1.CreateJobHookResponse\"\x00\x12\\\n\rDeleteJobHook\x12#.mgmt.v1alpha1.DeleteJobHookRequest\x1a$.mgmt.v1alpha1.DeleteJobHookResponse\"\x00\x12w\n\x16IsJobHookNameAvailable\x12,.mgmt.v1alpha1.IsJobHookNameAvailableRequest\x1a-.mgmt.v1alpha1.IsJobHookNameAvailableResponse\"\x00\x12\\\n\rUpdateJobHook\x12#.mgmt.v1alpha1.UpdateJobHookRequest\x1a$.mgmt.v1alpha1.UpdateJobHookResponse\"\x00\x12h\n\x11SetJobHookEnabled\x12\'.mgmt.v1alpha1.SetJobHookEnabledRequest\x1a(.mgmt.v1alpha1.SetJobHookEnabledResponse\"\x00\x42\xc4\x01\n\x11\x63om.mgmt.v1alpha1B\x08JobProtoP\x01ZPgithub.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1;mgmtv1alpha1\xa2\x02\x03MXX\xaa\x02\rMgmt.V1alpha1\xca\x02\rMgmt\\V1alpha1\xe2\x02\x19Mgmt\\V1alpha1\\GPBMetadata\xea\x02\x0eMgmt::V1alpha1b\x06proto3')
 
 _globals = globals()
 _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -193,16 +193,28 @@
   _globals['_GETJOBHOOKREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
   _globals['_DELETEJOBHOOKREQUEST'].fields_by_name['id']._loaded_options = None
   _globals['_DELETEJOBHOOKREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
-  _globals['_JOBSTATUS']._serialized_start=20656
-  _globals['_JOBSTATUS']._serialized_end=20767
-  _globals['_ACTIVITYSTATUS']._serialized_start=20770
-  _globals['_ACTIVITYSTATUS']._serialized_end=20937
-  _globals['_JOBRUNSTATUS']._serialized_start=20940
-  _globals['_JOBRUNSTATUS']._serialized_end=21214
-  _globals['_LOGWINDOW']._serialized_start=21216
-  _globals['_LOGWINDOW']._serialized_end=21340
-  _globals['_LOGLEVEL']._serialized_start=21342
-  _globals['_LOGLEVEL']._serialized_end=21461
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['id']._loaded_options = None
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['name']._loaded_options = None
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['name']._serialized_options = b'\272H\026r\0242\022^[a-z0-9-]{3,100}$'
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['description']._loaded_options = None
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['description']._serialized_options = b'\272H\004r\002\020\001'
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['job_id']._loaded_options = None
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['job_id']._serialized_options = b'\272H\005r\003\260\001\001'
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['priority']._loaded_options = None
+  _globals['_UPDATEJOBHOOKREQUEST'].fields_by_name['priority']._serialized_options = b'\272H\006*\004\030d(\000'
+  _globals['_SETJOBHOOKENABLEDREQUEST'].fields_by_name['id']._loaded_options = None
+  _globals['_SETJOBHOOKENABLEDREQUEST'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001'
+  _globals['_JOBSTATUS']._serialized_start=21171
+  _globals['_JOBSTATUS']._serialized_end=21282
+  _globals['_ACTIVITYSTATUS']._serialized_start=21285
+  _globals['_ACTIVITYSTATUS']._serialized_end=21452
+  _globals['_JOBRUNSTATUS']._serialized_start=21455
+  _globals['_JOBRUNSTATUS']._serialized_end=21729
+  _globals['_LOGWINDOW']._serialized_start=21731
+  _globals['_LOGWINDOW']._serialized_end=21855
+  _globals['_LOGLEVEL']._serialized_start=21857
+  _globals['_LOGLEVEL']._serialized_end=21976
   _globals['_GETJOBSREQUEST']._serialized_start=137
   _globals['_GETJOBSREQUEST']._serialized_end=194
   _globals['_GETJOBSRESPONSE']._serialized_start=196
@@ -499,6 +511,14 @@
   _globals['_ISJOBHOOKNAMEAVAILABLEREQUEST']._serialized_end=20585
   _globals['_ISJOBHOOKNAMEAVAILABLERESPONSE']._serialized_start=20587
   _globals['_ISJOBHOOKNAMEAVAILABLERESPONSE']._serialized_end=20654
-  _globals['_JOBSERVICE']._serialized_start=21464
-  _globals['_JOBSERVICE']._serialized_end=25054
+  _globals['_UPDATEJOBHOOKREQUEST']._serialized_start=20657
+  _globals['_UPDATEJOBHOOKREQUEST']._serialized_end=20947
+  _globals['_UPDATEJOBHOOKRESPONSE']._serialized_start=20949
+  _globals['_UPDATEJOBHOOKRESPONSE']._serialized_end=21016
+  _globals['_SETJOBHOOKENABLEDREQUEST']._serialized_start=21018
+  _globals['_SETJOBHOOKENABLEDREQUEST']._serialized_end=21096
+  _globals['_SETJOBHOOKENABLEDRESPONSE']._serialized_start=21098
+  _globals['_SETJOBHOOKENABLEDRESPONSE']._serialized_end=21169
+  _globals['_JOBSERVICE']._serialized_start=21979
+  _globals['_JOBSERVICE']._serialized_end=25769
 # @@protoc_insertion_point(module_scope)
diff --git a/python/src/neosync/mgmt/v1alpha1/job_pb2.pyi b/python/src/neosync/mgmt/v1alpha1/job_pb2.pyi
index bd1053cec5..d311ac3fe8 100644
--- a/python/src/neosync/mgmt/v1alpha1/job_pb2.pyi
+++ b/python/src/neosync/mgmt/v1alpha1/job_pb2.pyi
@@ -1314,3 +1314,41 @@ class IsJobHookNameAvailableResponse(_message.Message):
     IS_AVAILABLE_FIELD_NUMBER: _ClassVar[int]
     is_available: bool
     def __init__(self, is_available: bool = ...) -> None: ...
+
+class UpdateJobHookRequest(_message.Message):
+    __slots__ = ("id", "name", "description", "job_id", "config", "enabled", "priority")
+    ID_FIELD_NUMBER: _ClassVar[int]
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
+    JOB_ID_FIELD_NUMBER: _ClassVar[int]
+    CONFIG_FIELD_NUMBER: _ClassVar[int]
+    ENABLED_FIELD_NUMBER: _ClassVar[int]
+    PRIORITY_FIELD_NUMBER: _ClassVar[int]
+    id: str
+    name: str
+    description: str
+    job_id: str
+    config: JobHookConfig
+    enabled: bool
+    priority: int
+    def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., job_id: _Optional[str] = ..., config: _Optional[_Union[JobHookConfig, _Mapping]] = ..., enabled: bool = ..., priority: _Optional[int] = ...) -> None: ...
+
+class UpdateJobHookResponse(_message.Message):
+    __slots__ = ("hook",)
+    HOOK_FIELD_NUMBER: _ClassVar[int]
+    hook: JobHook
+    def __init__(self, hook: _Optional[_Union[JobHook, _Mapping]] = ...) -> None: ...
+
+class SetJobHookEnabledRequest(_message.Message):
+    __slots__ = ("id", "enabled")
+    ID_FIELD_NUMBER: _ClassVar[int]
+    ENABLED_FIELD_NUMBER: _ClassVar[int]
+    id: str
+    enabled: bool
+    def __init__(self, id: _Optional[str] = ..., enabled: bool = ...) -> None: ...
+
+class SetJobHookEnabledResponse(_message.Message):
+    __slots__ = ("hook",)
+    HOOK_FIELD_NUMBER: _ClassVar[int]
+    hook: JobHook
+    def __init__(self, hook: _Optional[_Union[JobHook, _Mapping]] = ...) -> None: ...
diff --git a/python/src/neosync/mgmt/v1alpha1/job_pb2_grpc.py b/python/src/neosync/mgmt/v1alpha1/job_pb2_grpc.py
index 90bf4e2445..41861f0839 100644
--- a/python/src/neosync/mgmt/v1alpha1/job_pb2_grpc.py
+++ b/python/src/neosync/mgmt/v1alpha1/job_pb2_grpc.py
@@ -189,6 +189,16 @@ def __init__(self, channel):
                 request_serializer=mgmt_dot_v1alpha1_dot_job__pb2.IsJobHookNameAvailableRequest.SerializeToString,
                 response_deserializer=mgmt_dot_v1alpha1_dot_job__pb2.IsJobHookNameAvailableResponse.FromString,
                 _registered_method=True)
+        self.UpdateJobHook = channel.unary_unary(
+                '/mgmt.v1alpha1.JobService/UpdateJobHook',
+                request_serializer=mgmt_dot_v1alpha1_dot_job__pb2.UpdateJobHookRequest.SerializeToString,
+                response_deserializer=mgmt_dot_v1alpha1_dot_job__pb2.UpdateJobHookResponse.FromString,
+                _registered_method=True)
+        self.SetJobHookEnabled = channel.unary_unary(
+                '/mgmt.v1alpha1.JobService/SetJobHookEnabled',
+                request_serializer=mgmt_dot_v1alpha1_dot_job__pb2.SetJobHookEnabledRequest.SerializeToString,
+                response_deserializer=mgmt_dot_v1alpha1_dot_job__pb2.SetJobHookEnabledResponse.FromString,
+                _registered_method=True)
 
 
 class JobServiceServicer(object):
@@ -420,6 +430,20 @@ def IsJobHookNameAvailable(self, request, context):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def UpdateJobHook(self, request, context):
+        """Updates a job hook
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def SetJobHookEnabled(self, request, context):
+        """Enables or disables a job hook
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
 
 def add_JobServiceServicer_to_server(servicer, server):
     rpc_method_handlers = {
@@ -598,6 +622,16 @@ def add_JobServiceServicer_to_server(servicer, server):
                     request_deserializer=mgmt_dot_v1alpha1_dot_job__pb2.IsJobHookNameAvailableRequest.FromString,
                     response_serializer=mgmt_dot_v1alpha1_dot_job__pb2.IsJobHookNameAvailableResponse.SerializeToString,
             ),
+            'UpdateJobHook': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateJobHook,
+                    request_deserializer=mgmt_dot_v1alpha1_dot_job__pb2.UpdateJobHookRequest.FromString,
+                    response_serializer=mgmt_dot_v1alpha1_dot_job__pb2.UpdateJobHookResponse.SerializeToString,
+            ),
+            'SetJobHookEnabled': grpc.unary_unary_rpc_method_handler(
+                    servicer.SetJobHookEnabled,
+                    request_deserializer=mgmt_dot_v1alpha1_dot_job__pb2.SetJobHookEnabledRequest.FromString,
+                    response_serializer=mgmt_dot_v1alpha1_dot_job__pb2.SetJobHookEnabledResponse.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'mgmt.v1alpha1.JobService', rpc_method_handlers)
@@ -1553,3 +1587,57 @@ def IsJobHookNameAvailable(request,
             timeout,
             metadata,
             _registered_method=True)
+
+    @staticmethod
+    def UpdateJobHook(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/mgmt.v1alpha1.JobService/UpdateJobHook',
+            mgmt_dot_v1alpha1_dot_job__pb2.UpdateJobHookRequest.SerializeToString,
+            mgmt_dot_v1alpha1_dot_job__pb2.UpdateJobHookResponse.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
+
+    @staticmethod
+    def SetJobHookEnabled(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/mgmt.v1alpha1.JobService/SetJobHookEnabled',
+            mgmt_dot_v1alpha1_dot_job__pb2.SetJobHookEnabledRequest.SerializeToString,
+            mgmt_dot_v1alpha1_dot_job__pb2.SetJobHookEnabledResponse.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)