diff --git a/packages/firecamp-agent-manager/package.json b/packages/firecamp-agent-manager/package.json index 9827b137..d5ec169e 100644 --- a/packages/firecamp-agent-manager/package.json +++ b/packages/firecamp-agent-manager/package.json @@ -40,7 +40,7 @@ "node": ">=10" }, "dependencies": { - "@firecamp/rest-executor": "1.0.2", + "@firecamp/rest-executor": "^1.0.3", "@firecamp/types": "^0.0.11", "@firecamp/utils": "0.0.10" }, diff --git a/packages/firecamp-agent-manager/src/chrome.ts b/packages/firecamp-agent-manager/src/chrome.ts index 388bb8e9..252ddc76 100644 --- a/packages/firecamp-agent-manager/src/chrome.ts +++ b/packages/firecamp-agent-manager/src/chrome.ts @@ -8,11 +8,16 @@ import RestExecutor from '@firecamp/rest-executor/dist/esm'; const restExecutors: { [key: TId]: RestExecutor } = {}; // Request operations to handle -enum ERequestOperation { +enum EReqEvent { Send = 'send', Cancel = 'cancel', } +type ExtResponse = { + error: any, + response: IRestResponse +} + /** * Send the REST request to execute to the extension via * message passing API @@ -23,62 +28,40 @@ enum ERequestOperation { export const send = (request: IRest): Promise => { return new Promise((resolve, reject) => { chrome.runtime.sendMessage( - process.env.CHROME_APP_ID, + process.env.FIRECAMP_EXTENSION_AGENT_ID, { - requestOperation: ERequestOperation.Send, + requestOperation: EReqEvent.Send, request, requestId: request._meta.id, }, - (response) => { - // Reject if found any error in message passing - if (chrome.runtime.lastError) reject(chrome.runtime.lastError.message); + (result: ExtResponse) => { - resolve(response); + if(result?.response) return resolve(result.response); + if(result?.error) return reject(result.error); + + // reject if found any error in message passing + // console.log(chrome.runtime.lastError) // { message: ""} + if (chrome.runtime.lastError) return reject(chrome.runtime.lastError.message); + return; } ); }); }; -/** - * Register the chrome message listener, which handles REST request send and cancel operation - */ -if (_misc.firecampAgent() === EFirecampAgent.web) { - chrome?.runtime?.onMessageExternal?.addListener(async function ( - { - requestOperation, - request, - requestId, - }: { - requestOperation: ERequestOperation; - request: IRest; - requestId: TId; - }, - sender, - sendResponse - ) { - try { - switch (requestOperation) { - case ERequestOperation.Send: - restExecutors[request._meta.id] = new RestExecutor(); - - const response = await restExecutors[request._meta.id].send(request); - - delete restExecutors[requestId]; - - sendResponse(response); - - break; - - case ERequestOperation.Cancel: - restExecutors[requestId].cancel(); - - break; +export const ping = (ping: string= "ping"): Promise => { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage( + process.env.FIRECAMP_EXTENSION_AGENT_ID, + ping, + (pong: string) => { + if(pong === "pong") return resolve(pong); + // reject if found any error in message passing + if (chrome.runtime.lastError) return reject(chrome.runtime.lastError.message); + return reject("pong not received"); } - } catch (error) { - sendResponse(error); - } + ); }); -} +}; /** * Stop running Rest request @@ -89,18 +72,16 @@ if (_misc.firecampAgent() === EFirecampAgent.web) { export const cancel = async (requestId: string): Promise => { return new Promise((resolve, reject) => { chrome.runtime.sendMessage( - process.env.CHROME_APP_ID, + process.env.FIRECAMP_EXTENSION_AGENT_ID, { - requestOperation: ERequestOperation.Cancel, + requestOperation: EReqEvent.Cancel, requestId, }, - (response) => { + (result) => { // Reject if found any error in message passing if (chrome.runtime.lastError) reject(chrome.runtime.lastError.message); - delete restExecutors[requestId]; - - resolve(response); + resolve(result); } ); }); diff --git a/packages/firecamp-agent-manager/src/declarations.d.ts b/packages/firecamp-agent-manager/src/declarations.d.ts index 23a47413..82b3a849 100644 --- a/packages/firecamp-agent-manager/src/declarations.d.ts +++ b/packages/firecamp-agent-manager/src/declarations.d.ts @@ -11,7 +11,7 @@ declare global { } namespace NodeJS { interface ProcessEnv { - CHROME_APP_ID: string; + FIRECAMP_EXTENSION_AGENT_ID: string; } } } diff --git a/packages/firecamp-agent-manager/src/index.ts b/packages/firecamp-agent-manager/src/index.ts index 75e5145d..e77266b5 100644 --- a/packages/firecamp-agent-manager/src/index.ts +++ b/packages/firecamp-agent-manager/src/index.ts @@ -1,3 +1,4 @@ +import axios from 'axios'; import { EFirecampAgent, ERestBodyTypes, @@ -6,9 +7,8 @@ import { TId, } from '@firecamp/types'; import RestExecutor from '@firecamp/rest-executor/dist/esm'; -import axios from 'axios'; -import { _object } from '@firecamp/utils'; import parseBody from '@firecamp/rest-executor/dist/esm/helpers/body'; +import { _object } from '@firecamp/utils'; import * as extension from './chrome'; const restExecutors: { [key: TId]: RestExecutor } = {}; @@ -90,3 +90,8 @@ export const cancel = async ( return response.data; } }; + + +export const pingExtension = (): Promise => { + return extension.ping(); +}; \ No newline at end of file diff --git a/packages/firecamp-core/src/components/status-bar/items/FcAgentSelector.tsx b/packages/firecamp-core/src/components/status-bar/items/FcAgentSelector.tsx index d64c472b..c752ba4f 100644 --- a/packages/firecamp-core/src/components/status-bar/items/FcAgentSelector.tsx +++ b/packages/firecamp-core/src/components/status-bar/items/FcAgentSelector.tsx @@ -1,4 +1,4 @@ -import { FC } from 'react'; +import { FC, useEffect } from 'react'; import cx from 'classnames'; import { VscInfo } from '@react-icons/all-files/vsc/VscInfo'; import { EFirecampAgent } from '@firecamp/types'; @@ -21,14 +21,20 @@ const agentNamesMap = { }; const FcAgentSelector: FC = () => { - let { agent, changeFirecampAgent } = usePlatformStore( + let { agent, isExtAgentInstalled, changeFirecampAgent, checkExtAgentIntalled } = usePlatformStore( (s: IPlatformStore) => ({ agent: s.meta.agent, + isExtAgentInstalled: s.meta.isExtAgentInstalled, changeFirecampAgent: s.changeFirecampAgent, + checkExtAgentIntalled: s.checkExtAgentIntalled }), shallow ); + useEffect(()=> { + checkExtAgentIntalled(); + }, []); + let _onSelectAgent = (firecampAgent: EFirecampAgent) => { changeFirecampAgent(firecampAgent); }; @@ -56,22 +62,28 @@ const FcAgentSelector: FC = () => { name={agentNamesMap[EFirecampAgent.proxy]} isSelected={agent == EFirecampAgent.proxy} className={`mt-4 mb-2`} - description={`Send Rest requests via Firecamp's secure cloud servers.`} + description={`Send rest requests via Firecamp's secure cloud servers.`} onSelect={() => _onSelectAgent(EFirecampAgent.proxy)} /> _onSelectAgent(EFirecampAgent.extension)} > -