9 changed files with 171 additions and 97 deletions
@ -0,0 +1,51 @@
@@ -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 @@
@@ -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