@atproto-labs/handle-resolver 0.1.8 → 0.3.0
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/CHANGELOG.md +18 -0
- package/LICENSE.txt +1 -1
- package/dist/atproto-doh-handle-resolver.d.ts.map +1 -1
- package/dist/atproto-doh-handle-resolver.js +4 -3
- package/dist/atproto-doh-handle-resolver.js.map +1 -1
- package/dist/handle-resolver-error.d.ts +4 -0
- package/dist/handle-resolver-error.d.ts.map +1 -0
- package/dist/handle-resolver-error.js +16 -0
- package/dist/handle-resolver-error.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/dist/{app-view-handle-resolver.d.ts → xrpc-handle-resolver.d.ts} +4 -5
- package/dist/xrpc-handle-resolver.d.ts.map +1 -0
- package/dist/{app-view-handle-resolver.js → xrpc-handle-resolver.js} +11 -13
- package/dist/xrpc-handle-resolver.js.map +1 -0
- package/package.json +1 -1
- package/src/atproto-doh-handle-resolver.ts +4 -3
- package/src/handle-resolver-error.ts +3 -0
- package/src/index.ts +2 -1
- package/src/types.ts +4 -0
- package/src/{app-view-handle-resolver.ts → xrpc-handle-resolver.ts} +17 -16
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/app-view-handle-resolver.d.ts.map +0 -1
- package/dist/app-view-handle-resolver.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @atproto-labs/handle-resolver
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#3977](https://github.com/bluesky-social/atproto/pull/3977) [`9dac8b0c6`](https://github.com/bluesky-social/atproto/commit/9dac8b0c600520ecb0066ac104787b27668dea47) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Use `HandleResolverError` instances instead of `TypeError`
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#3977](https://github.com/bluesky-social/atproto/pull/3977) [`9dac8b0c6`](https://github.com/bluesky-social/atproto/commit/9dac8b0c600520ecb0066ac104787b27668dea47) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Export `asResolvedHandle` utility
|
|
12
|
+
|
|
13
|
+
## 0.2.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- [#3976](https://github.com/bluesky-social/atproto/pull/3976) [`90b4775fc`](https://github.com/bluesky-social/atproto/commit/90b4775fc9c6959171bc12b961ce9421cc14d6ee) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Rename `AppViewHandleResolver` to `XrpcHandleResolver`
|
|
18
|
+
|
|
19
|
+
- [#3976](https://github.com/bluesky-social/atproto/pull/3976) [`90b4775fc`](https://github.com/bluesky-social/atproto/commit/90b4775fc9c6959171bc12b961ce9421cc14d6ee) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Remove `XrpcHandleResolver.from` static method
|
|
20
|
+
|
|
3
21
|
## 0.1.8
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/LICENSE.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Dual MIT/Apache-2.0 License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2022-2025 Bluesky PBC, and Contributors
|
|
3
|
+
Copyright (c) 2022-2025 Bluesky Social PBC, and Contributors
|
|
4
4
|
|
|
5
5
|
Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atproto-doh-handle-resolver.d.ts","sourceRoot":"","sources":["../src/atproto-doh-handle-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"atproto-doh-handle-resolver.d.ts","sourceRoot":"","sources":["../src/atproto-doh-handle-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAChD,4BAA4B,EAC5B,YAAY,GAAG,oBAAoB,CACpC,GAAG;IACF,WAAW,EAAE,MAAM,GAAG,GAAG,CAAA;CAC1B,CAAA;AAED,qBAAa,wBACX,SAAQ,qBACR,YAAW,cAAc;gBAEb,OAAO,EAAE,+BAA+B;CAOrD"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AtprotoDohHandleResolver = void 0;
|
|
4
4
|
const atproto_handle_resolver_js_1 = require("./atproto-handle-resolver.js");
|
|
5
|
+
const handle_resolver_error_js_1 = require("./handle-resolver-error.js");
|
|
5
6
|
class AtprotoDohHandleResolver extends atproto_handle_resolver_js_1.AtprotoHandleResolver {
|
|
6
7
|
constructor(options) {
|
|
7
8
|
super({
|
|
@@ -36,10 +37,10 @@ function dohResolveTxtFactory({ dohEndpoint, fetch = globalThis.fetch, }) {
|
|
|
36
37
|
const message = contentType?.startsWith('text/plain')
|
|
37
38
|
? await response.text()
|
|
38
39
|
: `Failed to resolve ${hostname}`;
|
|
39
|
-
throw new
|
|
40
|
+
throw new handle_resolver_error_js_1.HandleResolverError(message);
|
|
40
41
|
}
|
|
41
42
|
else if (contentType?.match(/application\/(dns-)?json/i) == null) {
|
|
42
|
-
throw new
|
|
43
|
+
throw new handle_resolver_error_js_1.HandleResolverError('Unexpected response from DoH server');
|
|
43
44
|
}
|
|
44
45
|
const result = asResult(await response.json());
|
|
45
46
|
return result.Answer?.filter(isAnswerTxt).map(extractTxtData) ?? null;
|
|
@@ -72,7 +73,7 @@ function isResult(result) {
|
|
|
72
73
|
function asResult(result) {
|
|
73
74
|
if (isResult(result))
|
|
74
75
|
return result;
|
|
75
|
-
throw new
|
|
76
|
+
throw new handle_resolver_error_js_1.HandleResolverError('Invalid DoH response');
|
|
76
77
|
}
|
|
77
78
|
function isArrayOf(value, predicate) {
|
|
78
79
|
return Array.isArray(value) && value.every(predicate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atproto-doh-handle-resolver.js","sourceRoot":"","sources":["../src/atproto-doh-handle-resolver.ts"],"names":[],"mappings":";;;AAAA,6EAGqC;
|
|
1
|
+
{"version":3,"file":"atproto-doh-handle-resolver.js","sourceRoot":"","sources":["../src/atproto-doh-handle-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-resolver-error.d.ts","sourceRoot":"","sources":["../src/handle-resolver-error.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,IAAI,SAAwB;CAC7B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandleResolverError = void 0;
|
|
4
|
+
class HandleResolverError extends Error {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
Object.defineProperty(this, "name", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: 'HandleResolverError'
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.HandleResolverError = HandleResolverError;
|
|
16
|
+
//# sourceMappingURL=handle-resolver-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-resolver-error.js","sourceRoot":"","sources":["../src/handle-resolver-error.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAoB,SAAQ,KAAK;IAA9C;;QACE;;;;mBAAO,qBAAqB;WAAA;IAC9B,CAAC;CAAA;AAFD,kDAEC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export * from './handle-resolver-error.js';
|
|
1
2
|
export * from './types.js';
|
|
2
|
-
export * from './
|
|
3
|
+
export * from './xrpc-handle-resolver.js';
|
|
3
4
|
export * from './atproto-doh-handle-resolver.js';
|
|
4
5
|
export * from './atproto-handle-resolver.js';
|
|
5
6
|
export * from './cached-handle-resolver.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAG1B,cAAc
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,YAAY,CAAA;AAG1B,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAG5C,cAAc,6BAA6B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -14,9 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./handle-resolver-error.js"), exports);
|
|
17
18
|
__exportStar(require("./types.js"), exports);
|
|
18
19
|
// Main Handle Resolvers strategies
|
|
19
|
-
__exportStar(require("./
|
|
20
|
+
__exportStar(require("./xrpc-handle-resolver.js"), exports);
|
|
20
21
|
__exportStar(require("./atproto-doh-handle-resolver.js"), exports);
|
|
21
22
|
__exportStar(require("./atproto-handle-resolver.js"), exports);
|
|
22
23
|
// Handle Resolver Caching utility
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA0B;AAE1B,mCAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA0C;AAC1C,6CAA0B;AAE1B,mCAAmC;AACnC,4DAAyC;AACzC,mEAAgD;AAChD,+DAA4C;AAE5C,kCAAkC;AAClC,8DAA2C"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export type ResolvedHandle = null | AtprotoDid;
|
|
|
12
12
|
* @see {@link https://atproto.com/specs/did#blessed-did-methods}
|
|
13
13
|
*/
|
|
14
14
|
export declare function isResolvedHandle<T>(value: T): value is T & ResolvedHandle;
|
|
15
|
+
export declare function asResolvedHandle(value: string): ResolvedHandle;
|
|
15
16
|
export interface HandleResolver {
|
|
16
17
|
/**
|
|
17
18
|
* @returns the DID that corresponds to the given handle, or `null` if no DID
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,UAAU,CAAA;AAE9C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,cAAc,CAEzE;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAA;CAC3B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAEzE,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,UAAU,CAAA;AAE9C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,cAAc,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAE9D;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAA;CAC3B"}
|
package/dist/types.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isResolvedHandle = isResolvedHandle;
|
|
4
|
+
exports.asResolvedHandle = asResolvedHandle;
|
|
4
5
|
const did_1 = require("@atproto/did");
|
|
5
6
|
/**
|
|
6
7
|
* @see {@link https://atproto.com/specs/did#blessed-did-methods}
|
|
@@ -8,4 +9,7 @@ const did_1 = require("@atproto/did");
|
|
|
8
9
|
function isResolvedHandle(value) {
|
|
9
10
|
return value === null || (0, did_1.isAtprotoDid)(value);
|
|
10
11
|
}
|
|
12
|
+
function asResolvedHandle(value) {
|
|
13
|
+
return isResolvedHandle(value) ? value : null;
|
|
14
|
+
}
|
|
11
15
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAgBA,4CAEC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAgBA,4CAEC;AAED,4CAEC;AAtBD,sCAAuD;AAavD;;GAEG;AACH,SAAgB,gBAAgB,CAAI,KAAQ;IAC1C,OAAO,KAAK,KAAK,IAAI,IAAI,IAAA,kBAAY,EAAC,KAAK,CAAC,CAAA;AAC9C,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/C,CAAC"}
|
|
@@ -10,7 +10,7 @@ export declare const xrpcErrorSchema: z.ZodObject<{
|
|
|
10
10
|
error: string;
|
|
11
11
|
message?: string | undefined;
|
|
12
12
|
}>;
|
|
13
|
-
export type
|
|
13
|
+
export type XrpcHandleResolverOptions = {
|
|
14
14
|
/**
|
|
15
15
|
* Fetch function to use for HTTP requests. Allows customizing the request
|
|
16
16
|
* behavior, e.g. adding headers, setting a timeout, mocking, etc.
|
|
@@ -19,15 +19,14 @@ export type AppViewHandleResolverOptions = {
|
|
|
19
19
|
*/
|
|
20
20
|
fetch?: typeof globalThis.fetch;
|
|
21
21
|
};
|
|
22
|
-
export declare class
|
|
23
|
-
static from(service: URL | string | HandleResolver, options?: AppViewHandleResolverOptions): HandleResolver;
|
|
22
|
+
export declare class XrpcHandleResolver implements HandleResolver {
|
|
24
23
|
/**
|
|
25
24
|
* URL of the atproto lexicon server. This is the base URL where the
|
|
26
25
|
* `com.atproto.identity.resolveHandle` XRPC method is located.
|
|
27
26
|
*/
|
|
28
27
|
protected readonly serviceUrl: URL;
|
|
29
28
|
protected readonly fetch: typeof globalThis.fetch;
|
|
30
|
-
constructor(service: URL | string, options?:
|
|
29
|
+
constructor(service: URL | string, options?: XrpcHandleResolverOptions);
|
|
31
30
|
resolve(handle: string, options?: ResolveHandleOptions): Promise<ResolvedHandle>;
|
|
32
31
|
}
|
|
33
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=xrpc-handle-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrpc-handle-resolver.d.ts","sourceRoot":"","sources":["../src/xrpc-handle-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,cAAc,EAEf,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC,CAAA;AAED,qBAAa,kBAAmB,YAAW,cAAc;IACvD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;gBAErC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB;IAKzD,OAAO,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC;CAmD3B"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.XrpcHandleResolver = exports.xrpcErrorSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
const handle_resolver_error_js_1 = require("./handle-resolver-error.js");
|
|
5
6
|
const types_js_1 = require("./types.js");
|
|
6
7
|
exports.xrpcErrorSchema = zod_1.z.object({
|
|
7
8
|
error: zod_1.z.string(),
|
|
8
9
|
message: zod_1.z.string().optional(),
|
|
9
10
|
});
|
|
10
|
-
class
|
|
11
|
-
static from(service, options) {
|
|
12
|
-
if (typeof service === 'string' || service instanceof URL) {
|
|
13
|
-
return new AppViewHandleResolver(service, options);
|
|
14
|
-
}
|
|
15
|
-
return service;
|
|
16
|
-
}
|
|
11
|
+
class XrpcHandleResolver {
|
|
17
12
|
constructor(service, options) {
|
|
18
13
|
/**
|
|
19
14
|
* URL of the atproto lexicon server. This is the base URL where the
|
|
@@ -48,21 +43,24 @@ class AppViewHandleResolver {
|
|
|
48
43
|
// - 200 OK with { did: NonNullable<ResolvedHandle> }
|
|
49
44
|
// Any other response is considered unexpected behavior an should throw an error.
|
|
50
45
|
if (response.status === 400) {
|
|
51
|
-
const data = exports.xrpcErrorSchema.
|
|
46
|
+
const { error, data } = exports.xrpcErrorSchema.safeParse(payload);
|
|
47
|
+
if (error) {
|
|
48
|
+
throw new handle_resolver_error_js_1.HandleResolverError(`Invalid response from resolveHandle method: ${error.message}`, { cause: error });
|
|
49
|
+
}
|
|
52
50
|
if (data.error === 'InvalidRequest' &&
|
|
53
51
|
data.message === 'Unable to resolve handle') {
|
|
54
52
|
return null;
|
|
55
53
|
}
|
|
56
54
|
}
|
|
57
55
|
if (!response.ok) {
|
|
58
|
-
throw new
|
|
56
|
+
throw new handle_resolver_error_js_1.HandleResolverError('Invalid status code from resolveHandle method');
|
|
59
57
|
}
|
|
60
58
|
const value = payload?.did;
|
|
61
59
|
if (!(0, types_js_1.isResolvedHandle)(value)) {
|
|
62
|
-
throw new
|
|
60
|
+
throw new handle_resolver_error_js_1.HandleResolverError('Invalid DID returned from resolveHandle method');
|
|
63
61
|
}
|
|
64
62
|
return value;
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
|
-
exports.
|
|
68
|
-
//# sourceMappingURL=
|
|
65
|
+
exports.XrpcHandleResolver = XrpcHandleResolver;
|
|
66
|
+
//# sourceMappingURL=xrpc-handle-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrpc-handle-resolver.js","sourceRoot":"","sources":["../src/xrpc-handle-resolver.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AACvB,yEAAgE;AAChE,yCAKmB;AAEN,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAA;AAYF,MAAa,kBAAkB;IAQ7B,YAAY,OAAqB,EAAE,OAAmC;QAPtE;;;WAGG;QACgB;;;;;WAAe;QACf;;;;;WAA8B;QAG/C,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IACjD,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,MAAc,EACd,OAA8B;QAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,0CAA0C,EAC1C,IAAI,CAAC,UAAU,CAChB,CAAA;QACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAEtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAChD,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAChD,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAErC,gCAAgC;QAChC,0FAA0F;QAC1F,qDAAqD;QACrD,iFAAiF;QAEjF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,uBAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,8CAAmB,CAC3B,+CAA+C,KAAK,CAAC,OAAO,EAAE,EAC9D,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAA;YACH,CAAC;YACD,IACE,IAAI,CAAC,KAAK,KAAK,gBAAgB;gBAC/B,IAAI,CAAC,OAAO,KAAK,0BAA0B,EAC3C,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,8CAAmB,CAC3B,+CAA+C,CAChD,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAY,OAAO,EAAE,GAAG,CAAA;QAEnC,IAAI,CAAC,IAAA,2BAAgB,EAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,8CAAmB,CAC3B,gDAAgD,CACjD,CAAA;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAnED,gDAmEC"}
|
package/package.json
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
AtprotoHandleResolver,
|
|
3
3
|
AtprotoHandleResolverOptions,
|
|
4
4
|
} from './atproto-handle-resolver.js'
|
|
5
|
+
import { HandleResolverError } from './handle-resolver-error.js'
|
|
5
6
|
import { ResolveTxt } from './internal-resolvers/dns-handle-resolver.js'
|
|
6
7
|
import { HandleResolver } from './types.js'
|
|
7
8
|
|
|
@@ -53,9 +54,9 @@ function dohResolveTxtFactory({
|
|
|
53
54
|
const message = contentType?.startsWith('text/plain')
|
|
54
55
|
? await response.text()
|
|
55
56
|
: `Failed to resolve ${hostname}`
|
|
56
|
-
throw new
|
|
57
|
+
throw new HandleResolverError(message)
|
|
57
58
|
} else if (contentType?.match(/application\/(dns-)?json/i) == null) {
|
|
58
|
-
throw new
|
|
59
|
+
throw new HandleResolverError('Unexpected response from DoH server')
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
const result = asResult(await response.json())
|
|
@@ -87,7 +88,7 @@ function isResult(result: unknown): result is Result {
|
|
|
87
88
|
}
|
|
88
89
|
function asResult(result: unknown): Result {
|
|
89
90
|
if (isResult(result)) return result
|
|
90
|
-
throw new
|
|
91
|
+
throw new HandleResolverError('Invalid DoH response')
|
|
91
92
|
}
|
|
92
93
|
|
|
93
94
|
function isArrayOf<T>(
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
export * from './handle-resolver-error.js'
|
|
1
2
|
export * from './types.js'
|
|
2
3
|
|
|
3
4
|
// Main Handle Resolvers strategies
|
|
4
|
-
export * from './
|
|
5
|
+
export * from './xrpc-handle-resolver.js'
|
|
5
6
|
export * from './atproto-doh-handle-resolver.js'
|
|
6
7
|
export * from './atproto-handle-resolver.js'
|
|
7
8
|
|
package/src/types.ts
CHANGED
|
@@ -18,6 +18,10 @@ export function isResolvedHandle<T>(value: T): value is T & ResolvedHandle {
|
|
|
18
18
|
return value === null || isAtprotoDid(value)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
export function asResolvedHandle(value: string): ResolvedHandle {
|
|
22
|
+
return isResolvedHandle(value) ? value : null
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
export interface HandleResolver {
|
|
22
26
|
/**
|
|
23
27
|
* @returns the DID that corresponds to the given handle, or `null` if no DID
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
|
+
import { HandleResolverError } from './handle-resolver-error.js'
|
|
2
3
|
import {
|
|
3
4
|
HandleResolver,
|
|
4
5
|
ResolveHandleOptions,
|
|
@@ -11,7 +12,7 @@ export const xrpcErrorSchema = z.object({
|
|
|
11
12
|
message: z.string().optional(),
|
|
12
13
|
})
|
|
13
14
|
|
|
14
|
-
export type
|
|
15
|
+
export type XrpcHandleResolverOptions = {
|
|
15
16
|
/**
|
|
16
17
|
* Fetch function to use for HTTP requests. Allows customizing the request
|
|
17
18
|
* behavior, e.g. adding headers, setting a timeout, mocking, etc.
|
|
@@ -21,17 +22,7 @@ export type AppViewHandleResolverOptions = {
|
|
|
21
22
|
fetch?: typeof globalThis.fetch
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
export class
|
|
25
|
-
static from(
|
|
26
|
-
service: URL | string | HandleResolver,
|
|
27
|
-
options?: AppViewHandleResolverOptions,
|
|
28
|
-
): HandleResolver {
|
|
29
|
-
if (typeof service === 'string' || service instanceof URL) {
|
|
30
|
-
return new AppViewHandleResolver(service, options)
|
|
31
|
-
}
|
|
32
|
-
return service
|
|
33
|
-
}
|
|
34
|
-
|
|
25
|
+
export class XrpcHandleResolver implements HandleResolver {
|
|
35
26
|
/**
|
|
36
27
|
* URL of the atproto lexicon server. This is the base URL where the
|
|
37
28
|
* `com.atproto.identity.resolveHandle` XRPC method is located.
|
|
@@ -39,7 +30,7 @@ export class AppViewHandleResolver implements HandleResolver {
|
|
|
39
30
|
protected readonly serviceUrl: URL
|
|
40
31
|
protected readonly fetch: typeof globalThis.fetch
|
|
41
32
|
|
|
42
|
-
constructor(service: URL | string, options?:
|
|
33
|
+
constructor(service: URL | string, options?: XrpcHandleResolverOptions) {
|
|
43
34
|
this.serviceUrl = new URL(service)
|
|
44
35
|
this.fetch = options?.fetch ?? globalThis.fetch
|
|
45
36
|
}
|
|
@@ -67,7 +58,13 @@ export class AppViewHandleResolver implements HandleResolver {
|
|
|
67
58
|
// Any other response is considered unexpected behavior an should throw an error.
|
|
68
59
|
|
|
69
60
|
if (response.status === 400) {
|
|
70
|
-
const data = xrpcErrorSchema.
|
|
61
|
+
const { error, data } = xrpcErrorSchema.safeParse(payload)
|
|
62
|
+
if (error) {
|
|
63
|
+
throw new HandleResolverError(
|
|
64
|
+
`Invalid response from resolveHandle method: ${error.message}`,
|
|
65
|
+
{ cause: error },
|
|
66
|
+
)
|
|
67
|
+
}
|
|
71
68
|
if (
|
|
72
69
|
data.error === 'InvalidRequest' &&
|
|
73
70
|
data.message === 'Unable to resolve handle'
|
|
@@ -77,13 +74,17 @@ export class AppViewHandleResolver implements HandleResolver {
|
|
|
77
74
|
}
|
|
78
75
|
|
|
79
76
|
if (!response.ok) {
|
|
80
|
-
throw new
|
|
77
|
+
throw new HandleResolverError(
|
|
78
|
+
'Invalid status code from resolveHandle method',
|
|
79
|
+
)
|
|
81
80
|
}
|
|
82
81
|
|
|
83
82
|
const value: unknown = payload?.did
|
|
84
83
|
|
|
85
84
|
if (!isResolvedHandle(value)) {
|
|
86
|
-
throw new
|
|
85
|
+
throw new HandleResolverError(
|
|
86
|
+
'Invalid DID returned from resolveHandle method',
|
|
87
|
+
)
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
return value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/
|
|
1
|
+
{"root":["./src/atproto-doh-handle-resolver.ts","./src/atproto-handle-resolver.ts","./src/cached-handle-resolver.ts","./src/handle-resolver-error.ts","./src/index.ts","./src/types.ts","./src/xrpc-handle-resolver.ts","./src/internal-resolvers/dns-handle-resolver.ts","./src/internal-resolvers/well-known-handler-resolver.ts"],"version":"5.8.2"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-view-handle-resolver.d.ts","sourceRoot":"","sources":["../src/app-view-handle-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,cAAc,EAEf,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAA;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC,CAAA;AAED,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,cAAc,EACtC,OAAO,CAAC,EAAE,4BAA4B,GACrC,cAAc;IAOjB;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;gBAErC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B;IAK5D,OAAO,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,CAAC;CAyC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-view-handle-resolver.js","sourceRoot":"","sources":["../src/app-view-handle-resolver.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AACvB,yCAKmB;AAEN,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAA;AAYF,MAAa,qBAAqB;IAChC,MAAM,CAAC,IAAI,CACT,OAAsC,EACtC,OAAsC;QAEtC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,YAAY,GAAG,EAAE,CAAC;YAC1D,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IASD,YAAY,OAAqB,EAAE,OAAsC;QAPzE;;;WAGG;QACgB;;;;;WAAe;QACf;;;;;WAA8B;QAG/C,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IACjD,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,MAAc,EACd,OAA8B;QAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,0CAA0C,EAC1C,IAAI,CAAC,UAAU,CAChB,CAAA;QACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAEtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAChD,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAChD,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAErC,gCAAgC;QAChC,0FAA0F;QAC1F,qDAAqD;QACrD,iFAAiF;QAEjF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,uBAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3C,IACE,IAAI,CAAC,KAAK,KAAK,gBAAgB;gBAC/B,IAAI,CAAC,OAAO,KAAK,0BAA0B,EAC3C,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,KAAK,GAAY,OAAO,EAAE,GAAG,CAAA;QAEnC,IAAI,CAAC,IAAA,2BAAgB,EAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAA;QACvE,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAnED,sDAmEC"}
|