The Autonomys Auto Dag Data SDK (@autonomys/auto-dag-data
) provides utilities for creating and managing IPLD DAGs (InterPlanetary Linked Data Directed Acyclic Graphs) for files and folders. It facilitates chunking large files, handling metadata, and creating folder structures suitable for distributed storage systems like IPFS.
Check this tutorial in how to setup a ES module application.
- File Chunking and DAG Creation: Efficiently split large files into smaller chunks and create IPLD DAGs.
- Folder Structure Creation: Generate IPLD DAGs for directory structures.
- Metadata Handling: Add and manage metadata for files and folders.
- CID Management: Utilities for working with Content Identifiers (CIDs).
- TypeScript Support: Fully typed for enhanced developer experience.
You can install Auto-Dag-Data using npm or yarn:
npm install @autonomys/auto-dag-data
or
yarn add @autonomys/auto-dag-data
To create an IPLD DAG from a file, you can use the processFileToIPLDFormat
function:
import { processFileToIPLDFormat } from '@autonomys/auto-dag-data'
import { MemoryBlockstore } from 'blockstore-core/memory'
import fs from 'fs'
const fileStream = fs.createReadStream('path/to/your/file.txt')
const fileSize = fs.statSync('path/to/your/file.txt').size
const blockstore = new MemoryBlockstore()
const fileCID = processFileToIPLDFormat(blockstore, fileStream, totalSize, 'file.txt')
To generate an IPLD DAG from a folder, you can use the processFolderToIPLDFormat
function:
import { processFolderToIPLDFormat, decodeNode } from '@autonomys/auto-dag-data'
import { MemoryBlockstore } from 'blockstore-core/memory'
import { CID } from 'multiformats'
// Example child CIDs and folder information
const childCIDs: CID[] = [
/* array of CIDs */
]
const folderName = 'my-folder'
const folderSize = 1024 // size in bytes (the sum of their children size)
const blockstore = new MemoryBlockstore()
const folderCID = processFolderToIPLDFormat(blockstore, childCIDs, folderName, folderSize)
const node = decodeNode(blockstore.get(folderCID))
You can use functions from the cid
module to work with CIDs:
import { cidOfNode, cidToString, stringToCid } from '@autonomys/auto-dag-data'
// Create a CID from a node
const cid = cidOfNode(dag.head)
// Convert the CID to a string
const cidString = cidToString(cid)
// Parse a string back into a CID
const parsedCID = stringToCid(cidString)
You can encode and decode IPLD nodes:
import { encodeNode, decodeNode } from '@autonomys/auto-dag-data'
// Encode a node
const encodedNode = encodeNode(dag.head)
// Decode a node
const decodedNode = decodeNode(encodedNode)
To add metadata to a node, you can create a metadata node:
import { createMetadataNode } from '@autonomys/auto-dag-data'
const metadata = {
name: 'My File',
description: 'This is a sample file',
// ... other metadata fields
}
const metadataNode = createMetadataNode(metadata)
import { processFileToIPLDFormat } from '@autonomys/auto-dag-data'
import { MemoryBlockstore } from 'blockstore-core/memory'
import fs from 'fs'
const fileStream = fs.createReadStream('path/to/your/file.txt')
const fileSize = fs.statSync('path/to/your/file.txt').size
const blockstore = new MemoryBlockstore()
const cid = processFileToIPLDFormat(blockstore, fileStream, totalSize, 'file.txt')
const cidString = cidToString(cid)
console.log(`CID of the file DAG: ${cidString}`)
import {
createMetadataIPLDDag,
cidOfNode,
cidToString,
type OffchainMetadata,
} from '@autonomys/auto-dag-data'
import { MemoryBlockstore } from 'blockstore-core/memory'
import fs from 'fs'
const metadata: OffchainMetadata = fs.readFileSync('path/to/your/metadata.json')
const blockstore = new MemoryBlockstore()
const cid = processMetadataToIPLDFormat(blockstore, metadata)
const cidString = cidToString(cid)
console.log(`CID of the metadata DAG: ${cidString}`)
This project is licensed under the MIT License. See the LICENSE file for details.
- Autonomys Academy: Learn more at Autonomys Academy.
-
Auto-Utils Package: Utility functions used alongside
auto-dag-data
can be found in@autonomys/auto-utils
.
If you have any questions or need support, feel free to reach out:
- GitHub Issues: GitHub Issues Page
We appreciate your feedback and contributions!