chore: fix test and RWD
Kim committed
Apr 1, 2026 at 18:38 UTC
00370a03fc45e5775b2e1bc7e5400aa84a97b223
2 files changed
+34
-17
frontend/src/components/Header.tsx
+2
-2
@@ -90,7 +90,7 @@ export function Header({
90
href={repoURL}
91
target="_blank"
92
rel="noopener noreferrer"
93
- className="hidden h-12 w-12 items-center justify-center rounded-full border border-border/70 bg-background/90 text-foreground shadow-sm transition-all hover:-translate-y-0.5 hover:border-primary/40 hover:text-primary xl:inline-flex"
93
+ className="inline-flex h-12 w-12 shrink-0 items-center justify-center rounded-full border border-border/70 bg-background/90 text-foreground shadow-sm transition-all hover:-translate-y-0.5 hover:border-primary/40 hover:text-primary"
94
aria-label="View source on GitHub"
95
>
96
<svg
@@ -105,7 +105,7 @@ export function Header({
105
</a>
106
)}
107
108
- <ThemeToggleButton className="hidden xl:inline-flex" />
108
+ <ThemeToggleButton className="inline-flex shrink-0" />
109
110
{isAdmin && onLogout && (
111
<TooltipProvider>
sdk/sdk_test.go
+32
-15
@@ -6,6 +6,7 @@ import (
6
"net/http"
7
"net/http/httptest"
8
"strings"
9
+ "sync"
10
"testing"
11
"time"
12
@@ -16,10 +17,10 @@ import (
17
)
18
19
func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
19
- const address = "0x00000000000000000000000000000000000000A1"
20
-
20
challengeReqCh := make(chan types.RegisterChallengeRequest, 1)
21
registerReqCh := make(chan types.RegisterRequest, 1)
22
+ var mu sync.RWMutex
23
+ var registeredIdentity types.Identity
24
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
25
switch r.URL.Path {
26
case types.PathSDKDomain:
@@ -34,6 +35,9 @@ func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
35
if err := json.NewDecoder(r.Body).Decode(&challengeReq); err != nil {
36
t.Fatalf("decode register challenge request: %v", err)
37
}
38
+ mu.Lock()
39
+ registeredIdentity = challengeReq.Identity.Copy()
40
+ mu.Unlock()
41
select {
42
case challengeReqCh <- challengeReq:
43
default:
@@ -51,6 +55,9 @@ func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
55
if err := json.NewDecoder(r.Body).Decode(®isterReq); err != nil {
56
t.Fatalf("decode register request: %v", err)
57
}
58
+ mu.RLock()
59
+ identity := registeredIdentity.Copy()
60
+ mu.RUnlock()
61
select {
62
case registerReqCh <- registerReq:
63
default:
@@ -58,7 +65,7 @@ func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
65
writeSDKTestEnvelope(w, http.StatusCreated, types.APIEnvelope[types.RegisterResponse]{
66
OK: true,
67
Data: types.RegisterResponse{
61
- Identity: types.Identity{Name: "demo-app", Address: address},
68
+ Identity: identity,
69
Hostname: "127.0.0.1",
70
Metadata: types.LeaseMetadata{Description: "demo"},
71
AccessToken: "jwt-register-1",
@@ -70,9 +77,12 @@ func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
77
Error: &types.APIError{Code: types.APIErrorCodeUnauthorized, Message: "not used in test"},
78
})
79
case types.PathSDKRenew:
80
+ mu.RLock()
81
+ identity := registeredIdentity.Copy()
82
+ mu.RUnlock()
83
writeSDKTestEnvelope(w, http.StatusOK, types.APIEnvelope[types.RenewResponse]{
84
OK: true,
75
- Data: types.RenewResponse{Identity: types.Identity{Name: "demo-app", Address: address}, AccessToken: "jwt-renew-1"},
85
+ Data: types.RenewResponse{Identity: identity, AccessToken: "jwt-renew-1"},
86
})
87
case types.PathSDKUnregister:
88
writeSDKTestEnvelope(w, http.StatusOK, types.APIEnvelope[any]{OK: true})
@@ -112,7 +122,7 @@ func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
122
}
123
})
124
waitForSDKTest(t, func() bool {
115
- return listener.Address() == address
125
+ return listener.Address() == challengeReq.Identity.Address
126
})
127
128
if challengeReq.TTL != 42 {
@@ -136,8 +146,8 @@ func TestNewListenerRegistersLeaseWithMainContract(t *testing.T) {
146
if registerReq.SIWESignature == "" {
147
t.Fatal("register request SIWESignature = empty, want signature")
148
}
139
- if listener.Address() != address {
140
- t.Fatalf("Address() = %q, want %q", listener.Address(), address)
149
+ if listener.Address() != challengeReq.Identity.Address {
150
+ t.Fatalf("Address() = %q, want %q", listener.Address(), challengeReq.Identity.Address)
151
}
152
if got := listener.Hostname(); got != "127.0.0.1" {
153
t.Fatalf("Hostname() = %q, want %q", got, "127.0.0.1")
@@ -165,8 +175,6 @@ func TestExposeNoRelayInputs(t *testing.T) {
175
}
176
177
func TestExposeResolvesPrivateKey(t *testing.T) {
168
- const address = "0x00000000000000000000000000000000000000A2"
169
-
178
privateKey := strings.Repeat("11", 32)
179
identity, err := utils.ResolveSecp256k1Identity(privateKey)
180
if err != nil {
@@ -208,7 +216,7 @@ func TestExposeResolvesPrivateKey(t *testing.T) {
216
writeSDKTestEnvelope(w, http.StatusCreated, types.APIEnvelope[types.RegisterResponse]{
217
OK: true,
218
Data: types.RegisterResponse{
211
- Identity: types.Identity{Name: "demo", Address: address},
219
+ Identity: types.Identity{Name: identity.Name, Address: identity.Address},
220
Hostname: "127.0.0.1",
221
AccessToken: "jwt-register-2",
222
},
@@ -221,7 +229,7 @@ func TestExposeResolvesPrivateKey(t *testing.T) {
229
case types.PathSDKRenew:
230
writeSDKTestEnvelope(w, http.StatusOK, types.APIEnvelope[types.RenewResponse]{
231
OK: true,
224
- Data: types.RenewResponse{Identity: types.Identity{Name: "demo", Address: address}, AccessToken: "jwt-renew-2"},
232
+ Data: types.RenewResponse{Identity: types.Identity{Name: identity.Name, Address: identity.Address}, AccessToken: "jwt-renew-2"},
233
})
234
case types.PathSDKUnregister:
235
writeSDKTestEnvelope(w, http.StatusOK, types.APIEnvelope[any]{OK: true})
@@ -259,9 +267,9 @@ func TestExposeResolvesPrivateKey(t *testing.T) {
267
}
268
269
func TestExposeGeneratesAddressWithoutPrivateKey(t *testing.T) {
262
- const address = "0x00000000000000000000000000000000000000A3"
263
-
270
challengeReqCh := make(chan types.RegisterChallengeRequest, 1)
271
+ var mu sync.RWMutex
272
+ var registeredIdentity types.Identity
273
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
274
switch r.URL.Path {
275
case types.PathSDKDomain:
@@ -276,6 +284,9 @@ func TestExposeGeneratesAddressWithoutPrivateKey(t *testing.T) {
284
if err := json.NewDecoder(r.Body).Decode(&challengeReq); err != nil {
285
t.Fatalf("decode register challenge request: %v", err)
286
}
287
+ mu.Lock()
288
+ registeredIdentity = challengeReq.Identity.Copy()
289
+ mu.Unlock()
290
select {
291
case challengeReqCh <- challengeReq:
292
default:
@@ -293,10 +304,13 @@ func TestExposeGeneratesAddressWithoutPrivateKey(t *testing.T) {
304
if err := json.NewDecoder(r.Body).Decode(®isterReq); err != nil {
305
t.Fatalf("decode register request: %v", err)
306
}
307
+ mu.RLock()
308
+ identity := registeredIdentity.Copy()
309
+ mu.RUnlock()
310
writeSDKTestEnvelope(w, http.StatusCreated, types.APIEnvelope[types.RegisterResponse]{
311
OK: true,
312
Data: types.RegisterResponse{
299
- Identity: types.Identity{Name: "demo", Address: address},
313
+ Identity: identity,
314
Hostname: "127.0.0.1",
315
AccessToken: "jwt-register-3",
316
},
@@ -307,9 +321,12 @@ func TestExposeGeneratesAddressWithoutPrivateKey(t *testing.T) {
321
Error: &types.APIError{Code: types.APIErrorCodeUnauthorized, Message: "not used in test"},
322
})
323
case types.PathSDKRenew:
324
+ mu.RLock()
325
+ identity := registeredIdentity.Copy()
326
+ mu.RUnlock()
327
writeSDKTestEnvelope(w, http.StatusOK, types.APIEnvelope[types.RenewResponse]{
328
OK: true,
312
- Data: types.RenewResponse{Identity: types.Identity{Name: "demo", Address: address}, AccessToken: "jwt-renew-3"},
329
+ Data: types.RenewResponse{Identity: identity, AccessToken: "jwt-renew-3"},
330
})
331
case types.PathSDKUnregister:
332
writeSDKTestEnvelope(w, http.StatusOK, types.APIEnvelope[any]{OK: true})