From 0de684696253181661903993fe53eb4e38c72e31 Mon Sep 17 00:00:00 2001 From: Blake Byrnes Date: Thu, 17 Mar 2022 10:51:04 -0400 Subject: [PATCH] feat(core): browserless session --- client/lib/ScriptInstance.ts | 2 +- core/connections/ConnectionToClient.ts | 2 +- core/lib/GlobalPool.ts | 2 ++ core/lib/Session.ts | 1 + interfaces/ISessionCreateOptions.ts | 2 +- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/client/lib/ScriptInstance.ts b/client/lib/ScriptInstance.ts index bf81b4183..53f70cf00 100644 --- a/client/lib/ScriptInstance.ts +++ b/client/lib/ScriptInstance.ts @@ -19,7 +19,7 @@ export default class ScriptInstance { constructor() { this.mode = process.env.NODE_ENV as any; if ( - !['development', 'production', 'multiverse', 'timetravel', 'background'].includes(this.mode) + !['development', 'production', 'multiverse', 'timetravel', 'browserless'].includes(this.mode) ) { this.mode = 'development'; } diff --git a/core/connections/ConnectionToClient.ts b/core/connections/ConnectionToClient.ts index 6a0512281..bc0884ffa 100644 --- a/core/connections/ConnectionToClient.ts +++ b/core/connections/ConnectionToClient.ts @@ -183,7 +183,7 @@ export default class ConnectionToClient session.once('closing', () => this.sessionIdToRemoteEvents.delete(sessionId)); session.once('closed', this.checkForAutoShutdown); } - return { tabId: tab.id, sessionId: session.id, frameId: tab.mainFrameId }; + return { tabId: tab?.id, sessionId: session.id, frameId: tab?.mainFrameId }; } /////// INTERNAL FUNCTIONS ///////////////////////////////////////////////////////////////////////////// diff --git a/core/lib/GlobalPool.ts b/core/lib/GlobalPool.ts index dfb885b69..355c0cfc3 100644 --- a/core/lib/GlobalPool.ts +++ b/core/lib/GlobalPool.ts @@ -178,6 +178,8 @@ export default class GlobalPool { const session = new Session(options); this.events.emit('session-created', { session }); + if (session.mode === 'browserless') return session; + const puppet = await this.getPuppet(session.plugins, session.browserEngine); if (disableMitm !== true) { diff --git a/core/lib/Session.ts b/core/lib/Session.ts index 3edd36101..773e436f2 100644 --- a/core/lib/Session.ts +++ b/core/lib/Session.ts @@ -422,6 +422,7 @@ export default class Session } public async createTab(): Promise { + if (this.mode === 'browserless') return null; const page = await this.newPage({ groupName: 'session' }); // if first tab, install session storage diff --git a/interfaces/ISessionCreateOptions.ts b/interfaces/ISessionCreateOptions.ts index a15f5e1cc..ac7616b57 100644 --- a/interfaces/ISessionCreateOptions.ts +++ b/interfaces/ISessionCreateOptions.ts @@ -14,7 +14,7 @@ export default interface ISessionCreateOptions extends ISessionOptions { startNavigationId?: number; }; browserEmulatorId?: string; - mode?: 'development' | 'multiverse' | 'production' | 'timetravel' | 'background'; + mode?: 'development' | 'multiverse' | 'production' | 'timetravel' | 'browserless'; userAgent?: string; scriptInstanceMeta?: IScriptInstanceMeta; userProfile?: IUserProfile;