feat: implement browser extension for media publishing and add backend support for media management

This commit is contained in:
2026-04-03 00:39:15 +08:00
parent 8958cb44c0
commit 32d6a462cd
60 changed files with 8268 additions and 26 deletions
@@ -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,
);
}
});
},
});