fix and update

This commit is contained in:
lendry
2026-06-29 12:17:25 +03:00
parent 923a028cdd
commit 75ccbe5fc4
39 changed files with 1619 additions and 63 deletions

View File

@@ -1,5 +1,6 @@
import type { DocBlock } from '@/lib/docs-pages';
import { OAuthCodeTabs } from '@/components/oauth-code-tabs';
import { OneTapCodeTabs } from '@/components/one-tap-code-tabs';
import { AuthLoginCodeTabs } from '@/components/auth-code-tabs';
import { AuthLdapCodeTabs } from '@/components/auth-ldap-code-tabs';
import { BotCodeTabs } from '@/components/bot-code-tabs';
@@ -67,6 +68,8 @@ export function DocBlockRenderer({ block }: { block: DocBlock }) {
);
case 'oauth-examples':
return <OAuthCodeTabs />;
case 'one-tap-examples':
return <OneTapCodeTabs />;
case 'auth-login-examples':
return <AuthLoginCodeTabs />;
case 'auth-ldap-examples':

View File

@@ -1,7 +1,7 @@
'use client';
import Link from 'next/link';
import { ArrowRight, BookOpen, Bot, Code2, Rocket, Shield } from 'lucide-react';
import { ArrowRight, BookOpen, Bot, Code2, MousePointerClick, Rocket, Shield } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { docNavigation, groupDocNavigation } from '@/lib/navigation';
@@ -20,6 +20,12 @@ const highlights = [
description: 'Стандартный OpenID Connect: Discovery, client_id, PKCE, form-urlencoded token. Примеры для PHP без доработки OidcProvider.',
href: '/docs/oauth'
},
{
icon: MousePointerClick,
title: 'One Tap Login',
description: 'FedCM и виджет sso-widget.js: вход в один клик на сайтах-клиентов без полного редиректа.',
href: '/docs/one-tap-login'
},
{
icon: Bot,
title: 'Telegram Bot API',

View File

@@ -0,0 +1,42 @@
'use client';
import { useEffect, useMemo, useState } from 'react';
import { fetchPublicSettingsClient } from '@/lib/api';
import { buildOneTapExamples, buildOneTapUrls } from '@/lib/one-tap-examples';
import { resolveFrontendBase, resolveOAuthApiBase } from '@/lib/oauth-url';
import { CodeExampleTabs } from '@/components/code-example-tabs';
export function OneTapCodeTabs() {
const [apiBase, setApiBase] = useState('http://localhost:3000');
const [frontendBase, setFrontendBase] = useState('http://localhost:3002');
const [projectName, setProjectName] = useState('MVK ID');
useEffect(() => {
void fetchPublicSettingsClient()
.then((settings) => {
setApiBase(resolveOAuthApiBase(settings));
setFrontendBase(resolveFrontendBase(settings));
if (settings.PROJECT_NAME?.trim()) {
setProjectName(settings.PROJECT_NAME.trim());
}
})
.catch(() => undefined);
}, []);
const urls = useMemo(() => buildOneTapUrls(apiBase, frontendBase, projectName), [apiBase, frontendBase, projectName]);
const examples = useMemo(() => buildOneTapExamples(urls), [urls]);
return (
<div className="space-y-3">
<p className="text-sm text-zinc-500 dark:text-zinc-400">
API (issuer): <code className="rounded bg-zinc-100 px-1.5 py-0.5 dark:bg-zinc-800">{apiBase}</code>
{' · '}
Frontend / виджет: <code className="rounded bg-zinc-100 px-1.5 py-0.5 dark:bg-zinc-800">{frontendBase}</code>
{' — '}
из настроек <strong>PUBLIC_API_URL</strong>, <strong>PUBLIC_FRONTEND_URL</strong> и <strong>PROJECT_NAME</strong>.
</p>
<CodeExampleTabs examples={examples} />
</div>
);
}