package tools import ( "context" "fmt" "strings" ) type BRouteSendAdapterConfig struct { SidecarPath string TimeoutSeconds int Mode string } type bRouteSendMessageConnector struct { config BRouteSendAdapterConfig } func NewBRouteSendMessageConnector(config BRouteSendAdapterConfig) SendMessageConnector { config.Mode = strings.TrimSpace(strings.ToLower(config.Mode)) if config.Mode == "" { config.Mode = "disabled" } return bRouteSendMessageConnector{config: config} } func (c bRouteSendMessageConnector) ExecuteSendMessage(_ context.Context, request SendMessageConnectorRequest) (SendMessageConnectorResult, error) { switch c.config.Mode { case "disabled": result := SendMessageConnectorResult{ Accepted: false, Status: "blocked", ErrorCode: "broute_mode_blocked", ErrorMessage: "B-route send adapter is disabled", ConnectorMode: "broute-disabled", } return result, fmt.Errorf(result.ErrorMessage) case "dry_run_contract": if err := validateBRouteSendMessageRequest(request); err != nil { return SendMessageConnectorResult{ Accepted: false, Status: "failed", ErrorCode: "broute_invalid_request", ErrorMessage: err.Error(), ConnectorMode: "broute-dry-run-contract", }, nil } return SendMessageConnectorResult{ Accepted: false, Status: "blocked", ErrorCode: "broute_dry_run_only", ErrorMessage: "B-route adapter dry_run_contract mode validates request shape only and does not start a sidecar", ConnectorMode: "broute-dry-run-contract", }, nil default: result := SendMessageConnectorResult{ Accepted: false, Status: "blocked", ErrorCode: "broute_mode_blocked", ErrorMessage: "B-route send adapter mode is not enabled: " + c.config.Mode, ConnectorMode: "broute-disabled", } return result, fmt.Errorf(result.ErrorMessage) } } func validateBRouteSendMessageRequest(request SendMessageConnectorRequest) error { if strings.TrimSpace(request.TargetRef) == "" { return fmt.Errorf("target_ref is required") } if strings.TrimSpace(request.ContentSHA256) == "" { return fmt.Errorf("content_sha256 is required") } if strings.TrimSpace(request.IdempotencyKeySHA256) == "" { return fmt.Errorf("idempotency_key_sha256 is required") } if request.ExecutionMode != sendMessageProductionMode { return fmt.Errorf("execution_mode must be production") } return nil }