@atcute/identity-resolver 1.2.1 → 1.2.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doh-json.d.ts","sourceRoot":"","sources":["../../../lib/handle/methods/doh-json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doh-json.d.ts","sourceRoot":"","sources":["../../../lib/handle/methods/doh-json.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAIlE,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAK3E,MAAM,WAAW,4BAA4B;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB;AAED,qBAAa,qBAAsB,YAAW,cAAc;;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAGxB,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE,4BAA4B,EAG7E;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2DjF;CACD"}
|
|
@@ -1,51 +1,8 @@
|
|
|
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
|
-
const uint32 = v.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);
|
|
6
|
-
const question = v.object({
|
|
7
|
-
name: v.string(),
|
|
8
|
-
type: v.literal(16), // TXT
|
|
9
|
-
});
|
|
10
|
-
const answer = v.object({
|
|
11
|
-
name: v.string(),
|
|
12
|
-
type: v.literal(16), // TXT
|
|
13
|
-
TTL: uint32,
|
|
14
|
-
data: v.string().chain((input) => {
|
|
15
|
-
return v.ok(input.replace(/^"|"$/g, '').replace(/\\"/g, '"'));
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
const authority = v.object({
|
|
19
|
-
name: v.string(),
|
|
20
|
-
type: uint32,
|
|
21
|
-
TTL: uint32,
|
|
22
|
-
data: v.string(),
|
|
23
|
-
});
|
|
24
|
-
const result = v.object({
|
|
25
|
-
/** DNS response code */
|
|
26
|
-
Status: uint32,
|
|
27
|
-
/** Whether response is truncated */
|
|
28
|
-
TC: v.boolean(),
|
|
29
|
-
/** Whether recursive desired bit is set, always true for Google and Cloudflare DoH */
|
|
30
|
-
RD: v.boolean(),
|
|
31
|
-
/** Whether recursive available bit is set, always true for Google and Cloudflare DoH */
|
|
32
|
-
RA: v.boolean(),
|
|
33
|
-
/** Whether response data was validated with DNSSEC */
|
|
34
|
-
AD: v.boolean(),
|
|
35
|
-
/** Whether client asked to disable DNSSEC validation */
|
|
36
|
-
CD: v.boolean(),
|
|
37
|
-
/** Requested records */
|
|
38
|
-
Question: v.tuple([question]),
|
|
39
|
-
/** Answers */
|
|
40
|
-
Answer: v.array(answer).optional(() => []),
|
|
41
|
-
/** Authority */
|
|
42
|
-
Authority: v.array(authority).optional(),
|
|
43
|
-
/** Comment from the DNS server */
|
|
44
|
-
Comment: v.union(v.string(), v.array(v.string())).optional(),
|
|
45
|
-
});
|
|
46
4
|
const SUBDOMAIN = '_atproto';
|
|
47
5
|
const PREFIX = 'did=';
|
|
48
|
-
const fetchDohJsonHandler = pipe(isResponseOk, parseResponseAsJson(/^application\/(dns-)?json$/, 16 * 1024), validateJsonWith(result, { mode: 'passthrough' }));
|
|
49
6
|
export class DohJsonHandleResolver {
|
|
50
7
|
dohUrl;
|
|
51
8
|
#fetch;
|
|
@@ -64,7 +21,7 @@ export class DohJsonHandleResolver {
|
|
|
64
21
|
cache: options?.noCache ? 'no-cache' : undefined,
|
|
65
22
|
headers: { accept: 'application/dns-json' },
|
|
66
23
|
});
|
|
67
|
-
const handled = await
|
|
24
|
+
const handled = await fetchDohJsonTxt(response);
|
|
68
25
|
json = handled.json;
|
|
69
26
|
}
|
|
70
27
|
catch (cause) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doh-json.js","sourceRoot":"","sources":["../../../lib/handle/methods/doh-json.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"doh-json.js","sourceRoot":"","sources":["../../../lib/handle/methods/doh-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +1,13 @@
|
|
|
1
|
-
import * as v from '@badrap/valita';
|
|
2
|
-
|
|
3
1
|
import { isAtprotoDid } from '@atcute/identity';
|
|
4
2
|
import type { AtprotoDid, Handle } 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 { HandleResolver, ResolveHandleOptions } from '../../types.js';
|
|
9
7
|
|
|
10
|
-
const uint32 = v.number().assert((input) => Number.isInteger(input) && input >= 0 && input <= 2 ** 32 - 1);
|
|
11
|
-
|
|
12
|
-
const question = v.object({
|
|
13
|
-
name: v.string(),
|
|
14
|
-
type: v.literal(16), // TXT
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const answer = v.object({
|
|
18
|
-
name: v.string(),
|
|
19
|
-
type: v.literal(16), // TXT
|
|
20
|
-
TTL: uint32,
|
|
21
|
-
data: v.string().chain((input) => {
|
|
22
|
-
return v.ok(input.replace(/^"|"$/g, '').replace(/\\"/g, '"'));
|
|
23
|
-
}),
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const authority = v.object({
|
|
27
|
-
name: v.string(),
|
|
28
|
-
type: uint32,
|
|
29
|
-
TTL: uint32,
|
|
30
|
-
data: v.string(),
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const result = v.object({
|
|
34
|
-
/** DNS response code */
|
|
35
|
-
Status: uint32,
|
|
36
|
-
/** Whether response is truncated */
|
|
37
|
-
TC: v.boolean(),
|
|
38
|
-
/** Whether recursive desired bit is set, always true for Google and Cloudflare DoH */
|
|
39
|
-
RD: v.boolean(),
|
|
40
|
-
/** Whether recursive available bit is set, always true for Google and Cloudflare DoH */
|
|
41
|
-
RA: v.boolean(),
|
|
42
|
-
/** Whether response data was validated with DNSSEC */
|
|
43
|
-
AD: v.boolean(),
|
|
44
|
-
/** Whether client asked to disable DNSSEC validation */
|
|
45
|
-
CD: v.boolean(),
|
|
46
|
-
/** Requested records */
|
|
47
|
-
Question: v.tuple([question]),
|
|
48
|
-
/** Answers */
|
|
49
|
-
Answer: v.array(answer).optional(() => []),
|
|
50
|
-
/** Authority */
|
|
51
|
-
Authority: v.array(authority).optional(),
|
|
52
|
-
/** Comment from the DNS server */
|
|
53
|
-
Comment: v.union(v.string(), v.array(v.string())).optional(),
|
|
54
|
-
});
|
|
55
|
-
|
|
56
8
|
const SUBDOMAIN = '_atproto';
|
|
57
9
|
const PREFIX = 'did=';
|
|
58
10
|
|
|
59
|
-
const fetchDohJsonHandler = pipe(
|
|
60
|
-
isResponseOk,
|
|
61
|
-
parseResponseAsJson(/^application\/(dns-)?json$/, 16 * 1024),
|
|
62
|
-
validateJsonWith(result, { mode: 'passthrough' }),
|
|
63
|
-
);
|
|
64
|
-
|
|
65
11
|
export interface DohJsonHandleResolverOptions {
|
|
66
12
|
dohUrl: string;
|
|
67
13
|
fetch?: typeof fetch;
|
|
@@ -77,7 +23,7 @@ export class DohJsonHandleResolver implements HandleResolver {
|
|
|
77
23
|
}
|
|
78
24
|
|
|
79
25
|
async resolve(handle: Handle, options?: ResolveHandleOptions): Promise<AtprotoDid> {
|
|
80
|
-
let json:
|
|
26
|
+
let json: DohJsonTxtResult;
|
|
81
27
|
|
|
82
28
|
try {
|
|
83
29
|
const url = new URL(this.dohUrl);
|
|
@@ -90,7 +36,7 @@ export class DohJsonHandleResolver implements HandleResolver {
|
|
|
90
36
|
headers: { accept: 'application/dns-json' },
|
|
91
37
|
});
|
|
92
38
|
|
|
93
|
-
const handled = await
|
|
39
|
+
const handled = await fetchDohJsonTxt(response);
|
|
94
40
|
|
|
95
41
|
json = handled.json;
|
|
96
42
|
} catch (cause) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/identity-resolver",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.2",
|
|
5
5
|
"description": "atproto handle and DID document resolution",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"atproto",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@badrap/valita": "^0.4.6",
|
|
33
|
-
"@atcute/lexicons": "^1.2.
|
|
34
|
-
"@atcute/util-fetch": "^1.0.
|
|
33
|
+
"@atcute/lexicons": "^1.2.6",
|
|
34
|
+
"@atcute/util-fetch": "^1.0.5"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@vitest/coverage-v8": "^4.0.16",
|