/
dag_commands.go
138 lines (136 loc) · 3.53 KB
/
dag_commands.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package cmd
import (
pb "github.com/RTradeLtd/TxPB/v3/go"
"github.com/RTradeLtd/go-temporalx-sdk/client"
"github.com/ipfs/go-cid"
"github.com/urfave/cli/v2"
)
func loadDagCommand() *cli.Command {
return &cli.Command{
Name: "dag",
Usage: "manual dag manipulation",
Description: "a low-level API allowing manipulation of IPLD objects",
Subcommands: cli.Commands{
&cli.Command{
Name: "put",
Usage: "put data into an IPLD object",
Action: func(c *cli.Context) error {
cl, err := client.NewClient(optsFromFlags(c))
if err != nil {
return err
}
resp, err := cl.NodeAPIClient.Dag(c.Context, &pb.DagRequest{
RequestType: pb.DAGREQTYPE_DAG_PUT,
Data: []byte(c.String("data")),
ObjectEncoding: c.String("object.encoding"),
SerializationFormat: c.String("serialization.format"),
Hash: c.String("multihash"),
})
if err != nil {
return err
}
print(
"%s: %s\n",
getArgs("hash(es)", resp.GetHashes()),
)
return nil
},
Flags: []cli.Flag{
DataFlag("data to store inside the dag"),
SerializationFormatFlag(),
ObjectEncodingFlag(),
MultiHashFlag(),
},
},
&cli.Command{
Name: "get",
Usage: "get the contents of the IPLD object",
Description: "this is essentially like the unix `cat` command, except for IPLD",
Action: func(c *cli.Context) error {
cl, err := client.NewClient(optsFromFlags(c))
if err != nil {
return err
}
resp, err := cl.NodeAPIClient.Dag(c.Context, &pb.DagRequest{
RequestType: pb.DAGREQTYPE_DAG_GET,
Hash: c.String("cid"),
})
if err != nil {
return err
}
print(
"%s: %s\n",
getArgs(
"data", string(resp.GetRawData()),
),
)
return nil
},
Flags: []cli.Flag{
CidFlag("the ipld node to retrieve"),
},
},
&cli.Command{
Name: "add-links",
Usage: "add links an IPLD object",
Action: func(c *cli.Context) error {
cl, err := client.NewClient(optsFromFlags(c))
if err != nil {
return err
}
resp, err := cl.NodeAPIClient.Dag(c.Context, &pb.DagRequest{
RequestType: pb.DAGREQTYPE_DAG_ADD_LINKS,
Hash: c.String("cid"),
Links: map[string]string{
c.String("link.name"): c.String("link.cid"),
},
})
if err != nil {
return err
}
print(
"%s: %s\n",
getArgs("hash(es)", resp.GetHashes()),
)
return nil
},
Flags: []cli.Flag{
CidFlag("the ipld node to add links to"),
LinkCidFlag("the cid to link to"),
LinkNameFlag("the name to give the link"),
},
},
&cli.Command{
Name: "get-links",
Usage: "get links in an IPLD object",
Action: func(c *cli.Context) error {
cl, err := client.NewClient(optsFromFlags(c))
if err != nil {
return err
}
resp, err := cl.NodeAPIClient.Dag(c.Context, &pb.DagRequest{
RequestType: pb.DAGREQTYPE_DAG_GET_LINKS,
Hash: c.String("cid"),
})
if err != nil {
return err
}
for _, link := range resp.GetLinks() {
gocid, err := cid.Parse(link.GetHash())
if err != nil {
return err
}
print(
"%s: %s\n\t- %s: %s\n\t- %s: %v\n",
getArgs(
"name", link.GetName(), "cid", gocid.String(), "size", link.GetSize_(),
),
)
}
return nil
},
Flags: []cli.Flag{CidFlag("ipld cid to get links from")},
},
},
}
}