tl;dr It requires name field for nodes and name, from, to fields for edges. Also it checks for name uniqueness amongst edges and nodes respectively.
Then is checks that every edge points to existing nodes (from and to fields containing valid node names).

###outboundEdges(node)

Returns array of edges that came out of specified node:

// You can pick outbound edges by node name

var outboundEdges = gr.outboundEdges('B');

// Or providing node object

var node = gr.getNode('B');

var outboundEdges2 = gr.outboundEdges(node);

Result example:

[{"name":"BD","from":"B","to":"D"}]

###inboundEdges(node)

Returns array of edges that came in to specified node:

// You can pick outbound edges by node name

var inboundEdges = gr.inboundEdges('D');

// Or providing node object

var node = gr.getNode('D');

var inboundEdges2 = gr.inboundEdges(node);

Result example:

[

{"name":"BD","from":"B","to":"D"},

{"name":"CD","from":"C","to":"D"}

]

###isTerminalNode(node)

If there are no outbound edges from specified node, returns true, false otherwise.