ForwardToApi()를 통해 모든 esig API 호출을 루트로 저장 실패를 수정합니다
모든 10 esig 경로 핸들러는 해결 ESIG SERVICE URL에 지적 비 유능한 kamowsesig-service 프록시에. 모든 핸들러를 교체 forwardToApi() 그래서 표준 API 게이트웨이를 통해 흐름 요청 (APIService → ESigService) OTK 인증...
Replace upsertSigners with full delete+insert to handle frontend temp UUIDs
The frontend assigns temporary crypto.randomUUID() values to newly-added signers before any backend call. The previous upsert-by-uid logic would throw 404 for t...
Add /api/esig/** gateway routing to ESigService
Route all /api/esig/** requests through the existing API gateway to the dedicated ESigService (kamowsesig-service) instead of the non-existent proxy target. Add...
Watermark modifier (behind / 위 content)에 레이어 위치 옵션을 추가하십시오
- WatermarkModifier는 'layer' 필드를 얻습니다. 'behind' | 'above' (기본값에서 'behind') - ModifierLayer는 이제 'pass' prop ('below' | 'above')를 취합니다. - 아래 패스: 레이어 = 'behind'로 페...
Watermark modifier를 esign 툴박스에 추가
- WatermarkModifier 유형 : 로고타입 (전체/간단한), startPage, endPage, 교체 (-180-180), 크기 (10-90% 페이지 폭), 불투명 (2-60%), 단단한색 toggle, 색상 (헥스) - 로고, −45° 교체, 50% 크기, 15% 불투명에 ...
LM/RM 교체를 가진 가득 차있는 8 위치 격자에 상표 변조기
- LabelModifier.position는 이제 ModifierPosition8 (페이지 번호로 8 위치 그리드)를 사용합니다. - LM (중간): 각 선은 쓰기 형태를 가진 수직 알약으로 렌더링했습니다: 수직 경사 + 자전합니다 (180deg) - 원본은 CCW (바닥에 정상)를 ...
Tools/Modifiers 탭을 라이브 캔버스 오버레이로 할당합니다
- Split Toolbox는 도구 및 Modifiers 탭으로 사이드바를 왼쪽 - Modifiers 탭: 분할 목록 + 설정 패널 (옵션 B) - Page Numbers modifier: start/end 페이지, 8 위치 그리드 (TL/TM/TR/LM/RM/BL/BM/BR), 형식 ...
Correct 자전된 thumbnail 포지셔닝 및 회복 교체 변환
ThumbnailCanvas의 두 가지 버그 : 1. `height: \`${displayAspect * 100}%\``(ab-의 비율 높이 위치 요소 - 블록 높이가 제공 될 때 신뢰할 수없는 `aspectRatio: String(baseAspect)`를 가진 padding-top ...
Fix floating zoom control visibility and polish thumbnail placeholders
- Move floating zoom controls outside the scroll container and use position:absolute so they remain visible at all times regardless of scroll position; offs...
Page selection with animated glow border synced between canvas and thumbnail sidebar
- DesignTab holds selectedPageIndex as the single source of truth - Clicking any page in the main canvas selects it (onPageSelect) - Clicking a thumbnail select...
Move scroll ownership from PdfCanvas to canvasContainerRef
PdfCanvas root Box previously had overflow-auto + h-full, making it its own scroll container. This meant: - scrollbarGutter: stable on canvasContainerRef had no...
Fit to Width calculates actual container width instead of resetting to zoom 1
Reads **************** (which accounts for the stable scrollbar gutter) and the page's natural width via **************** then computes fitZoom = (availableWidt...
Replace all hardcoded purple with var(--color-primary) on Settings & Signers page
Signers icon, icon background, count badge, Add Signer buttons, Add First Signer button, empty-state illustration tint, add-another hover, and the ALL_OF_TYPE s...
Auto-select first signer, fix zoom control scrollbar gap, animate properties panel
- Toolbox auto-selects the first signer's UID when signers go from 0→1 - Canvas container uses scrollbar-gutter: stable so the sticky zoom/undo control mainta...
Reorder tabs, gate field tools by signer, redesign Settings & Signers tab
- Design is now the first tab; Settings & Signers is second - Toolbox shows "Add Signer" CTA (navigates to Settings) when no signers exist - Signature Tools, Id...
Render field controls as actual-looking form elements with signer color tinting
Each field type now renders a visual representation of the real control (text input, checkbox, toggle, dropdown, radio group, date picker, etc.) tinted with the...
Remove fixed height and scroll bars from field properties panel
The panel had two vertical scrollbars: 1. DesignTab wrapper had height: 200 + overflowY: auto 2. FieldPropertiesPanel root had height: 200 + overflow: hidden, ...
PDF를 방지하기 위해 PDF dim 루프가 끝날 때까지 Defer setTotalPages
50 페이지 PDF에서 setTotalPages를 호출하십시오. getPage() 치수 루프 마운트 즉시 50 ThumbnailCanvas 구성 요소. 각은 PDF.js로 돌아갑니다 (서버 thumbnails는 템플릿에 생성되지 않습니다), 공유에서 50 동시 작업을 할당 PDF.js ...
Expand component scan and add full datasource/JPA/Redis/MinIO config
ConversionServiceApplication was only scanning com.kamo.ConversionService, missing all shared library beans (ImageService, MinIOStorageService, MemberRepository...
Add kamo-shared-library build stage to resolve missing dependency
The Dockerfile was trying to fetch kamo-shared-library from Maven Central, which doesn't exist there. Mirror the SecurityService pattern: clone the shared libra...
SecurityService에서 ConversionService/DocsService로 모든 이미징 API 경로 마이그레이션
지금 변환 경로를 업로드 CONVERSION SERVICE URL을 통해 직접 호출: - POST /api/imaging/upload → /api/conversion/imaging/upload - POST /api/imaging/templates/upload → *********** ...
ImagingController 및 Bean/imaging 제거 — ConversionService 및 DocsService로 이동
Upload endpoints now live 에 ConversionService 에 /api/conversion/imaging/*. 모든 관리 및 다운로드 엔드포인트 지금 DocsService에서 /api/docs/imaging/*.
Add imaging management endpoints — move all non-upload imaging from SecurityService
- Add 17 imaging DTOs to beans/imaging/ (folders, documents, templates, updates) - Add ImagingController at /api/docs/imaging with all management + download end...
Add imaging upload endpoints — move all upload logic from SecurityService
- Add JPA, Redis, NATS, kamo-shared-library, JJWT, commons-io, jackson-hibernate6 to pom.xml - Add datasource, Redis master/replica, NATS, MinIO config to appli...
Next.js 16.2.3, TypeScript 6.0.2, Node 24, React 19 유형으로 업그레이드
- 16.2.3 및 eslint-config-next와 같은 핀 - 정확한 6.0.2, @types/node를 ^24로 업그레이드 - 모션 ^12 (motion/react imports)와 Framer-motion 교체 - Node 24.14.1에 핀으로 .nvmrc 추가 - tscon...
Delegate thumbnail generation to ConversionService, remove PDFBox dependency
ThumbnailGenerationJob now POSTs the converted PDF to ConversionService **************** unzips the response, and stores each thumb_p{n}.png in MinIO. PDFBox re...
Delegate thumbnail 세대를 변환 서비스, PDFBox 의존성을 제거
generateAndStoreThumbnails 이제 변환 PDF 변환 서비스 *************** 응답을 압축, 각 상점 thumb p{n}.png in MinIO, 페이지 WS 진행 상황을 게시합니다. PDFBox 제거.
Add ThumbnailService and POST **************** endpoint
Accepts a PDF file, renders each page at 150 DPI via PDFBox, packs per-page PNGs into a ZIP (thumb_p0.png, thumb_p1.png, …) and returns it. Centralises all thum...
Granular WS 진행으로 템플릿 업로드시 동기화 per-page thumbnail 발생
- pom.xml에 PDFBox 의존성 추가 - 변환 된 PDF를 저장 한 후, PDFRenderer를 통해 모든 페이지를 렌더링하고 {id} thumb p{n}.png로 업로드하십시오. - "Generated thumbnail N of M" 라벨이있는 페이지 (72-95% 범위) 당 ...
Thumbnail slivers를 겹쳐 쌓이는 페이지를 방지하고, PDF.js fallback를 가진 서버 측 엄밀을 추가하십시오
- flexShrink를 추가하십시오: PdfCanvas에 있는 0개에서 페이지 divs 그래서 페이지는 코드 란에서 압축하지 않습니다 - flexShrink를 추가하십시오: 같은 이유를 위한 PageThumbnailSidebar에 있는 엄밀한 품목에 0 - ThumbnailCanvas...
Generate per-page thumbnails for all PDF pages, store as {id}_thumb_p{n}.png
ThumbPageCount 필드 및 findNeedingPageThumbnails 쿼리에 대한 페이지 thumbnail 지원
Eager PDF 렌더링, 자연 스케일 정상화, 수평 스크롤 없음
- PdfCanvas: eager 렌더링 모든 페이지와 IntersectionObserver를 대체합니다. 관찰자 기반 접근은 디자인 탭이 시작될 때 신뢰할 수 없었습니다. display:none - 브라우저는 재화 교차 이벤트를 믿을 수 없습니다. 디스플레이의 조상이 전환 할 때 : ...
Next.js 16.2.3, TypeScript 6.0.2, Node 24, React 19 유형으로 업그레이드
- Next.js 16.2.3 과 Turbopack 과 기본적으로 dev 서버 - TypeScript 6.0.2 과 erasableSyntaxOnly 과 ES2022 대상 - @types/react@^19와 @types/react-dom@^19 (제 19 유형) - Node 24 호환성...
삭제 제거아이 DOM 충돌 PDF thumbnail 렌더링
Container.innerHTML + appendChild 패턴을 ThumbnailCanvas로 교체하십시오. React-managed <canvas> ref로. 오래된 접근은 React-owned를 맑게 했습니다. DOM 노드가 직접 시도할 때 React reconciliation이...
핸들 적용 가능한PlanIds 및 적용 가능한BillingCycles 문자열 배열
이 필드는 string[]로 입력되지만 .split(",")가 호출되었습니다. TypeScript 빌드 실패 발생.
Add CockroachDB transaction retry for template init endpoint
CockroachDB serializable isolation can trigger RETRY_SERIALIZABLE on the read-then-write pattern in initTemplate. Retries up to 3 times with backoff when detect...
OTK auth에 프록시 경로를 재생, 사용되지 않은 esigProxy 헬퍼를 제거
OTK는 auth 메커니즘입니다 - 이전 세션 헤더 접근 설치된 보안 패턴을 우회. 이제 모든 esig 프록시 루트 사용 apiProxy.ts에서 generateOTK를 다시 생성합니다.
Correct OTK Redis key format and add imaging template list endpoint
OTK keys use OTK<id> and ***<id> (no colon) matching the Next.js proxy. Added POST /api/esig/templates/list to query imaging templates via shared library ImgRep...
ESigService 프록시 경로 대신 OTK 대신 직접 세션 헤더 사용
Read *** Next.js에서 Redis 세션과 orgId/memberId를 신뢰로 전달하십시오. 내부 K8s DNS를 통해 ESigService에 대한 헤더. OTK 의존성을 제거하십시오.
Replace OTK auth with trusted session headers for internal K8s calls
ESigService is internal — the Next.js backend reads the session from Redis and passes orgId/memberId/userId as X-Org-Id, X-Member-Id, X-User-Id headers. No OTK ...
Init endpoint를 사용하여 편집기로드에서 imgId에 의해 찾기 또는 생성 템플릿을 만듭니다
Create page는 URL에서 imgId를 전달합니다. 편집 페이지는 이제 호출 init endpoint를 찾아서 ESignTemplate를 만들고, 다음을 사용합니다 디자인 운영 및 버전 역사를 위한 UUID를 반환합니다.
