1
1
const assert = require ( 'assert' )
2
2
const stringKey = require ( 'dat-encoding' ) . toStr
3
3
const get = require ( 'simple-get' )
4
+ const parseUrl = require ( 'parse-dat-url' )
4
5
const datDns = require ( 'dat-dns' ) ( )
5
6
const debug = require ( 'debug' ) ( 'dat-link-resolve' )
6
7
@@ -14,6 +15,7 @@ function resolve (link) {
14
15
try {
15
16
// validates + removes dat://
16
17
// also works for http urls with keys in them
18
+
17
19
key = stringKey ( link )
18
20
} catch ( e ) { } // needs lookup
19
21
@@ -28,29 +30,17 @@ function resolve (link) {
28
30
29
31
function lookup ( ) {
30
32
return new Promise ( ( resolve , reject ) => {
31
- // if it starts with http or dat: use as is, otherwise prepend http://
32
- const urlLink = ( link . indexOf ( 'http' ) && link . indexOf ( 'dat:' ) ) ? ( 'http://' + link ) : link
33
-
34
- function resolveName ( ) {
35
- debug ( 'resolveName' , urlLink )
36
- datDns . resolveName ( urlLink ) . then ( ( key ) => {
37
- debug ( 'resolved' , key )
38
- if ( key ) return resolve ( key )
39
- } ) . catch ( ( err ) => {
40
- if ( err ) debug ( 'datDns.resolveName() error' )
41
- reject ( err )
42
- } )
43
- }
33
+ const urlp = parseUrl ( link )
44
34
45
- debug ( 'resolveKey' , link , urlLink )
35
+ debug ( 'resolveKey' , link , urlp )
46
36
get ( {
47
- url : urlLink . replace ( 'dat ://' , 'http://' ) ,
37
+ url : `https ://${ urlp . host } ${ urlp . path } ` ,
48
38
json : true ,
49
39
timeout : 1500
50
40
} , function ( err , resp , body ) {
51
- // no ressource at given URL
41
+ // no resource at given URL
52
42
if ( err || resp . statusCode !== 200 ) {
53
- return resolveName ( )
43
+ return resolveDns ( )
54
44
}
55
45
56
46
// first check if key is in header response
@@ -65,11 +55,21 @@ function resolve (link) {
65
55
key = stringKey ( body . url )
66
56
debug ( 'Received key via json:' , key , typeof body , body && typeof body . url )
67
57
if ( key ) resolve ( key )
68
- } catch ( e ) {
69
- // fall back to datDns
70
- resolveName ( )
71
- }
58
+ } catch ( e ) { }
59
+ // fall back to datDns
60
+ resolveDns ( )
72
61
} )
62
+
63
+ async function resolveDns ( ) {
64
+ debug ( 'resolveDns' , urlp . host )
65
+ try {
66
+ key = await datDns . resolveName ( urlp . host )
67
+ resolve ( key )
68
+ } catch ( err ) {
69
+ if ( err ) debug ( 'datDns.resolveName() error' )
70
+ reject ( err )
71
+ }
72
+ }
73
73
} )
74
74
}
75
75
}
0 commit comments