9 changed files with 171 additions and 97 deletions
@ -0,0 +1,51 @@ |
|||||||
|
import { |
||||||
|
MessagesMetadata, |
||||||
|
sendToBackgroundViaRelay, |
||||||
|
} from "@plasmohq/messaging"; |
||||||
|
|
||||||
|
let activeExtension = false; |
||||||
|
|
||||||
|
export interface ExtensionHello { |
||||||
|
version: string; |
||||||
|
} |
||||||
|
|
||||||
|
function sendMessage<T, Payload>( |
||||||
|
message: keyof MessagesMetadata, |
||||||
|
payload: any, |
||||||
|
timeout: number = -1, |
||||||
|
) { |
||||||
|
return new Promise<T | null>((resolve) => { |
||||||
|
if (timeout >= 0) setTimeout(() => resolve(null), timeout); |
||||||
|
sendToBackgroundViaRelay<Payload, T>({ |
||||||
|
name: message, |
||||||
|
body: payload, |
||||||
|
}) |
||||||
|
.then((res) => { |
||||||
|
activeExtension = true; |
||||||
|
resolve(res); |
||||||
|
}) |
||||||
|
.catch(() => { |
||||||
|
activeExtension = false; |
||||||
|
resolve(null); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
export async function sendExtensionRequest( |
||||||
|
url: string, |
||||||
|
ops: any, |
||||||
|
): Promise<ExtensionHello | null> { |
||||||
|
return sendMessage("proxy-request", { url, ...ops }); |
||||||
|
} |
||||||
|
|
||||||
|
export async function extensionInfo(): Promise<ExtensionHello | null> { |
||||||
|
return sendMessage("hello", null, 300); |
||||||
|
} |
||||||
|
|
||||||
|
export function isExtensionActiveCached(): boolean { |
||||||
|
return activeExtension; |
||||||
|
} |
||||||
|
|
||||||
|
export async function isExtensionActive(): Promise<boolean> { |
||||||
|
return !!(await extensionInfo()); |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
import { |
||||||
|
makeProviders, |
||||||
|
makeStandardFetcher, |
||||||
|
targets, |
||||||
|
} from "@movie-web/providers"; |
||||||
|
|
||||||
|
import { isExtensionActiveCached } from "@/backend/extension/messaging"; |
||||||
|
import { |
||||||
|
makeExtensionFetcher, |
||||||
|
makeLoadBalancedSimpleProxyFetcher, |
||||||
|
} from "@/backend/providers/fetchers"; |
||||||
|
|
||||||
|
export function getProviders() { |
||||||
|
if (isExtensionActiveCached()) { |
||||||
|
return makeProviders({ |
||||||
|
fetcher: makeExtensionFetcher(), |
||||||
|
target: targets.BROWSER_EXTENSION, |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
return makeProviders({ |
||||||
|
fetcher: makeStandardFetcher(fetch), |
||||||
|
proxiedFetcher: makeLoadBalancedSimpleProxyFetcher(), |
||||||
|
target: targets.BROWSER, |
||||||
|
}); |
||||||
|
} |
Loading…
Reference in new issue