1.1.0 • Published yesterday
cykani-stealth
Licence
MIT
Version
1.1.0
Deps
1
Size
110 kB
Vulns
0
Weekly
0
cykani-stealth
Stealth Chromium wrapper with fingerprint evasion and human-like behavior.
Installation
npm install cykani-stealthRequires CYKANI_BINARY_PATH environment variable pointing to a cykani-browser (patched Chromium) binary.
Quick Start
import { launch, launchContext, launchPersistentContext } from 'cykani-stealth';
// Simple usage
const session = await launch({ fingerprint: 7 });
await session.goto('https://example.com');
await session.click('button#submit');
await session.close();
// Multi-session orchestration
const sessions = await Promise.all([
launch({ fingerprint: 7 }),
launch({ fingerprint: 42 }),
]);
// Persistent context (avoids incognito detection)
const session = await launchPersistentContext({
fingerprint: 42,
userDataDir: './chrome-profile',
});API
| Function | Description |
|---|---|
launch(entity) |
Browser + page with fluent session API |
launchContext(entity) |
BrowserContext that auto-closes browser on close |
launchPersistentContext(entity) |
Persistent context with profile directory |
buildLaunchOptions(entity) |
Get Playwright options for custom integration |
Presets
import { highTrust, aggressive } from 'cykani-stealth';
const careful = await highTrust({ fingerprint: 7 });
const fast = await aggressive({ fingerprint: 13 });Features
| Feature | Description |
|---|---|
| EntityBrain | Physics-based timing, mouse curves with overshoot, typing simulation |
| Constellation | CDP runtime patches (navigator.webdriver, chrome.runtime, permissions) |
| Phantom | Extended JS-level fingerprint spoofing (audio, canvas, WebGL) |
| Perceptual | Per-session fingerprint randomization |
| Choreographer | Fluent chainable action DSL |
| Sentinel | Circuit breaker, exponential backoff, health metrics |
| Weave | Request interception, header normalization |
| Diagnostic | Stealth verification toolkit |
| Visual | Screenshot regression testing |
| Poolize | Proxy rotation + health-aware load balancing + auto-recovery |
| CaptchaSolver | reCAPTCHA, hCaptcha, Turnstile solving via CapSolver/2captcha |
| Webhook | Slack, Discord, Telegram diagnostics alerts |
| ProxyManager | Health checks with cooldown + status reporting |
| Hooks | Plugin architecture |
Entity Configuration
const entity = {
fingerprint: 7, // Seed 1-10000
platform: 'windows', // windows | macos | linux
locale: 'en-US',
timezone: 'America/New_York',
viewport: { width: 1920, height: 947 }, // headless: auto; headed: null
userDataDir: './profile', // for persistent context
proxy: 'http://proxy:3128',
binary: '/path/to/chrome', // override CYKANI_BINARY_PATH
instincts: {
hesitation: 0.3, // 0-1, higher = longer pauses
precision: 0.8, // 0-1, higher = cleaner mouse
curiosity: 0.5, // 0-1, higher = more exploration
},
dynamics: {
entropy: 0.2, // Timing randomness
inertia: 0.5, // Behavior consistency
},
operate: {
latency: 'human', // instant | robotic | organic | human | sluggish
headless: true,
},
};Captcha Solving
import { CaptchaSolver } from 'cykani-stealth';
const solver = new CaptchaSolver({
apiKey: 'your-capsolver-key',
service: 'capsolver', // capsolver, twocaptcha, anticaptcha
});
const result = await solver.solveRecaptchaV2({
siteKey: '6Ld...',
pageUrl: 'https://example.com/login',
});
await page.evaluate((token) => {
document.querySelector('[name="g-recaptcha-response"]').value = token;
}, result.token);Webhook Alerts
import { createSlackWebhook, createDiscordWebhook } from 'cykani-stealth';
const slack = createSlackWebhook('https://hooks.slack.com/services/...');
await slack.send({
title: 'Cykani Scan Complete',
payload: { inconsistent: false, passes: 36, failures: 0 },
});
const discord = createDiscordWebhook('https://discord.com/api/webhooks/...');
await discord.send({ title: 'Alert', payload: { status: 'blocked' }, color: 0xff0000 });Enhanced Proxy Rotation
import { ProxyManager } from 'cykani-stealth';
const pm = new ProxyManager({ maxFailures: 3, cooldownMs: 30000 });
pm.addProxy('http://proxy1:3128');
pm.addProxy('http://proxy2:3128');
pm.addProxy('http://proxy3:3128');
// Health check all proxies
const status = await pm.checkAll();
console.log(status);
// [ { url: '...', ok: true, health: 0.95 }, ... ]License
MIT