@fedify/fedify 1.11.0-dev.92 → 2.0.0-dev.109
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 +34 -20
- package/dist/{actor-BSf1RMUB.js → actor-BZTYJWzP.js} +1 -1
- package/dist/{actor-B6ovE-4c.js → actor-Cm25mX8I.js} +220 -705
- package/dist/{actor-eeONG_sv.d.ts → actor-DqFajh9s.d.ts} +2 -2
- package/dist/{actor-DMxe8a2S.cjs → actor-ZEAP42Ry.cjs} +952 -1479
- package/dist/{actor-D190nbTD.d.cts → actor-f2NtjyCg.d.cts} +2 -2
- package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-Ce45JcFg.js} +1 -1
- package/dist/{assert_is_error-BPGph1Jx.js → assert_throws-BNXdRGWP.js} +31 -1
- package/dist/{builder-CvMAl7DC.js → builder-CWMz7B2F.js} +3 -4
- package/dist/{client-n6L4GtQL.d.cts → client-94iWEfQa.d.cts} +3 -75
- package/dist/{client-B3mQJNO7.d.ts → client-BsGzbnV-.d.ts} +3 -75
- package/dist/{client-gwmljOpB.js → client-pY7-3icS.js} +3 -22
- package/dist/compat/mod.d.cts +10 -12
- package/dist/compat/mod.d.ts +10 -12
- package/dist/compat/transformers.test.js +20 -20
- package/dist/{context-WJoO0SQs.d.cts → context-DBQ7nMCw.d.cts} +152 -27
- package/dist/{context-Cr5DIxq_.d.ts → context-mM0Nu5yo.d.ts} +152 -27
- package/dist/{authdocloader-D-v1l7De.js → docloader-BeSgUTFj.js} +17 -8
- package/dist/{esm-D55VN1Km.js → esm-bEFTDE2Q.js} +32 -17
- package/dist/federation/builder.test.js +9 -12
- package/dist/federation/collection.test.js +7 -9
- package/dist/federation/handler.test.js +28 -149
- package/dist/federation/idempotency.test.js +26 -27
- package/dist/federation/inbox.test.js +4 -6
- package/dist/federation/keycache.test.js +3 -4
- package/dist/federation/kv.test.js +6 -8
- package/dist/federation/middleware.test.js +270 -93
- package/dist/federation/mod.cjs +9 -11
- package/dist/federation/mod.d.cts +10 -12
- package/dist/federation/mod.d.ts +10 -12
- package/dist/federation/mod.js +9 -11
- package/dist/federation/mq.test.js +10 -10
- package/dist/federation/negotiation.test.js +26 -0
- package/dist/federation/retry.test.js +4 -5
- package/dist/federation/router.test.js +6 -8
- package/dist/federation/send.test.js +14 -16
- package/dist/{http-C9J5l76C.js → http-B8aQ8cUK.js} +256 -6
- package/dist/{http-C2x6TpEb.js → http-BF8Z1B-J.js} +2 -2
- package/dist/{http-DS9z_HzB.d.ts → http-BbO0ejuk.d.ts} +2 -2
- package/dist/{http-DOST1wn2.cjs → http-Dy7ENa6t.cjs} +289 -9
- package/dist/{http-C_1RU1U_.d.cts → http-M8k5mKc0.d.cts} +2 -2
- package/dist/{inbox-CeWZnS6I.js → inbox-CReikedp.js} +2 -7
- package/dist/{key-w6smvEIf.js → key-C85if3Ia.js} +3 -2
- package/dist/{keycache-DIPsFeDQ.js → keycache-BjRr5pe2.js} +1 -1
- package/dist/{keys-Bkp2oOoh.js → keys-do4GUlRT.js} +2 -1
- package/dist/{kv-DipCBaw2.d.ts → kv-BpJND1Hr.d.ts} +2 -1
- package/dist/{kv-BqEOXcZv.d.cts → kv-cD_d4hg-.d.cts} +2 -1
- package/dist/kv-cache-B4Y86MKl.js +122 -0
- package/dist/kv-cache-D7LFlByV.js +107 -0
- package/dist/kv-cache-qW5Mv9rV.cjs +134 -0
- package/dist/{ld-Dk2eojF9.js → ld-0Wpf83DM.js} +3 -2
- package/dist/{lookup-BI5Omd9s.cjs → lookup-Br9_ufLS.cjs} +134 -5
- package/dist/{lookup-Fk5eyxDk.js → lookup-Cj543vD4.js} +125 -2
- package/dist/{type-DMwrwZj3.js → lookup-D6_9czrD.js} +547 -5409
- package/dist/middleware-BPmn8w0u.cjs +15 -0
- package/dist/middleware-BXodt-Uj.js +26 -0
- package/dist/{middleware-BgI9lQ4P.js → middleware-Bq8dxPN6.js} +43 -146
- package/dist/{middleware-YNYjpKML.cjs → middleware-CDzg72dQ.cjs} +58 -104
- package/dist/middleware-DvA6x8_h.js +15 -0
- package/dist/{middleware-CNMzY5iD.js → middleware-hM1Z5nWM.js} +38 -84
- package/dist/{mod-DS4kJskR.d.ts → mod-BlVovdcy.d.ts} +2 -2
- package/dist/{mod-D5rfgGFE.d.cts → mod-BxRCHTz-.d.cts} +2 -2
- package/dist/{mod-CxMBb_dd.d.cts → mod-C58MZ7Wx.d.cts} +1 -1
- package/dist/mod-CAdoBu0x.d.ts +109 -0
- package/dist/{mod-BZfdiPBo.d.ts → mod-D5Z2tISD.d.ts} +3 -3
- package/dist/{mod-Dz5Y15Uy.d.cts → mod-DgxG-byT.d.cts} +3 -3
- package/dist/{mod-ChbckRnC.d.ts → mod-Ds0mpFZU.d.ts} +1 -1
- package/dist/{mod-OQfb33eH.d.cts → mod-Dy2fJtmN.d.cts} +2 -2
- package/dist/{mod-CnULG6Aa.d.ts → mod-GetHzY6F.d.ts} +2 -2
- package/dist/mod-fxr25Gv7.d.cts +107 -0
- package/dist/mod.cjs +19 -34
- package/dist/mod.d.cts +15 -17
- package/dist/mod.d.ts +15 -17
- package/dist/mod.js +14 -16
- package/dist/negotiation-C4nFufNk.js +71 -0
- package/dist/nodeinfo/client.test.js +30 -111
- package/dist/nodeinfo/handler.test.js +25 -26
- package/dist/nodeinfo/mod.cjs +3 -6
- package/dist/nodeinfo/mod.d.cts +3 -5
- package/dist/nodeinfo/mod.d.ts +3 -5
- package/dist/nodeinfo/mod.js +3 -4
- package/dist/nodeinfo/types.test.js +8 -15
- package/dist/otel/exporter.test.js +44 -70
- package/dist/otel/mod.cjs +17 -34
- package/dist/otel/mod.d.cts +5 -6
- package/dist/otel/mod.d.ts +5 -6
- package/dist/otel/mod.js +17 -34
- package/dist/{otel-Chy5T2Xh.js → otel-Bfe_BgOV.js} +1 -2
- package/dist/{owner-C_e5oYyI.js → owner-B2ziOXAb.js} +3 -2
- package/dist/{owner-AcrG3Xz1.d.cts → owner-B4HbyP8s.d.cts} +3 -3
- package/dist/{owner-8NMhXwJd.d.ts → owner-kQRGVXG1.d.ts} +3 -3
- package/dist/{proof-GRfyDBRU.js → proof-CN_ohUto.js} +2 -2
- package/dist/{proof-C5COc2tW.cjs → proof-CWQ0o-yI.cjs} +18 -17
- package/dist/{proof-BWebFnAY.js → proof-CXrz_moF.js} +5 -4
- package/dist/{send-Dd4ncQqL.js → send-Bt_ukOqY.js} +2 -2
- package/dist/sig/http.test.js +12 -13
- package/dist/sig/key.test.js +9 -11
- package/dist/sig/ld.test.js +8 -10
- package/dist/sig/mod.cjs +9 -11
- package/dist/sig/mod.d.cts +5 -7
- package/dist/sig/mod.d.ts +5 -7
- package/dist/sig/mod.js +5 -7
- package/dist/sig/owner.test.js +11 -13
- package/dist/sig/proof.test.js +13 -14
- package/dist/src/vocab/accept.yaml +1 -1
- package/dist/src/vocab/activity.yaml +1 -1
- package/dist/src/vocab/add.yaml +1 -1
- package/dist/src/vocab/announce.yaml +1 -1
- package/dist/src/vocab/application.yaml +1 -1
- package/dist/src/vocab/arrive.yaml +1 -1
- package/dist/src/vocab/article.yaml +1 -1
- package/dist/src/vocab/audio.yaml +1 -1
- package/dist/src/vocab/block.yaml +1 -1
- package/dist/src/vocab/chatmessage.yaml +1 -1
- package/dist/src/vocab/collection.yaml +1 -1
- package/dist/src/vocab/collectionpage.yaml +1 -1
- package/dist/src/vocab/create.yaml +1 -1
- package/dist/src/vocab/dataintegrityproof.yaml +1 -1
- package/dist/src/vocab/delete.yaml +1 -1
- package/dist/src/vocab/didservice.yaml +1 -1
- package/dist/src/vocab/dislike.yaml +1 -1
- package/dist/src/vocab/document.yaml +1 -1
- package/dist/src/vocab/emoji.yaml +1 -1
- package/dist/src/vocab/emojireact.yaml +1 -1
- package/dist/src/vocab/endpoints.yaml +1 -1
- package/dist/src/vocab/event.yaml +1 -1
- package/dist/src/vocab/export.yaml +1 -1
- package/dist/src/vocab/flag.yaml +1 -1
- package/dist/src/vocab/follow.yaml +1 -1
- package/dist/src/vocab/group.yaml +1 -1
- package/dist/src/vocab/hashtag.yaml +1 -1
- package/dist/src/vocab/ignore.yaml +1 -1
- package/dist/src/vocab/image.yaml +1 -1
- package/dist/src/vocab/intransitiveactivity.yaml +1 -1
- package/dist/src/vocab/invite.yaml +1 -1
- package/dist/src/vocab/join.yaml +1 -1
- package/dist/src/vocab/key.yaml +1 -1
- package/dist/src/vocab/leave.yaml +1 -1
- package/dist/src/vocab/like.yaml +1 -1
- package/dist/src/vocab/link.yaml +1 -1
- package/dist/src/vocab/listen.yaml +1 -1
- package/dist/src/vocab/mention.yaml +1 -1
- package/dist/src/vocab/move.yaml +1 -1
- package/dist/src/vocab/multikey.yaml +1 -1
- package/dist/src/vocab/note.yaml +1 -1
- package/dist/src/vocab/object.yaml +1 -1
- package/dist/src/vocab/offer.yaml +1 -1
- package/dist/src/vocab/orderedcollection.yaml +1 -1
- package/dist/src/vocab/orderedcollectionpage.yaml +1 -1
- package/dist/src/vocab/organization.yaml +1 -1
- package/dist/src/vocab/page.yaml +1 -1
- package/dist/src/vocab/person.yaml +1 -1
- package/dist/src/vocab/place.yaml +1 -1
- package/dist/src/vocab/profile.yaml +1 -1
- package/dist/src/vocab/propertyvalue.yaml +1 -1
- package/dist/src/vocab/question.yaml +1 -1
- package/dist/src/vocab/read.yaml +1 -1
- package/dist/src/vocab/reject.yaml +1 -1
- package/dist/src/vocab/relationship.yaml +1 -1
- package/dist/src/vocab/remove.yaml +1 -1
- package/dist/src/vocab/service.yaml +1 -1
- package/dist/src/vocab/source.yaml +1 -1
- package/dist/src/vocab/tentativeaccept.yaml +1 -1
- package/dist/src/vocab/tentativereject.yaml +1 -1
- package/dist/src/vocab/tombstone.yaml +1 -1
- package/dist/src/vocab/travel.yaml +1 -1
- package/dist/src/vocab/undo.yaml +1 -1
- package/dist/src/vocab/update.yaml +1 -1
- package/dist/src/vocab/video.yaml +1 -1
- package/dist/src/vocab/view.yaml +1 -1
- package/dist/testing/docloader.test.js +6 -8
- package/dist/testing/mod.d.ts +10 -119
- package/dist/testing/mod.js +2 -3
- package/dist/{testing-Dl_uo19c.js → testing-DcJ3qTSi.js} +1 -2
- package/dist/{types-CPPQlW2w.js → types-BtUjyi5y.js} +5 -166
- package/dist/{types-BIgY6c-l.js → types-C2XVl6gj.js} +1 -3
- package/dist/{types-tmeoSVgM.cjs → types-CWgzGaqk.cjs} +6 -179
- package/dist/{runtime/authdocloader.test.js → utils/docloader.test.js} +14 -15
- package/dist/utils/kv-cache.test.js +212 -0
- package/dist/utils/mod.cjs +12 -0
- package/dist/utils/mod.d.cts +5 -0
- package/dist/utils/mod.d.ts +7 -0
- package/dist/utils/mod.js +11 -0
- package/dist/vocab/actor.test.js +8 -10
- package/dist/vocab/lookup.test.js +8 -10
- package/dist/vocab/mod.cjs +3 -4
- package/dist/vocab/mod.d.cts +3 -5
- package/dist/vocab/mod.d.ts +3 -5
- package/dist/vocab/mod.js +3 -4
- package/dist/vocab/type.test.js +2 -3
- package/dist/vocab/vocab.test.js +7618 -1973
- package/dist/{vocab-BASuuzcJ.d.ts → vocab-BCWe1Ih5.d.ts} +9 -25
- package/dist/{vocab-DPMmFPJ1.d.cts → vocab-CeDBzu-f.d.cts} +9 -25
- package/dist/{vocab-kxSYUP1j.js → vocab-DZvBYZFH.js} +3 -3
- package/dist/{vocab-BnNSNBil.cjs → vocab-aeFsUPtk.cjs} +5 -5
- package/dist/webfinger/handler.test.js +24 -25
- package/dist/webfinger/lookup.test.js +7 -9
- package/dist/webfinger/mod.cjs +2 -3
- package/dist/webfinger/mod.d.cts +1 -3
- package/dist/webfinger/mod.d.ts +1 -3
- package/dist/webfinger/mod.js +2 -3
- package/package.json +33 -66
- package/dist/assert_throws-BOO88avQ.js +0 -39
- package/dist/authdocloader-Bn3Jg414.js +0 -52
- package/dist/authdocloader-DmTWTYA4.cjs +0 -58
- package/dist/denokv-D0nfNQ1x.js +0 -57
- package/dist/docloader-BucCRHZI.d.ts +0 -221
- package/dist/docloader-CgESja7v.js +0 -4835
- package/dist/docloader-ChxNLZAA.d.cts +0 -219
- package/dist/docloader-DJCmWQFv.cjs +0 -4901
- package/dist/key-BUDjxXee.js +0 -10
- package/dist/key-Bl-6W_Cx.cjs +0 -290
- package/dist/key-BluX4ryA.js +0 -260
- package/dist/key-DWZlSSOl.cjs +0 -10
- package/dist/key-zkx54yxw.js +0 -10
- package/dist/lookup-DFrFssJ8.js +0 -336
- package/dist/middleware-BmGndt7n.cjs +0 -17
- package/dist/middleware-CxG8rL1c.js +0 -26
- package/dist/middleware-etnOMaDs.js +0 -17
- package/dist/mod-CD7gfdq3.d.ts +0 -104
- package/dist/mod-JUhOKMHj.d.cts +0 -102
- package/dist/mq-B7R1Q-M5.d.cts +0 -140
- package/dist/mq-CRGm1e_F.d.ts +0 -143
- package/dist/nodeinfo/semver.test.js +0 -143
- package/dist/runtime/docloader.test.js +0 -599
- package/dist/runtime/key.test.d.ts +0 -3
- package/dist/runtime/key.test.js +0 -103
- package/dist/runtime/langstr.test.d.ts +0 -3
- package/dist/runtime/langstr.test.js +0 -40
- package/dist/runtime/link.test.d.ts +0 -3
- package/dist/runtime/link.test.js +0 -61
- package/dist/runtime/mod.cjs +0 -25
- package/dist/runtime/mod.d.cts +0 -6
- package/dist/runtime/mod.d.ts +0 -8
- package/dist/runtime/mod.js +0 -13
- package/dist/runtime/multibase/multibase.test.d.ts +0 -3
- package/dist/runtime/multibase/multibase.test.js +0 -358
- package/dist/runtime/url.test.d.ts +0 -3
- package/dist/runtime/url.test.js +0 -45
- package/dist/semver-dArNLkR9.js +0 -149
- package/dist/vocab/schema.yaml +0 -247
- package/dist/x/cfworkers.cjs +0 -100
- package/dist/x/cfworkers.d.cts +0 -59
- package/dist/x/cfworkers.d.ts +0 -61
- package/dist/x/cfworkers.js +0 -98
- package/dist/x/cfworkers.test.d.ts +0 -3
- package/dist/x/cfworkers.test.js +0 -179
- package/dist/x/hono.cjs +0 -61
- package/dist/x/hono.d.cts +0 -54
- package/dist/x/hono.d.ts +0 -56
- package/dist/x/hono.js +0 -60
- package/dist/x/sveltekit.cjs +0 -69
- package/dist/x/sveltekit.d.cts +0 -46
- package/dist/x/sveltekit.d.ts +0 -48
- package/dist/x/sveltekit.js +0 -68
- /package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
- /package/dist/{collection-CSzG2j1P.js → collection-BzWsN9pB.js} +0 -0
- /package/dist/{nodeinfo/semver.test.d.ts → federation/negotiation.test.d.ts} +0 -0
- /package/dist/{federation-C15gGOh1.cjs → federation-CoW-KDKv.cjs} +0 -0
- /package/dist/{federation-K-xsO03l.js → federation-D0hkM4T7.js} +0 -0
- /package/dist/{mod-C2tOeRkN.d.cts → mod-B-hUPT2N.d.cts} +0 -0
- /package/dist/{mod-1pDWKvUL.d.ts → mod-CVgZgliM.d.ts} +0 -0
- /package/dist/{mod-FZd39qVq.d.cts → mod-CcDPcLJW.d.cts} +0 -0
- /package/dist/{mod-g0xFzAP9.d.ts → mod-bjzj5QIb.d.ts} +0 -0
- /package/dist/{nodeinfo-DfycQ8Wf.js → nodeinfo-BnthBobC.js} +0 -0
- /package/dist/{nodeinfo-Co9lJrWl.cjs → nodeinfo-CdN0rEnZ.cjs} +0 -0
- /package/dist/{retry-D4GJ670a.js → retry-CfF8Gn4d.js} +0 -0
- /package/dist/{runtime-DPYEDf-o.js → sig-C34-oHBl.js} +0 -0
- /package/dist/{runtime-C58AJWSv.cjs → sig-YYj5tCnr.cjs} +0 -0
- /package/dist/{std__assert-X-_kMxKM.js → std__assert-DWivtrGR.js} +0 -0
- /package/dist/{runtime → utils}/docloader.test.d.ts +0 -0
- /package/dist/{runtime/authdocloader.test.d.ts → utils/kv-cache.test.d.ts} +0 -0
- /package/dist/{sig-Cj3tk-ig.js → utils-D-Va7aXC.js} +0 -0
- /package/dist/{sig-ByHXzqUi.cjs → utils-DyRU1gdZ.cjs} +0 -0
- /package/dist/{webfinger-De_bU0iE.js → webfinger-C72Y8lrh.js} +0 -0
- /package/dist/{webfinger-BjOEdFPs.cjs → webfinger-vAtLmxOF.cjs} +0 -0
package/dist/testing/mod.d.ts
CHANGED
|
@@ -1,102 +1,9 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { URLPattern } from "urlpattern-polyfill";
|
|
3
3
|
globalThis.addEventListener = () => {};
|
|
4
|
+
import { DocumentLoader, GetUserAgentOptions, LanguageString } from "@fedify/vocab-runtime";
|
|
4
5
|
import { Span, TracerProvider } from "@opentelemetry/api";
|
|
5
|
-
import { LanguageTag } from "@phensley/language-tag";
|
|
6
6
|
|
|
7
|
-
//#region src/runtime/docloader.d.ts
|
|
8
|
-
/**
|
|
9
|
-
* A remote JSON-LD document and its context fetched by
|
|
10
|
-
* a {@link DocumentLoader}.
|
|
11
|
-
*/
|
|
12
|
-
interface RemoteDocument {
|
|
13
|
-
/**
|
|
14
|
-
* The URL of the context document.
|
|
15
|
-
*/
|
|
16
|
-
contextUrl: string | null;
|
|
17
|
-
/**
|
|
18
|
-
* The fetched JSON-LD document.
|
|
19
|
-
*/
|
|
20
|
-
document: unknown;
|
|
21
|
-
/**
|
|
22
|
-
* The URL of the fetched document.
|
|
23
|
-
*/
|
|
24
|
-
documentUrl: string;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Options for {@link DocumentLoader}.
|
|
28
|
-
* @since 1.8.0
|
|
29
|
-
*/
|
|
30
|
-
interface DocumentLoaderOptions {
|
|
31
|
-
/**
|
|
32
|
-
* An `AbortSignal` for cancellation.
|
|
33
|
-
* @since 1.8.0
|
|
34
|
-
*/
|
|
35
|
-
signal?: AbortSignal;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* A JSON-LD document loader that fetches documents from the Web.
|
|
39
|
-
* @param url The URL of the document to load.
|
|
40
|
-
* @param options The options for the document loader.
|
|
41
|
-
* @returns The loaded remote document.
|
|
42
|
-
*/
|
|
43
|
-
type DocumentLoader = (url: string, options?: DocumentLoaderOptions) => Promise<RemoteDocument>;
|
|
44
|
-
/**
|
|
45
|
-
* A factory function that creates a {@link DocumentLoader} with options.
|
|
46
|
-
* @param options The options for the document loader.
|
|
47
|
-
* @returns The document loader.
|
|
48
|
-
* @since 1.4.0
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Options for making `User-Agent` string.
|
|
53
|
-
* @see {@link getUserAgent}
|
|
54
|
-
* @since 1.3.0
|
|
55
|
-
*/
|
|
56
|
-
interface GetUserAgentOptions {
|
|
57
|
-
/**
|
|
58
|
-
* An optional software name and version, e.g., `"Hollo/1.0.0"`.
|
|
59
|
-
*/
|
|
60
|
-
software?: string | null;
|
|
61
|
-
/**
|
|
62
|
-
* An optional URL to append to the user agent string.
|
|
63
|
-
* Usually the URL of the ActivityPub instance.
|
|
64
|
-
*/
|
|
65
|
-
url?: string | URL | null;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Gets the user agent string for the given application and URL.
|
|
69
|
-
* @param options The options for making the user agent string.
|
|
70
|
-
* @returns The user agent string.
|
|
71
|
-
* @since 1.3.0
|
|
72
|
-
*/
|
|
73
|
-
//#endregion
|
|
74
|
-
//#region src/nodeinfo/semver.d.ts
|
|
75
|
-
/**
|
|
76
|
-
* A SemVer object parsed into its constituent parts.
|
|
77
|
-
* @since 1.2.0
|
|
78
|
-
*/
|
|
79
|
-
interface SemVer {
|
|
80
|
-
/** The major version */
|
|
81
|
-
major: number;
|
|
82
|
-
/** The minor version */
|
|
83
|
-
minor: number;
|
|
84
|
-
/** The patch version */
|
|
85
|
-
patch: number;
|
|
86
|
-
/**
|
|
87
|
-
* The prerelease version
|
|
88
|
-
*
|
|
89
|
-
* @default {[]}
|
|
90
|
-
*/
|
|
91
|
-
prerelease?: (string | number)[];
|
|
92
|
-
/**
|
|
93
|
-
* The build metadata
|
|
94
|
-
*
|
|
95
|
-
* @default {[]}
|
|
96
|
-
*/
|
|
97
|
-
build?: string[];
|
|
98
|
-
}
|
|
99
|
-
//#endregion
|
|
100
7
|
//#region src/nodeinfo/types.d.ts
|
|
101
8
|
/**
|
|
102
9
|
* The type of the result of parsing JSON.
|
|
@@ -146,9 +53,8 @@ interface Software {
|
|
|
146
53
|
name: string;
|
|
147
54
|
/**
|
|
148
55
|
* The version of this server software.
|
|
149
|
-
* @see {@link parseSemVer}
|
|
150
56
|
*/
|
|
151
|
-
version:
|
|
57
|
+
version: string;
|
|
152
58
|
/**
|
|
153
59
|
* The URL of the source code repository of this server software.
|
|
154
60
|
*/
|
|
@@ -276,21 +182,6 @@ interface GetNodeInfoOptions {
|
|
|
276
182
|
* @since 1.2.0
|
|
277
183
|
*/
|
|
278
184
|
//#endregion
|
|
279
|
-
//#region src/runtime/langstr.d.ts
|
|
280
|
-
/**
|
|
281
|
-
* A language-tagged string which corresponds to the `rdf:langString` type.
|
|
282
|
-
*/
|
|
283
|
-
declare class LanguageString extends String {
|
|
284
|
-
readonly language: LanguageTag;
|
|
285
|
-
/**
|
|
286
|
-
* Constructs a new `LanguageString`.
|
|
287
|
-
* @param value A string value written in the given language.
|
|
288
|
-
* @param language The language of the string. If a string is given, it will
|
|
289
|
-
* be parsed as a `LanguageTag`.
|
|
290
|
-
*/
|
|
291
|
-
constructor(value: string, language: LanguageTag | string);
|
|
292
|
-
}
|
|
293
|
-
//#endregion
|
|
294
185
|
//#region src/vocab/vocab.d.ts
|
|
295
186
|
/** Describes an object of any kind. The Object type serves as the base type for
|
|
296
187
|
* most of the other kinds of objects defined in the Activity Vocabulary,
|
|
@@ -4229,7 +4120,7 @@ declare class Link {
|
|
|
4229
4120
|
mediaType?: string | null;
|
|
4230
4121
|
name?: string | LanguageString | null;
|
|
4231
4122
|
names?: ((string | LanguageString))[];
|
|
4232
|
-
language?:
|
|
4123
|
+
language?: Intl.Locale | null;
|
|
4233
4124
|
height?: number | null;
|
|
4234
4125
|
width?: number | null;
|
|
4235
4126
|
previews?: (Link | Object$1 | URL)[];
|
|
@@ -4252,7 +4143,7 @@ declare class Link {
|
|
|
4252
4143
|
mediaType?: string | null;
|
|
4253
4144
|
name?: string | LanguageString | null;
|
|
4254
4145
|
names?: ((string | LanguageString))[];
|
|
4255
|
-
language?:
|
|
4146
|
+
language?: Intl.Locale | null;
|
|
4256
4147
|
height?: number | null;
|
|
4257
4148
|
width?: number | null;
|
|
4258
4149
|
previews?: (Link | Object$1 | URL)[];
|
|
@@ -4296,7 +4187,7 @@ declare class Link {
|
|
|
4296
4187
|
/** Hints as to the language used by the target resource.
|
|
4297
4188
|
* Value MUST be a BCP 47 Language-Tag.
|
|
4298
4189
|
*/
|
|
4299
|
-
get language():
|
|
4190
|
+
get language(): Intl.Locale | null;
|
|
4300
4191
|
/** On a {@link Link}, specifies a hint as to the rendering height in
|
|
4301
4192
|
* device-independent pixels of the linked resource.
|
|
4302
4193
|
*/
|
|
@@ -4383,7 +4274,7 @@ declare class Hashtag extends Link {
|
|
|
4383
4274
|
mediaType?: string | null;
|
|
4384
4275
|
name?: string | LanguageString | null;
|
|
4385
4276
|
names?: ((string | LanguageString))[];
|
|
4386
|
-
language?:
|
|
4277
|
+
language?: Intl.Locale | null;
|
|
4387
4278
|
height?: number | null;
|
|
4388
4279
|
width?: number | null;
|
|
4389
4280
|
previews?: (Link | Object$1 | URL)[];
|
|
@@ -4406,7 +4297,7 @@ declare class Hashtag extends Link {
|
|
|
4406
4297
|
mediaType?: string | null;
|
|
4407
4298
|
name?: string | LanguageString | null;
|
|
4408
4299
|
names?: ((string | LanguageString))[];
|
|
4409
|
-
language?:
|
|
4300
|
+
language?: Intl.Locale | null;
|
|
4410
4301
|
height?: number | null;
|
|
4411
4302
|
width?: number | null;
|
|
4412
4303
|
previews?: (Link | Object$1 | URL)[];
|
|
@@ -8127,13 +8018,13 @@ interface CollectionCallbackSetters<TContext extends Context<TContextData>, TCon
|
|
|
8127
8018
|
*
|
|
8128
8019
|
* - `"per-origin"`: Activities are deduplicated per receiving server's origin.
|
|
8129
8020
|
* The same activity ID will be processed only once on each receiving server,
|
|
8130
|
-
* but can be processed separately on different receiving servers. This
|
|
8131
|
-
* the default behavior in Fedify 1.x versions.
|
|
8021
|
+
* but can be processed separately on different receiving servers. This had
|
|
8022
|
+
* been the default behavior in Fedify 1.x versions.
|
|
8132
8023
|
*
|
|
8133
8024
|
* - `"per-inbox"`: Activities are deduplicated per inbox. The same activity
|
|
8134
8025
|
* ID can be processed once per inbox, allowing the same activity to be
|
|
8135
8026
|
* delivered to multiple inboxes independently. This follows standard
|
|
8136
|
-
* ActivityPub behavior and
|
|
8027
|
+
* ActivityPub behavior and is the default strategy since Fedify 2.0.0.
|
|
8137
8028
|
*
|
|
8138
8029
|
* @since 1.9.0
|
|
8139
8030
|
*/
|
package/dist/testing/mod.js
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
|
4
4
|
globalThis.addEventListener = () => {};
|
|
5
5
|
|
|
6
|
-
import "../
|
|
7
|
-
import "../
|
|
8
|
-
import { createInboxContext, createRequestContext, test, testDefinitions } from "../testing-Dl_uo19c.js";
|
|
6
|
+
import "../lookup-D6_9czrD.js";
|
|
7
|
+
import { createInboxContext, createRequestContext, test, testDefinitions } from "../testing-DcJ3qTSi.js";
|
|
9
8
|
|
|
10
9
|
export { createInboxContext, createRequestContext, test, testDefinitions };
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
|
4
4
|
globalThis.addEventListener = () => {};
|
|
5
5
|
|
|
6
|
-
import { __require, lookupWebFinger } from "./
|
|
7
|
-
import { RouterError, lookupObject, traverseCollection } from "./lookup-DFrFssJ8.js";
|
|
6
|
+
import { RouterError, __require, lookupObject, lookupWebFinger, traverseCollection } from "./lookup-D6_9czrD.js";
|
|
8
7
|
import { configure, getConsoleSink, getLogger, reset } from "@logtape/logtape";
|
|
9
8
|
import { trace } from "@opentelemetry/api";
|
|
10
9
|
|
|
@@ -2,152 +2,9 @@
|
|
|
2
2
|
import { Temporal } from "@js-temporal/polyfill";
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
|
4
4
|
|
|
5
|
-
import { getUserAgent } from "./docloader-CgESja7v.js";
|
|
6
5
|
import { getLogger } from "@logtape/logtape";
|
|
6
|
+
import { getUserAgent } from "@fedify/vocab-runtime";
|
|
7
7
|
|
|
8
|
-
//#region src/nodeinfo/semver.ts
|
|
9
|
-
const MAX_LENGTH = 256;
|
|
10
|
-
/**
|
|
11
|
-
* A single `0`, or a non-zero digit followed by zero or more digits.
|
|
12
|
-
*/
|
|
13
|
-
const NUMERIC_IDENTIFIER = "0|[1-9]\\d*";
|
|
14
|
-
/**
|
|
15
|
-
* Zero or more digits, followed by a letter or hyphen, and then zero or more letters, digits, or hyphens.
|
|
16
|
-
*/
|
|
17
|
-
const NON_NUMERIC_IDENTIFIER = "\\d*[a-zA-Z-][a-zA-Z0-9-]*";
|
|
18
|
-
/**
|
|
19
|
-
* Three dot-separated numeric identifiers.
|
|
20
|
-
*/
|
|
21
|
-
const VERSION_CORE = `(?<major>${NUMERIC_IDENTIFIER})\\.(?<minor>${NUMERIC_IDENTIFIER})\\.(?<patch>${NUMERIC_IDENTIFIER})`;
|
|
22
|
-
/**
|
|
23
|
-
* A numeric identifier, or a non-numeric identifier.
|
|
24
|
-
*/
|
|
25
|
-
const PRERELEASE_IDENTIFIER = `(?:${NUMERIC_IDENTIFIER}|${NON_NUMERIC_IDENTIFIER})`;
|
|
26
|
-
/**
|
|
27
|
-
* A hyphen, followed by one or more dot-separated pre-release version identifiers.
|
|
28
|
-
* @example "-pre.release"
|
|
29
|
-
*/
|
|
30
|
-
const PRERELEASE = `(?:-(?<prerelease>${PRERELEASE_IDENTIFIER}(?:\\.${PRERELEASE_IDENTIFIER})*))`;
|
|
31
|
-
/**
|
|
32
|
-
* Any combination of digits, letters, or hyphens.
|
|
33
|
-
*/
|
|
34
|
-
const BUILD_IDENTIFIER = "[0-9A-Za-z-]+";
|
|
35
|
-
/**
|
|
36
|
-
* A plus sign, followed by one or more period-separated build metadata identifiers.
|
|
37
|
-
* @example "+build.meta"
|
|
38
|
-
*/
|
|
39
|
-
const BUILD = `(?:\\+(?<buildmetadata>${BUILD_IDENTIFIER}(?:\\.${BUILD_IDENTIFIER})*))`;
|
|
40
|
-
/**
|
|
41
|
-
* A version, followed optionally by a pre-release version and build metadata.
|
|
42
|
-
*/
|
|
43
|
-
const FULL_VERSION = `v?${VERSION_CORE}${PRERELEASE}?${BUILD}?`;
|
|
44
|
-
const FULL_REGEXP = /* @__PURE__ */ new RegExp(`^${FULL_VERSION}$`);
|
|
45
|
-
/**
|
|
46
|
-
* Attempt to parse a string as a semantic version, returning a SemVer object.
|
|
47
|
-
*
|
|
48
|
-
* @example Usage
|
|
49
|
-
* ```ts
|
|
50
|
-
* import { parseSemVer } from "@fedify/fedify/nodeinfo";
|
|
51
|
-
* import { assertEquals } from "@std/assert";
|
|
52
|
-
*
|
|
53
|
-
* const version = parseSemVer("1.2.3");
|
|
54
|
-
* assertEquals(version, {
|
|
55
|
-
* major: 1,
|
|
56
|
-
* minor: 2,
|
|
57
|
-
* patch: 3,
|
|
58
|
-
* prerelease: [],
|
|
59
|
-
* build: [],
|
|
60
|
-
* });
|
|
61
|
-
* ```
|
|
62
|
-
*
|
|
63
|
-
* @throws {TypeError} If the input string is invalid.
|
|
64
|
-
* @param value The version string to parse
|
|
65
|
-
* @returns A valid SemVer
|
|
66
|
-
* @since 1.2.0
|
|
67
|
-
*/
|
|
68
|
-
function parseSemVer(value) {
|
|
69
|
-
if (typeof value !== "string") throw new TypeError(`Cannot parse version as version must be a string: received ${typeof value}`);
|
|
70
|
-
if (value.length > MAX_LENGTH) throw new TypeError(`Cannot parse version as version length is too long: length is ${value.length}, max length is ${MAX_LENGTH}`);
|
|
71
|
-
value = value.trim();
|
|
72
|
-
const groups = value.match(FULL_REGEXP)?.groups;
|
|
73
|
-
if (!groups) throw new TypeError(`Cannot parse version: ${value}`);
|
|
74
|
-
const major = parseNumber(groups.major, `Cannot parse version ${value}: invalid major version`);
|
|
75
|
-
const minor = parseNumber(groups.minor, `Cannot parse version ${value}: invalid minor version`);
|
|
76
|
-
const patch = parseNumber(groups.patch, `Cannot parse version ${value}: invalid patch version`);
|
|
77
|
-
const prerelease = groups.prerelease ? parsePrerelease(groups.prerelease) : [];
|
|
78
|
-
const build = groups.buildmetadata ? parseBuild(groups.buildmetadata) : [];
|
|
79
|
-
return {
|
|
80
|
-
major,
|
|
81
|
-
minor,
|
|
82
|
-
patch,
|
|
83
|
-
prerelease,
|
|
84
|
-
build
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Returns true if the value is a valid SemVer number.
|
|
89
|
-
*
|
|
90
|
-
* Must be a number. Must not be NaN. Can be positive or negative infinity.
|
|
91
|
-
* Can be between 0 and MAX_SAFE_INTEGER.
|
|
92
|
-
* @param value The value to check
|
|
93
|
-
* @returns True if its a valid semver number
|
|
94
|
-
*/
|
|
95
|
-
function isValidNumber(value) {
|
|
96
|
-
return typeof value === "number" && !Number.isNaN(value) && (!Number.isFinite(value) || 0 <= value && value <= Number.MAX_SAFE_INTEGER);
|
|
97
|
-
}
|
|
98
|
-
const NUMERIC_IDENTIFIER_REGEXP = /* @__PURE__ */ new RegExp(`^${NUMERIC_IDENTIFIER}$`);
|
|
99
|
-
function parsePrerelease(prerelease) {
|
|
100
|
-
return prerelease.split(".").filter(Boolean).map((id) => {
|
|
101
|
-
if (NUMERIC_IDENTIFIER_REGEXP.test(id)) {
|
|
102
|
-
const number = Number(id);
|
|
103
|
-
if (isValidNumber(number)) return number;
|
|
104
|
-
}
|
|
105
|
-
return id;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
function parseBuild(buildmetadata) {
|
|
109
|
-
return buildmetadata.split(".").filter(Boolean);
|
|
110
|
-
}
|
|
111
|
-
function parseNumber(input, errorMessage) {
|
|
112
|
-
const number = Number(input);
|
|
113
|
-
if (!isValidNumber(number)) throw new TypeError(errorMessage);
|
|
114
|
-
return number;
|
|
115
|
-
}
|
|
116
|
-
function formatNumber(value) {
|
|
117
|
-
return value.toFixed(0);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Format a SemVer object into a string.
|
|
121
|
-
*
|
|
122
|
-
* @example Usage
|
|
123
|
-
* ```ts
|
|
124
|
-
* import { formatSemVer } from "@fedify/fedify/nodeinfo";
|
|
125
|
-
* import { assertEquals } from "@std/assert";
|
|
126
|
-
*
|
|
127
|
-
* const semver = {
|
|
128
|
-
* major: 1,
|
|
129
|
-
* minor: 2,
|
|
130
|
-
* patch: 3,
|
|
131
|
-
* };
|
|
132
|
-
* assertEquals(formatSemVer(semver), "1.2.3");
|
|
133
|
-
* ```
|
|
134
|
-
*
|
|
135
|
-
* @param version The SemVer to format
|
|
136
|
-
* @returns The string representation of a semantic version.
|
|
137
|
-
* @since 1.2.0
|
|
138
|
-
*/
|
|
139
|
-
function formatSemVer(version) {
|
|
140
|
-
const major = formatNumber(version.major);
|
|
141
|
-
const minor = formatNumber(version.minor);
|
|
142
|
-
const patch = formatNumber(version.patch);
|
|
143
|
-
const pre = version.prerelease?.join(".") ?? "";
|
|
144
|
-
const build = version.build?.join(".") ?? "";
|
|
145
|
-
const primary = `${major}.${minor}.${patch}`;
|
|
146
|
-
const release = [primary, pre].filter((v) => v).join("-");
|
|
147
|
-
return [release, build].filter((v) => v).join("+");
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
//#endregion
|
|
151
8
|
//#region src/nodeinfo/client.ts
|
|
152
9
|
const logger = getLogger([
|
|
153
10
|
"fedify",
|
|
@@ -274,28 +131,10 @@ function parseSoftware(data, options = {}) {
|
|
|
274
131
|
name = data.name.trim().toLowerCase();
|
|
275
132
|
} else return null;
|
|
276
133
|
let version;
|
|
277
|
-
if ("version" in data
|
|
278
|
-
version = parseSemVer(data.version);
|
|
279
|
-
} catch {
|
|
280
|
-
if (!options.tryBestEffort) return null;
|
|
281
|
-
const parts = data.version.split(".").map((p) => parseInt(p, 10));
|
|
282
|
-
version = {
|
|
283
|
-
major: !isNaN(parts[0]) ? parts[0] : 0,
|
|
284
|
-
minor: !isNaN(parts[1]) ? parts[1] : 0,
|
|
285
|
-
patch: !isNaN(parts[2]) ? parts[2] : 0,
|
|
286
|
-
build: [],
|
|
287
|
-
prerelease: []
|
|
288
|
-
};
|
|
289
|
-
}
|
|
134
|
+
if ("version" in data) version = String(data.version);
|
|
290
135
|
else {
|
|
291
136
|
if (!options.tryBestEffort) return null;
|
|
292
|
-
version =
|
|
293
|
-
major: 0,
|
|
294
|
-
minor: 0,
|
|
295
|
-
patch: 0,
|
|
296
|
-
build: [],
|
|
297
|
-
prerelease: []
|
|
298
|
-
};
|
|
137
|
+
version = "0.0.0";
|
|
299
138
|
}
|
|
300
139
|
let repository;
|
|
301
140
|
if ("repository" in data) {
|
|
@@ -432,7 +271,7 @@ function nodeInfoToJson(nodeInfo) {
|
|
|
432
271
|
version: "2.1",
|
|
433
272
|
software: {
|
|
434
273
|
name: nodeInfo.software.name,
|
|
435
|
-
version:
|
|
274
|
+
version: nodeInfo.software.version,
|
|
436
275
|
repository: nodeInfo.software.repository?.href,
|
|
437
276
|
homepage: nodeInfo.software.homepage?.href
|
|
438
277
|
},
|
|
@@ -455,4 +294,4 @@ function nodeInfoToJson(nodeInfo) {
|
|
|
455
294
|
}
|
|
456
295
|
|
|
457
296
|
//#endregion
|
|
458
|
-
export {
|
|
297
|
+
export { getNodeInfo, nodeInfoToJson, parseNodeInfo };
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
|
4
4
|
globalThis.addEventListener = () => {};
|
|
5
5
|
|
|
6
|
-
import { formatSemVer } from "./semver-dArNLkR9.js";
|
|
7
|
-
|
|
8
6
|
//#region src/nodeinfo/types.ts
|
|
9
7
|
/**
|
|
10
8
|
* Converts a {@link NodeInfo} object to a JSON value.
|
|
@@ -25,7 +23,7 @@ function nodeInfoToJson(nodeInfo) {
|
|
|
25
23
|
version: "2.1",
|
|
26
24
|
software: {
|
|
27
25
|
name: nodeInfo.software.name,
|
|
28
|
-
version:
|
|
26
|
+
version: nodeInfo.software.version,
|
|
29
27
|
repository: nodeInfo.software.repository?.href,
|
|
30
28
|
homepage: nodeInfo.software.homepage?.href
|
|
31
29
|
},
|
|
@@ -3,152 +3,9 @@
|
|
|
3
3
|
const { URLPattern } = require("urlpattern-polyfill");
|
|
4
4
|
|
|
5
5
|
const require_chunk = require('./chunk-DqRYRqnO.cjs');
|
|
6
|
-
const require_docloader = require('./docloader-DJCmWQFv.cjs');
|
|
7
6
|
const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
|
|
7
|
+
const __fedify_vocab_runtime = require_chunk.__toESM(require("@fedify/vocab-runtime"));
|
|
8
8
|
|
|
9
|
-
//#region src/nodeinfo/semver.ts
|
|
10
|
-
const MAX_LENGTH = 256;
|
|
11
|
-
/**
|
|
12
|
-
* A single `0`, or a non-zero digit followed by zero or more digits.
|
|
13
|
-
*/
|
|
14
|
-
const NUMERIC_IDENTIFIER = "0|[1-9]\\d*";
|
|
15
|
-
/**
|
|
16
|
-
* Zero or more digits, followed by a letter or hyphen, and then zero or more letters, digits, or hyphens.
|
|
17
|
-
*/
|
|
18
|
-
const NON_NUMERIC_IDENTIFIER = "\\d*[a-zA-Z-][a-zA-Z0-9-]*";
|
|
19
|
-
/**
|
|
20
|
-
* Three dot-separated numeric identifiers.
|
|
21
|
-
*/
|
|
22
|
-
const VERSION_CORE = `(?<major>${NUMERIC_IDENTIFIER})\\.(?<minor>${NUMERIC_IDENTIFIER})\\.(?<patch>${NUMERIC_IDENTIFIER})`;
|
|
23
|
-
/**
|
|
24
|
-
* A numeric identifier, or a non-numeric identifier.
|
|
25
|
-
*/
|
|
26
|
-
const PRERELEASE_IDENTIFIER = `(?:${NUMERIC_IDENTIFIER}|${NON_NUMERIC_IDENTIFIER})`;
|
|
27
|
-
/**
|
|
28
|
-
* A hyphen, followed by one or more dot-separated pre-release version identifiers.
|
|
29
|
-
* @example "-pre.release"
|
|
30
|
-
*/
|
|
31
|
-
const PRERELEASE = `(?:-(?<prerelease>${PRERELEASE_IDENTIFIER}(?:\\.${PRERELEASE_IDENTIFIER})*))`;
|
|
32
|
-
/**
|
|
33
|
-
* Any combination of digits, letters, or hyphens.
|
|
34
|
-
*/
|
|
35
|
-
const BUILD_IDENTIFIER = "[0-9A-Za-z-]+";
|
|
36
|
-
/**
|
|
37
|
-
* A plus sign, followed by one or more period-separated build metadata identifiers.
|
|
38
|
-
* @example "+build.meta"
|
|
39
|
-
*/
|
|
40
|
-
const BUILD = `(?:\\+(?<buildmetadata>${BUILD_IDENTIFIER}(?:\\.${BUILD_IDENTIFIER})*))`;
|
|
41
|
-
/**
|
|
42
|
-
* A version, followed optionally by a pre-release version and build metadata.
|
|
43
|
-
*/
|
|
44
|
-
const FULL_VERSION = `v?${VERSION_CORE}${PRERELEASE}?${BUILD}?`;
|
|
45
|
-
const FULL_REGEXP = /* @__PURE__ */ new RegExp(`^${FULL_VERSION}$`);
|
|
46
|
-
/**
|
|
47
|
-
* Attempt to parse a string as a semantic version, returning a SemVer object.
|
|
48
|
-
*
|
|
49
|
-
* @example Usage
|
|
50
|
-
* ```ts
|
|
51
|
-
* import { parseSemVer } from "@fedify/fedify/nodeinfo";
|
|
52
|
-
* import { assertEquals } from "@std/assert";
|
|
53
|
-
*
|
|
54
|
-
* const version = parseSemVer("1.2.3");
|
|
55
|
-
* assertEquals(version, {
|
|
56
|
-
* major: 1,
|
|
57
|
-
* minor: 2,
|
|
58
|
-
* patch: 3,
|
|
59
|
-
* prerelease: [],
|
|
60
|
-
* build: [],
|
|
61
|
-
* });
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @throws {TypeError} If the input string is invalid.
|
|
65
|
-
* @param value The version string to parse
|
|
66
|
-
* @returns A valid SemVer
|
|
67
|
-
* @since 1.2.0
|
|
68
|
-
*/
|
|
69
|
-
function parseSemVer(value) {
|
|
70
|
-
if (typeof value !== "string") throw new TypeError(`Cannot parse version as version must be a string: received ${typeof value}`);
|
|
71
|
-
if (value.length > MAX_LENGTH) throw new TypeError(`Cannot parse version as version length is too long: length is ${value.length}, max length is ${MAX_LENGTH}`);
|
|
72
|
-
value = value.trim();
|
|
73
|
-
const groups = value.match(FULL_REGEXP)?.groups;
|
|
74
|
-
if (!groups) throw new TypeError(`Cannot parse version: ${value}`);
|
|
75
|
-
const major = parseNumber(groups.major, `Cannot parse version ${value}: invalid major version`);
|
|
76
|
-
const minor = parseNumber(groups.minor, `Cannot parse version ${value}: invalid minor version`);
|
|
77
|
-
const patch = parseNumber(groups.patch, `Cannot parse version ${value}: invalid patch version`);
|
|
78
|
-
const prerelease = groups.prerelease ? parsePrerelease(groups.prerelease) : [];
|
|
79
|
-
const build = groups.buildmetadata ? parseBuild(groups.buildmetadata) : [];
|
|
80
|
-
return {
|
|
81
|
-
major,
|
|
82
|
-
minor,
|
|
83
|
-
patch,
|
|
84
|
-
prerelease,
|
|
85
|
-
build
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Returns true if the value is a valid SemVer number.
|
|
90
|
-
*
|
|
91
|
-
* Must be a number. Must not be NaN. Can be positive or negative infinity.
|
|
92
|
-
* Can be between 0 and MAX_SAFE_INTEGER.
|
|
93
|
-
* @param value The value to check
|
|
94
|
-
* @returns True if its a valid semver number
|
|
95
|
-
*/
|
|
96
|
-
function isValidNumber(value) {
|
|
97
|
-
return typeof value === "number" && !Number.isNaN(value) && (!Number.isFinite(value) || 0 <= value && value <= Number.MAX_SAFE_INTEGER);
|
|
98
|
-
}
|
|
99
|
-
const NUMERIC_IDENTIFIER_REGEXP = /* @__PURE__ */ new RegExp(`^${NUMERIC_IDENTIFIER}$`);
|
|
100
|
-
function parsePrerelease(prerelease) {
|
|
101
|
-
return prerelease.split(".").filter(Boolean).map((id) => {
|
|
102
|
-
if (NUMERIC_IDENTIFIER_REGEXP.test(id)) {
|
|
103
|
-
const number = Number(id);
|
|
104
|
-
if (isValidNumber(number)) return number;
|
|
105
|
-
}
|
|
106
|
-
return id;
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
function parseBuild(buildmetadata) {
|
|
110
|
-
return buildmetadata.split(".").filter(Boolean);
|
|
111
|
-
}
|
|
112
|
-
function parseNumber(input, errorMessage) {
|
|
113
|
-
const number = Number(input);
|
|
114
|
-
if (!isValidNumber(number)) throw new TypeError(errorMessage);
|
|
115
|
-
return number;
|
|
116
|
-
}
|
|
117
|
-
function formatNumber(value) {
|
|
118
|
-
return value.toFixed(0);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Format a SemVer object into a string.
|
|
122
|
-
*
|
|
123
|
-
* @example Usage
|
|
124
|
-
* ```ts
|
|
125
|
-
* import { formatSemVer } from "@fedify/fedify/nodeinfo";
|
|
126
|
-
* import { assertEquals } from "@std/assert";
|
|
127
|
-
*
|
|
128
|
-
* const semver = {
|
|
129
|
-
* major: 1,
|
|
130
|
-
* minor: 2,
|
|
131
|
-
* patch: 3,
|
|
132
|
-
* };
|
|
133
|
-
* assertEquals(formatSemVer(semver), "1.2.3");
|
|
134
|
-
* ```
|
|
135
|
-
*
|
|
136
|
-
* @param version The SemVer to format
|
|
137
|
-
* @returns The string representation of a semantic version.
|
|
138
|
-
* @since 1.2.0
|
|
139
|
-
*/
|
|
140
|
-
function formatSemVer(version) {
|
|
141
|
-
const major = formatNumber(version.major);
|
|
142
|
-
const minor = formatNumber(version.minor);
|
|
143
|
-
const patch = formatNumber(version.patch);
|
|
144
|
-
const pre = version.prerelease?.join(".") ?? "";
|
|
145
|
-
const build = version.build?.join(".") ?? "";
|
|
146
|
-
const primary = `${major}.${minor}.${patch}`;
|
|
147
|
-
const release = [primary, pre].filter((v) => v).join("-");
|
|
148
|
-
return [release, build].filter((v) => v).join("+");
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
//#endregion
|
|
152
9
|
//#region src/nodeinfo/client.ts
|
|
153
10
|
const logger = (0, __logtape_logtape.getLogger)([
|
|
154
11
|
"fedify",
|
|
@@ -162,7 +19,7 @@ async function getNodeInfo(url, options = {}) {
|
|
|
162
19
|
const wellKnownUrl = new URL("/.well-known/nodeinfo", url);
|
|
163
20
|
const wellKnownResponse = await fetch(wellKnownUrl, { headers: {
|
|
164
21
|
Accept: "application/json",
|
|
165
|
-
"User-Agent": typeof options.userAgent === "string" ? options.userAgent :
|
|
22
|
+
"User-Agent": typeof options.userAgent === "string" ? options.userAgent : (0, __fedify_vocab_runtime.getUserAgent)(options.userAgent)
|
|
166
23
|
} });
|
|
167
24
|
if (!wellKnownResponse.ok) {
|
|
168
25
|
logger.error("Failed to fetch {url}: {status} {statusText}", {
|
|
@@ -185,7 +42,7 @@ async function getNodeInfo(url, options = {}) {
|
|
|
185
42
|
}
|
|
186
43
|
const response = await fetch(nodeInfoUrl, { headers: {
|
|
187
44
|
Accept: "application/json",
|
|
188
|
-
"User-Agent": typeof options.userAgent === "string" ? options.userAgent :
|
|
45
|
+
"User-Agent": typeof options.userAgent === "string" ? options.userAgent : (0, __fedify_vocab_runtime.getUserAgent)(options.userAgent)
|
|
189
46
|
} });
|
|
190
47
|
if (!response.ok) {
|
|
191
48
|
logger.error("Failed to fetch NodeInfo document from {url}: {status} {statusText}", {
|
|
@@ -275,28 +132,10 @@ function parseSoftware(data, options = {}) {
|
|
|
275
132
|
name = data.name.trim().toLowerCase();
|
|
276
133
|
} else return null;
|
|
277
134
|
let version;
|
|
278
|
-
if ("version" in data
|
|
279
|
-
version = parseSemVer(data.version);
|
|
280
|
-
} catch {
|
|
281
|
-
if (!options.tryBestEffort) return null;
|
|
282
|
-
const parts = data.version.split(".").map((p) => parseInt(p, 10));
|
|
283
|
-
version = {
|
|
284
|
-
major: !isNaN(parts[0]) ? parts[0] : 0,
|
|
285
|
-
minor: !isNaN(parts[1]) ? parts[1] : 0,
|
|
286
|
-
patch: !isNaN(parts[2]) ? parts[2] : 0,
|
|
287
|
-
build: [],
|
|
288
|
-
prerelease: []
|
|
289
|
-
};
|
|
290
|
-
}
|
|
135
|
+
if ("version" in data) version = String(data.version);
|
|
291
136
|
else {
|
|
292
137
|
if (!options.tryBestEffort) return null;
|
|
293
|
-
version =
|
|
294
|
-
major: 0,
|
|
295
|
-
minor: 0,
|
|
296
|
-
patch: 0,
|
|
297
|
-
build: [],
|
|
298
|
-
prerelease: []
|
|
299
|
-
};
|
|
138
|
+
version = "0.0.0";
|
|
300
139
|
}
|
|
301
140
|
let repository;
|
|
302
141
|
if ("repository" in data) {
|
|
@@ -433,7 +272,7 @@ function nodeInfoToJson(nodeInfo) {
|
|
|
433
272
|
version: "2.1",
|
|
434
273
|
software: {
|
|
435
274
|
name: nodeInfo.software.name,
|
|
436
|
-
version:
|
|
275
|
+
version: nodeInfo.software.version,
|
|
437
276
|
repository: nodeInfo.software.repository?.href,
|
|
438
277
|
homepage: nodeInfo.software.homepage?.href
|
|
439
278
|
},
|
|
@@ -456,12 +295,6 @@ function nodeInfoToJson(nodeInfo) {
|
|
|
456
295
|
}
|
|
457
296
|
|
|
458
297
|
//#endregion
|
|
459
|
-
Object.defineProperty(exports, 'formatSemVer', {
|
|
460
|
-
enumerable: true,
|
|
461
|
-
get: function () {
|
|
462
|
-
return formatSemVer;
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
298
|
Object.defineProperty(exports, 'getNodeInfo', {
|
|
466
299
|
enumerable: true,
|
|
467
300
|
get: function () {
|
|
@@ -479,10 +312,4 @@ Object.defineProperty(exports, 'parseNodeInfo', {
|
|
|
479
312
|
get: function () {
|
|
480
313
|
return parseNodeInfo;
|
|
481
314
|
}
|
|
482
|
-
});
|
|
483
|
-
Object.defineProperty(exports, 'parseSemVer', {
|
|
484
|
-
enumerable: true,
|
|
485
|
-
get: function () {
|
|
486
|
-
return parseSemVer;
|
|
487
|
-
}
|
|
488
315
|
});
|