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;
};