Skip to content

Commit

Permalink
Merge pull request #522 from OdyseeTeam/feature-arfleet
Browse files Browse the repository at this point in the history
Inject data_item_id param into arfleet urls
  • Loading branch information
anbsky authored Aug 30, 2024
2 parents 1db077c + c6b3c35 commit 17f1173
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 19 deletions.
6 changes: 3 additions & 3 deletions app/arweave/arweave.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func ReplaceAssetUrls(baseUrl string, structure any, collPath, itemPath string)
return true
})

resolver := NewAssetResolver(baseUrl)
resolver := NewArfleetResolver(baseUrl)
subsUrls, err := resolver.ResolveUrls(origUrls)
if err != nil {
return nil, err
Expand All @@ -54,7 +54,7 @@ func ReplaceAssetUrl(baseUrl string, structure any, path string) (any, error) {

origUrl := gjson.GetBytes(jsonData, path).String()

resolver := NewAssetResolver(baseUrl)
resolver := NewArfleetResolver(baseUrl)
subsUrls, err := resolver.ResolveUrls([]string{origUrl})

if err != nil {
Expand All @@ -72,7 +72,7 @@ func ReplaceAssetUrl(baseUrl string, structure any, path string) (any, error) {
}

func GetClaimUrl(baseUrl, claim_id string) (string, error) {
resolver := NewAssetResolver(baseUrl)
resolver := NewArfleetResolver(baseUrl)
r, err := resolver.ResolveClaims([]string{claim_id})
if err != nil {
return "", err
Expand Down
10 changes: 10 additions & 0 deletions app/arweave/arweave_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,13 @@ func TestReplaceAssetUrl(t *testing.T) {
require.NoError(err)
assert.Regexp(`http://odycdn.com/explore/\w{64}\?filename=\w{64}\.jpg`, string(out))
}

func TestGetClaimUrl(t *testing.T) {
// t.Skip("skipping this in automated mode as it requires extra setup on arfleet")

require := require.New(t)
assert := assert.New(t)
url, err := GetClaimUrl("https://cdnhost.com", "91e8caf6d1e740aaa6235d4eb81b21ec21cb2652")
require.NoError(err)
assert.Regexp(`^https://cdnhost.com/explore/\w+\?data_item_id=\w+&filename=\w+.mp4$`, url)
}
59 changes: 43 additions & 16 deletions app/arweave/resolve.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,23 @@ import (
"fmt"
"io"
"net/http"
"net/url"
"time"
)

const (
batchResolverUrl = "https://migrator.arfleet.zephyrdev.xyz/batch-resolve"
batchClaimResolverUrl = "https://migrator.arfleet.zephyrdev.xyz/claims/batch-resolve"
resolverTimeout = 10 * time.Second

paramDataItemId = "data_item_id"
)

type HttpDoer interface {
Do(req *http.Request) (res *http.Response, err error)
}

type AssetResolver struct {
type ArfleetResolver struct {
baseUrl string
batchResolverUrl string
batchClaimResolverUrl string
Expand All @@ -29,21 +32,24 @@ type AssetResolver struct {
type BatchResolveUrlResponse map[string]ResolveUrlResponse

type ResolveUrlResponse struct {
URL string `json:"url"`
URLHash string `json:"url_hash"`
Arfleet string `json:"arfleet"`
Resolved bool `json:"resolved"`
URL string `json:"url"`
URLHash string `json:"url_hash"`
Arfleet string `json:"arfleet"`
DataItemId string `json:"data_item_id"`
Resolved bool `json:"resolved"`
}

type BatchResolveClaimResponse map[string]ResolveClaimResponse

type ResolveClaimResponse struct {
ClaimId string `json:"claim_id"`
Arfleet string `json:"arfleet"`
Resolved bool `json:"resolved"`
ClaimId string `json:"claim_id"`
Arfleet string `json:"arfleet"`
DataItemId string `json:"data_item_id"`
Resolved bool `json:"resolved"`
}

func NewAssetResolver(baseUrl string) *AssetResolver {
r := &AssetResolver{
func NewArfleetResolver(baseUrl string) *ArfleetResolver {
r := &ArfleetResolver{
baseUrl: baseUrl,
batchResolverUrl: batchResolverUrl,
batchClaimResolverUrl: batchClaimResolverUrl,
Expand All @@ -54,7 +60,7 @@ func NewAssetResolver(baseUrl string) *AssetResolver {
return r
}

func (c *AssetResolver) ResolveUrls(urls []string) (map[string]string, error) {
func (c *ArfleetResolver) ResolveUrls(urls []string) (map[string]string, error) {
substitutes := map[string]string{}

jsonData, err := json.Marshal(map[string][]string{"urls": urls})
Expand All @@ -76,12 +82,16 @@ func (c *AssetResolver) ResolveUrls(urls []string) (map[string]string, error) {
if !resolved.Resolved {
continue
}
substitutes[url] = c.baseUrl + resolved.Arfleet
u, err := appendParams(resolved.Arfleet, map[string]string{paramDataItemId: resolved.DataItemId})
if err != nil {
continue
}
substitutes[url] = c.baseUrl + u
}
return substitutes, nil
}

func (c *AssetResolver) ResolveClaims(claim_ids []string) (map[string]string, error) {
func (c *ArfleetResolver) ResolveClaims(claim_ids []string) (map[string]string, error) {
substitutes := map[string]string{}

jsonData, err := json.Marshal(map[string][]string{"claim_ids": claim_ids})
Expand All @@ -99,16 +109,20 @@ func (c *AssetResolver) ResolveClaims(claim_ids []string) (map[string]string, er
return nil, fmt.Errorf("error parsing json: %w", err)
}

for url, resolved := range resolvedList {
for claim, resolved := range resolvedList {
if !resolved.Resolved {
continue
}
substitutes[url] = c.baseUrl + resolved.Arfleet
u, err := appendParams(resolved.Arfleet, map[string]string{paramDataItemId: resolved.DataItemId})
if err != nil {
continue
}
substitutes[claim] = c.baseUrl + u
}
return substitutes, nil
}

func (c *AssetResolver) makeRequest(method, url string, jsonData []byte) ([]byte, error) {
func (c *ArfleetResolver) makeRequest(method, url string, jsonData []byte) ([]byte, error) {
client := c.client

req, err := http.NewRequest(method, url, bytes.NewBuffer(jsonData))
Expand All @@ -133,3 +147,16 @@ func (c *AssetResolver) makeRequest(method, url string, jsonData []byte) ([]byte
}
return body, nil
}

func appendParams(baseUrl string, params map[string]string) (string, error) {
u, err := url.Parse(baseUrl)
if err != nil {
return "", err
}
q := u.Query()
for k, v := range params {
q.Add(k, v)
}
u.RawQuery = q.Encode()
return u.String(), nil
}

0 comments on commit 17f1173

Please sign in to comment.