IPFS Operations class for creating payloads and utility functions

This class provides static methods to create transaction payloads for IPFS operations. The payloads can be used with the Demos transaction system.

import { ipfs, websdk } from '@kynesyslabs/demosdk'

// Initialize Demos client
const demos = new websdk.Demos({ rpcUrl: 'https://rpc.demos.network' })

// Create add payload
const addPayload = ipfs.IPFSOperations.createAddPayload(
Buffer.from('My content'),
'myfile.txt'
)

// Build and send transaction (pseudocode - actual tx flow depends on integration)
// The payload goes in transaction.content.data as ['ipfs', payload]

Constructors

Methods

  • Create a payload for IPFS_ADD operation

    Uploads content to IPFS and automatically pins it to the sender's account.

    Parameters

    • content: string | Buffer<ArrayBufferLike> | Uint8Array<ArrayBufferLike>

      Content to upload (Buffer, Uint8Array, or string)

    • options: AddOptionsWithCharges = {}

      Optional filename, metadata, and custom charges configuration

    Returns IPFSAddPayload

    IPFSAddPayload for transaction creation

    // Simple text upload
    const payload = IPFSOperations.createAddPayload(
    'Hello, IPFS!',
    { filename: 'hello.txt' }
    )

    // Binary content
    const imageBuffer = fs.readFileSync('image.png')
    const imagePayload = IPFSOperations.createAddPayload(
    imageBuffer,
    { filename: 'image.png', metadata: { type: 'image/png' } }
    )

    // With custom charges (recommended for cost control)
    const quote = await demos.ipfs.quote(content.length, 'IPFS_ADD')
    const chargedPayload = IPFSOperations.createAddPayload(
    content,
    {
    filename: 'data.json',
    customCharges: { maxCostDem: quote.cost_dem }
    }
    )
  • Create IPFSCustomCharges object from quote response

    Creates a fully formed custom charges object suitable for including directly in transaction content.

    Parameters

    • quote: IpfsQuoteResponse

      Response from ipfsQuote nodeCall

    • operation: "IPFS_ADD" | "IPFS_PIN" | "IPFS_UNPIN"

      IPFS operation type

    • OptionaldurationBlocks: number

      Optional duration for PIN operations

    Returns IPFSCustomCharges

    IPFSCustomCharges object

    const quote = await demos.ipfs.quote(fileSize, 'IPFS_PIN')
    const charges = IPFSOperations.createCustomCharges(quote, 'IPFS_PIN', 1000000)

    // Include in transaction content
    tx.content.custom_charges = { ipfs: charges }
  • Create a payload for IPFS_PIN operation

    Pins an existing CID to the sender's account.

    Parameters

    • cid: string

      Content Identifier to pin

    • options: PinOptionsWithCharges = {}

      Optional duration, metadata, fileSize, and custom charges

    Returns IPFSPinPayload

    IPFSPinPayload for transaction creation

    // Pin indefinitely
    const payload = IPFSOperations.createPinPayload('QmExample...')

    // Pin with duration (blocks)
    const timedPayload = IPFSOperations.createPinPayload('QmExample...', {
    duration: 1000000, // ~30 days at 2.5s blocks
    metadata: { source: 'user-upload' }
    })

    // Pin with custom charges (recommended for cost control)
    const quote = await demos.ipfs.quote(fileSize, 'IPFS_PIN')
    const chargedPayload = IPFSOperations.createPinPayload('QmExample...', {
    fileSize: 1024,
    customCharges: { maxCostDem: quote.cost_dem }
    })
  • Create a payload for IPFS_UNPIN operation

    Removes a pin from the sender's account.

    Parameters

    • cid: string

      Content Identifier to unpin

    Returns IPFSUnpinPayload

    IPFSUnpinPayload for transaction creation

    const payload = IPFSOperations.createUnpinPayload('QmExample...')
    
  • Decode base64 content to Buffer

    Parameters

    • base64Content: string

      Base64 encoded content

    Returns Buffer<ArrayBufferLike>

    Decoded Buffer

  • Decode base64 content to string

    Parameters

    • base64Content: string

      Base64 encoded content

    • encoding: BufferEncoding = "utf-8"

      Text encoding (default: 'utf-8')

    Returns string

    Decoded string

  • Encode content to base64

    Parameters

    • content: string | Buffer<ArrayBufferLike> | Uint8Array<ArrayBufferLike>

      Content to encode

    Returns string

    Base64 encoded string

  • Get content size in bytes

    Parameters

    • content: string | Buffer<ArrayBufferLike> | Uint8Array<ArrayBufferLike>

      Content to measure

    Returns number

    Size in bytes

  • Validate a CID format

    Supports both CIDv0 (Qm...) and CIDv1 (bafy.../bafk...) formats.

    Parameters

    • cid: string

      Content Identifier to validate

    Returns boolean

    true if CID is valid format

    IPFSOperations.isValidCID('QmExample...') // true for valid CIDv0
    IPFSOperations.isValidCID('bafyExample...') // true for valid CIDv1
    IPFSOperations.isValidCID('invalid') // false
  • Validate content size

    Parameters

    • content: string | Buffer<ArrayBufferLike> | Uint8Array<ArrayBufferLike>

      Content to validate

    Returns boolean

    true if content size is within limit

    const largeBuffer = Buffer.alloc(2 * 1024 * 1024 * 1024) // 2GB
    IPFSOperations.isValidContentSize(largeBuffer) // false
  • Convert an ipfsQuote response to custom charges configuration

    Convenience method for converting quote response to the format expected by createAddPayload and createPinPayload options.

    Parameters

    Returns {
        estimatedBreakdown: IPFSCostBreakdown;
        maxCostDem: string;
    }

    Custom charges configuration for payload options

    // Get quote from node
    const quote = await demos.ipfs.quote(content.length, 'IPFS_ADD')

    // Convert to custom charges options
    const customCharges = IPFSOperations.quoteToCustomCharges(quote)

    // Use in payload creation
    const payload = IPFSOperations.createAddPayload(content, {
    filename: 'data.json',
    customCharges
    })