UNPKG

filecoin-pin

Version:

IPFS Pinning Service API implementation that pins to Filecoin's PDP service

52 lines (43 loc) 1.5 kB
import { homedir, platform } from 'node:os' import { join } from 'node:path' export interface Config { port: number host: string privateKey: string | undefined rpcUrl: string databasePath: string carStoragePath: string logLevel: string pandoraAddress: string | undefined } function getDataDirectory (): string { const home = homedir() const plat = platform() // Follow XDG Base Directory Specification on Linux if (plat === 'linux') { return process.env.XDG_DATA_HOME ?? join(home, '.local', 'share', 'filecoin-pin') } // macOS uses ~/Library/Application Support (same as config) if (plat === 'darwin') { return join(home, 'Library', 'Application Support', 'filecoin-pin') } // Windows uses %APPDATA% if (plat === 'win32') { return join(process.env.APPDATA ?? join(home, 'AppData', 'Roaming'), 'filecoin-pin') } // Fallback for other platforms return join(home, '.filecoin-pin') } export function createConfig (): Config { const dataDir = getDataDirectory() return { port: parseInt(process.env.PORT ?? '3456'), host: process.env.HOST ?? 'localhost', privateKey: process.env.PRIVATE_KEY, rpcUrl: process.env.RPC_URL ?? 'https://api.calibration.node.glif.io/rpc/v1', databasePath: process.env.DATABASE_PATH ?? join(dataDir, 'pins.db'), carStoragePath: process.env.CAR_STORAGE_PATH ?? join(dataDir, 'cars'), logLevel: process.env.LOG_LEVEL ?? 'info', pandoraAddress: process.env.PANDORA_ADDRESS } }