@fedify/fedify 1.2.0-dev.464 → 1.2.0-dev.466
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/esm/nodeinfo/client.js
CHANGED
@@ -1,18 +1,6 @@
|
|
1
1
|
import { getLogger } from "@logtape/logtape";
|
2
2
|
import { parse } from "../deps/jsr.io/@std/semver/1.0.3/mod.js";
|
3
3
|
const logger = getLogger(["fedify", "nodeinfo", "client"]);
|
4
|
-
/**
|
5
|
-
* Fetches a NodeInfo document from the given URL.
|
6
|
-
* @param url The base URL of the server. If `options.direct` is turned off
|
7
|
-
* (default), the NodeInfo document will be fetched from
|
8
|
-
* the `.well-known` location of this URL (hence the only origin
|
9
|
-
* of the URL is used). If `options.direct` is turned on,
|
10
|
-
* the NodeInfo document will be fetched from the given URL.
|
11
|
-
* @param options Options for fetching the NodeInfo document.
|
12
|
-
* @returns The NodeInfo document if it could be fetched successfully.
|
13
|
-
* Otherwise, `null` is returned.
|
14
|
-
* @since 1.2.0
|
15
|
-
*/
|
16
4
|
export async function getNodeInfo(url, options = {}) {
|
17
5
|
try {
|
18
6
|
let nodeInfoUrl = url;
|
@@ -25,7 +13,7 @@ export async function getNodeInfo(url, options = {}) {
|
|
25
13
|
status: wellKnownResponse.status,
|
26
14
|
statusText: wellKnownResponse.statusText,
|
27
15
|
});
|
28
|
-
return
|
16
|
+
return undefined;
|
29
17
|
}
|
30
18
|
const wellKnownRd = await wellKnownResponse.json();
|
31
19
|
const link = wellKnownRd?.links?.find((link) => link != null &&
|
@@ -36,7 +24,7 @@ export async function getNodeInfo(url, options = {}) {
|
|
36
24
|
link.href != null);
|
37
25
|
if (link == null) {
|
38
26
|
logger.error("Failed to find a NodeInfo document link from {url}: {resourceDescriptor}", { url: wellKnownUrl.href, resourceDescriptor: wellKnownRd });
|
39
|
-
return
|
27
|
+
return undefined;
|
40
28
|
}
|
41
29
|
nodeInfoUrl = link.href;
|
42
30
|
}
|
@@ -47,17 +35,21 @@ export async function getNodeInfo(url, options = {}) {
|
|
47
35
|
status: response.status,
|
48
36
|
statusText: response.statusText,
|
49
37
|
});
|
50
|
-
return
|
38
|
+
return undefined;
|
51
39
|
}
|
52
40
|
const data = await response.json();
|
53
|
-
|
41
|
+
if (options.parse === "none")
|
42
|
+
return data;
|
43
|
+
return parseNodeInfo(data, {
|
44
|
+
tryBestEffort: options.parse === "best-effort",
|
45
|
+
}) ?? undefined;
|
54
46
|
}
|
55
47
|
catch (error) {
|
56
48
|
logger.error("Failed to fetch NodeInfo document from {url}: {error}", {
|
57
49
|
url: url.toString(),
|
58
50
|
error,
|
59
51
|
});
|
60
|
-
return
|
52
|
+
return undefined;
|
61
53
|
}
|
62
54
|
}
|
63
55
|
/**
|
package/package.json
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/// <reference types="node" />
|
2
|
-
import type { InboundService, NodeInfo, OutboundService, Protocol, Services, Software, Usage } from "./types.js";
|
2
|
+
import type { InboundService, JsonValue, NodeInfo, OutboundService, Protocol, Services, Software, Usage } from "./types.js";
|
3
3
|
/**
|
4
4
|
* Options for {@link getNodeInfo} function.
|
5
5
|
* @since 1.2.0
|
6
6
|
*/
|
7
|
-
export interface GetNodeInfoOptions
|
7
|
+
export interface GetNodeInfoOptions {
|
8
8
|
/**
|
9
9
|
* Whether to directly fetch the NodeInfo document from the given URL.
|
10
10
|
* Otherwise, the NodeInfo document will be fetched from the `.well-known`
|
@@ -13,6 +13,17 @@ export interface GetNodeInfoOptions extends ParseNodeInfoOptions {
|
|
13
13
|
* Turned off by default.
|
14
14
|
*/
|
15
15
|
direct?: boolean;
|
16
|
+
/**
|
17
|
+
* How strictly to parse the NodeInfo document.
|
18
|
+
*
|
19
|
+
* - `"strict"`: Parse the NodeInfo document strictly. If the document is
|
20
|
+
* invalid, `undefined` is returned. This is the default.
|
21
|
+
* - `"best-effort"`: Try to parse the NodeInfo document even if it is
|
22
|
+
* invalid.
|
23
|
+
* - `"none"`: Do not parse the NodeInfo document. The function will return
|
24
|
+
* the raw JSON value.
|
25
|
+
*/
|
26
|
+
parse?: "strict" | "best-effort" | "none";
|
16
27
|
}
|
17
28
|
/**
|
18
29
|
* Fetches a NodeInfo document from the given URL.
|
@@ -23,10 +34,27 @@ export interface GetNodeInfoOptions extends ParseNodeInfoOptions {
|
|
23
34
|
* the NodeInfo document will be fetched from the given URL.
|
24
35
|
* @param options Options for fetching the NodeInfo document.
|
25
36
|
* @returns The NodeInfo document if it could be fetched successfully.
|
26
|
-
* Otherwise, `
|
37
|
+
* Otherwise, `undefined` is returned.
|
38
|
+
* @since 1.2.0
|
39
|
+
*/
|
40
|
+
export declare function getNodeInfo(url: URL | string, options?: GetNodeInfoOptions & {
|
41
|
+
parse?: "strict" | "best-effort";
|
42
|
+
}): Promise<NodeInfo | undefined>;
|
43
|
+
/**
|
44
|
+
* Fetches a NodeInfo document from the given URL.
|
45
|
+
* @param url The base URL of the server. If `options.direct` is turned off
|
46
|
+
* (default), the NodeInfo document will be fetched from
|
47
|
+
* the `.well-known` location of this URL (hence the only origin
|
48
|
+
* of the URL is used). If `options.direct` is turned on,
|
49
|
+
* the NodeInfo document will be fetched from the given URL.
|
50
|
+
* @param options Options for fetching the NodeInfo document.
|
51
|
+
* @returns The NodeInfo document if it could be fetched successfully.
|
52
|
+
* Otherwise, `undefined` is returned.
|
27
53
|
* @since 1.2.0
|
28
54
|
*/
|
29
|
-
export declare function getNodeInfo(url: URL | string, options
|
55
|
+
export declare function getNodeInfo(url: URL | string, options: GetNodeInfoOptions & {
|
56
|
+
parse: "none";
|
57
|
+
}): Promise<JsonValue | undefined>;
|
30
58
|
/**
|
31
59
|
* Options for {@link parseNodeInfo} function.
|
32
60
|
* @since 1.2.0
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/nodeinfo/client.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EACV,cAAc,
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/nodeinfo/client.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACN,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;CAC3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,GAAG,MAAM,EACjB,OAAO,CAAC,EAAE,kBAAkB,GAAG;IAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAA;CAAE,GAClE,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,GAAG,MAAM,EACjB,OAAO,EAAE,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;AA+DlC;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,oBAAyB,GACjC,QAAQ,GAAG,IAAI,CAyDjB;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,oBAAyB,GACjC,QAAQ,GAAG,IAAI,CAuDjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAY5D;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,oBAAyB,GACjC,QAAQ,GAAG,IAAI,CAqBjB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAWxE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAkB1E;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,oBAAyB,GACjC,KAAK,GAAG,IAAI,CAiEd"}
|