kubo/client/rpc
Marcin Rataj 8de1ace788 refactor: fix error handling and race conditions in dag import
address code review feedback for PR #11069:

- fix: propagate decode errors in client/rpc dag import (was silently dropping errors)
- fix: acquire pinlock before spawning goroutine to prevent race with GC
- fix: update fast-provide test to always expect failure in isolated environment
- test: add proper json compatibility test for provide stats (replaces compile-time check)
- docs: add educational comments explaining batch config defaults
- style: standardize error messages to use consistent "failed to X: %w" pattern

the pinlock fix is critical - moving acquisition before goroutine spawn prevents
blocks from being garbage collected before the lock is held. the error handling
fix ensures RPC clients receive decode errors instead of empty results.
2025-11-23 17:04:13 +01:00
..
auth feat(rpc): Opt-in HTTP RPC API Authorization (#10218) 2023-11-17 01:29:29 +01:00
api_test.go refactor(config): migration 17-to-18 to unify Provider/Reprovider into Provide.DHT (#10951) 2025-09-18 22:17:43 +02:00
api.go chore: stop using go-homedir (#10568) 2024-11-05 07:45:11 -08:00
apifile.go feat: Support storing UnixFS 1.5 Mode and ModTime (#10478) 2024-08-21 02:02:46 +02:00
block.go chore: clean migration 2023-11-29 12:29:59 +01:00
dag_test.go refactor: fix error handling and race conditions in dag import 2025-11-23 17:04:13 +01:00
dag.go refactor: fix error handling and race conditions in dag import 2025-11-23 17:04:13 +01:00
errors_test.go client/rpc: rename package name to match rpc and edit migration story 2023-05-31 15:40:00 +02:00
errors.go chore: fix some typos (#10396) 2024-06-03 17:17:58 +02:00
key.go feat: ipfs key sign|verify (#10235) 2023-12-04 09:51:26 +01:00
name.go chore: clean migration 2023-11-29 12:29:59 +01:00
object.go core/commands!: remove deprecated object APIs (#10375) 2024-03-22 09:32:30 +01:00
path.go chore: update boxo for structification of ImmutablePath 2023-10-09 09:44:39 +02:00
pin.go fix: ipfs pin ls <cid> --names (#10970) 2025-09-19 03:17:45 +02:00
pubsub.go chore: clean migration 2023-11-29 12:29:59 +01:00
README.md docs: replace outdated package paths described in rpc README (#10505) 2024-09-05 23:20:08 +02:00
request.go client/rpc: rename package name to match rpc and edit migration story 2023-05-31 15:40:00 +02:00
requestbuilder.go fix: use %-encoded headers in most compatible way 2023-08-22 15:43:01 +02:00
response.go style: gofumpt and godot [skip changelog] (#10081) 2023-08-17 14:02:08 +02:00
routing_test.go refactor: fix error handling and race conditions in dag import 2025-11-23 17:04:13 +01:00
routing.go feat(client/rpc): add provide stat and dag import support 2025-11-20 05:55:59 +01:00
swarm.go chore: clean migration 2023-11-29 12:29:59 +01:00
unixfs.go feat(rpc): add fast-provide-root and fast-provide-wait to Add 2025-11-19 17:55:23 +01:00

coreiface.CoreAPI over http rpc

IPFS CoreAPI implementation using HTTP API

This package implements coreiface.CoreAPI over the HTTP API.

Documentation

https://pkg.go.dev/github.com/ipfs/kubo/client/rpc

Example

Pin file on your local IPFS node based on its CID:

package main

import (
	"context"
	"fmt"

	"github.com/ipfs/boxo/path"
	"github.com/ipfs/go-cid"
	"github.com/ipfs/kubo/client/rpc"
)

func main() {
	// "Connect" to local node
	node, err := rpc.NewLocalApi()
	if err != nil {
		fmt.Println(err)
		return
	}
	// Pin a given file by its CID
	ctx := context.Background()
	c, err := cid.Decode("bafkreidtuosuw37f5xmn65b3ksdiikajy7pwjjslzj2lxxz2vc4wdy3zku")
	if err != nil {
		fmt.Println(err)
		return
	}
	p := path.FromCid(c)
	err = node.Pin().Add(ctx, p)
	if err != nil {
		fmt.Println(err)
		return
	}
}