feat: implement browser extension for media publishing and add backend support for media management
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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,
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user