refactor(sdk): simplify credential creation by internal error handling
The NewCredential function in the SDK now handles credential creation failures internally with a fatal log, removing the need for callers to check errors. This eliminates repetitive error handling across demo-app, relay-server, and tests, while ensuring failures result in immediate program termination.
lemon-mint committed
Oct 28, 2025 at 23:16 UTC
024eb777675c82ac29d829e55391e7e88ac6b7a3
5 files changed
+16
-40
cmd/demo-app/main.go
+1
-4
@@ -170,10 +170,7 @@ func (c *Canvas) handleWS(w http.ResponseWriter, r *http.Request) {
170
171
func runPaint(cmd *cobra.Command, args []string) error {
172
// 1) Create credential for this paint app
173
- cred, err := sdk.NewCredential()
174
- if err != nil {
175
- return fmt.Errorf("new credential: %w", err)
176
- }
173
+ cred := sdk.NewCredential()
174
175
// 2) Create SDK client and connect to relay(s)
176
client, err := sdk.NewClient(func(c *sdk.RDClientConfig) {
cmd/relay-server/main.go
+2
-5
@@ -13,7 +13,7 @@ import (
13
"github.com/spf13/cobra"
14
15
"github.com/gosuda/relaydns/relaydns"
16
- "github.com/gosuda/relaydns/relaydns/core/cryptoops"
16
+ "github.com/gosuda/relaydns/sdk"
17
)
18
19
var rootCmd = &cobra.Command{
@@ -46,10 +46,7 @@ func runServer(cmd *cobra.Command, args []string) error {
46
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
47
defer stop()
48
49
- cred, err := cryptoops.NewCredential()
50
- if err != nil {
51
- return err
52
- }
49
+ cred := sdk.NewCredential()
50
51
serv := relaydns.NewRelayServer(cred, flagBootstraps)
52
serv.Start()
cmd/relay-server/view.go
+1
-5
@@ -84,11 +84,7 @@ func serveHTTP(ctx context.Context, addr string, serv *relaydns.RelayServer, nod
84
targetALPN := alpns[0] // Use the first ALPN
85
86
// Temporary credential for this proxy connection
87
- cred, err := sdk.NewCredential()
88
- if err != nil {
89
- http.Error(w, "credential error: "+err.Error(), http.StatusInternalServerError)
90
- return
91
- }
87
+ cred := sdk.NewCredential()
88
89
client, err := initProxyClient(r)
90
if err != nil {
sdk/sdk.go
+6
-2
@@ -18,8 +18,12 @@ import (
18
"github.com/rs/zerolog/log"
19
)
20
21
-func NewCredential() (*cryptoops.Credential, error) {
22
- return cryptoops.NewCredential()
21
+func NewCredential() *cryptoops.Credential {
22
+ cred, err := cryptoops.NewCredential()
23
+ if err != nil {
24
+ log.Fatal().Err(err).Msg("Failed to create credential")
25
+ }
26
+ return cred
27
}
28
29
func webSocketDialer() func(context.Context, string) (io.ReadWriteCloser, error) {
sdk/sdk_e2e_test.go
+6
-24
@@ -86,10 +86,7 @@ func TestE2E_ClientToAppThroughRelay(t *testing.T) {
86
87
// 3. Create app credential and SDK client
88
log.Info().Msg("[TEST] Step 3: Creating app (listener) credential")
89
- appCred, err := NewCredential()
90
- if err != nil {
91
- t.Fatalf("Failed to create app credential: %v", err)
92
- }
89
+ appCred := NewCredential()
90
log.Debug().Str("app_id", appCred.ID()).Msg("[TEST] App credential created")
91
92
// 4. Create app SDK client and register listener
@@ -138,10 +135,7 @@ func TestE2E_ClientToAppThroughRelay(t *testing.T) {
135
136
// 7. Create client credential
137
log.Info().Msg("[TEST] Step 7: Creating client credential")
141
- clientCred, err := NewCredential()
142
- if err != nil {
143
- t.Fatalf("Failed to create client credential: %v", err)
144
- }
138
+ clientCred := NewCredential()
139
log.Debug().Str("client_id", clientCred.ID()).Msg("[TEST] Client credential created")
140
141
// 8. Create client SDK client
@@ -272,10 +266,7 @@ func TestE2E_MultipleConnections(t *testing.T) {
266
time.Sleep(500 * time.Millisecond)
267
268
// Setup app
275
- appCred, err := NewCredential()
276
- if err != nil {
277
- t.Fatalf("Failed to create app credential: %v", err)
278
- }
269
+ appCred := NewCredential()
270
271
appClient, err := NewClient(func(c *RDClientConfig) {
272
c.BootstrapServers = []string{"ws://127.0.0.1:14018/relay"}
@@ -308,10 +299,7 @@ func TestE2E_MultipleConnections(t *testing.T) {
299
time.Sleep(1 * time.Second)
300
301
// Create client
311
- clientCred, err := NewCredential()
312
- if err != nil {
313
- t.Fatalf("Failed to create client credential: %v", err)
314
- }
302
+ clientCred := NewCredential()
303
304
clientSDK, err := NewClient(func(c *RDClientConfig) {
305
c.BootstrapServers = []string{"ws://127.0.0.1:14018/relay"}
@@ -372,10 +360,7 @@ func TestE2E_ConnectionTimeout(t *testing.T) {
360
log.Info().Msg("=== Starting Connection Timeout Test ===")
361
362
// Create client with non-existent relay
375
- clientCred, err := NewCredential()
376
- if err != nil {
377
- t.Fatalf("Failed to create client credential: %v", err)
378
- }
363
+ clientCred := NewCredential()
364
365
// This should fail or timeout appropriately
366
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
@@ -401,10 +386,7 @@ func TestE2E_ConnectionTimeout(t *testing.T) {
386
}
387
388
// Try to dial to non-existent lease
404
- relayServerCred, err := cryptoops.NewCredential()
405
- if err != nil {
406
- t.Fatalf("Failed to create relay server credential: %v", err)
407
- }
389
+ relayServerCred := NewCredential()
390
391
relayServer := relaydns.NewRelayServer(relayServerCred, []string{"ws://127.0.0.1:14019/relay"})
392
relayServer.Start()