export type Lang = "fa" | "en"; export interface Product { key: string; name: string; tagline: Record; category: Record; status: "connected" | "future"; icon: "bermooda" | "hamsoo" | "spark"; } export const PRODUCTS: Product[] = [ { key: "bermooda", name: "Bermooda", tagline: { fa: "پلتفرم مدیریت کسب‌وکار و ERP", en: "ERP / Business Management Platform", }, category: { fa: "ERP", en: "ERP" }, status: "connected", icon: "bermooda", }, { key: "hamsoo", name: "Hamsoo", tagline: { fa: "شبکه کسب‌وکار و استعدادها", en: "Business & Talent Network", }, category: { fa: "شبکه", en: "Network" }, status: "connected", icon: "hamsoo", }, { key: "future", name: "Future Apps", tagline: { fa: "محصول بعدی شما، متصل به یک هویت", en: "Your next product, on one identity", }, category: { fa: "اکوسیستم", en: "Ecosystem" }, status: "future", icon: "spark", }, ]; export interface Feature { icon: "shield" | "key" | "users" | "building" | "activity" | "lock"; title: Record; description: Record; } export const FEATURES: Feature[] = [ { icon: "key", title: { fa: "احراز هویت OAuth 2.0 و OpenID Connect", en: "OAuth 2.0 & OpenID Connect" }, description: { fa: "جریان‌های استاندارد authorize، token و refresh با پشتیبانی از PKCE برای وب و موبایل.", en: "Standard authorize, token and refresh flows with PKCE support for web and mobile.", }, }, { icon: "shield", title: { fa: "نشست‌ها و دستگاه‌ها", en: "Sessions & Devices" }, description: { fa: "ردیابی نشست‌های فعال، لغو از راه دور و تشخیص دستگاه با چرخش توکن ایمن.", en: "Track active sessions, revoke remotely, detect devices, and rotate tokens safely.", }, }, { icon: "building", title: { fa: "سازمان‌ها و عضویت‌ها", en: "Organizations & Memberships" }, description: { fa: "مدل سازمانی یکپارچه که هر محصول می‌تواند از آن به عنوان شرکت یا تیم استفاده کند.", en: "A unified org model every product can reuse as company, team or workspace.", }, }, { icon: "users", title: { fa: "اپلیکیشن‌ها و اعتبار سرویس", en: "Applications & Service Credentials" }, description: { fa: "هر محصول client_id و client_secret اختصاصی دارد؛ توکن‌ها با مالکیت مشخص صادر می‌شوند.", en: "Each product gets its own client_id and secret; tokens carry explicit ownership.", }, }, { icon: "activity", title: { fa: "رویدادهای امنیتی و لاگ حسابرسی", en: "Security Events & Audit Log" }, description: { fa: "هر ورود، خروج و لغو نشست به عنوان رویداد قابل‌پیگیری ثبت می‌شود.", en: "Every login, logout and revocation is recorded as a traceable security event.", }, }, { icon: "lock", title: { fa: "محدودیت نرخ و محافظت بروته‌کنش", en: "Rate Limiting & Brute-force Protection" }, description: { fa: "قفل خودکار پس از تلاش‌های ناموفق و محدودیت نرخ در سطح کاربر و آدرس IP.", en: "Automatic lockout after failed attempts and per-user, per-IP rate limits.", }, }, ]; export const PROTOCOLS: string[] = [ "OAuth 2.0", "OpenID Connect", "PKCE", "JWT (RS256)", "MFA-Ready", ]; export const STEPS = [ { icon: "compass", title: { fa: "کشف", en: "Discover" }, description: { fa: "محصول از طریق .well-known/openid-configuration تنظیمات و endpointها را می‌خواند.", en: "A product reads configuration and endpoints via .well-known/openid-configuration.", }, }, { icon: "fingerprint", title: { fa: "مجوزدهی", en: "Authorize" }, description: { fa: "کاربر در صفحه ورود یکپارچه احراز می‌شود و دسترسی را تأیید می‌کند.", en: "The user authenticates on the unified login and consents to scopes.", }, }, { icon: "ticket", title: { fa: "دریافت توکن", en: "Receive Tokens" }, description: { fa: "پلتفرم توکن دسترسی JWT امضا‑شده با کلید خصوصی و یک refresh token صادر می‌کند.", en: "The platform issues a JWT access token signed with the private key plus a refresh token.", }, }, { icon: "badgeCheck", title: { fa: "تأیید", en: "Verify" }, description: { fa: "محصول فقط با کلید عمومی توکن را تأیید می‌کند؛ بدون دسترسی به کلید خصوصی.", en: "The product verifies the token using only the public key — never the private key.", }, }, ];