Ctrl K
ComunidadGuías…

internal/app/protocol_identity.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package app

import (
	"context"
	"fmt"
	"strings"
	"time"

	"github.com/yeomyeonggeori/blueclaw/internal/capability"
	"github.com/yeomyeonggeori/blueclaw/internal/config"
	"github.com/yeomyeonggeori/blueclaw/internal/protocolidentity"
)

type protocolIdentityComponents struct {
	expected protocolidentity.Identity
	status   *protocolidentity.Result
	checker  protocolidentity.Checker
}

func newProtocolIdentity(runtimeConfiguration config.RuntimeConfiguration, capabilityClient capability.Client) protocolIdentityComponents {
	expected := expectedProtocolIdentity(runtimeConfiguration)
	return protocolIdentityComponents{
		expected: expected,
		status:   &protocolidentity.Result{Expected: expected},
		checker: protocolidentity.NewChecker(protocolidentity.Configuration{
			CapabilityEndpoint:   runtimeConfiguration.Capabilities.Endpoint,
			Timeout:              time.Duration(runtimeConfiguration.Capabilities.TimeoutSecond) * time.Second,
			CapabilityHTTPClient: capabilityClient.HTTPClient,
		}),
	}
}

func expectedProtocolIdentity(runtimeConfiguration config.RuntimeConfiguration) protocolidentity.Identity {
	if strings.TrimSpace(runtimeConfiguration.Capabilities.ProtocolVersion) == "" {
		return protocolidentity.Identity{}
	}
	return protocolidentity.Identity{
		ProtocolVersion:       runtimeConfiguration.Capabilities.ProtocolVersion,
		AggregateProtocolHash: runtimeConfiguration.Capabilities.AggregateProtocolHash,
	}
}

func (application *Application) checkProtocolIdentity() error {
	application.protocolIdentityCheckOnce.Do(func() {
		result := application.protocolIdentityChecker.Check(context.Background(), application.protocolIdentityExpected)
		*application.protocolIdentityStatus = result
		if !result.Passed {
			application.protocolIdentityCheckError = fmt.Errorf("protocol identity check failed: %s", strings.Join(result.FailureReasons, "; "))
		}
	})
	return application.protocolIdentityCheckError
}