{"slug": "chatday", "title": "chatday", "summary": "A developer known as rynaqrtz created an open-source Node.js library called chatday that provides programmatic access to the Chatday.ai API. The library handles anonymous authentication, model listing, and streaming chat completions with randomized user agents and languages. It supports multiple models including 'openai/gpt-5.5' and returns responses in a structured format.", "body_md": "| import crypto from 'node:crypto'; | |\n| const BASE = 'https://www.chatday.ai'; | |\n| const UAS = [ | |\n| 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36', | |\n| 'Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Mobile Safari/537.36', | |\n| 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Mobile/15E148 Safari/604.1', | |\n| 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36', | |\n| 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15', | |\n| 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36' | |\n| ]; | |\n| const LANGS = ['id','en','es','fr','de','ja','ko','pt','vi','th','it','nl']; | |\n| const pick = a => a[Math.floor(Math.random() * a.length)]; | |\n| const sleep = ms => new Promise(r => setTimeout(r, ms)); | |\n| async function signIn() { | |\n| await sleep(300 + Math.random() * 800); | |\n| const r = await fetch(`${BASE}/api/auth/sign-in/anonymous`, { | |\n| method: 'POST', | |\n| headers: { | |\n| 'User-Agent': pick(UAS), | |\n| Origin: BASE, | |\n| Referer: `${BASE}/chat`, | |\n| 'Content-Type': 'application/json', | |\n| 'Accept-Language': pick(LANGS) | |\n| }, | |\n| body: '{}' | |\n| }); | |\n| if (!r.ok) throw new Error('Auth gagal: ' + r.status); | |\n| const setCookie = r.headers.getSetCookie?.() ?? [r.headers.get('set-cookie')].filter(Boolean); | |\n| return { cookie: setCookie.map(c => c.split(';')[0]).join('; '), ...(await r.json()) }; | |\n| } | |\n| async function listModels() { | |\n| const { cookie } = await signIn(); | |\n| const r = await fetch(`${BASE}/api/v2/models`, { | |\n| headers: { | |\n| 'User-Agent': pick(UAS), | |\n| Origin: BASE, | |\n| Referer: `${BASE}/chat`, | |\n| Cookie: cookie, | |\n| 'Accept': 'application/json', | |\n| 'Accept-Language': pick(LANGS) | |\n| } | |\n| }); | |\n| if (!r.ok) return { creator: 'rynaqrtz', error: `Gagal mengambil models: ${r.status}` }; | |\n| const data = await r.json(); | |\n| const models = (data.models || data || []).map(m => ({ | |\n| id: m.id || m, | |\n| name: m.name || m.id || m, | |\n| provider: m.provider || null, | |\n| tier: m.tier || null, | |\n| capabilities: m.capabilities || null | |\n| })); | |\n| return { creator: 'rynaqrtz', status: 200, total: models.length, models }; | |\n| } | |\n| async function chat(prompt, model = 'openai/gpt-5.5') { | |\n| const { cookie } = await signIn(); | |\n| const vid = crypto.randomUUID().replace(/-/g, ''); | |\n| const cid = Array(16).fill(0).map(() => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[Math.floor(Math.random()*36)]).join(''); | |\n| const r = await fetch(`${BASE}/api/v2/chat/anonymous`, { | |\n| method: 'POST', | |\n| headers: { | |\n| 'User-Agent': pick(UAS), | |\n| Origin: BASE, | |\n| Referer: `${BASE}/chat`, | |\n| 'Content-Type': 'application/json', | |\n| Cookie: cookie, | |\n| Accept: 'text/event-stream', | |\n| 'Accept-Language': pick(LANGS) | |\n| }, | |\n| body: JSON.stringify({ content: prompt, model, visitorId: vid, conversationId: cid }) | |\n| }); | |\n| if (!r.ok) return { creator: 'rynaqrtz', status: r.status, error: (await r.text()).substring(0, 300) }; | |\n| const reader = r.body.getReader(); | |\n| const decoder = new TextDecoder(); | |\n| let buf = '', full = ''; | |\n| while (true) { | |\n| const { value, done } = await reader.read(); | |\n| if (done) break; | |\n| buf += decoder.decode(value, { stream: true }); | |\n| const lines = buf.split('\\n'); | |\n| buf = lines.pop(); | |\n| for (const line of lines) { | |\n| if (!line.startsWith('data:')) continue; | |\n| const payload = line.slice(5).trim(); | |\n| if (!payload) continue; | |\n| try { | |\n| const evt = JSON.parse(payload); | |\n| if (evt.type === 'text-delta' && typeof evt.delta === 'string') full += evt.delta; | |\n| } catch {} | |\n| } | |\n| } | |\n| return { creator: 'rynaqrtz', status: 200, model, response: full.trim() }; | |\n| } | |\n| async function testAllModels(prompt) { | |\n| const { models } = await listModels(); | |\n| if (!models) return; | |\n| const results = []; | |\n| for (const m of models) { | |\n| const r = await chat(prompt, m.id); | |\n| results.push(r); | |\n| } | |\n| return results; | |\n| } | |\n| if (process.argv[1]?.includes('chatday.js')) { | |\n| const cmd = process.argv[2]; | |\n| const arg1 = process.argv[3]; | |\n| const arg2 = process.argv[4]; | |\n| if (cmd === 'models') { | |\n| const result = await listModels(); | |\n| console.log(JSON.stringify(result, null, 2)); | |\n| } else if (cmd === 'testall') { | |\n| const prompt = arg1 || 'Sebutkan modelmu dalam 3 kata'; | |\n| const results = await testAllModels(prompt); | |\n| console.log(JSON.stringify({ creator: 'rynaqrtz', total: results.length, results }, null, 2)); | |\n| } else if (cmd === 'chat' || !cmd) { | |\n| const prompt = arg1 || 'Halo, perkenalan singkat'; | |\n| const model = arg2 || 'openai/gpt-5.5'; | |\n| const result = await chat(prompt, model); | |\n| console.log(JSON.stringify(result, null, 2)); | |\n| } else { | |\n| const result = await chat(cmd, arg1 || 'openai/gpt-5.5'); | |\n| console.log(JSON.stringify(result, null, 2)); | |\n| } | |\n| } |", "url": "https://wpnews.pro/news/chatday", "canonical_source": "https://gist.github.com/johsua092-ui/e951a957cce4aeff7a0775cdf43c20ee", "published_at": "2026-06-30 18:13:13+00:00", "updated_at": "2026-06-30 18:18:31.589627+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "large-language-models"], "entities": ["rynaqrtz", "Chatday.ai", "Node.js", "OpenAI", "GPT-5.5"], "alternates": {"html": "https://wpnews.pro/news/chatday", "markdown": "https://wpnews.pro/news/chatday.md", "text": "https://wpnews.pro/news/chatday.txt", "jsonld": "https://wpnews.pro/news/chatday.jsonld"}}