MCPcopy Create free account
hub / github.com/compozy/agh / populateNetworkDirectSendTarget

Method populateNetworkDirectSendTarget

internal/api/core/network.go:209–268  ·  view source on GitHub ↗
(
	ctx context.Context,
	service NetworkService,
	scope *workspaceScope,
	req *contract.NetworkSendRequest,
)

Source from the content-addressed store, hash-verified

207}
208
209func (h *BaseHandlers) populateNetworkDirectSendTarget(
210 ctx context.Context,
211 service NetworkService,
212 scope *workspaceScope,
213 req *contract.NetworkSendRequest,
214) error {
215 if req == nil ||
216 strings.TrimSpace(req.Surface) != string(network.SurfaceDirect) ||
217 strings.TrimSpace(req.To) != "" ||
218 strings.TrimSpace(req.DirectID) == "" {
219 return nil
220 }
221 if h == nil || h.NetworkStore == nil {
222 return errors.New("api: network store is required to resolve direct send target")
223 }
224 channel, err := normalizeNetworkChannel(req.Channel)
225 if err != nil {
226 return err
227 }
228 directID := strings.TrimSpace(req.DirectID)
229 if err := network.ValidateConversationID(directID, "direct_id"); err != nil {
230 return err
231 }
232 direct, err := h.NetworkStore.GetDirectRoom(ctx, scope.NetworkChannelRef(channel), directID)
233 if err != nil {
234 return err
235 }
236 peers, err := service.ListPeers(ctx, scope.NetworkWorkspaceID(), channel)
237 if err != nil {
238 return err
239 }
240 sessionID := strings.TrimSpace(req.SessionID)
241 for _, peer := range peers {
242 if peer.SessionID == nil || strings.TrimSpace(*peer.SessionID) != sessionID {
243 continue
244 }
245 peerID := strings.TrimSpace(peer.PeerID)
246 switch peerID {
247 case strings.TrimSpace(direct.PeerA):
248 req.To = strings.TrimSpace(direct.PeerB)
249 return nil
250 case strings.TrimSpace(direct.PeerB):
251 req.To = strings.TrimSpace(direct.PeerA)
252 return nil
253 default:
254 return fmt.Errorf(
255 "%w: session peer %q is not part of direct room %q",
256 network.ErrInvalidField,
257 peerID,
258 directID,
259 )
260 }
261 }
262 return fmt.Errorf(
263 "%w: session=%q channel=%q",
264 network.ErrLocalPeerNotFound,
265 sessionID,
266 channel,

Callers 1

NetworkSendMethod · 0.95

Calls 6

ValidateConversationIDFunction · 0.92
normalizeNetworkChannelFunction · 0.85
NetworkChannelRefMethod · 0.80
NetworkWorkspaceIDMethod · 0.80
GetDirectRoomMethod · 0.65
ListPeersMethod · 0.65

Tested by

no test coverage detected