-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathiris-setup-browser
More file actions
129 lines (109 loc) · 3.81 KB
/
iris-setup-browser
File metadata and controls
129 lines (109 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env node
/**
* iris-setup-browser - Configure browser session for HTTP mode
*
* Similar to headroom's claude-setup-session, this stores your
* claude.ai session cookie so iris-http-server can authenticate.
*/
import fs from 'fs';
import path from 'path';
import readline from 'readline';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function question(prompt) {
return new Promise((resolve) => {
rl.question(prompt, resolve);
});
}
async function main() {
console.log('Iris Browser Session Setup');
console.log('='.repeat(50));
console.log();
console.log('This will store your claude.ai session credentials so');
console.log('iris-http-server can authenticate browser requests.');
console.log();
console.log('Required information:');
console.log(' 1. Organization ID (from Network tab)');
console.log(' 2. Session cookie (from Application tab)');
console.log(' 3. Your email address');
console.log();
// Get instance home
const instanceHome = process.env.INSTANCE_HOME || process.env.CLAUDE_HOME || path.join(process.env.HOME, '.claude');
// Get organization ID
console.log('From Chrome DevTools Network tab:');
console.log(' 1. Open claude.ai in Chrome');
console.log(' 2. Press F12 to open DevTools');
console.log(' 3. Go to Network tab');
console.log(' 4. Look for: /api/organizations/[ORG_ID]/...');
console.log();
const orgId = await question('Organization ID: ');
if (!orgId.trim()) {
console.error('ERROR: Organization ID required');
rl.close();
process.exit(1);
}
// Get cookie string
console.log();
console.log('From Chrome DevTools Network tab:');
console.log(' 1. Click on any /api/ request');
console.log(' 2. Go to Headers tab');
console.log(' 3. Scroll to Request Headers');
console.log(" 4. Find 'cookie:' header");
console.log(" 5. Copy the ENTIRE value (it's long!)");
console.log();
console.log('Should look like: sessionKey=sk-ant-sid...; __cf_bm=...; etc');
console.log();
const cookieString = await question('Cookie string: ');
if (!cookieString.trim() || !cookieString.includes('sessionKey')) {
console.error('ERROR: Valid cookie string with sessionKey required');
rl.close();
process.exit(1);
}
// Get email
console.log();
console.log('Your Google account email (for Drive access):');
console.log();
const userEmail = await question('Email: ');
if (!userEmail.trim() || !userEmail.includes('@')) {
console.error('ERROR: Valid email required');
rl.close();
process.exit(1);
}
// Save credentials
const configDir = path.join(instanceHome, 'config');
// Create directory if needed
if (!fs.existsSync(configDir)) {
fs.mkdirSync(configDir, { recursive: true });
}
const sessionFile = path.join(configDir, 'iris-browser-session.json');
const data = {
organization_id: orgId.trim(),
cookie_string: cookieString.trim(),
user_email: userEmail.trim(),
saved_at: new Date().toISOString()
};
fs.writeFileSync(sessionFile, JSON.stringify(data, null, 2));
// Set restrictive permissions
fs.chmodSync(sessionFile, 0o600);
console.log();
console.log('✓ Session saved!');
console.log(` Location: ${sessionFile}`);
console.log();
console.log('You can now run:');
console.log(' npm run http');
console.log();
console.log('To start the HTTP server for browser access!');
console.log();
console.log('⚠️ Security reminders:');
console.log(' - Keep this file secure (already set to 0600 permissions)');
console.log(' - Never commit it to git');
console.log(' - Refresh periodically (cookies expire)');
console.log(' - Only use for personal/local development');
rl.close();
}
main().catch((error) => {
console.error('Setup failed:', error);
process.exit(1);
});