@optima-chat/browser-cli 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +48 -34
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -116,6 +116,48 @@ var config = loadConfig();
|
|
|
116
116
|
var BROWSER_API_URL = config.apiUrl;
|
|
117
117
|
var AUTH = config.auth;
|
|
118
118
|
|
|
119
|
+
// src/session.ts
|
|
120
|
+
import { readFileSync as readFileSync2, writeFileSync, unlinkSync, existsSync as existsSync2, mkdirSync } from "fs";
|
|
121
|
+
import { join as join2 } from "path";
|
|
122
|
+
import { homedir as homedir2 } from "os";
|
|
123
|
+
var OPTIMA_DIR = join2(homedir2(), ".optima");
|
|
124
|
+
function conversationId() {
|
|
125
|
+
const raw = process.env.SESSION_ID;
|
|
126
|
+
return raw ? raw.replace(/[^A-Za-z0-9_-]/g, "_") : null;
|
|
127
|
+
}
|
|
128
|
+
function sessionFile() {
|
|
129
|
+
const conv = conversationId();
|
|
130
|
+
return join2(OPTIMA_DIR, conv ? `browser-session-id.${conv}` : "browser-session-id");
|
|
131
|
+
}
|
|
132
|
+
var _sessionOverride = null;
|
|
133
|
+
function setSessionOverride(id) {
|
|
134
|
+
_sessionOverride = id;
|
|
135
|
+
}
|
|
136
|
+
function saveSessionId(id) {
|
|
137
|
+
mkdirSync(OPTIMA_DIR, { recursive: true });
|
|
138
|
+
writeFileSync(sessionFile(), id, "utf-8");
|
|
139
|
+
}
|
|
140
|
+
function loadSessionId() {
|
|
141
|
+
if (_sessionOverride) {
|
|
142
|
+
return _sessionOverride;
|
|
143
|
+
}
|
|
144
|
+
const file = sessionFile();
|
|
145
|
+
if (!existsSync2(file)) {
|
|
146
|
+
throw new Error(
|
|
147
|
+
"No active browser session. Run 'browser-cli launch' first. (If the backend says you already have one, close it by id: browser-cli --session <id> close)"
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
return readFileSync2(file, "utf-8").trim();
|
|
151
|
+
}
|
|
152
|
+
function clearSessionId(onlyIfEquals) {
|
|
153
|
+
const file = sessionFile();
|
|
154
|
+
if (!existsSync2(file)) return;
|
|
155
|
+
if (onlyIfEquals !== void 0 && readFileSync2(file, "utf-8").trim() !== onlyIfEquals) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
unlinkSync(file);
|
|
159
|
+
}
|
|
160
|
+
|
|
119
161
|
// src/api.ts
|
|
120
162
|
var BrowserAPIError = class extends Error {
|
|
121
163
|
constructor(statusCode, errorCode, message) {
|
|
@@ -153,6 +195,10 @@ function withAuthContext(err) {
|
|
|
153
195
|
err.message += `\uFF08\u51ED\u8BC1\u6765\u6E90 ${AUTH.source}${exp}\uFF0Cfp=${fp}\uFF09`;
|
|
154
196
|
return err;
|
|
155
197
|
}
|
|
198
|
+
function conversationHeader() {
|
|
199
|
+
const conv = conversationId();
|
|
200
|
+
return conv ? { "X-Optima-Conversation": conv } : {};
|
|
201
|
+
}
|
|
156
202
|
async function request(path, options = {}) {
|
|
157
203
|
const url = `${BROWSER_API_URL}${path}`;
|
|
158
204
|
const auth = authHeader();
|
|
@@ -163,6 +209,7 @@ async function request(path, options = {}) {
|
|
|
163
209
|
headers: {
|
|
164
210
|
"Content-Type": "application/json",
|
|
165
211
|
...auth,
|
|
212
|
+
...conversationHeader(),
|
|
166
213
|
...options.headers
|
|
167
214
|
}
|
|
168
215
|
});
|
|
@@ -195,7 +242,7 @@ async function requestBinary(path) {
|
|
|
195
242
|
let response;
|
|
196
243
|
try {
|
|
197
244
|
response = await fetch(url, {
|
|
198
|
-
headers: auth
|
|
245
|
+
headers: { ...auth, ...conversationHeader() }
|
|
199
246
|
});
|
|
200
247
|
} catch {
|
|
201
248
|
throw new Error(
|
|
@@ -411,39 +458,6 @@ var BrowserAPI = class {
|
|
|
411
458
|
};
|
|
412
459
|
var api = new BrowserAPI();
|
|
413
460
|
|
|
414
|
-
// src/session.ts
|
|
415
|
-
import { readFileSync as readFileSync2, writeFileSync, unlinkSync, existsSync as existsSync2, mkdirSync } from "fs";
|
|
416
|
-
import { join as join2 } from "path";
|
|
417
|
-
import { homedir as homedir2 } from "os";
|
|
418
|
-
var OPTIMA_DIR = join2(homedir2(), ".optima");
|
|
419
|
-
var SESSION_FILE = join2(OPTIMA_DIR, "browser-session-id");
|
|
420
|
-
var _sessionOverride = null;
|
|
421
|
-
function setSessionOverride(id) {
|
|
422
|
-
_sessionOverride = id;
|
|
423
|
-
}
|
|
424
|
-
function saveSessionId(id) {
|
|
425
|
-
mkdirSync(OPTIMA_DIR, { recursive: true });
|
|
426
|
-
writeFileSync(SESSION_FILE, id, "utf-8");
|
|
427
|
-
}
|
|
428
|
-
function loadSessionId() {
|
|
429
|
-
if (_sessionOverride) {
|
|
430
|
-
return _sessionOverride;
|
|
431
|
-
}
|
|
432
|
-
if (!existsSync2(SESSION_FILE)) {
|
|
433
|
-
throw new Error(
|
|
434
|
-
"No active browser session. Run 'browser-cli launch' first. (If the backend says you already have one, close it by id: browser-cli --session <id> close)"
|
|
435
|
-
);
|
|
436
|
-
}
|
|
437
|
-
return readFileSync2(SESSION_FILE, "utf-8").trim();
|
|
438
|
-
}
|
|
439
|
-
function clearSessionId(onlyIfEquals) {
|
|
440
|
-
if (!existsSync2(SESSION_FILE)) return;
|
|
441
|
-
if (onlyIfEquals !== void 0 && readFileSync2(SESSION_FILE, "utf-8").trim() !== onlyIfEquals) {
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
unlinkSync(SESSION_FILE);
|
|
445
|
-
}
|
|
446
|
-
|
|
447
461
|
// src/formatter.ts
|
|
448
462
|
var URL_STALE_WARNING = "\u26A0 URL/title may be stale: the live page probe failed, values above are cached. Verify with a screenshot before concluding a navigation failed.";
|
|
449
463
|
function formatPageState(state) {
|