5d38312ef0
- New standalone Next.js marketing site under site/ (static export, SEO): landing, download/install guide (Bazaar/Myket/iOS-PWA/web), FAQ (JSON-LD), privacy, terms, support, /admin link editor. fa RTL, sitemap/robots/manifest. - Backend: SiteLinksService (JSON-file persisted) + GET /api/site/links (public) + POST /api/admin/site/links (X-Admin-Token). ADMIN_TOKEN + Site__DataDir via env. - compose: hokm-site service (:1520) + hokm_data volume for links JSON. - CI deploy job builds + deploys the site container. - deploy/SUBDOMAIN_SPLIT.md: nginx blocks, cert reissue, DNS, ENV split. - Exclude site/ from root tsc + web docker context. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { API_URL, APP_URL } from "./site";
|
|
|
|
export interface SiteLinks {
|
|
bazaarUrl: string;
|
|
bazaarEnabled: boolean;
|
|
myketUrl: string;
|
|
myketEnabled: boolean;
|
|
directApkUrl: string;
|
|
directApkEnabled: boolean;
|
|
webPlayUrl: string;
|
|
iosPwaEnabled: boolean;
|
|
instagram: string;
|
|
telegram: string;
|
|
supportEmail: string;
|
|
supportPhone: string;
|
|
appVersion: string;
|
|
}
|
|
|
|
// Safe defaults used until the API responds (or if it's unreachable).
|
|
export const FALLBACK_LINKS: SiteLinks = {
|
|
bazaarUrl: "",
|
|
bazaarEnabled: false,
|
|
myketUrl: "",
|
|
myketEnabled: false,
|
|
directApkUrl: "",
|
|
directApkEnabled: false,
|
|
webPlayUrl: APP_URL,
|
|
iosPwaEnabled: true,
|
|
instagram: "",
|
|
telegram: "",
|
|
supportEmail: "support@bargevasat.ir",
|
|
supportPhone: "",
|
|
appVersion: "",
|
|
};
|
|
|
|
/** Fetch admin-editable links at runtime (client-side). Falls back gracefully. */
|
|
export async function fetchLinks(): Promise<SiteLinks> {
|
|
try {
|
|
const res = await fetch(`${API_URL}/api/site/links`, { cache: "no-store" });
|
|
if (!res.ok) return FALLBACK_LINKS;
|
|
const data = (await res.json()) as Partial<SiteLinks>;
|
|
return { ...FALLBACK_LINKS, ...data };
|
|
} catch {
|
|
return FALLBACK_LINKS;
|
|
}
|
|
}
|