nolint:dupl // symmetric with resolveSessionSecret; sharing hides Socket vs Secret semantics
(ctx context.Context, socket *Socket)
| 92 | |
| 93 | //nolint:dupl // symmetric with resolveSessionSecret; sharing hides Socket vs Secret semantics |
| 94 | func ResolveSessionSocket(ctx context.Context, socket *Socket) (*Socket, error) { |
| 95 | if socket == nil { |
| 96 | return nil, nil |
| 97 | } |
| 98 | if socket.Handle == "" { |
| 99 | return socket, nil |
| 100 | } |
| 101 | |
| 102 | clientMetadata, err := engine.ClientMetadataFromContext(ctx) |
| 103 | if err != nil { |
| 104 | return nil, fmt.Errorf("resolve session socket %q: current client metadata: %w", socket.Handle, err) |
| 105 | } |
| 106 | if clientMetadata.SessionID == "" { |
| 107 | return nil, fmt.Errorf("resolve session socket %q: empty session ID", socket.Handle) |
| 108 | } |
| 109 | cache, err := dagql.EngineCache(ctx) |
| 110 | if err != nil { |
| 111 | return nil, fmt.Errorf("resolve session socket %q: current dagql cache: %w", socket.Handle, err) |
| 112 | } |
| 113 | resolvedAny, err := cache.ResolveSessionResource(ctx, clientMetadata.SessionID, clientMetadata.ClientID, socket.Handle) |
| 114 | if err != nil { |
| 115 | return nil, err |
| 116 | } |
| 117 | resolved, ok := resolvedAny.(*Socket) |
| 118 | if !ok { |
| 119 | return nil, fmt.Errorf("resolve session socket %q: bound value is %T", socket.Handle, resolvedAny) |
| 120 | } |
| 121 | if resolved.Handle != "" { |
| 122 | return nil, fmt.Errorf("resolve session socket %q: bound socket is still a handle", socket.Handle) |
| 123 | } |
| 124 | return resolved, nil |
| 125 | } |
| 126 | |
| 127 | func (socket *Socket) URL(ctx context.Context) (string, error) { |
| 128 | resolved, err := ResolveSessionSocket(ctx, socket) |
no test coverage detected