Revert "feat(desktop): сайт кооператива в scope_extensions динамического PWA-манифеста"

This reverts commit adea7038d3.
This commit is contained in:
coopops
2026-06-10 12:09:51 +00:00
parent adea7038d3
commit 93fda756aa
@@ -9,55 +9,18 @@ import { ssrMiddleware } from 'quasar/wrappers';
// сюда бы не дошло. Поэтому отдаём по /manifest.webmanifest — статики там нет,
// запрос проваливается до этого middleware. <link rel="manifest"> в HTML
// переписывается на этот путь в generateConfig.ts.
// Сайт кооператива (vars.website) подключается к PWA через scope_extensions:
// переходы из установленного приложения на сайт остаются в окне PWA, а не
// выкидывают в браузер. Источник — публичный getSystemInfo бэкенда (председатель
// меняет сайт в ЛК без редеплоя), кэш с TTL чтобы не дёргать бэкенд на каждый
// запрос манифеста. Работает в Chrome/Edge 138+ на десктопе при условии, что
// сайт отдаёт /.well-known/web-app-origin-association с записью
// {"https://<домен-лк>/": {"scope": "/"}}; на мобильных платформах браузеры
// scope_extensions пока не поддерживают.
let cachedWebsiteOrigin: string | null = null;
let cachedAt = 0;
const WEBSITE_TTL_MS = 5 * 60 * 1000;
async function getWebsiteOrigin(): Promise<string | null> {
if (Date.now() - cachedAt < WEBSITE_TTL_MS) return cachedWebsiteOrigin;
cachedAt = Date.now(); // и при ошибке не чаще TTL
try {
const response = await fetch(`${process.env.BACKEND_URL}/v1/graphql`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: '{ getSystemInfo { vars { website } } }' }),
});
const json = await response.json();
const website: string | undefined = json?.data?.getSystemInfo?.vars?.website;
cachedWebsiteOrigin = website
? new URL(website.startsWith('http') ? website : `https://${website}`).origin
: null;
} catch {
cachedWebsiteOrigin = null;
}
return cachedWebsiteOrigin;
}
export default ssrMiddleware(({ app }) => {
app.get('/manifest.webmanifest', async (req, res) => {
app.get('/manifest.webmanifest', (req, res) => {
const name = process.env.COOP_SHORT_NAME || 'Цифровой Кооператив';
const description =
process.env.SITE_DESCRIPTION ||
'кооперативная экономика для сообществ и бизнеса';
const manifest: Record<string, unknown> = {
// Явный id фиксирует identity приложения = "https://<домен>/" — этим же
// ключом сайт кооператива ссылается на ЛК в web-app-origin-association.
id: '/',
const manifest = {
name,
short_name: name,
description,
start_url: '/',
scope: '/',
display: 'standalone',
orientation: 'portrait',
background_color: '#ffffff',
@@ -75,12 +38,6 @@ export default ssrMiddleware(({ app }) => {
],
};
const websiteOrigin = await getWebsiteOrigin();
const ownHost = req.get('host');
if (websiteOrigin && ownHost && new URL(websiteOrigin).host !== ownHost) {
manifest.scope_extensions = [{ type: 'origin', origin: websiteOrigin }];
}
res.set({
'Content-Type': 'application/manifest+json',
'Cache-Control': 'no-cache, no-store, must-revalidate',