Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.prudra.dev/llms.txt

Use this file to discover all available pages before exploring further.

Upload files

Upload a file buffer to a vault using vault.addFile(). Prudra stores the file in GCS and returns a CDN URL at assets.prudra.dev.

Upload via vaultMiddleware

import multer from 'multer';
import { walletMiddleware, payMiddleware, vaultMiddleware } from '@prudra/express';

const upload = multer({ storage: multer.memoryStorage() });

app.post(
  '/process-file',
  walletMiddleware({ walletId: 'mwt_clx1abc123' }),
  payMiddleware({ price: '0.10', description: 'File processing' }),
  vaultMiddleware(),
  upload.single('file'),
  async (req, res) => {
    const vault = req.vault!;

    // Upload the submitted file
    const file = await vault.addFile(
      req.file!.buffer,
      req.file!.originalname,
      req.file!.mimetype,
    );

    // Upload a generated file (e.g., a PDF result)
    const pdfBuffer = await generatePDF(req.file!.buffer);
    const result = await vault.addFile(pdfBuffer, 'report.pdf', 'application/pdf');

    await vault.seal('Processing complete');

    res.json({
      vaultId:     vault.id,
      originalUrl: file.url,
      reportUrl:   result.url,
    });
  }
);

Upload via API

import { initialise } from '@prudra/core';
import { uploadFileToVault } from '@prudra/vault';
import { readFileSync } from 'fs';

initialise({ apiKey: process.env.PRUDRA_API_KEY! });

const buffer = readFileSync('./data.csv');

const file = await uploadFileToVault({
  vaultId:  'vlt_clx1abc123',
  buffer,
  fileName: 'data.csv',
  mimeType: 'text/csv',
});

console.log(file.id);   // 'fil_clx1abc123'
console.log(file.url);  // 'https://assets.prudra.dev/...'
console.log(file.name); // 'data.csv'
console.log(file.size); // bytes

Parameters

ParameterTypeRequiredDescription
bufferBufferYesFile content as a Node.js Buffer
fileNamestringYesFile name including extension
mimeTypestringYesMIME type (e.g., application/pdf, image/png)

Response fields

FieldTypeDescription
idstringFile ID (fil_...)
vaultIdstringVault this file belongs to
namestringFile name
mimeTypestringMIME type
sizenumberFile size in bytes
urlstringCDN URL for download
createdAtstringISO timestamp

Error handling

ErrorStatusCauseResolution
file-too-large413File exceeds plan max sizeCompress file or upgrade plan
files-per-vault-exceeded422Vault file count limit reachedDelete files or use a new vault
vault-sealed409Vault is already sealedUpload before sealing
storage-quota-exceeded429Total storage limit reachedDelete old vaults or upgrade