Files
ai-code-app/scripts/capture-auth-utils.mjs

95 lines
2.3 KiB
JavaScript

import fs from 'node:fs';
import path from 'node:path';
import process from 'node:process';
const DEFAULT_CAPTURE_STORAGE_KEY = 'work-app.token-access.registered-token';
const DEFAULT_CAPTURE_BASE_URL = 'https://preview.sm-home.cloud/';
function stripWrappingQuotes(value) {
if (!value) {
return value;
}
if (
(value.startsWith('"') && value.endsWith('"')) ||
(value.startsWith("'") && value.endsWith("'"))
) {
return value.slice(1, -1);
}
return value;
}
function applyEnvFile(filePath) {
if (!fs.existsSync(filePath)) {
return;
}
const content = fs.readFileSync(filePath, 'utf8');
for (const rawLine of content.split(/\r?\n/u)) {
const line = rawLine.trim();
if (!line || line.startsWith('#')) {
continue;
}
const separatorIndex = line.indexOf('=');
if (separatorIndex <= 0) {
continue;
}
const key = line.slice(0, separatorIndex).trim();
const value = stripWrappingQuotes(line.slice(separatorIndex + 1).trim());
if (!key || process.env[key] !== undefined) {
continue;
}
process.env[key] = value;
}
}
function loadCaptureEnv(cwd = process.cwd()) {
applyEnvFile(path.join(cwd, '.env'));
applyEnvFile(path.join(cwd, 'etc/servers/work-server/.env'));
}
export function getCaptureRuntimeConfig(cwd = process.cwd()) {
loadCaptureEnv(cwd);
return {
baseUrl:
process.env.CAPTURE_BASE_URL?.trim() ||
process.env.SERVER_COMMAND_TEST_URL?.trim() ||
DEFAULT_CAPTURE_BASE_URL,
tokenAccessStorageKey:
process.env.CAPTURE_REGISTERED_ACCESS_STORAGE_KEY?.trim() || DEFAULT_CAPTURE_STORAGE_KEY,
registeredAccessToken:
process.env.CAPTURE_REGISTERED_ACCESS_TOKEN?.trim() ||
process.env.VITE_ALLOWED_REGISTRATION_TOKEN?.trim() ||
process.env.SERVER_COMMAND_ACCESS_TOKEN?.trim() ||
'',
};
}
export async function createCaptureContext(browser, options = {}) {
const { tokenAccessStorageKey, registeredAccessToken } = getCaptureRuntimeConfig();
const context = await browser.newContext(options);
if (registeredAccessToken) {
await context.addInitScript(
({ accessToken, storageKey }) => {
window.localStorage.setItem(storageKey, accessToken);
},
{
accessToken: registeredAccessToken,
storageKey: tokenAccessStorageKey,
},
);
}
return context;
}