mcp and ucp
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"os/signal"
|
||||
"time"
|
||||
|
||||
"git.k6n.net/mats/go-cart-actor/internal/ucp"
|
||||
"git.k6n.net/mats/go-cart-actor/pkg/actor"
|
||||
"git.k6n.net/mats/go-cart-actor/pkg/checkout"
|
||||
"git.k6n.net/mats/go-cart-actor/pkg/proxy"
|
||||
@@ -48,6 +49,26 @@ var redisAddress = os.Getenv("REDIS_ADDRESS")
|
||||
var redisPassword = os.Getenv("REDIS_PASSWORD")
|
||||
var cartInternalUrl = os.Getenv("CART_INTERNAL_URL") // e.g., http://cart-service:8081
|
||||
|
||||
// loadUCPCheckoutSigner loads the UCP ECDSA signing key from the path specified in
|
||||
// the UCP_SIGNING_KEY_PATH environment variable. Returns nil if unset or unreadable.
|
||||
func loadUCPCheckoutSigner() *ucp.SigningConfig {
|
||||
path := os.Getenv("UCP_SIGNING_KEY_PATH")
|
||||
if path == "" {
|
||||
return nil
|
||||
}
|
||||
pemData, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
log.Printf("ucp signing: cannot read key %s: %v", path, err)
|
||||
return nil
|
||||
}
|
||||
cfg, err := ucp.NewSigningConfigFromPEM(pemData, "k6n-ecdsa-2026")
|
||||
if err != nil {
|
||||
log.Printf("ucp signing: invalid key at %s: %v", path, err)
|
||||
return nil
|
||||
}
|
||||
return cfg
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
controlPlaneConfig := actor.DefaultServerConfig()
|
||||
@@ -160,6 +181,22 @@ func main() {
|
||||
|
||||
syncedServer.Serve(mux)
|
||||
|
||||
// UCP REST adapter — Universal Commerce Protocol checkout sessions
|
||||
// When an order service URL is configured, the complete endpoint creates
|
||||
// real orders via the order service's from-checkout API.
|
||||
var ucpOrderSvc ucp.OrderApplier
|
||||
if orderServiceURL := os.Getenv("ORDER_SERVICE_URL"); orderServiceURL != "" {
|
||||
ucpOrderSvc = ucp.NewOrderHTTPClient(orderServiceURL)
|
||||
log.Printf("ucp order applier enabled: %s", orderServiceURL)
|
||||
}
|
||||
checkoutUCP := ucp.CheckoutHandler(pool, ucpOrderSvc)
|
||||
if signer := loadUCPCheckoutSigner(); signer != nil {
|
||||
checkoutUCP = ucp.WithSigning(checkoutUCP, signer)
|
||||
log.Print("ucp signing enabled")
|
||||
}
|
||||
mux.Handle("/ucp/v1/checkout-sessions", checkoutUCP)
|
||||
mux.Handle("/ucp/v1/checkout-sessions/", checkoutUCP)
|
||||
|
||||
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
|
||||
grainCount, capacity := pool.LocalUsage()
|
||||
if grainCount >= capacity {
|
||||
|
||||
Reference in New Issue
Block a user