Lines 3-43javascript
3 * Unofficial client buat chat.sakana.ai — bikin sesi anonim (Firebase signup + login),
4 * lalu streaming chat ke salah satu model yang tersedia.
7const axios = require('axios');
8const crypto = require('crypto');
9const FormData = require('form-data');
12 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
13 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
14 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
15 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0',
16 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7; rv:125.0) Gecko/20100101 Firefox/125.0',
17 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0',
18 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0',
19 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15'
22const BASE = 'https://chat.sakana.ai';
23const FIREBASE_KEY = 'AIzaSyBIJuyUokxGiETY0Nu3hQNC1dMadHyf_I4';
24const MODELS = ['namazu', 'sakana', 'namazu-v2', 'namazu-pro', 'llama'];
27 return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
30async function request(method, url, options = {}, retries = 3) {
32 for (let i = 0; i < retries; i++) {
35 'User-Agent': randomUA(),
36 'Accept': 'application/json, text/plain, */*',
37 'Accept-Language': 'id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7',
38 'Accept-Encoding': 'gzip, deflate, br',
39 'Connection': 'keep-alive',
40 ...(options.headers || {})