From 1f3ac220d1265c52c7031aad47f933b708c06a90 Mon Sep 17 00:00:00 2001 From: Carlosokumu Date: Mon, 24 Feb 2025 14:49:58 +0300 Subject: [PATCH] feat: request and resolve aliases. --- remote/http/service.go | 65 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/remote/http/service.go b/remote/http/service.go index aca8ae0..a937870 100644 --- a/remote/http/service.go +++ b/remote/http/service.go @@ -225,27 +225,76 @@ func (as *HTTPAccountService) CheckAliasAddress(ctx context.Context, alias strin } func resolveAliasAddress(ctx context.Context, alias string) (*models.AliasAddress, error) { - var r models.AliasAddress + var ( + aliasEnsResult models.AliasEnsAddressResult + ) - ep, err := url.JoinPath(config.CheckAliasURL, alias) + ep, err := url.JoinPath(config.AliasEnsURL, "/resolve") if err != nil { return nil, err } - req, err := http.NewRequest("GET", ep, nil) + + u, err := url.Parse(ep) if err != nil { return nil, err } - _, err = doRequest(ctx, req, &r) - return &r, err + + query := u.Query() + query.Set("name", alias) + u.RawQuery = query.Encode() + + req, err := http.NewRequest("GET", u.String(), nil) + if err != nil { + return nil, err + } + _, err = doRequest(ctx, req, &aliasEnsResult) + if err != nil { + return nil, err + } + return &models.AliasAddress{Address: aliasEnsResult.Address}, err } -// TODO: Use actual custodial api to request available alias func (as *HTTPAccountService) RequestAlias(ctx context.Context, publicKey string, hint string) (*models.RequestAliasResult, error) { if as.SS == nil { return nil, fmt.Errorf("The storage service cannot be nil") } - svc := dev.NewDevAccountService(ctx, as.SS) - return svc.RequestAlias(ctx, publicKey, hint) + if as.UseApi { + enr, err := requestEnsAlias(ctx, publicKey, hint) + if err != nil { + return nil, err + } + return &models.RequestAliasResult{Alias: enr.Name}, nil + } else { + svc := dev.NewDevAccountService(ctx, as.SS) + return svc.RequestAlias(ctx, publicKey, hint) + } +} + +func requestEnsAlias(ctx context.Context, publicKey string, hint string) (*models.AliasEnsResult, error) { + var r models.AliasEnsResult + + ep, err := url.JoinPath(config.AliasEnsURL, "/register") + if err != nil { + return nil, err + } + //Payload with the address and hint to derive an ENS name + payload := map[string]string{ + "address": publicKey, + "hint": hint, + } + payloadBytes, err := json.Marshal(payload) + if err != nil { + return nil, err + } + req, err := http.NewRequest("POST", ep, bytes.NewBuffer(payloadBytes)) + if err != nil { + return nil, err + } + _, err = doRequest(ctx, req, &r) + if err != nil { + return nil, err + } + return &r, nil } // TODO: remove eth-custodial api dependency