Update seller store experience

This commit is contained in:
R524809
2026-09-08 16:19:38 +08:00
parent ceb644a3f9
commit 319887726e
25 changed files with 31417 additions and 127 deletions
@@ -3,6 +3,7 @@ import {
supportedProductPlatform,
} from '../lib/source-parsers.js';
import type { OzonPageJsonFetcher } from '../lib/ozon-parser.js';
import type { MarketplacePageStateFetcher } from '../lib/source-parsers.js';
export default defineContentScript({
matches: [
@@ -72,6 +73,9 @@ export default defineContentScript({
supportedProductPlatform() === 'ozon'
? requestOzonPageJson
: undefined,
supportedProductPlatform() && supportedProductPlatform() !== 'ozon'
? requestMarketplacePageState
: undefined,
);
const response = await browser.runtime.sendMessage({
type: 'atlas.collect',
@@ -128,6 +132,23 @@ const requestOzonPageJson: OzonPageJsonFetcher = ({ kind, sku }) =>
);
});
const requestMarketplacePageState: MarketplacePageStateFetcher = (platform) =>
new Promise((resolve) => {
const requestId = crypto.randomUUID();
const timeout = window.setTimeout(() => {
window.removeEventListener('message', receive);
resolve({});
}, 3_000);
const receive = (event: MessageEvent<unknown>) => {
if (event.source !== window || !isMarketplaceStateResponse(event.data, requestId)) return;
window.clearTimeout(timeout);
window.removeEventListener('message', receive);
resolve(event.data.data);
};
window.addEventListener('message', receive);
window.postMessage({ source: 'atlas-collector', type: 'source-page-state.request', requestId, platform }, location.origin);
});
function isBridgeResponse(
value: unknown,
requestId: string,
@@ -149,3 +170,10 @@ function isBridgeResponse(
(message.ok || typeof message.error === 'string')
);
}
function isMarketplaceStateResponse(value: unknown, requestId: string): value is { source: 'atlas-collector'; type: 'source-page-state.response'; requestId: string; data: unknown } {
if (!value || typeof value !== 'object' || Array.isArray(value)) return false;
const message = value as Record<string, unknown>;
return message.source === 'atlas-collector' && message.type === 'source-page-state.response'
&& message.requestId === requestId && !!message.data && typeof message.data === 'object';
}