57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import { browser } from "wxt/browser";
|
|
import { defineContentScript } from "wxt/utils/define-content-script";
|
|
|
|
type PublisherRequestMessage = {
|
|
source: "geo-admin";
|
|
type: "geo.publisher.request";
|
|
requestId: string;
|
|
action: "ping" | "detectPlatforms" | "registerInstallation" | "bindAccount" | "publishArticle";
|
|
payload?: unknown;
|
|
};
|
|
|
|
export default defineContentScript({
|
|
matches: ["http://*/*", "https://*/*"],
|
|
main() {
|
|
window.addEventListener("message", async (event: MessageEvent<PublisherRequestMessage>) => {
|
|
if (event.source !== window || !event.data || event.data.type !== "geo.publisher.request") {
|
|
return;
|
|
}
|
|
if (event.data.source !== "geo-admin") {
|
|
return;
|
|
}
|
|
|
|
const { requestId, action, payload } = event.data;
|
|
|
|
try {
|
|
const data = await browser.runtime.sendMessage({
|
|
type: "geo.publisher.request",
|
|
action,
|
|
payload,
|
|
});
|
|
|
|
window.postMessage(
|
|
{
|
|
source: "geo-extension",
|
|
type: "geo.publisher.response",
|
|
requestId,
|
|
success: true,
|
|
data,
|
|
},
|
|
window.location.origin,
|
|
);
|
|
} catch (error) {
|
|
window.postMessage(
|
|
{
|
|
source: "geo-extension",
|
|
type: "geo.publisher.response",
|
|
requestId,
|
|
success: false,
|
|
error: error instanceof Error ? error.message : "publisher_plugin_unknown_error",
|
|
},
|
|
window.location.origin,
|
|
);
|
|
}
|
|
});
|
|
},
|
|
});
|