@fias/plugin-dev-harness 1.1.12 → 1.3.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/cli/check-auth.d.ts +9 -0
- package/dist/cli/check-auth.d.ts.map +1 -0
- package/dist/cli/check-auth.js +38 -0
- package/dist/cli/check-auth.js.map +1 -0
- package/dist/cli/check-auth.test.d.ts +2 -0
- package/dist/cli/check-auth.test.d.ts.map +1 -0
- package/dist/cli/check-auth.test.js +49 -0
- package/dist/cli/check-auth.test.js.map +1 -0
- package/dist/cli/dev.d.ts +2 -2
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +4 -20
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/dev.test.js +10 -38
- package/dist/cli/dev.test.js.map +1 -1
- package/dist/cli/entities.d.ts.map +1 -1
- package/dist/cli/entities.js +8 -6
- package/dist/cli/entities.js.map +1 -1
- package/dist/cli/entities.test.js +17 -26
- package/dist/cli/entities.test.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.test.js +2 -2
- package/dist/cli/login.d.ts +2 -0
- package/dist/cli/login.d.ts.map +1 -1
- package/dist/cli/login.js +19 -14
- package/dist/cli/login.js.map +1 -1
- package/dist/cli/login.test.js +46 -24
- package/dist/cli/login.test.js.map +1 -1
- package/dist/cli/submit.d.ts.map +1 -1
- package/dist/cli/submit.js +13 -11
- package/dist/cli/submit.js.map +1 -1
- package/dist/cli/submit.test.js +13 -22
- package/dist/cli/submit.test.js.map +1 -1
- package/dist/config/config-loader.d.ts +6 -0
- package/dist/config/config-loader.d.ts.map +1 -1
- package/dist/config/config-loader.js +12 -0
- package/dist/config/config-loader.js.map +1 -1
- package/dist/config/credentials.d.ts +19 -1
- package/dist/config/credentials.d.ts.map +1 -1
- package/dist/config/credentials.js +46 -6
- package/dist/config/credentials.js.map +1 -1
- package/dist/config/credentials.test.js +72 -27
- package/dist/config/credentials.test.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/server/harness-server.d.ts +2 -3
- package/dist/server/harness-server.d.ts.map +1 -1
- package/dist/server/harness-server.js +237 -43
- package/dist/server/harness-server.js.map +1 -1
- package/dist/server/harness-server.test.js +60 -3
- package/dist/server/harness-server.test.js.map +1 -1
- package/dist/server/static/harness.css +58 -0
- package/dist/server/static/harness.html +20 -7
- package/dist/server/static/harness.js +162 -6
- package/package.json +10 -10
- package/dist/server/static/static/harness.css +0 -332
- package/dist/server/static/static/harness.html +0 -53
- package/dist/server/static/static/harness.js +0 -569
|
@@ -44,29 +44,39 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.startHarnessServer = startHarnessServer;
|
|
46
46
|
const express_1 = __importDefault(require("express"));
|
|
47
|
+
const crypto = __importStar(require("crypto"));
|
|
47
48
|
const path = __importStar(require("path"));
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const chalk_1 = __importDefault(require("chalk"));
|
|
51
|
+
const config_loader_1 = require("../config/config-loader");
|
|
50
52
|
const mock_handler_1 = require("../bridge/mock-handler");
|
|
51
53
|
const live_handler_1 = require("../bridge/live-handler");
|
|
52
54
|
const credentials_1 = require("../config/credentials");
|
|
53
55
|
async function startHarnessServer(options) {
|
|
54
56
|
const app = (0, express_1.default)();
|
|
55
57
|
app.use(express_1.default.json());
|
|
56
|
-
// Mutable
|
|
57
|
-
let currentMode =
|
|
58
|
-
let
|
|
58
|
+
// Mutable state — toggled at runtime via UI
|
|
59
|
+
let currentMode = 'mock';
|
|
60
|
+
let currentEnvironment = options.defaultEnvironment;
|
|
61
|
+
let currentApiKey = (0, credentials_1.loadApiKeyForEnvironment)(currentEnvironment);
|
|
62
|
+
let pendingAuthState = null;
|
|
63
|
+
function getCurrentApiUrl() {
|
|
64
|
+
return config_loader_1.ENVIRONMENT_URLS[currentEnvironment].apiUrl;
|
|
65
|
+
}
|
|
66
|
+
function getCurrentPlatformUrl() {
|
|
67
|
+
return config_loader_1.ENVIRONMENT_URLS[currentEnvironment].platformUrl;
|
|
68
|
+
}
|
|
59
69
|
// Always create mock handler
|
|
60
70
|
const mockHandler = new mock_handler_1.MockBridgeHandler({
|
|
61
71
|
mockUser: options.mockUser,
|
|
62
72
|
mockTheme: options.mockTheme,
|
|
63
73
|
mockEntities: options.mockEntities,
|
|
64
74
|
});
|
|
65
|
-
// Create live handler (recreated when credentials change)
|
|
75
|
+
// Create live handler (recreated when credentials or environment change)
|
|
66
76
|
let liveHandler = currentApiKey
|
|
67
77
|
? new live_handler_1.LiveBridgeHandler({
|
|
68
78
|
apiKey: currentApiKey,
|
|
69
|
-
apiUrl:
|
|
79
|
+
apiUrl: getCurrentApiUrl(),
|
|
70
80
|
permissions: options.permissions,
|
|
71
81
|
mockUser: options.mockUser,
|
|
72
82
|
mockTheme: options.mockTheme,
|
|
@@ -75,6 +85,20 @@ async function startHarnessServer(options) {
|
|
|
75
85
|
function getActiveHandler() {
|
|
76
86
|
return currentMode === 'live' && liveHandler ? liveHandler : mockHandler;
|
|
77
87
|
}
|
|
88
|
+
function rebuildLiveHandler() {
|
|
89
|
+
if (currentApiKey) {
|
|
90
|
+
liveHandler = new live_handler_1.LiveBridgeHandler({
|
|
91
|
+
apiKey: currentApiKey,
|
|
92
|
+
apiUrl: getCurrentApiUrl(),
|
|
93
|
+
permissions: options.permissions,
|
|
94
|
+
mockUser: options.mockUser,
|
|
95
|
+
mockTheme: options.mockTheme,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
liveHandler = null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
78
102
|
// Mode toggle endpoint — called by harness.js
|
|
79
103
|
app.post('/api/mode', (req, res) => {
|
|
80
104
|
const { mode } = req.body;
|
|
@@ -99,17 +123,63 @@ async function startHarnessServer(options) {
|
|
|
99
123
|
return;
|
|
100
124
|
}
|
|
101
125
|
currentApiKey = apiKey.trim();
|
|
102
|
-
(0, credentials_1.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
apiUrl: options.apiUrl,
|
|
106
|
-
permissions: options.permissions,
|
|
107
|
-
mockUser: options.mockUser,
|
|
108
|
-
mockTheme: options.mockTheme,
|
|
109
|
-
});
|
|
110
|
-
console.log(chalk_1.default.green(' API key saved to ~/.fias/credentials'));
|
|
126
|
+
(0, credentials_1.saveApiKeyForEnvironment)(currentEnvironment, currentApiKey);
|
|
127
|
+
rebuildLiveHandler();
|
|
128
|
+
console.log(chalk_1.default.green(` API key saved for ${currentEnvironment} environment`));
|
|
111
129
|
res.json({ success: true });
|
|
112
130
|
});
|
|
131
|
+
// Auth start endpoint — generates state token and returns auth URL for popup
|
|
132
|
+
app.post('/api/auth/start', (_req, res) => {
|
|
133
|
+
pendingAuthState = crypto.randomBytes(32).toString('hex');
|
|
134
|
+
const authUrl = `${getCurrentPlatformUrl()}/developer/cli-auth?port=${options.port}&state=${pendingAuthState}`;
|
|
135
|
+
res.json({ authUrl });
|
|
136
|
+
});
|
|
137
|
+
// Auth callback — receives redirect from CliAuthPage after browser login
|
|
138
|
+
app.get('/callback', (req, res) => {
|
|
139
|
+
const key = req.query.key;
|
|
140
|
+
const returnedState = req.query.state;
|
|
141
|
+
res.setHeader('Content-Type', 'text/html');
|
|
142
|
+
if (!pendingAuthState || returnedState !== pendingAuthState) {
|
|
143
|
+
res
|
|
144
|
+
.status(400)
|
|
145
|
+
.send(renderCallbackHtml('Authentication Failed', 'State mismatch. Please try again.', true));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (!key || !key.startsWith('fias_sk_')) {
|
|
149
|
+
res
|
|
150
|
+
.status(400)
|
|
151
|
+
.send(renderCallbackHtml('Authentication Failed', 'Invalid API key received.', true));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Save key for current environment
|
|
155
|
+
currentApiKey = key;
|
|
156
|
+
(0, credentials_1.saveApiKeyForEnvironment)(currentEnvironment, currentApiKey);
|
|
157
|
+
rebuildLiveHandler();
|
|
158
|
+
pendingAuthState = null;
|
|
159
|
+
console.log(chalk_1.default.green(` Authenticated for ${currentEnvironment} environment`));
|
|
160
|
+
res.send(renderCallbackHtml('Authentication Successful', 'You can close this window. The harness will switch to live mode automatically.', false));
|
|
161
|
+
});
|
|
162
|
+
// Environment switch endpoint
|
|
163
|
+
app.post('/api/environment', (req, res) => {
|
|
164
|
+
const { environment } = req.body;
|
|
165
|
+
if (environment !== 'staging' && environment !== 'production') {
|
|
166
|
+
res.status(400).json({ error: 'Invalid environment. Use "staging" or "production".' });
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
currentEnvironment = environment;
|
|
170
|
+
currentApiKey = (0, credentials_1.loadApiKeyForEnvironment)(currentEnvironment);
|
|
171
|
+
rebuildLiveHandler();
|
|
172
|
+
// Fall back to mock if no key for this environment
|
|
173
|
+
if (currentMode === 'live' && !liveHandler) {
|
|
174
|
+
currentMode = 'mock';
|
|
175
|
+
}
|
|
176
|
+
console.log(chalk_1.default.dim(` Environment switched to ${currentEnvironment.toUpperCase()}`));
|
|
177
|
+
res.json({
|
|
178
|
+
environment: currentEnvironment,
|
|
179
|
+
mode: currentMode,
|
|
180
|
+
hasCredentials: Boolean(currentApiKey),
|
|
181
|
+
});
|
|
182
|
+
});
|
|
113
183
|
// Bridge API endpoint — called by harness.js
|
|
114
184
|
app.post('/api/bridge', async (req, res) => {
|
|
115
185
|
try {
|
|
@@ -129,7 +199,7 @@ async function startHarnessServer(options) {
|
|
|
129
199
|
return;
|
|
130
200
|
}
|
|
131
201
|
try {
|
|
132
|
-
const response = await fetch(`${
|
|
202
|
+
const response = await fetch(`${getCurrentApiUrl()}/developer/credits`, {
|
|
133
203
|
headers: { Authorization: `Bearer ${currentApiKey}` },
|
|
134
204
|
});
|
|
135
205
|
if (!response.ok) {
|
|
@@ -165,6 +235,8 @@ async function startHarnessServer(options) {
|
|
|
165
235
|
hasCredentials: Boolean(currentApiKey),
|
|
166
236
|
permissions: options.permissions,
|
|
167
237
|
mockTheme: options.mockTheme,
|
|
238
|
+
environment: currentEnvironment,
|
|
239
|
+
platformUrl: getCurrentPlatformUrl(),
|
|
168
240
|
});
|
|
169
241
|
});
|
|
170
242
|
// Serve static harness files
|
|
@@ -195,9 +267,12 @@ async function startHarnessServer(options) {
|
|
|
195
267
|
});
|
|
196
268
|
return new Promise((resolve) => {
|
|
197
269
|
app.listen(options.port, () => {
|
|
198
|
-
console.log(
|
|
199
|
-
console.log(chalk_1.default.
|
|
200
|
-
console.log(chalk_1.default.dim(`
|
|
270
|
+
console.log('');
|
|
271
|
+
console.log(chalk_1.default.green.bold(` ➜ Open in browser: http://localhost:${options.port}`));
|
|
272
|
+
console.log(chalk_1.default.dim(` Plugin dev server: ${options.pluginUrl}`));
|
|
273
|
+
console.log(chalk_1.default.dim(` Mode: MOCK (toggle to LIVE in the toolbar)`));
|
|
274
|
+
console.log(chalk_1.default.dim(` Environment: ${currentEnvironment.toUpperCase()}`));
|
|
275
|
+
console.log('');
|
|
201
276
|
// Check if plugin dev server is reachable
|
|
202
277
|
checkPluginReachable(options.pluginUrl).then((reachable) => {
|
|
203
278
|
if (reachable) {
|
|
@@ -213,13 +288,33 @@ async function startHarnessServer(options) {
|
|
|
213
288
|
});
|
|
214
289
|
});
|
|
215
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Renders the HTML page shown in the popup after auth callback.
|
|
293
|
+
* Sends a postMessage to the opener window and auto-closes.
|
|
294
|
+
*/
|
|
295
|
+
function renderCallbackHtml(title, message, isError) {
|
|
296
|
+
const color = isError ? '#ef4444' : '#22c55e';
|
|
297
|
+
const postMessageScript = isError
|
|
298
|
+
? `if(window.opener){window.opener.postMessage({type:'auth_callback',success:false,error:${JSON.stringify(title)}},'*');}`
|
|
299
|
+
: `if(window.opener){window.opener.postMessage({type:'auth_callback',success:true},'*');setTimeout(function(){window.close()},1500);}`;
|
|
300
|
+
return `<!DOCTYPE html>
|
|
301
|
+
<html>
|
|
302
|
+
<head><title>${title}</title></head>
|
|
303
|
+
<body style="font-family: -apple-system, system-ui, sans-serif; display: flex; justify-content: center; padding-top: 80px; background: #111; color: #e5e7eb;">
|
|
304
|
+
<div style="text-align: center; max-width: 400px;">
|
|
305
|
+
<h1 style="color: ${color}; font-size: 1.5rem;">${title}</h1>
|
|
306
|
+
<p style="margin-top: 12px; color: #9ca3af;">${message}</p>
|
|
307
|
+
</div>
|
|
308
|
+
<script>${postMessageScript}</script>
|
|
309
|
+
</body>
|
|
310
|
+
</html>`;
|
|
311
|
+
}
|
|
216
312
|
/**
|
|
217
313
|
* Fallback HTML when static files haven't been copied to dist.
|
|
218
314
|
* This enables the harness to work during development.
|
|
219
315
|
* Mirrors the structure of harness.html but with inline styles/scripts.
|
|
220
316
|
*/
|
|
221
317
|
function generateFallbackHtml(options) {
|
|
222
|
-
const initialMode = options.isLive ? 'live' : 'mock';
|
|
223
318
|
return `<!DOCTYPE html>
|
|
224
319
|
<html lang="en">
|
|
225
320
|
<head>
|
|
@@ -232,8 +327,12 @@ function generateFallbackHtml(options) {
|
|
|
232
327
|
<div class="toolbar">
|
|
233
328
|
<div class="toolbar-left">
|
|
234
329
|
<span class="logo">Fias Arche Dev</span>
|
|
235
|
-
<
|
|
236
|
-
${
|
|
330
|
+
<select id="env-selector" class="env-selector">
|
|
331
|
+
<option value="staging"${options.defaultEnvironment === 'staging' ? ' selected' : ''}>STAGING</option>
|
|
332
|
+
<option value="production"${options.defaultEnvironment === 'production' ? ' selected' : ''}>PRODUCTION</option>
|
|
333
|
+
</select>
|
|
334
|
+
<button id="mode-badge" class="mode-badge mode-mock" title="Click to switch mode">
|
|
335
|
+
MOCK \u21C6
|
|
237
336
|
</button>
|
|
238
337
|
</div>
|
|
239
338
|
<div class="toolbar-right">
|
|
@@ -246,14 +345,21 @@ function generateFallbackHtml(options) {
|
|
|
246
345
|
<div id="login-modal" class="modal-overlay" style="display: none">
|
|
247
346
|
<div class="modal">
|
|
248
347
|
<h3>Connect to FIAS</h3>
|
|
249
|
-
<p>
|
|
250
|
-
<
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
<button id="login-
|
|
255
|
-
<button id="login-submit" class="btn-primary">Save & Connect</button>
|
|
348
|
+
<p>Sign in to your FIAS account to enable live mode with real AI responses.</p>
|
|
349
|
+
<div id="login-popup-section">
|
|
350
|
+
<button id="login-popup-btn" class="btn-primary btn-full">Sign in with FIAS</button>
|
|
351
|
+
<p id="login-popup-hint" class="modal-hint" style="display:none">Popup blocked? <a id="login-popup-link" href="#" target="_blank" style="color:#a78bfa">Open login page manually</a></p>
|
|
352
|
+
<div class="modal-divider"><span>or</span></div>
|
|
353
|
+
<button id="login-manual-toggle" class="btn-link">Enter API key manually</button>
|
|
256
354
|
</div>
|
|
355
|
+
<div id="login-manual-section" style="display:none">
|
|
356
|
+
<input id="login-input" type="password" class="modal-input" placeholder="fias_sk_..." autocomplete="off" />
|
|
357
|
+
<div class="modal-actions">
|
|
358
|
+
<button id="login-cancel" class="btn-secondary">Cancel</button>
|
|
359
|
+
<button id="login-submit" class="btn-primary">Save & Connect</button>
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
<div id="login-error" class="modal-error" style="display: none"></div>
|
|
257
363
|
</div>
|
|
258
364
|
</div>
|
|
259
365
|
<div id="plugin-status" class="plugin-status">
|
|
@@ -294,6 +400,9 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; b
|
|
|
294
400
|
.toolbar { display: flex; justify-content: space-between; align-items: center; padding: 8px 16px; background: #18181b; border-bottom: 1px solid #3f3f46; flex-shrink: 0; }
|
|
295
401
|
.toolbar-left, .toolbar-right { display: flex; align-items: center; gap: 12px; }
|
|
296
402
|
.logo { font-weight: 600; font-size: 14px; color: #a78bfa; }
|
|
403
|
+
.env-selector { background: #27272a; color: #a1a1aa; border: 1px solid #3f3f46; border-radius: 4px; padding: 3px 8px; font-size: 11px; font-weight: 600; cursor: pointer; outline: none; text-transform: uppercase; }
|
|
404
|
+
.env-selector:hover { border-color: #52525b; }
|
|
405
|
+
.env-selector:focus { border-color: #a78bfa; }
|
|
297
406
|
.mode-badge { padding: 3px 10px; border-radius: 4px; font-size: 11px; font-weight: 600; text-transform: uppercase; cursor: pointer; transition: background 0.15s, border-color 0.15s; user-select: none; }
|
|
298
407
|
.mode-badge:hover { filter: brightness(1.3); }
|
|
299
408
|
.mode-badge:active { filter: brightness(0.9); }
|
|
@@ -317,8 +426,13 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; b
|
|
|
317
426
|
.btn-primary { background: #ffffff; color: #0a0a0a; border: none; padding: 6px 16px; border-radius: 4px; cursor: pointer; font-size: 13px; font-weight: 500; }
|
|
318
427
|
.btn-primary:hover { background: #e5e5e5; }
|
|
319
428
|
.btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
429
|
+
.btn-full { width: 100%; padding: 10px 16px; margin-bottom: 12px; }
|
|
320
430
|
.btn-secondary { background: transparent; color: #a1a1aa; border: 1px solid #3f3f46; padding: 6px 16px; border-radius: 4px; cursor: pointer; font-size: 13px; }
|
|
321
431
|
.btn-secondary:hover { background: #3f3f46; }
|
|
432
|
+
.btn-link { background: none; border: none; color: #a78bfa; cursor: pointer; font-size: 12px; padding: 0; }
|
|
433
|
+
.btn-link:hover { text-decoration: underline; }
|
|
434
|
+
.modal-divider { display: flex; align-items: center; gap: 12px; margin: 12px 0; color: #6b7280; font-size: 12px; }
|
|
435
|
+
.modal-divider::before, .modal-divider::after { content: ''; flex: 1; height: 1px; background: #3f3f46; }
|
|
322
436
|
.plugin-status { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; color: #a1a1aa; font-size: 14px; }
|
|
323
437
|
.plugin-status.hidden { display: none; }
|
|
324
438
|
.plugin-status.error { color: #fca5a5; }
|
|
@@ -339,8 +453,7 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; b
|
|
|
339
453
|
.log-time { color: #6b7280; margin-right: 8px; }
|
|
340
454
|
.log-cost { color: #fbbf24; margin-left: 8px; }
|
|
341
455
|
`;
|
|
342
|
-
// The embedded JS
|
|
343
|
-
// It uses the same API endpoints as the static version.
|
|
456
|
+
// The embedded JS is a minified version of harness.js for the fallback page.
|
|
344
457
|
const EMBEDDED_JS = `
|
|
345
458
|
(function() {
|
|
346
459
|
var iframe = document.getElementById('plugin-iframe');
|
|
@@ -358,12 +471,21 @@ const EMBEDDED_JS = `
|
|
|
358
471
|
var loginError = document.getElementById('login-error');
|
|
359
472
|
var loginSubmit = document.getElementById('login-submit');
|
|
360
473
|
var loginCancel = document.getElementById('login-cancel');
|
|
474
|
+
var envSelector = document.getElementById('env-selector');
|
|
475
|
+
var loginPopupBtn = document.getElementById('login-popup-btn');
|
|
476
|
+
var loginPopupHint = document.getElementById('login-popup-hint');
|
|
477
|
+
var loginPopupLink = document.getElementById('login-popup-link');
|
|
478
|
+
var loginManualToggle = document.getElementById('login-manual-toggle');
|
|
479
|
+
var loginManualSection = document.getElementById('login-manual-section');
|
|
480
|
+
var loginPopupSection = document.getElementById('login-popup-section');
|
|
361
481
|
|
|
362
482
|
var messageCount = 0;
|
|
363
483
|
var currentTheme = 'dark';
|
|
364
484
|
var currentMode = 'mock';
|
|
485
|
+
var currentEnvironment = 'staging';
|
|
365
486
|
var hasCredentials = false;
|
|
366
487
|
var cachedConfig = null;
|
|
488
|
+
var authPollInterval = null;
|
|
367
489
|
|
|
368
490
|
var PERMISSION_MAP = {
|
|
369
491
|
get_user: 'user:profile:read', get_theme: 'theme:read', entity_invoke: 'entities:invoke',
|
|
@@ -386,7 +508,9 @@ const EMBEDDED_JS = `
|
|
|
386
508
|
cachedConfig = config;
|
|
387
509
|
currentTheme = config.mockTheme || 'dark';
|
|
388
510
|
currentMode = config.mode || 'mock';
|
|
511
|
+
currentEnvironment = config.environment || 'staging';
|
|
389
512
|
hasCredentials = config.hasCredentials || false;
|
|
513
|
+
envSelector.value = currentEnvironment;
|
|
390
514
|
updateThemeBadge();
|
|
391
515
|
updateModeBadge();
|
|
392
516
|
if (currentMode === 'live') { creditBalance.style.display = 'inline'; fetchCredits(); }
|
|
@@ -412,6 +536,20 @@ const EMBEDDED_JS = `
|
|
|
412
536
|
} else { switchMode('mock'); }
|
|
413
537
|
});
|
|
414
538
|
|
|
539
|
+
envSelector.addEventListener('change', function() {
|
|
540
|
+
fetch('/api/environment', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ environment: envSelector.value }) })
|
|
541
|
+
.then(function(r) { return r.json(); })
|
|
542
|
+
.then(function(data) {
|
|
543
|
+
currentEnvironment = data.environment;
|
|
544
|
+
currentMode = data.mode;
|
|
545
|
+
hasCredentials = data.hasCredentials;
|
|
546
|
+
updateModeBadge();
|
|
547
|
+
if (currentMode === 'live') { creditBalance.style.display = 'inline'; fetchCredits(); }
|
|
548
|
+
else { creditBalance.style.display = 'none'; creditBalance.textContent = ''; }
|
|
549
|
+
logMessage('info', 'Environment: ' + currentEnvironment.toUpperCase() + (hasCredentials ? '' : ' (not authenticated)'));
|
|
550
|
+
}).catch(function(err) { logMessage('error', err.message); });
|
|
551
|
+
});
|
|
552
|
+
|
|
415
553
|
function switchMode(newMode) {
|
|
416
554
|
fetch('/api/mode', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mode: newMode }) })
|
|
417
555
|
.then(function(r) { if (!r.ok) return r.json().then(function(e) { throw new Error(e.error); }); return r.json(); })
|
|
@@ -422,25 +560,69 @@ const EMBEDDED_JS = `
|
|
|
422
560
|
}).catch(function(err) { logMessage('error', err.message); });
|
|
423
561
|
}
|
|
424
562
|
|
|
425
|
-
function showLoginModal() {
|
|
426
|
-
|
|
427
|
-
|
|
563
|
+
function showLoginModal() {
|
|
564
|
+
loginModal.style.display = 'flex';
|
|
565
|
+
loginPopupSection.style.display = 'block';
|
|
566
|
+
loginManualSection.style.display = 'none';
|
|
567
|
+
loginPopupHint.style.display = 'none';
|
|
568
|
+
loginError.style.display = 'none';
|
|
569
|
+
loginPopupBtn.disabled = false;
|
|
570
|
+
loginPopupBtn.textContent = 'Sign in with FIAS';
|
|
571
|
+
}
|
|
572
|
+
function hideLoginModal() { loginModal.style.display = 'none'; stopAuthPolling(); }
|
|
573
|
+
|
|
574
|
+
loginCancel && loginCancel.addEventListener('click', hideLoginModal);
|
|
428
575
|
loginModal.addEventListener('click', function(e) { if (e.target === loginModal) hideLoginModal(); });
|
|
576
|
+
|
|
577
|
+
loginManualToggle && loginManualToggle.addEventListener('click', function() {
|
|
578
|
+
loginPopupSection.style.display = 'none';
|
|
579
|
+
loginManualSection.style.display = 'block';
|
|
580
|
+
loginInput.focus();
|
|
581
|
+
});
|
|
582
|
+
|
|
429
583
|
loginInput.addEventListener('keydown', function(e) { if (e.key === 'Enter') submitLogin(); if (e.key === 'Escape') hideLoginModal(); });
|
|
430
584
|
loginSubmit.addEventListener('click', submitLogin);
|
|
431
585
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
.then(function(
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
586
|
+
loginPopupBtn && loginPopupBtn.addEventListener('click', function() {
|
|
587
|
+
loginPopupBtn.disabled = true;
|
|
588
|
+
loginPopupBtn.textContent = 'Opening...';
|
|
589
|
+
fetch('/api/auth/start', { method: 'POST' })
|
|
590
|
+
.then(function(r) { return r.json(); })
|
|
591
|
+
.then(function(data) {
|
|
592
|
+
var popup = window.open(data.authUrl, 'fias-auth', 'width=500,height=650');
|
|
593
|
+
if (!popup || popup.closed) {
|
|
594
|
+
loginPopupHint.style.display = 'block';
|
|
595
|
+
loginPopupLink.href = data.authUrl;
|
|
596
|
+
loginPopupBtn.disabled = false;
|
|
597
|
+
loginPopupBtn.textContent = 'Sign in with FIAS';
|
|
598
|
+
} else {
|
|
599
|
+
loginPopupBtn.textContent = 'Waiting for sign-in...';
|
|
600
|
+
}
|
|
601
|
+
startAuthPolling();
|
|
602
|
+
}).catch(function(err) {
|
|
603
|
+
loginError.textContent = err.message;
|
|
604
|
+
loginError.style.display = 'block';
|
|
605
|
+
loginPopupBtn.disabled = false;
|
|
606
|
+
loginPopupBtn.textContent = 'Sign in with FIAS';
|
|
607
|
+
});
|
|
608
|
+
});
|
|
442
609
|
|
|
443
610
|
window.addEventListener('message', function(event) {
|
|
611
|
+
if (event.data && event.data.type === 'auth_callback') {
|
|
612
|
+
stopAuthPolling();
|
|
613
|
+
if (event.data.success) {
|
|
614
|
+
hasCredentials = true;
|
|
615
|
+
hideLoginModal();
|
|
616
|
+
logMessage('info', 'Authenticated for ' + currentEnvironment.toUpperCase());
|
|
617
|
+
switchMode('live');
|
|
618
|
+
} else {
|
|
619
|
+
loginError.textContent = event.data.error || 'Authentication failed';
|
|
620
|
+
loginError.style.display = 'block';
|
|
621
|
+
}
|
|
622
|
+
loginPopupBtn.disabled = false;
|
|
623
|
+
loginPopupBtn.textContent = 'Sign in with FIAS';
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
444
626
|
if (event.source !== iframe.contentWindow) return;
|
|
445
627
|
var data = event.data;
|
|
446
628
|
if (!data || typeof data !== 'object' || !data.type || !data.messageId) return;
|
|
@@ -474,6 +656,8 @@ const EMBEDDED_JS = `
|
|
|
474
656
|
logMessage('send', 'init');
|
|
475
657
|
});
|
|
476
658
|
|
|
659
|
+
function startAuthPolling() { if (authPollInterval) return; authPollInterval = setInterval(function() { fetch('/api/config').then(function(r){return r.json();}).then(function(c){ if(c.hasCredentials&&!hasCredentials){hasCredentials=true;stopAuthPolling();hideLoginModal();logMessage('info','Authenticated for '+currentEnvironment.toUpperCase());switchMode('live');} }).catch(function(){}); }, 2000); }
|
|
660
|
+
function stopAuthPolling() { if (authPollInterval) { clearInterval(authPollInterval); authPollInterval = null; } }
|
|
477
661
|
function updateModeBadge() {
|
|
478
662
|
modeBadge.textContent = currentMode.toUpperCase() + ' \\u21C6';
|
|
479
663
|
modeBadge.className = 'mode-badge ' + (currentMode === 'live' ? 'mode-live' : 'mode-mock');
|
|
@@ -496,6 +680,16 @@ const EMBEDDED_JS = `
|
|
|
496
680
|
if (payload && typeof payload === 'object') text += ' <span style="color:#6b7280">' + JSON.stringify(payload).substring(0, 120) + '</span>';
|
|
497
681
|
entry.innerHTML = text; consoleBody.appendChild(entry); consoleBody.scrollTop = consoleBody.scrollHeight;
|
|
498
682
|
}
|
|
683
|
+
function submitLogin() {
|
|
684
|
+
var apiKey = loginInput.value.trim();
|
|
685
|
+
if (!apiKey) { loginError.textContent = 'Please enter an API key.'; loginError.style.display = 'block'; return; }
|
|
686
|
+
loginSubmit.disabled = true; loginSubmit.textContent = 'Connecting...';
|
|
687
|
+
fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ apiKey: apiKey }) })
|
|
688
|
+
.then(function(r) { if (!r.ok) return r.json().then(function(e) { throw new Error(e.error); }); return r.json(); })
|
|
689
|
+
.then(function() { hasCredentials = true; hideLoginModal(); switchMode('live'); })
|
|
690
|
+
.catch(function(err) { loginError.textContent = err.message; loginError.style.display = 'block'; })
|
|
691
|
+
.finally(function() { loginSubmit.disabled = false; loginSubmit.textContent = 'Save & Connect'; });
|
|
692
|
+
}
|
|
499
693
|
})();
|
|
500
694
|
`;
|
|
501
695
|
//# sourceMappingURL=harness-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,8 +35,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const fs = __importStar(require("fs"));
|
|
37
37
|
jest.mock('fs');
|
|
38
|
+
jest.mock('../config/credentials', () => ({
|
|
39
|
+
loadApiKeyForEnvironment: jest.fn().mockReturnValue(''),
|
|
40
|
+
saveApiKeyForEnvironment: jest.fn(),
|
|
41
|
+
}));
|
|
38
42
|
const mockedFs = jest.mocked(fs);
|
|
39
43
|
const harness_server_1 = require("./harness-server");
|
|
44
|
+
const credentials_1 = require("../config/credentials");
|
|
40
45
|
// We need to test the server by actually starting it and making HTTP requests
|
|
41
46
|
// to avoid coupling to Express internals.
|
|
42
47
|
const http = require('http');
|
|
@@ -80,9 +85,7 @@ describe('server/harness-server', () => {
|
|
|
80
85
|
const defaultOptions = {
|
|
81
86
|
port: testPort,
|
|
82
87
|
pluginUrl: 'http://localhost:3100',
|
|
83
|
-
|
|
84
|
-
apiKey: '',
|
|
85
|
-
apiUrl: 'https://api.fias.app/v1',
|
|
88
|
+
defaultEnvironment: 'staging',
|
|
86
89
|
permissions: ['theme:read', 'entities:invoke'],
|
|
87
90
|
mockUser: { userId: 'dev_user_001', displayName: 'Dev User', avatar: null },
|
|
88
91
|
mockTheme: 'dark',
|
|
@@ -108,6 +111,8 @@ describe('server/harness-server', () => {
|
|
|
108
111
|
expect(data.hasCredentials).toBe(false);
|
|
109
112
|
expect(data.permissions).toEqual(['theme:read', 'entities:invoke']);
|
|
110
113
|
expect(data.mockTheme).toBe('dark');
|
|
114
|
+
expect(data.environment).toBe('staging');
|
|
115
|
+
expect(data.platformUrl).toBe('https://staging.fias.io');
|
|
111
116
|
});
|
|
112
117
|
});
|
|
113
118
|
describe('GET /api/credits', () => {
|
|
@@ -164,6 +169,57 @@ describe('server/harness-server', () => {
|
|
|
164
169
|
expect(data.error).toContain('Unknown bridge call type');
|
|
165
170
|
});
|
|
166
171
|
});
|
|
172
|
+
describe('POST /api/auth/start', () => {
|
|
173
|
+
it('returns an auth URL with staging platform URL', async () => {
|
|
174
|
+
const resp = await httpPost(testPort, '/api/auth/start', {});
|
|
175
|
+
expect(resp.status).toBe(200);
|
|
176
|
+
const data = JSON.parse(resp.body);
|
|
177
|
+
expect(data.authUrl).toContain('https://staging.fias.io/developer/cli-auth');
|
|
178
|
+
expect(data.authUrl).toContain(`port=${testPort}`);
|
|
179
|
+
expect(data.authUrl).toContain('state=');
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe('GET /callback', () => {
|
|
183
|
+
it('returns 400 when state does not match', async () => {
|
|
184
|
+
// First generate a state via /api/auth/start
|
|
185
|
+
await httpPost(testPort, '/api/auth/start', {});
|
|
186
|
+
const resp = await httpGet(testPort, '/callback?key=fias_sk_test&state=wrong_state');
|
|
187
|
+
expect(resp.status).toBe(400);
|
|
188
|
+
expect(resp.body).toContain('State mismatch');
|
|
189
|
+
});
|
|
190
|
+
it('returns 400 when key is missing', async () => {
|
|
191
|
+
const authResp = await httpPost(testPort, '/api/auth/start', {});
|
|
192
|
+
const authData = JSON.parse(authResp.body);
|
|
193
|
+
const state = new URL(authData.authUrl).searchParams.get('state');
|
|
194
|
+
const resp = await httpGet(testPort, `/callback?state=${state}`);
|
|
195
|
+
expect(resp.status).toBe(400);
|
|
196
|
+
expect(resp.body).toContain('Invalid API key');
|
|
197
|
+
});
|
|
198
|
+
it('saves credentials and returns success on valid callback', async () => {
|
|
199
|
+
const authResp = await httpPost(testPort, '/api/auth/start', {});
|
|
200
|
+
const authData = JSON.parse(authResp.body);
|
|
201
|
+
const state = new URL(authData.authUrl).searchParams.get('state');
|
|
202
|
+
const resp = await httpGet(testPort, `/callback?key=fias_sk_valid&state=${state}`);
|
|
203
|
+
expect(resp.status).toBe(200);
|
|
204
|
+
expect(resp.body).toContain('Authentication Successful');
|
|
205
|
+
expect(credentials_1.saveApiKeyForEnvironment).toHaveBeenCalledWith('staging', 'fias_sk_valid');
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
describe('POST /api/environment', () => {
|
|
209
|
+
it('rejects invalid environment values', async () => {
|
|
210
|
+
const resp = await httpPost(testPort, '/api/environment', { environment: 'invalid' });
|
|
211
|
+
expect(resp.status).toBe(400);
|
|
212
|
+
});
|
|
213
|
+
it('switches to production environment', async () => {
|
|
214
|
+
const resp = await httpPost(testPort, '/api/environment', { environment: 'production' });
|
|
215
|
+
expect(resp.status).toBe(200);
|
|
216
|
+
const data = JSON.parse(resp.body);
|
|
217
|
+
expect(data.environment).toBe('production');
|
|
218
|
+
expect(data.hasCredentials).toBe(false);
|
|
219
|
+
// Switch back
|
|
220
|
+
await httpPost(testPort, '/api/environment', { environment: 'staging' });
|
|
221
|
+
});
|
|
222
|
+
});
|
|
167
223
|
describe('GET /', () => {
|
|
168
224
|
it('serves fallback HTML when static files are not found', async () => {
|
|
169
225
|
const resp = await httpGet(testPort, '/');
|
|
@@ -171,6 +227,7 @@ describe('server/harness-server', () => {
|
|
|
171
227
|
expect(resp.body).toContain('Fias Arche Dev');
|
|
172
228
|
expect(resp.body).toContain('<!DOCTYPE html>');
|
|
173
229
|
expect(resp.body).toContain('MOCK');
|
|
230
|
+
expect(resp.body).toContain('env-selector');
|
|
174
231
|
});
|
|
175
232
|
});
|
|
176
233
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-server.test.js","sourceRoot":"","sources":["../../src/server/harness-server.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-server.test.js","sourceRoot":"","sources":["../../src/server/harness-server.test.ts"],"names":[],"mappings":"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"}
|