From 01bc6d9b08577ed7bf09bbb20939ddcd0701ac30 Mon Sep 17 00:00:00 2001 From: kyy Date: Thu, 11 Jun 2026 15:37:40 +0900 Subject: [PATCH] =?UTF-8?q?code-check=20lint=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 16 +++++++--- .../internal/bootstrap/tenant_seed_test.go | 1 - .../handler/auth_handler_login_test.go | 28 ++++++++-------- backend/internal/handler/dev_handler.go | 2 +- backend/internal/service/developer_service.go | 2 +- .../clients/ClientGeneralPage.claims.test.tsx | 15 +++++---- userfront/assets/translations/en.toml | 2 ++ userfront/assets/translations/ko.toml | 2 ++ userfront/assets/translations/template.toml | 2 ++ userfront/pubspec.lock | 32 ++++++++++++------- 10 files changed, 62 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index 99d92498..bb5da047 100644 --- a/Makefile +++ b/Makefile @@ -340,7 +340,11 @@ code-check-userfront-lint: code-check-front-lint: @echo "==> adminfront biome lint/format check" rm -rf adminfront/playwright-report adminfront/test-results - cd adminfront && CI=true npx pnpm install --frozen-lockfile --ignore-scripts + @if [ -d adminfront/node_modules ]; then \ + echo "adminfront/node_modules already present; skipping pnpm install."; \ + else \ + cd adminfront && CI=true npx pnpm install --frozen-lockfile --ignore-scripts; \ + fi cd adminfront && npx biome lint . cd adminfront && npx biome format . @echo "==> devfront biome lint/format check" @@ -354,9 +358,13 @@ code-check-front-lint: cd devfront && npx biome format . @echo "==> orgfront biome lint/format check" rm -rf orgfront/playwright-report orgfront/test-results - cd orgfront && npm ci --ignore-scripts - cd orgfront && npx biome lint . - cd orgfront && npx biome format . + @if [ -d orgfront/node_modules ]; then \ + echo "orgfront/node_modules already present; skipping npm install."; \ + else \ + cd orgfront && npm ci --ignore-scripts; \ + fi + cd orgfront && ./node_modules/@biomejs/biome/bin/biome lint . + cd orgfront && ./node_modules/@biomejs/biome/bin/biome format . code-check-backend-tests: @echo "==> backend tests" diff --git a/backend/internal/bootstrap/tenant_seed_test.go b/backend/internal/bootstrap/tenant_seed_test.go index e413498e..e6adb34d 100644 --- a/backend/internal/bootstrap/tenant_seed_test.go +++ b/backend/internal/bootstrap/tenant_seed_test.go @@ -405,5 +405,4 @@ func TestSeedTenantsCreatesMissingSeedRowsAndRepairsExistingSeedSlug(t *testing. if rootCount != 1 { t.Fatalf("existing-root row count = %d, want 1", rootCount) } - } diff --git a/backend/internal/handler/auth_handler_login_test.go b/backend/internal/handler/auth_handler_login_test.go index c4565403..bb335144 100644 --- a/backend/internal/handler/auth_handler_login_test.go +++ b/backend/internal/handler/auth_handler_login_test.go @@ -486,8 +486,8 @@ func runHeadlessPasswordLoginWithAssertionRequest( }) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", @@ -585,8 +585,8 @@ func runHeadlessPasswordLoginWithAssertionAndLoggerRequest( }) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", @@ -904,8 +904,8 @@ func TestHeadlessPasswordLogin_HeadlessLoginClientSuccess(t *testing.T) { mockKratos.On("FindIdentityIDByIdentifier", mock.Anything, "employee001").Return("kratos-identity-id", nil) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", @@ -1002,8 +1002,8 @@ func TestHeadlessPasswordLogin_OIDCSubjectConflictBlocksMixedRP(t *testing.T) { mockKratos.On("FindIdentityIDByIdentifier", mock.Anything, "employee002").Return("kratos-target-b", nil) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", @@ -1080,8 +1080,8 @@ func TestHeadlessPasswordLogin_OIDCSubjectSameAllowsMixedRP(t *testing.T) { mockKratos.On("FindIdentityIDByIdentifier", mock.Anything, "employee001").Return("kratos-userfront-a", nil) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", @@ -1281,8 +1281,8 @@ func TestHeadlessPasswordLogin_IgnoresInlineHeadlessJWKSWhenJWKSURIIsConfigured( mockKratos.On("FindIdentityIDByIdentifier", mock.Anything, "employee001").Return("kratos-identity-id", nil) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", @@ -1544,8 +1544,8 @@ func TestHeadlessPasswordLogin_InvalidClientAssertionRejected(t *testing.T) { }) h := &AuthHandler{ - IdpProvider: mockIdp, - KratosAdmin: mockKratos, + IdpProvider: mockIdp, + KratosAdmin: mockKratos, HeadlessJWKS: service.NewHeadlessJWKSCacheService(nil, jwksClient), Hydra: &service.HydraAdminService{ AdminURL: "http://hydra.test", diff --git a/backend/internal/handler/dev_handler.go b/backend/internal/handler/dev_handler.go index 1863ac78..014031f5 100644 --- a/backend/internal/handler/dev_handler.go +++ b/backend/internal/handler/dev_handler.go @@ -293,7 +293,7 @@ func normalizeDeveloperAccessPagesForHandler(pages []string) []string { } if page == domain.DeveloperAccessPageAll { normalized = []string{domain.DeveloperAccessPageAll} - seen = map[string]struct{}{domain.DeveloperAccessPageAll: struct{}{}} + seen = map[string]struct{}{domain.DeveloperAccessPageAll: {}} return } for _, allowed := range domain.DeveloperAccessPageOrder { diff --git a/backend/internal/service/developer_service.go b/backend/internal/service/developer_service.go index 799a1e2e..566b667b 100644 --- a/backend/internal/service/developer_service.go +++ b/backend/internal/service/developer_service.go @@ -28,7 +28,7 @@ func normalizeDeveloperAccessPages(pages []string) []string { } if page == domain.DeveloperAccessPageAll { normalized = []string{domain.DeveloperAccessPageAll} - seen = map[string]struct{}{domain.DeveloperAccessPageAll: struct{}{}} + seen = map[string]struct{}{domain.DeveloperAccessPageAll: {}} return } if page != domain.DeveloperAccessPageOverview && diff --git a/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx b/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx index 439ffe13..a244ee31 100644 --- a/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx +++ b/devfront/src/features/clients/ClientGeneralPage.claims.test.tsx @@ -347,12 +347,11 @@ describe("ClientGeneralPage RP claims", () => { const { container } = await renderPage(); - const tenantScopeRow = Array.from( - container.querySelectorAll("tr"), - ).find((row) => - Array.from(row.querySelectorAll("input")).some( - (input) => (input as HTMLInputElement).value === "tenant", - ), + const tenantScopeRow = Array.from(container.querySelectorAll("tr")).find( + (row) => + Array.from(row.querySelectorAll("input")).some( + (input) => (input as HTMLInputElement).value === "tenant", + ), ); expect(tenantScopeRow).toBeDefined(); @@ -362,7 +361,9 @@ describe("ClientGeneralPage RP claims", () => { expect(mandatorySwitch?.getAttribute("aria-checked")).toBe("true"); await act(async () => { - mandatorySwitch?.dispatchEvent(new MouseEvent("click", { bubbles: true })); + mandatorySwitch?.dispatchEvent( + new MouseEvent("click", { bubbles: true }), + ); }); await flush(); diff --git a/userfront/assets/translations/en.toml b/userfront/assets/translations/en.toml index fcc1f86e..3e53d2de 100644 --- a/userfront/assets/translations/en.toml +++ b/userfront/assets/translations/en.toml @@ -72,6 +72,7 @@ error = "An error occurred while cancelling consent: {error}" [msg.userfront.consent.scope] email = "Email address (account identification and notifications)" +offline_access = "Offline access (keep signed in)" openid = "OpenID authentication information (signin session check)" phone = "Phone number (identity verification and notifications)" profile = "Basic profile information (name, user identifier)" @@ -705,3 +706,4 @@ toggle_label = "Show active sessions only" [msg.userfront.audit.filter] description = "Toggle to view only active sessions." + diff --git a/userfront/assets/translations/ko.toml b/userfront/assets/translations/ko.toml index 725b4862..bd48e9d8 100644 --- a/userfront/assets/translations/ko.toml +++ b/userfront/assets/translations/ko.toml @@ -297,6 +297,7 @@ error = "취소 처리 중 오류가 발생했습니다: {error}" [msg.userfront.consent.scope] email = "이메일 주소 (계정 식별 및 알림 용도)" +offline_access = "오프라인 접근 (로그인 유지)" openid = "OpenID 인증 정보 (로그인 상태 확인)" phone = "휴대폰 번호 (본인 인증 및 알림)" profile = "기본 프로필 정보 (이름, 사용자 식별자)" @@ -926,3 +927,4 @@ toggle_label = "활성 세션만 보기" [msg.userfront.audit.filter] description = "활성화된 세션만 보려면 토글을 켜주세요." + diff --git a/userfront/assets/translations/template.toml b/userfront/assets/translations/template.toml index 2ddc2d11..09b991d2 100644 --- a/userfront/assets/translations/template.toml +++ b/userfront/assets/translations/template.toml @@ -269,6 +269,7 @@ error = "" [msg.userfront.consent.scope] email = "" +offline_access = "" openid = "" phone = "" profile = "" @@ -898,3 +899,4 @@ toggle_label = "" [msg.userfront.audit.filter] description = "" + diff --git a/userfront/pubspec.lock b/userfront/pubspec.lock index b23d80a9..8b6fff8c 100644 --- a/userfront/pubspec.lock +++ b/userfront/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.4.1" + version: "1.4.0" cli_config: dependency: transitive description: @@ -268,6 +268,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" + js: + dependency: transitive + description: + name: js + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + url: "https://pub.dev" + source: hosted + version: "0.7.2" leak_tracker: dependency: transitive description: @@ -320,18 +328,18 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.13.0" + version: "0.11.1" meta: dependency: transitive description: @@ -653,26 +661,26 @@ packages: dependency: transitive description: name: test - sha256: "280d6d890011ca966ad08df7e8a4ddfab0fb3aa49f96ed6de56e3521347a9ae7" + sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" url: "https://pub.dev" source: hosted - version: "1.30.0" + version: "1.26.3" test_api: dependency: transitive description: name: test_api - sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.10" + version: "0.7.7" test_core: dependency: transitive description: name: test_core - sha256: "0381bd1585d1a924763c308100f2138205252fb90c9d4eeaf28489ee65ccde51" + sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" url: "https://pub.dev" source: hosted - version: "0.6.16" + version: "0.6.12" toml: dependency: "direct main" description: