2026-01-20 10:03:55 +02:00

46 lines
1.2 KiB
Go

package hostfunctions
import (
"bytes"
"context"
"fmt"
"io"
"github.com/DeBrosOfficial/network/pkg/serverless"
)
// StoragePut uploads data to IPFS and returns the CID.
func (h *HostFunctions) StoragePut(ctx context.Context, data []byte) (string, error) {
if h.storage == nil {
return "", &serverless.HostFunctionError{Function: "storage_put", Cause: serverless.ErrStorageUnavailable}
}
reader := bytes.NewReader(data)
resp, err := h.storage.Add(ctx, reader, "function-data")
if err != nil {
return "", &serverless.HostFunctionError{Function: "storage_put", Cause: err}
}
return resp.Cid, nil
}
// StorageGet retrieves data from IPFS by CID.
func (h *HostFunctions) StorageGet(ctx context.Context, cid string) ([]byte, error) {
if h.storage == nil {
return nil, &serverless.HostFunctionError{Function: "storage_get", Cause: serverless.ErrStorageUnavailable}
}
reader, err := h.storage.Get(ctx, cid, h.ipfsAPIURL)
if err != nil {
return nil, &serverless.HostFunctionError{Function: "storage_get", Cause: err}
}
defer reader.Close()
data, err := io.ReadAll(reader)
if err != nil {
return nil, &serverless.HostFunctionError{Function: "storage_get", Cause: fmt.Errorf("failed to read data: %w", err)}
}
return data, nil
}