cyb/src/services/ipfs/config.ts

import safeLocalStorage from 'src/utils/safeLocalStorage';
import { IPFSNodes, IpfsOptsType } from './types';

export const CYBER_NODE_SWARM_PEER_ID = 'QmUgmRxoLtGERot7Y6G7UyF6fwvnusQZfGR15PuE6pY3aB';

export const CYBERNODE_SWARM_ADDR_WSS = `/dns4/swarm.io.cybernode.ai/tcp/443/wss/p2p/${CYBER_NODE_SWARM_PEER_ID}`;
export const CYBERNODE_SWARM_ADDR_TCP = `/ip4/88.99.105.146/tcp/4001/p2p/${CYBER_NODE_SWARM_PEER_ID}`;

export const IPFS_CLUSTER_URL = 'https://io.cybernode.ai';

export const CYBER_GATEWAY_URL = 'https://gateway.ipfs.cybernode.ai';

export const PINATA_GATEWAY_URL = 'https://bostrom.mypinata.cloud';
export const PINATA_GATEWAY_TOKEN = '3f5c80cbc4a7ab470f67';

export const getPinataUrl = (cid: string) =>
  `${PINATA_GATEWAY_URL}/ipfs/${cid}?pinataGatewayToken=${PINATA_GATEWAY_TOKEN}`;

export const FILE_SIZE_DOWNLOAD = 20 * 10 ** 6;

// Desktop Tauri runs a local Kubo daemon; mobile Tauri and browser use cybernode
const isTauriMobile =
  !!process.env.IS_TAURI &&
  typeof navigator !== 'undefined' &&
  /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);

const isTauriDesktop = !!process.env.IS_TAURI && !isTauriMobile;

const defaultIpfsOpts: IpfsOptsType = {
  ipfsNodeType: IPFSNodes.EXTERNAL,
  urlOpts: isTauriDesktop
    ? 'http://127.0.0.1:5001'
    : 'https://io.cybernode.ai',
  userGateway: isTauriDesktop
    ? 'http://127.0.0.1:8080'
    : 'https://gateway.ipfs.cybernode.ai',
};

function isValidUrl(url: string): boolean {
  try {
    new URL(url);
    return true;
  } catch {
    return false;
  }
}

export const getIpfsOpts = (): IpfsOptsType => {
  // In desktop Tauri, always use local Kubo โ€” ignore localStorage overrides
  if (isTauriDesktop) {
    return defaultIpfsOpts;
  }

  const stored = safeLocalStorage.getJSON<Partial<IpfsOptsType>>('ipfsState', {});
  const ipfsOpts = { ...defaultIpfsOpts, ...stored };

  // Always use EXTERNAL โ€” Tauri uses local Kubo, browser uses cybernode
  ipfsOpts.ipfsNodeType = IPFSNodes.EXTERNAL;

  // Discard stale local/multiaddr URLs from previous Tauri sessions
  if (ipfsOpts.urlOpts && !isValidUrl(ipfsOpts.urlOpts)) {
    ipfsOpts.urlOpts = defaultIpfsOpts.urlOpts;
    ipfsOpts.userGateway = defaultIpfsOpts.userGateway;
  }

  safeLocalStorage.setJSON('ipfsState', ipfsOpts);

  return ipfsOpts;
};

Synonyms

pussy-ts/src/utils/config.ts
cyb/src/constants/config.ts
cyb/src/utils/config.ts
pussy-ts/src/constants/config.ts
pussy-ts/src/services/ipfs/config.ts

Neighbours