Dynamic profile lookup from auth connection
Profile name is returned by ensureAuth() from the auth connection (looked up by domain). No more storing profile names in settings.json for the applier flow. createBrowser() still supports legacy platform keys as fallback for searcher/setup. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -131,24 +131,25 @@ async function main() {
|
|||||||
if (timedOut) break;
|
if (timedOut) break;
|
||||||
console.log(`\n--- ${platform.toUpperCase()} (${platformJobs.length} jobs) ---\n`);
|
console.log(`\n--- ${platform.toUpperCase()} (${platformJobs.length} jobs) ---\n`);
|
||||||
let browser;
|
let browser;
|
||||||
|
let platformProfileName = null;
|
||||||
try {
|
try {
|
||||||
// LinkedIn and Wellfound need authenticated sessions; external ATS uses plain browser
|
// LinkedIn and Wellfound need authenticated sessions; external ATS uses plain browser
|
||||||
if (platform === 'external') {
|
if (platform === 'external') {
|
||||||
browser = await createBrowser(settings, null); // no profile needed
|
browser = await createBrowser(settings, null); // no profile needed
|
||||||
} else {
|
} else {
|
||||||
// Check auth status before creating browser
|
// Check auth status and get profile name dynamically
|
||||||
const kernelApiKey = process.env.KERNEL_API_KEY || settings.kernel_api_key;
|
const kernelApiKey = process.env.KERNEL_API_KEY || settings.kernel_api_key;
|
||||||
const authResult = await ensureAuth(platform, kernelApiKey);
|
const authResult = await ensureAuth(platform, kernelApiKey);
|
||||||
if (!authResult.ok) {
|
if (!authResult.ok) {
|
||||||
console.error(` ❌ ${platform} auth failed: ${authResult.reason}`);
|
console.error(` ❌ ${platform} auth failed: ${authResult.reason}`);
|
||||||
await sendTelegram(settings, `⚠️ *${platform}* auth failed — ${authResult.reason}`).catch(() => {});
|
await sendTelegram(settings, `⚠️ *${platform}* auth failed — ${authResult.reason}`).catch(() => {});
|
||||||
// Mark all jobs for this platform as needing retry
|
|
||||||
for (const job of platformJobs) {
|
for (const job of platformJobs) {
|
||||||
updateJobStatus(job.id, 'new', { retry_reason: 'auth_failed' });
|
updateJobStatus(job.id, 'new', { retry_reason: 'auth_failed' });
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
browser = await createBrowser(settings, platform);
|
platformProfileName = authResult.profileName;
|
||||||
|
browser = await createBrowser(settings, platformProfileName);
|
||||||
console.log(' ✅ Logged in\n');
|
console.log(' ✅ Logged in\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +213,7 @@ async function main() {
|
|||||||
try {
|
try {
|
||||||
const newBrowser = platform === 'external'
|
const newBrowser = platform === 'external'
|
||||||
? await createBrowser(settings, null)
|
? await createBrowser(settings, null)
|
||||||
: await createBrowser(settings, platform);
|
: await createBrowser(settings, platformProfileName);
|
||||||
browser = newBrowser;
|
browser = newBrowser;
|
||||||
console.log(` ✅ New browser session created`);
|
console.log(` ✅ New browser session created`);
|
||||||
} catch (browserErr) {
|
} catch (browserErr) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ async function getChromium(playwrightPath) {
|
|||||||
throw new Error('Playwright not found — install with: npm install -g playwright');
|
throw new Error('Playwright not found — install with: npm install -g playwright');
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createBrowser(settings, profileKey) {
|
export async function createBrowser(settings, profileNameOrKey) {
|
||||||
const kernelConfig = settings.kernel || {};
|
const kernelConfig = settings.kernel || {};
|
||||||
const playwrightPath = settings.browser?.playwright_path;
|
const playwrightPath = settings.browser?.playwright_path;
|
||||||
const apiKey = process.env.KERNEL_API_KEY || settings.kernel_api_key;
|
const apiKey = process.env.KERNEL_API_KEY || settings.kernel_api_key;
|
||||||
@@ -31,8 +31,11 @@ export async function createBrowser(settings, profileKey) {
|
|||||||
|
|
||||||
const kernel = new Kernel({ apiKey });
|
const kernel = new Kernel({ apiKey });
|
||||||
|
|
||||||
const profileName = profileKey ? kernelConfig.profiles?.[profileKey] : null;
|
// Accept either a profile name directly or a platform key (legacy fallback)
|
||||||
if (profileKey && !profileName) throw new Error(`No Kernel profile configured for "${profileKey}"`);
|
let profileName = profileNameOrKey;
|
||||||
|
if (profileName && kernelConfig.profiles?.[profileName]) {
|
||||||
|
profileName = kernelConfig.profiles[profileName];
|
||||||
|
}
|
||||||
|
|
||||||
const opts = { stealth: true };
|
const opts = { stealth: true };
|
||||||
if (profileName) opts.profile = { name: profileName };
|
if (profileName) opts.profile = { name: profileName };
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export async function ensureAuth(platform, apiKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (conn.status === 'AUTHENTICATED') {
|
if (conn.status === 'AUTHENTICATED') {
|
||||||
return { ok: true };
|
return { ok: true, profileName: conn.profile_name };
|
||||||
}
|
}
|
||||||
|
|
||||||
// NEEDS_AUTH — can we auto re-auth?
|
// NEEDS_AUTH — can we auto re-auth?
|
||||||
@@ -88,7 +88,7 @@ export async function ensureAuth(platform, apiKey) {
|
|||||||
|
|
||||||
if (updated.status === 'AUTHENTICATED') {
|
if (updated.status === 'AUTHENTICATED') {
|
||||||
console.log(` ✅ ${platform} re-authenticated`);
|
console.log(` ✅ ${platform} re-authenticated`);
|
||||||
return { ok: true };
|
return { ok: true, profileName: updated.profile_name };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updated.flow_status === 'FAILED') {
|
if (updated.flow_status === 'FAILED') {
|
||||||
|
|||||||
Reference in New Issue
Block a user