package configuration import ( "fmt" "git.cin.su/m/Assistant/contracts/secrets" "git.cin.su/m/Assistant/platform/ids" ) type SettingDefinitionID ids.StableID type SettingAssignmentID ids.StableID type ConfigurationRevision ids.Revision type ValueType string type ResolutionMode string type SettingLifecycle string type SettingSource string const ( ValueString ValueType = "STRING" ValueInteger ValueType = "INTEGER" ValueBoolean ValueType = "BOOLEAN" ValueSecretRef ValueType = "SECRET_REF" ResolutionMostSpecific ResolutionMode = "MOST_SPECIFIC_WINS" ResolutionFirstHuman ResolutionMode = "FIRST_EXPLICIT_HUMAN_WINS" ResolutionMergeList ResolutionMode = "MERGE_LIST" SettingActive SettingLifecycle = "ACTIVE" SettingDeprecated SettingLifecycle = "DEPRECATED" SettingRetired SettingLifecycle = "RETIRED" SourceHumanDirective SettingSource = "HUMAN_DIRECTIVE" SourceMigrated SettingSource = "MIGRATED_CONFIG" SourceSkillDefault SettingSource = "SKILL_DEFAULT" SourceSystemDefault SettingSource = "SYSTEM_DEFAULT" SourceGovernedChange SettingSource = "GOVERNED_CHANGE" ) type SettingDefinition struct { ID SettingDefinitionID OwnerNamespace string StableKey string Revision ConfigurationRevision ValueType ValueType DefaultValue string Sensitivity string Lifecycle SettingLifecycle RecordedAtUnixMillis int64 } type ScopeSelector struct { PrincipalRef string RequiredContextBindings []string ActivityRef string SkillRef string TaskRef string SessionRef string TemporaryOverride bool } type SettingAssignment struct { ID SettingAssignmentID PrincipalID string DefinitionRef string DefinitionRevision ConfigurationRevision Revision ConfigurationRevision Selector ScopeSelector TypedValue string SecretRef *secrets.CredentialRef EffectiveFromUnixMillis int64 EffectiveUntilUnixMillis *int64 Source SettingSource SourceRef string Lifecycle SettingLifecycle RecordedAtUnixMillis int64 } type EffectiveSetting struct { DefinitionRef string Value string WinningAssignmentRef string ResolutionTrace []string } type BootstrapConfig struct { NodeIdentity string ControlDatabaseLocator string RootSecretResolverLocator string RecoveryLocator string } // ConversationalConfigurationCommand is an intent, not an assignment. Only // Configuration may turn a SET command into durable state. func (d SettingDefinition) Validate() error { if d.ID == "" || d.OwnerNamespace == "" || d.StableKey == "" || !ids.Revision(d.Revision).Valid() || d.ValueType == "" || d.Lifecycle == "" || d.RecordedAtUnixMillis < 1 { return fmt.Errorf("invalid setting definition") } return nil } func (a SettingAssignment) Validate() error { if a.ID == "" || a.PrincipalID == "" || a.DefinitionRef == "" || !ids.Revision(a.Revision).Valid() || a.Source == "" || a.Lifecycle == "" || a.RecordedAtUnixMillis < 1 { return fmt.Errorf("invalid setting assignment") } if a.SecretRef != nil && a.TypedValue != "" { return fmt.Errorf("secret assignment must not contain typed value") } return nil }