feat(auth-adapter,bff-kit,client-shell): 마지막 추출 배치
@yakcloud/auth-adapter: core 인터페이스(프레임워크 무관, ds-sdk type-only) + dev-bypass + next-auth 격리 계층(peer). exports 서브패스(./core·./dev-bypass). @yakcloud/bff-kit: respond(web 표준)·serialize(Prisma-free)·ratelimit·session(AuthAdapter DI). auth-adapter=devDependency(type-only), 죽은 next peer 제거. @yakcloud/client-shell: ServiceClientShell 셸 크롬(헤더/탭/pane/가드)+패널 슬롯+BackupPanel 스텁. (FileBrowser 는 Phase 1) FIX-FIRST 반영: client-shell tsconfig jsx:react-jsx + @types/react(-dom), bff-kit/auth-adapter += @types/node. 7개 패키지 전부 tsc --noEmit 통과. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
76
packages/client-shell/src/sheets/ConnectionHelpSheet.tsx
Normal file
76
packages/client-shell/src/sheets/ConnectionHelpSheet.tsx
Normal file
@ -0,0 +1,76 @@
|
||||
"use client";
|
||||
|
||||
// @yakcloud/client-shell — 연결 도움말 사이드 시트(usePanelSheets 로 열림).
|
||||
// 자격증명 없이 접속 방법만: host/port(예시 placeholder), <ALIAS>_* env 키 이름, 로컬 Docker 사용 안내.
|
||||
// ⛔ /api/internal/credentials 등 비밀 fetch 금지(그런 엔드포인트는 존재하면 안 됨). 값은 전부 placeholder.
|
||||
// ui(CardSheet, CodeBlock, C) 런타임 소비, ds-sdk(BIND_ENV_VARS, bindEnvKeys) type-only 아님 — 상수/헬퍼는 값 import.
|
||||
import { CardSheet, CodeBlock, C } from "@yakcloud/ui";
|
||||
import { BIND_ENV_VARS, bindEnvKeys } from "@yakcloud/ds-sdk";
|
||||
import type { ServiceTypeDTO } from "@yakcloud/ds-sdk";
|
||||
|
||||
export function ConnectionHelpSheet({
|
||||
open,
|
||||
onClose,
|
||||
sourceType,
|
||||
alias,
|
||||
scrollContainer,
|
||||
}: {
|
||||
open: boolean;
|
||||
onClose: () => void;
|
||||
sourceType: ServiceTypeDTO;
|
||||
alias: string; // 앱 바인딩 별칭(예: "mydb") → PREFIX 도출
|
||||
scrollContainer?: HTMLElement | null;
|
||||
}) {
|
||||
const vars = BIND_ENV_VARS[sourceType];
|
||||
const keys = bindEnvKeys(alias, sourceType);
|
||||
|
||||
return (
|
||||
<CardSheet
|
||||
open={open}
|
||||
onClose={onClose}
|
||||
scrollContainer={scrollContainer}
|
||||
title="연결 방법"
|
||||
subtitle="자격증명은 노출되지 않습니다. 앱 파드에는 아래 환경변수가 자동 주입됩니다."
|
||||
>
|
||||
<div className="cs-help">
|
||||
<h4>주입되는 환경변수</h4>
|
||||
<ul className="cs-env-list">
|
||||
{vars.map((v, i) => {
|
||||
const key = keys[i];
|
||||
return (
|
||||
<li key={v.suffix}>
|
||||
<code>{key ?? `${alias.toUpperCase()}_${v.suffix}`}</code>
|
||||
<span className="cs-env-desc">{v.desc}</span>
|
||||
<span className="cs-env-example">
|
||||
예: <em>{v.example || "(빈값)"}</em>
|
||||
</span>
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
|
||||
<h4>로컬 Docker 예시 (모두 placeholder)</h4>
|
||||
<CodeBlock>
|
||||
<C># 실제 값이 아닌 예시입니다. 값은 서버에서만 조립됩니다.</C>
|
||||
<br />
|
||||
docker run \
|
||||
<br />
|
||||
{vars.slice(0, 4).map((v, i) => {
|
||||
const key = keys[i] ?? `${alias.toUpperCase()}_${v.suffix}`;
|
||||
return (
|
||||
<span key={v.suffix}>
|
||||
{" "}-e {key}=<{v.suffix.toLowerCase()}> \
|
||||
<br />
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
{" "}your-app:latest
|
||||
</CodeBlock>
|
||||
|
||||
<p className="cs-help-note">
|
||||
비밀번호·액세스 키는 이 화면에 표시되지 않으며, 앱 실행 시점에만 파드 환경으로 전달됩니다.
|
||||
</p>
|
||||
</div>
|
||||
</CardSheet>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user