@atcute/lexicon-resolver 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -34
- package/dist/authority/doh-json.d.ts.map +1 -1
- package/dist/authority/doh-json.js +2 -45
- package/dist/authority/doh-json.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/schemas/xrpc.d.ts.map +1 -1
- package/dist/schemas/xrpc.js.map +1 -1
- package/dist/utils.d.ts +1 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/lib/authority/doh-json.ts +3 -57
- package/package.json +14 -10
package/README.md
CHANGED
|
@@ -1,36 +1,40 @@
|
|
|
1
1
|
# @atcute/lexicon-resolver
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
resolve lexicon schemas from the AT Protocol network.
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
npm install @atcute/lexicon-resolver
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## usage
|
|
10
|
+
|
|
11
|
+
### resolving lexicon authority
|
|
12
|
+
|
|
13
|
+
find which DID is authoritative for an NSID via DNS TXT records:
|
|
4
14
|
|
|
5
15
|
```ts
|
|
6
|
-
|
|
16
|
+
import { DohJsonLexiconAuthorityResolver } from '@atcute/lexicon-resolver';
|
|
17
|
+
|
|
7
18
|
const authorityResolver = new DohJsonLexiconAuthorityResolver({
|
|
8
19
|
dohUrl: 'https://mozilla.cloudflare-dns.com/dns-query',
|
|
9
20
|
});
|
|
10
21
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} catch (err) {
|
|
15
|
-
if (err instanceof AuthorityNotFoundError) {
|
|
16
|
-
// nsid returned no did
|
|
17
|
-
}
|
|
18
|
-
if (err instanceof InvalidResolvedAuthorityError) {
|
|
19
|
-
// nsid returned a did, but isn't a valid atproto did
|
|
20
|
-
}
|
|
21
|
-
if (err instanceof AmbiguousAuthorityError) {
|
|
22
|
-
// nsid returned multiple did values
|
|
23
|
-
}
|
|
24
|
-
if (err instanceof FailedAuthorityResolutionError) {
|
|
25
|
-
// nsid resolution had thrown something unexpected (fetch error)
|
|
26
|
-
}
|
|
22
|
+
const authority = await authorityResolver.resolve('app.bsky.feed.post');
|
|
23
|
+
// -> 'did:plc:4v4y5r3lwsbtmsxhile2ljac'
|
|
24
|
+
```
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
### fetching lexicon schemas
|
|
27
|
+
|
|
28
|
+
retrieve the lexicon document from an authority's PDS:
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import {
|
|
32
|
+
CompositeDidDocumentResolver,
|
|
33
|
+
PlcDidDocumentResolver,
|
|
34
|
+
WebDidDocumentResolver,
|
|
35
|
+
} from '@atcute/identity-resolver';
|
|
36
|
+
import { LexiconSchemaResolver } from '@atcute/lexicon-resolver';
|
|
32
37
|
|
|
33
|
-
// schema resolution
|
|
34
38
|
const schemaResolver = new LexiconSchemaResolver({
|
|
35
39
|
didDocumentResolver: new CompositeDidDocumentResolver({
|
|
36
40
|
methods: {
|
|
@@ -40,22 +44,34 @@ const schemaResolver = new LexiconSchemaResolver({
|
|
|
40
44
|
}),
|
|
41
45
|
});
|
|
42
46
|
|
|
47
|
+
const resolved = await schemaResolver.resolve(authority, 'app.bsky.feed.post');
|
|
48
|
+
// -> { uri: string, cid: string, rawSchema: unknown, schema: LexiconDoc }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### error handling
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import {
|
|
55
|
+
AuthorityNotFoundError,
|
|
56
|
+
InvalidResolvedAuthorityError,
|
|
57
|
+
LexiconAuthorityResolutionError,
|
|
58
|
+
InvalidLexiconSchemaError,
|
|
59
|
+
LexiconResolutionError,
|
|
60
|
+
} from '@atcute/lexicon-resolver';
|
|
61
|
+
|
|
43
62
|
try {
|
|
44
|
-
|
|
45
|
-
// ^? { uri: string, cid: string, schema: LexiconDoc }
|
|
63
|
+
await authorityResolver.resolve(nsid);
|
|
46
64
|
} catch (err) {
|
|
47
|
-
if (err instanceof
|
|
48
|
-
//
|
|
49
|
-
}
|
|
50
|
-
if (err instanceof InvalidLexiconProofError) {
|
|
51
|
-
// lexicon record proof verification failed
|
|
52
|
-
}
|
|
53
|
-
if (err instanceof FailedLexiconResolutionError) {
|
|
54
|
-
// lexicon resolution had thrown something unexpected (fetch error)
|
|
65
|
+
if (err instanceof LexiconAuthorityResolutionError) {
|
|
66
|
+
// authority resolution failed
|
|
55
67
|
}
|
|
68
|
+
}
|
|
56
69
|
|
|
70
|
+
try {
|
|
71
|
+
await schemaResolver.resolve(authority, nsid);
|
|
72
|
+
} catch (err) {
|
|
57
73
|
if (err instanceof LexiconResolutionError) {
|
|
58
|
-
//
|
|
74
|
+
// schema resolution failed
|
|
59
75
|
}
|
|
60
76
|
}
|
|
61
77
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doh-json.d.ts","sourceRoot":"","sources":["../../lib/authority/doh-json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doh-json.d.ts","sourceRoot":"","sources":["../../lib/authority/doh-json.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAM5F,MAAM,WAAW,sCAAsC;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB;AAED,qBAAa,+BAAgC,YAAW,wBAAwB;;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAGxB,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE,sCAAsC,EAGvF;IAEK,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,8BAA8B,GAAG,OAAO,CAAC,UAAU,CAAC,CA6DvF;CACD"}
|
|
@@ -1,52 +1,9 @@
|
|
|
1
|
-
import * as v from '@badrap/valita';
|
|
2
1
|
import { isAtprotoDid } from '@atcute/identity';
|
|
3
|
-
import {
|
|
2
|
+
import { fetchDohJsonTxt } from '@atcute/util-fetch';
|
|
4
3
|
import * as err from '../errors.js';
|
|
5
4
|
import { nsidToLookupDomain } from '../utils.js';
|
|
6
|
-
const uint32 = v.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);
|
|
7
|
-
const question = v.object({
|
|
8
|
-
name: v.string(),
|
|
9
|
-
type: v.literal(16), // TXT
|
|
10
|
-
});
|
|
11
|
-
const answer = v.object({
|
|
12
|
-
name: v.string(),
|
|
13
|
-
type: v.literal(16), // TXT
|
|
14
|
-
TTL: uint32,
|
|
15
|
-
data: v.string().chain((input) => {
|
|
16
|
-
return v.ok(input.replace(/^"|"$/g, '').replace(/\\"/g, '"'));
|
|
17
|
-
}),
|
|
18
|
-
});
|
|
19
|
-
const authority = v.object({
|
|
20
|
-
name: v.string(),
|
|
21
|
-
type: uint32,
|
|
22
|
-
TTL: uint32,
|
|
23
|
-
data: v.string(),
|
|
24
|
-
});
|
|
25
|
-
const result = v.object({
|
|
26
|
-
/** DNS response code */
|
|
27
|
-
Status: uint32,
|
|
28
|
-
/** Whether response is truncated */
|
|
29
|
-
TC: v.boolean(),
|
|
30
|
-
/** Whether recursive desired bit is set, always true for Google and Cloudflare DoH */
|
|
31
|
-
RD: v.boolean(),
|
|
32
|
-
/** Whether recursive available bit is set, always true for Google and Cloudflare DoH */
|
|
33
|
-
RA: v.boolean(),
|
|
34
|
-
/** Whether response data was validated with DNSSEC */
|
|
35
|
-
AD: v.boolean(),
|
|
36
|
-
/** Whether client asked to disable DNSSEC validation */
|
|
37
|
-
CD: v.boolean(),
|
|
38
|
-
/** Requested records */
|
|
39
|
-
Question: v.tuple([question]),
|
|
40
|
-
/** Answers */
|
|
41
|
-
Answer: v.array(answer).optional(() => []),
|
|
42
|
-
/** Authority */
|
|
43
|
-
Authority: v.array(authority).optional(),
|
|
44
|
-
/** Comment from the DNS server */
|
|
45
|
-
Comment: v.string().optional(),
|
|
46
|
-
});
|
|
47
5
|
const SUBDOMAIN = '_lexicon';
|
|
48
6
|
const PREFIX = 'did=';
|
|
49
|
-
const fetchDohJsonHandler = pipe(isResponseOk, parseResponseAsJson(/^application\/(dns-)?json$/, 16 * 1024), validateJsonWith(result, { mode: 'passthrough' }));
|
|
50
7
|
export class DohJsonLexiconAuthorityResolver {
|
|
51
8
|
dohUrl;
|
|
52
9
|
#fetch;
|
|
@@ -66,7 +23,7 @@ export class DohJsonLexiconAuthorityResolver {
|
|
|
66
23
|
cache: options?.noCache ? 'no-cache' : undefined,
|
|
67
24
|
headers: { accept: 'application/dns-json' },
|
|
68
25
|
});
|
|
69
|
-
const handled = await
|
|
26
|
+
const handled = await fetchDohJsonTxt(response);
|
|
70
27
|
json = handled.json;
|
|
71
28
|
}
|
|
72
29
|
catch (cause) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doh-json.js","sourceRoot":"","sources":["../../lib/authority/doh-json.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"doh-json.js","sourceRoot":"","sources":["../../lib/authority/doh-json.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGpD,qBAAa,+BAAgC,SAAQ,KAAK;IAChD,IAAI,SAAqC;CAClD;AAED,qBAAa,sBAAuB,SAAQ,+BAA+B;IAGvD,IAAI,EAAE,IAAI;IAFpB,IAAI,SAA4B;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGpD,qBAAa,+BAAgC,SAAQ,KAAK;IAChD,IAAI,SAAqC;CAClD;AAED,qBAAa,sBAAuB,SAAQ,+BAA+B;IAGvD,IAAI,EAAE,IAAI;IAFpB,IAAI,SAA4B;IAEzC,YAAmB,IAAI,EAAE,IAAI,EAE5B;CACD;AAED,qBAAa,8BAA+B,SAAQ,+BAA+B;IAI1E,IAAI,EAAE,IAAI;IAHT,IAAI,SAAoC;IAEjD,YACQ,IAAI,EAAE,IAAI,EACjB,OAAO,CAAC,EAAE,YAAY,EAGtB;CACD;AAED,qBAAa,6BAA8B,SAAQ,+BAA+B;IAIzE,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,MAAM;IAJV,IAAI,SAAmC;IAEhD,YACQ,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EAGlB;CACD;AAED,qBAAa,uBAAwB,SAAQ,+BAA+B;IAGxD,IAAI,EAAE,IAAI;IAFpB,IAAI,SAA6B;IAE1C,YAAmB,IAAI,EAAE,IAAI,EAE5B;CACD;AAID,qBAAa,sBAAuB,SAAQ,KAAK;IACvC,IAAI,SAA4B;CACzC;AAED,qBAAa,4BAA6B,SAAQ,sBAAsB;IAI/D,IAAI,EAAE,IAAI;IAHT,IAAI,SAAkC;IAE/C,YACQ,IAAI,EAAE,IAAI,EACjB,OAAO,CAAC,EAAE,YAAY,EAGtB;CACD;AAED,qBAAa,yBAA0B,SAAQ,sBAAsB;IAI5D,IAAI,EAAE,IAAI;IAHT,IAAI,SAA+B;IAE5C,YACQ,IAAI,EAAE,IAAI,EACjB,OAAO,CAAC,EAAE,YAAY,EAGtB;CACD;AAED,qBAAa,wBAAyB,SAAQ,sBAAsB;IAI3D,IAAI,EAAE,IAAI;IAHT,IAAI,SAA8B;IAE3C,YACQ,IAAI,EAAE,IAAI,EACjB,OAAO,CAAC,EAAE,YAAY,EAGtB;CACD"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAChD,IAAI,GAAG,iCAAiC,CAAC;CAClD;AAED,MAAM,OAAO,sBAAuB,SAAQ,+BAA+B;IAGvD;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../lib/errors.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAChD,IAAI,GAAG,iCAAiC,CAAC;CAClD;AAED,MAAM,OAAO,sBAAuB,SAAQ,+BAA+B;IAGvD,IAAI;IAFd,IAAI,GAAG,wBAAwB,CAAC;IAEzC,YAAmB,IAAU,EAAE;QAC9B,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;oBADjC,IAAI;IAC6B,CACnD;CACD;AAED,MAAM,OAAO,8BAA+B,SAAQ,+BAA+B;IAI1E,IAAI;IAHH,IAAI,GAAG,gCAAgC,CAAC;IAEjD,YACQ,IAAU,EACjB,OAAsB,EACrB;QACD,KAAK,CAAC,6CAA6C,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;oBAH7D,IAAI;IAGyD,CACpE;CACD;AAED,MAAM,OAAO,6BAA8B,SAAQ,+BAA+B;IAIzE,IAAI;IACJ,GAAG;IAJF,IAAI,GAAG,+BAA+B,CAAC;IAEhD,YACQ,IAAU,EACV,GAAW,EACjB;QACD,KAAK,CAAC,gDAAgD,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC;oBAHnE,IAAI;mBACJ,GAAG;IAEgE,CAC1E;CACD;AAED,MAAM,OAAO,uBAAwB,SAAQ,+BAA+B;IAGxD,IAAI;IAFd,IAAI,GAAG,yBAAyB,CAAC;IAE1C,YAAmB,IAAU,EAAE;QAC9B,KAAK,CAAC,wDAAwD,IAAI,EAAE,CAAC,CAAC;oBADpD,IAAI;IACgD,CACtE;CACD;AACD,aAAa;AAEb,oCAAoC;AACpC,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACvC,IAAI,GAAG,wBAAwB,CAAC;CACzC;AAED,MAAM,OAAO,4BAA6B,SAAQ,sBAAsB;IAI/D,IAAI;IAHH,IAAI,GAAG,8BAA8B,CAAC;IAE/C,YACQ,IAAU,EACjB,OAAsB,EACrB;QACD,KAAK,CAAC,mCAAmC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;oBAHnD,IAAI;IAG+C,CAC1D;CACD;AAED,MAAM,OAAO,yBAA0B,SAAQ,sBAAsB;IAI5D,IAAI;IAHH,IAAI,GAAG,2BAA2B,CAAC;IAE5C,YACQ,IAAU,EACjB,OAAsB,EACrB;QACD,KAAK,CAAC,gCAAgC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;oBAHhD,IAAI;IAG4C,CACvD;CACD;AAED,MAAM,OAAO,wBAAyB,SAAQ,sBAAsB;IAI3D,IAAI;IAHH,IAAI,GAAG,0BAA0B,CAAC;IAE3C,YACQ,IAAU,EACjB,OAAsB,EACrB;QACD,KAAK,CAAC,sCAAsC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;oBAHtD,IAAI;IAGkD,CAC7D;CACD;AACD,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xrpc.d.ts","sourceRoot":"","sources":["../../lib/schemas/xrpc.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAOhE,OAAO,KAAK,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,4BAA4B;IAC5C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB;AAED,qBAAa,qBAAqB;;IACjC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"xrpc.d.ts","sourceRoot":"","sources":["../../lib/schemas/xrpc.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAOhE,OAAO,KAAK,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,4BAA4B;IAC5C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB;AAED,qBAAa,qBAAqB;;IACjC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAGlD,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE,4BAA4B,EAG1F;IAEK,OAAO,CACZ,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAAC,cAAc,CAAC,CAgGzB;CACD"}
|
package/dist/schemas/xrpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xrpc.js","sourceRoot":"","sources":["../../lib/schemas/xrpc.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,6BAA6B,EAC7B,aAAa,EACb,kBAAkB,GAElB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAQpC,MAAM,OAAO,qBAAqB;IACxB,mBAAmB,CAAsB;IAClD,MAAM,CAAe;IAErB,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAgC;
|
|
1
|
+
{"version":3,"file":"xrpc.js","sourceRoot":"","sources":["../../lib/schemas/xrpc.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,mDAI9B,CAAC"}
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAU,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,yEAAyE;IACzE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,CACjD,CAAC"}
|
|
@@ -1,68 +1,14 @@
|
|
|
1
|
-
import * as v from '@badrap/valita';
|
|
2
|
-
|
|
3
1
|
import { isAtprotoDid } from '@atcute/identity';
|
|
4
2
|
import type { AtprotoDid, Nsid } from '@atcute/lexicons/syntax';
|
|
5
|
-
import {
|
|
3
|
+
import { type DohJsonTxtResult, fetchDohJsonTxt } from '@atcute/util-fetch';
|
|
6
4
|
|
|
7
5
|
import * as err from '../errors.js';
|
|
8
6
|
import type { LexiconAuthorityResolver, ResolveLexiconAuthorityOptions } from '../types.js';
|
|
9
7
|
import { nsidToLookupDomain } from '../utils.js';
|
|
10
8
|
|
|
11
|
-
const uint32 = v.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);
|
|
12
|
-
|
|
13
|
-
const question = v.object({
|
|
14
|
-
name: v.string(),
|
|
15
|
-
type: v.literal(16), // TXT
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
const answer = v.object({
|
|
19
|
-
name: v.string(),
|
|
20
|
-
type: v.literal(16), // TXT
|
|
21
|
-
TTL: uint32,
|
|
22
|
-
data: v.string().chain((input) => {
|
|
23
|
-
return v.ok(input.replace(/^"|"$/g, '').replace(/\\"/g, '"'));
|
|
24
|
-
}),
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
const authority = v.object({
|
|
28
|
-
name: v.string(),
|
|
29
|
-
type: uint32,
|
|
30
|
-
TTL: uint32,
|
|
31
|
-
data: v.string(),
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const result = v.object({
|
|
35
|
-
/** DNS response code */
|
|
36
|
-
Status: uint32,
|
|
37
|
-
/** Whether response is truncated */
|
|
38
|
-
TC: v.boolean(),
|
|
39
|
-
/** Whether recursive desired bit is set, always true for Google and Cloudflare DoH */
|
|
40
|
-
RD: v.boolean(),
|
|
41
|
-
/** Whether recursive available bit is set, always true for Google and Cloudflare DoH */
|
|
42
|
-
RA: v.boolean(),
|
|
43
|
-
/** Whether response data was validated with DNSSEC */
|
|
44
|
-
AD: v.boolean(),
|
|
45
|
-
/** Whether client asked to disable DNSSEC validation */
|
|
46
|
-
CD: v.boolean(),
|
|
47
|
-
/** Requested records */
|
|
48
|
-
Question: v.tuple([question]),
|
|
49
|
-
/** Answers */
|
|
50
|
-
Answer: v.array(answer).optional(() => []),
|
|
51
|
-
/** Authority */
|
|
52
|
-
Authority: v.array(authority).optional(),
|
|
53
|
-
/** Comment from the DNS server */
|
|
54
|
-
Comment: v.string().optional(),
|
|
55
|
-
});
|
|
56
|
-
|
|
57
9
|
const SUBDOMAIN = '_lexicon';
|
|
58
10
|
const PREFIX = 'did=';
|
|
59
11
|
|
|
60
|
-
const fetchDohJsonHandler = pipe(
|
|
61
|
-
isResponseOk,
|
|
62
|
-
parseResponseAsJson(/^application\/(dns-)?json$/, 16 * 1024),
|
|
63
|
-
validateJsonWith(result, { mode: 'passthrough' }),
|
|
64
|
-
);
|
|
65
|
-
|
|
66
12
|
export interface DohJsonLexiconAuthorityResolverOptions {
|
|
67
13
|
dohUrl: string;
|
|
68
14
|
fetch?: typeof fetch;
|
|
@@ -80,7 +26,7 @@ export class DohJsonLexiconAuthorityResolver implements LexiconAuthorityResolver
|
|
|
80
26
|
async resolve(nsid: Nsid, options?: ResolveLexiconAuthorityOptions): Promise<AtprotoDid> {
|
|
81
27
|
const lookupDomain = nsidToLookupDomain(nsid);
|
|
82
28
|
|
|
83
|
-
let json:
|
|
29
|
+
let json: DohJsonTxtResult;
|
|
84
30
|
|
|
85
31
|
try {
|
|
86
32
|
const url = new URL(this.dohUrl);
|
|
@@ -93,7 +39,7 @@ export class DohJsonLexiconAuthorityResolver implements LexiconAuthorityResolver
|
|
|
93
39
|
headers: { accept: 'application/dns-json' },
|
|
94
40
|
});
|
|
95
41
|
|
|
96
|
-
const handled = await
|
|
42
|
+
const handled = await fetchDohJsonTxt(response);
|
|
97
43
|
|
|
98
44
|
json = handled.json;
|
|
99
45
|
} catch (cause) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/lexicon-resolver",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.6",
|
|
5
5
|
"description": "atproto lexicon authority resolution",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"atproto",
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
"url": "https://github.com/mary-ext/atcute",
|
|
14
14
|
"directory": "packages/lexicons/lexicon-resolver"
|
|
15
15
|
},
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
16
19
|
"files": [
|
|
17
20
|
"dist/",
|
|
18
21
|
"lib/",
|
|
@@ -29,20 +32,21 @@
|
|
|
29
32
|
},
|
|
30
33
|
"dependencies": {
|
|
31
34
|
"@badrap/valita": "^0.4.6",
|
|
32
|
-
"@atcute/crypto": "^2.
|
|
33
|
-
"@atcute/
|
|
34
|
-
"@atcute/lexicons": "^1.2.
|
|
35
|
-
"@atcute/repo": "^0.1.
|
|
36
|
-
"@atcute/
|
|
35
|
+
"@atcute/crypto": "^2.3.0",
|
|
36
|
+
"@atcute/lexicon-doc": "^2.0.6",
|
|
37
|
+
"@atcute/lexicons": "^1.2.6",
|
|
38
|
+
"@atcute/repo": "^0.1.1",
|
|
39
|
+
"@atcute/util-fetch": "^1.0.5"
|
|
37
40
|
},
|
|
38
41
|
"devDependencies": {
|
|
39
|
-
"@
|
|
42
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
43
|
+
"vitest": "^4.0.16",
|
|
40
44
|
"@atcute/identity": "^1.1.3",
|
|
41
|
-
"@atcute/identity-resolver": "^1.
|
|
45
|
+
"@atcute/identity-resolver": "^1.2.2"
|
|
42
46
|
},
|
|
43
47
|
"scripts": {
|
|
44
|
-
"build": "
|
|
45
|
-
"test": "
|
|
48
|
+
"build": "tsgo --project tsconfig.build.json",
|
|
49
|
+
"test": "vitest",
|
|
46
50
|
"prepublish": "rm -rf dist; pnpm run build"
|
|
47
51
|
}
|
|
48
52
|
}
|