@fedify/fedify 2.0.0-dev.1690 → 2.0.0-dev.1736
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/dist/{actor-DuCeRiNh.js → actor-BLq4KEGR.js} +1 -1
- package/dist/{actor-Be0ThtXy.cjs → actor-C3oFUgfc.cjs} +921 -1451
- package/dist/{actor-T6RyhRgk.d.ts → actor-DqFajh9s.d.ts} +2 -2
- package/dist/{actor-ChbPLm6n.js → actor-btAA7QSA.js} +189 -677
- package/dist/{actor-D6K058Tb.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-CYOcDUkj.js → builder-C4gbKvM5.js} +7 -8
- package/dist/{client-CegPX0Rn.d.cts → client-94iWEfQa.d.cts} +1 -1
- package/dist/{client-bgSdkFa2.d.ts → client-BsGzbnV-.d.ts} +1 -1
- package/dist/{client-CnOdwLLN.js → client-pY7-3icS.js} +1 -1
- package/dist/compat/mod.d.cts +11 -12
- package/dist/compat/mod.d.ts +11 -12
- package/dist/compat/transformers.test.js +20 -20
- package/dist/{context-C5BsZkDr.d.cts → context-BvYz3eOb.d.cts} +130 -103
- package/dist/{context-ByZprN0S.d.ts → context-myrGWbL_.d.ts} +130 -103
- package/dist/{authdocloader-Brax1A32.js → docloader-DtYIz2Pb.js} +17 -8
- package/dist/{esm-DnIzfEj0.js → esm-CQ9nlHuI.js} +11 -11
- package/dist/federation/builder.test.js +8 -10
- package/dist/federation/collection.test.js +7 -9
- package/dist/federation/handler.test.js +25 -26
- package/dist/federation/idempotency.test.js +25 -26
- 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 +32 -33
- package/dist/federation/mod.cjs +9 -11
- package/dist/federation/mod.d.cts +12 -13
- package/dist/federation/mod.d.ts +12 -13
- package/dist/federation/mod.js +9 -11
- package/dist/federation/mq.test.js +8 -10
- package/dist/federation/negotiation.test.js +7 -9
- package/dist/federation/retry.test.js +4 -5
- package/dist/federation/router.test.js +6 -8
- package/dist/federation/send.test.js +13 -15
- package/dist/{http-BNOYnVsU.js → http-B9npZ3Md.js} +2 -2
- package/dist/{http-D6Uj2x2y.d.ts → http-BbO0ejuk.d.ts} +2 -2
- package/dist/{http-BxbM8sEy.js → http-D7qwMpca.js} +256 -6
- package/dist/{http-D-e6AFwR.d.cts → http-M8k5mKc0.d.cts} +2 -2
- package/dist/{http-C7vbQwbz.cjs → http-ngJvMHez.cjs} +289 -9
- package/dist/{inbox-BRru9pX3.js → inbox-CY8fblhz.js} +1 -1
- package/dist/{key-1KXru8Ug.js → key-CgKiloJr.js} +3 -2
- package/dist/{keycache-CN61iGVj.js → keycache-B6O-bhMs.js} +1 -1
- package/dist/{keys-BPdFKgiy.js → keys-B3O7b5eB.js} +2 -1
- package/dist/kv-cache-BrjWZnGU.cjs +133 -0
- package/dist/kv-cache-DkW_lqUw.js +121 -0
- package/dist/kv-cache-z0lgwFi_.js +93 -0
- package/dist/{ld-Dv8DNNAT.js → ld-B7TO6JH2.js} +3 -2
- package/dist/lookup-Cc3ZAAis.cjs +273 -0
- package/dist/{type-C69ZBu7f.js → lookup-NXjB7xUj.js} +503 -5327
- package/dist/lookup-fEH6e7ZX.js +261 -0
- package/dist/{middleware-DY9B2lL8.js → middleware-BMPvaTpX.js} +44 -48
- package/dist/{middleware-BmoOlgc1.cjs → middleware-C8w5YYxK.cjs} +60 -66
- package/dist/middleware-D8ENcqxG.js +26 -0
- package/dist/{middleware-Bz_A2jeJ.js → middleware-D_VyRsDx.js} +40 -46
- package/dist/middleware-Yk-MuxWc.js +15 -0
- package/dist/middleware-glwCut0b.cjs +15 -0
- package/dist/{mod-BhUKmBJD.d.ts → mod-B2iOw50L.d.ts} +3 -3
- package/dist/mod-BYynOiJG.d.ts +109 -0
- package/dist/{mod-DlU8ISoa.d.ts → mod-BlVovdcy.d.ts} +2 -2
- package/dist/{mod-CxkWO3Mg.d.cts → mod-BxRCHTz-.d.cts} +2 -2
- package/dist/{mod-jQ4OODsl.d.cts → mod-C58MZ7Wx.d.cts} +1 -1
- package/dist/{mod-8DMWKtQE.d.cts → mod-DbFNTF7m.d.cts} +2 -2
- package/dist/{mod-Djzcw2ry.d.cts → mod-DgdBYYa0.d.cts} +3 -3
- package/dist/{mod-DBzN0aCM.d.ts → mod-Ds0mpFZU.d.ts} +1 -1
- package/dist/mod-VastcQsk.d.cts +107 -0
- package/dist/{mod-D6hQoxC5.d.ts → mod-k0Dk3fGk.d.ts} +2 -2
- package/dist/mod.cjs +19 -32
- package/dist/mod.d.cts +15 -16
- package/dist/mod.d.ts +16 -17
- package/dist/mod.js +14 -16
- package/dist/nodeinfo/client.test.js +8 -10
- package/dist/nodeinfo/handler.test.js +24 -25
- package/dist/nodeinfo/mod.cjs +2 -3
- package/dist/nodeinfo/mod.d.cts +2 -4
- package/dist/nodeinfo/mod.d.ts +2 -4
- package/dist/nodeinfo/mod.js +2 -3
- package/dist/nodeinfo/types.test.js +7 -9
- package/dist/{owner-BN_tO3cY.d.cts → owner-B4HbyP8s.d.cts} +3 -3
- package/dist/{owner-e3FYDhsk.js → owner-CSktF-2s.js} +3 -2
- package/dist/{owner-hd9lvQcP.d.ts → owner-kQRGVXG1.d.ts} +3 -3
- package/dist/{proof-DfgvA3al.js → proof-BT65yR1Q.js} +5 -4
- package/dist/{proof-6gFMwMNJ.js → proof-Cs5Mcy_U.js} +2 -2
- package/dist/{proof-B-eqv0Ug.cjs → proof-feEDocLH.cjs} +17 -16
- package/dist/{send-Tl9NOnmO.js → send-vPZ03xUr.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 +10 -12
- package/dist/sig/proof.test.js +13 -14
- package/dist/testing/docloader.test.js +6 -8
- package/dist/testing/mod.d.ts +120 -172
- package/dist/testing/mod.js +2 -3
- package/dist/{testing-BWNCAbL-.js → testing-u2cUPQLp.js} +1 -2
- package/dist/{types-DqxyTxOf.js → types-BtUjyi5y.js} +1 -1
- package/dist/{types-zqdWZh4O.cjs → types-CWgzGaqk.cjs} +3 -3
- package/dist/{runtime/authdocloader.test.js → utils/docloader.test.js} +14 -15
- package/dist/utils/kv-cache.test.js +209 -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 +7 -9
- 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 +9 -10
- package/dist/{vocab-BI0Ak5lL.d.ts → vocab-BCWe1Ih5.d.ts} +2 -21
- package/dist/{vocab-Dw1-yVGg.d.cts → vocab-CeDBzu-f.d.cts} +2 -21
- package/dist/{vocab-B39-pFl9.cjs → vocab-NvDV-exu.cjs} +5 -5
- package/dist/{vocab-BWoeZsME.js → vocab-wADjlIH4.js} +3 -3
- 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/dist/x/cfworkers.d.cts +2 -2
- package/dist/x/cfworkers.d.ts +2 -2
- package/dist/x/cfworkers.test.js +6 -8
- package/dist/x/hono.d.cts +10 -11
- package/dist/x/hono.d.ts +10 -11
- package/dist/x/sveltekit.d.cts +10 -11
- package/dist/x/sveltekit.d.ts +10 -11
- package/package.json +15 -14
- package/dist/assert_throws-BOO88avQ.js +0 -39
- package/dist/authdocloader-CrxhFL8e.js +0 -52
- package/dist/authdocloader-OSn_teLV.cjs +0 -58
- package/dist/docloader-CCqXeagZ.cjs +0 -4861
- package/dist/docloader-CxWcuWqQ.d.ts +0 -221
- package/dist/docloader-D-MrRyHl.d.cts +0 -219
- package/dist/docloader-XK3y2jn5.js +0 -4795
- package/dist/key-B3uag-rz.js +0 -10
- package/dist/key-BiBmb1Yy.cjs +0 -10
- package/dist/key-DK_nfU4I.js +0 -10
- package/dist/key-Z6ceKnZC.cjs +0 -290
- package/dist/key-jyNTxCvK.js +0 -260
- package/dist/lookup-BPviO8ij.js +0 -131
- package/dist/lookup-hnMAAU5r.cjs +0 -137
- package/dist/lookup-pV0JOsuV.js +0 -331
- package/dist/middleware-CI0-zw4U.js +0 -26
- package/dist/middleware-QNK-W-jE.cjs +0 -17
- package/dist/middleware-_vjt6FWU.js +0 -17
- package/dist/mod-CerN_Sza.d.ts +0 -104
- package/dist/mod-Cj1tHXBR.d.cts +0 -102
- package/dist/runtime/docloader.test.js +0 -522
- 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 -39
- 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/{assert_not_equals-f3m3epl3.js → assert_not_equals-C80BG-_5.js} +0 -0
- /package/dist/{collection-CcnIw1qY.js → collection-BzWsN9pB.js} +0 -0
- /package/dist/{denokv-Bv33Xxea.js → denokv-CCssOzMJ.js} +0 -0
- /package/dist/{federation-H2_En3j5.cjs → federation-CRpdnOMS.cjs} +0 -0
- /package/dist/{federation-D1U8YY9t.js → federation-jcR8-ZxP.js} +0 -0
- /package/dist/{kv-C7sopW2E.d.ts → kv-BKNZ-Tb-.d.ts} +0 -0
- /package/dist/{kv-63Cil1MD.d.cts → kv-Bxr0Q87_.d.cts} +0 -0
- /package/dist/{mod-FZd39qVq.d.cts → mod-B-hUPT2N.d.cts} +0 -0
- /package/dist/{mod-1pDWKvUL.d.ts → mod-CVgZgliM.d.ts} +0 -0
- /package/dist/{mod-g0xFzAP9.d.ts → mod-xIj-IT58.d.ts} +0 -0
- /package/dist/{mq-CRGm1e_F.d.ts → mq-CUKlBw08.d.ts} +0 -0
- /package/dist/{mq-B7R1Q-M5.d.cts → mq-DcJPkXD5.d.cts} +0 -0
- /package/dist/{negotiation-5NPJL6zp.js → negotiation-C4nFufNk.js} +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/{types-BSuWJsOm.js → types-C2XVl6gj.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
@@ -0,0 +1,261 @@
|
|
1
|
+
|
2
|
+
import { Temporal } from "@js-temporal/polyfill";
|
3
|
+
import { URLPattern } from "urlpattern-polyfill";
|
4
|
+
|
5
|
+
import { getLogger } from "@logtape/logtape";
|
6
|
+
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
7
|
+
import { UrlError, getUserAgent, validatePublicUrl } from "@fedify/vocab-runtime";
|
8
|
+
|
9
|
+
//#region deno.json
|
10
|
+
var name = "@fedify/fedify";
|
11
|
+
var version = "2.0.0-dev.1736+ea8e853e";
|
12
|
+
var license = "MIT";
|
13
|
+
var exports = {
|
14
|
+
".": "./src/mod.ts",
|
15
|
+
"./compat": "./src/compat/mod.ts",
|
16
|
+
"./federation": "./src/federation/mod.ts",
|
17
|
+
"./nodeinfo": "./src/nodeinfo/mod.ts",
|
18
|
+
"./sig": "./src/sig/mod.ts",
|
19
|
+
"./testing": "./src/testing/mod.ts",
|
20
|
+
"./vocab": "./src/vocab/mod.ts",
|
21
|
+
"./utils": "./src/utils/mod.ts",
|
22
|
+
"./webfinger": "./src/webfinger/mod.ts",
|
23
|
+
"./x/cfworkers": "./src/x/cfworkers.ts",
|
24
|
+
"./x/denokv": "./src/x/denokv.ts",
|
25
|
+
"./x/fresh": "./src/x/fresh.ts",
|
26
|
+
"./x/hono": "./src/x/hono.ts",
|
27
|
+
"./x/sveltekit": "./src/x/sveltekit.ts"
|
28
|
+
};
|
29
|
+
var imports = {
|
30
|
+
"@cfworker/json-schema": "npm:@cfworker/json-schema@^4.1.1",
|
31
|
+
"@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
|
32
|
+
"@opentelemetry/api": "npm:@opentelemetry/api@^1.9.0",
|
33
|
+
"@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@^1.27.0",
|
34
|
+
"@std/assert": "jsr:@std/assert@^0.226.0",
|
35
|
+
"@std/testing": "jsr:@std/testing@^0.224.0",
|
36
|
+
"@std/url": "jsr:@std/url@^0.225.1",
|
37
|
+
"asn1js": "npm:asn1js@^3.0.5",
|
38
|
+
"byte-encodings": "npm:byte-encodings@^1.0.11",
|
39
|
+
"es-toolkit": "jsr:@es-toolkit/es-toolkit@^1.39.5",
|
40
|
+
"fast-check": "npm:fast-check@^3.22.0",
|
41
|
+
"fetch-mock": "npm:fetch-mock@^12.5.2",
|
42
|
+
"json-canon": "npm:json-canon@^1.0.1",
|
43
|
+
"jsonld": "npm:jsonld@^8.3.2",
|
44
|
+
"multicodec": "npm:multicodec@^3.2.1",
|
45
|
+
"pkijs": "npm:pkijs@^3.2.4",
|
46
|
+
"structured-field-values": "npm:structured-field-values@^2.0.4",
|
47
|
+
"uri-template-router": "npm:uri-template-router@^0.0.17",
|
48
|
+
"url-template": "npm:url-template@^3.1.1"
|
49
|
+
};
|
50
|
+
var include = ["src/vocab/vocab.ts"];
|
51
|
+
var exclude = [
|
52
|
+
".test-report.xml",
|
53
|
+
"apidoc/",
|
54
|
+
"dist/",
|
55
|
+
"node_modules/",
|
56
|
+
"npm/",
|
57
|
+
"pnpm-lock.yaml",
|
58
|
+
"src/cfworkers/dist/",
|
59
|
+
"src/cfworkers/fixtures/",
|
60
|
+
"src/cfworkers/imports.ts",
|
61
|
+
"src/cfworkers/README.md",
|
62
|
+
"src/cfworkers/server.ts",
|
63
|
+
"src/cfworkers/server.js",
|
64
|
+
"src/cfworkers/server.js.map",
|
65
|
+
"src/codegen/schema.yaml",
|
66
|
+
"src/vocab/*.yaml",
|
67
|
+
"!src/vocab/vocab.ts"
|
68
|
+
];
|
69
|
+
var tasks = {
|
70
|
+
"codegen": "GENPATH=vocab-$(deno eval \"console.log(crypto.randomUUID());\").ts && deno run --allow-read --allow-write --check src/codegen/main.ts src/vocab/ src/vocab/$GENPATH && deno fmt src/vocab/$GENPATH && mv src/vocab/$GENPATH src/vocab/vocab.ts && deno cache src/vocab/vocab.ts && deno check src/vocab/vocab.ts",
|
71
|
+
"cache": {
|
72
|
+
"command": "deno cache src/mod.ts",
|
73
|
+
"dependencies": ["codegen"]
|
74
|
+
},
|
75
|
+
"check": {
|
76
|
+
"command": "deno fmt --check && deno lint && deno check src/**/*.ts",
|
77
|
+
"dependencies": ["codegen"]
|
78
|
+
},
|
79
|
+
"test": {
|
80
|
+
"command": "deno test --check --doc --allow-read --allow-write --allow-env --unstable-kv --trace-leaks --parallel",
|
81
|
+
"dependencies": ["codegen"]
|
82
|
+
},
|
83
|
+
"coverage": "deno task test --clean --coverage && deno coverage --html coverage",
|
84
|
+
"bench": {
|
85
|
+
"command": "deno bench --allow-read --allow-write --allow-net --allow-env --allow-run --unstable-kv",
|
86
|
+
"dependencies": ["codegen"]
|
87
|
+
},
|
88
|
+
"apidoc": {
|
89
|
+
"command": "deno doc --html --name=Fedify --output=apidoc/ src/mod.ts",
|
90
|
+
"dependencies": ["codegen"]
|
91
|
+
},
|
92
|
+
"publish": {
|
93
|
+
"command": "deno publish",
|
94
|
+
"dependencies": ["codegen"]
|
95
|
+
},
|
96
|
+
"pnpm:install": "pnpm install --silent",
|
97
|
+
"pnpm:build": {
|
98
|
+
"command": "pnpm exec tsdown",
|
99
|
+
"dependencies": [
|
100
|
+
"codegen",
|
101
|
+
"pnpm:install",
|
102
|
+
"pnpm:build-vocab"
|
103
|
+
]
|
104
|
+
},
|
105
|
+
"pnpm:build-vocab-runtime": { "command": "cd ../vocab-runtime && pnpm build" },
|
106
|
+
"pnpm:build-vocab": { "dependencies": ["pnpm:build-vocab-runtime"] },
|
107
|
+
"test:node": {
|
108
|
+
"command": "cd dist/ && node --test",
|
109
|
+
"dependencies": ["pnpm:build"]
|
110
|
+
},
|
111
|
+
"test:bun": {
|
112
|
+
"command": "cd dist/ && bun test --timeout 60000",
|
113
|
+
"dependencies": ["pnpm:build-vocab", "pnpm:build"]
|
114
|
+
},
|
115
|
+
"test:cfworkers": {
|
116
|
+
"command": "pnpm exec wrangler deploy --dry-run --outdir src/cfworkers && node --import=tsx src/cfworkers/client.ts",
|
117
|
+
"dependencies": ["pnpm:build-vocab", "pnpm:build"]
|
118
|
+
},
|
119
|
+
"test-all": { "dependencies": [
|
120
|
+
"check",
|
121
|
+
"test",
|
122
|
+
"test:node",
|
123
|
+
"test:bun",
|
124
|
+
"test:cfworkers"
|
125
|
+
] }
|
126
|
+
};
|
127
|
+
var deno_default = {
|
128
|
+
name,
|
129
|
+
version,
|
130
|
+
license,
|
131
|
+
exports,
|
132
|
+
imports,
|
133
|
+
include,
|
134
|
+
exclude,
|
135
|
+
tasks
|
136
|
+
};
|
137
|
+
|
138
|
+
//#endregion
|
139
|
+
//#region src/webfinger/lookup.ts
|
140
|
+
const logger = getLogger([
|
141
|
+
"fedify",
|
142
|
+
"webfinger",
|
143
|
+
"lookup"
|
144
|
+
]);
|
145
|
+
const DEFAULT_MAX_REDIRECTION = 5;
|
146
|
+
/**
|
147
|
+
* Looks up a WebFinger resource.
|
148
|
+
* @param resource The resource URL to look up.
|
149
|
+
* @param options Extra options for looking up the resource.
|
150
|
+
* @returns The resource descriptor, or `null` if not found.
|
151
|
+
* @since 0.2.0
|
152
|
+
*/
|
153
|
+
async function lookupWebFinger(resource, options = {}) {
|
154
|
+
const tracerProvider = options.tracerProvider ?? trace.getTracerProvider();
|
155
|
+
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
156
|
+
return await tracer.startActiveSpan("webfinger.lookup", {
|
157
|
+
kind: SpanKind.CLIENT,
|
158
|
+
attributes: {
|
159
|
+
"webfinger.resource": resource.toString(),
|
160
|
+
"webfinger.resource.scheme": typeof resource === "string" ? resource.replace(/:.*$/, "") : resource.protocol.replace(/:$/, "")
|
161
|
+
}
|
162
|
+
}, async (span) => {
|
163
|
+
try {
|
164
|
+
const result = await lookupWebFingerInternal(resource, options);
|
165
|
+
span.setStatus({ code: result === null ? SpanStatusCode.ERROR : SpanStatusCode.OK });
|
166
|
+
return result;
|
167
|
+
} catch (error) {
|
168
|
+
span.setStatus({
|
169
|
+
code: SpanStatusCode.ERROR,
|
170
|
+
message: String(error)
|
171
|
+
});
|
172
|
+
throw error;
|
173
|
+
} finally {
|
174
|
+
span.end();
|
175
|
+
}
|
176
|
+
});
|
177
|
+
}
|
178
|
+
async function lookupWebFingerInternal(resource, options = {}) {
|
179
|
+
if (typeof resource === "string") resource = new URL(resource);
|
180
|
+
let protocol = "https:";
|
181
|
+
let server;
|
182
|
+
if (resource.protocol === "acct:") {
|
183
|
+
const atPos = resource.pathname.lastIndexOf("@");
|
184
|
+
if (atPos < 0) return null;
|
185
|
+
server = resource.pathname.substring(atPos + 1);
|
186
|
+
if (server === "") return null;
|
187
|
+
} else {
|
188
|
+
protocol = resource.protocol;
|
189
|
+
server = resource.host;
|
190
|
+
}
|
191
|
+
let url = new URL(`${protocol}//${server}/.well-known/webfinger`);
|
192
|
+
url.searchParams.set("resource", resource.href);
|
193
|
+
let redirected = 0;
|
194
|
+
while (true) {
|
195
|
+
logger.debug("Fetching WebFinger resource descriptor from {url}...", { url: url.href });
|
196
|
+
let response;
|
197
|
+
if (options.allowPrivateAddress !== true) try {
|
198
|
+
await validatePublicUrl(url.href);
|
199
|
+
} catch (e) {
|
200
|
+
if (e instanceof UrlError) {
|
201
|
+
logger.error("Invalid URL for WebFinger resource descriptor: {error}", { error: e });
|
202
|
+
return null;
|
203
|
+
}
|
204
|
+
throw e;
|
205
|
+
}
|
206
|
+
try {
|
207
|
+
response = await fetch(url, {
|
208
|
+
headers: {
|
209
|
+
Accept: "application/jrd+json",
|
210
|
+
"User-Agent": typeof options.userAgent === "string" ? options.userAgent : getUserAgent(options.userAgent)
|
211
|
+
},
|
212
|
+
redirect: "manual",
|
213
|
+
signal: options.signal
|
214
|
+
});
|
215
|
+
} catch (error) {
|
216
|
+
logger.debug("Failed to fetch WebFinger resource descriptor: {error}", {
|
217
|
+
url: url.href,
|
218
|
+
error
|
219
|
+
});
|
220
|
+
return null;
|
221
|
+
}
|
222
|
+
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
223
|
+
redirected++;
|
224
|
+
const maxRedirection = options.maxRedirection ?? DEFAULT_MAX_REDIRECTION;
|
225
|
+
if (redirected >= maxRedirection) {
|
226
|
+
logger.error("Too many redirections ({redirections}) while fetching WebFinger resource descriptor.", { redirections: redirected });
|
227
|
+
return null;
|
228
|
+
}
|
229
|
+
const redirectedUrl = new URL(response.headers.get("Location"), response.url == null || response.url === "" ? url : response.url);
|
230
|
+
if (redirectedUrl.protocol !== url.protocol) {
|
231
|
+
logger.error("Redirected to a different protocol ({protocol} to {redirectedProtocol}) while fetching WebFinger resource descriptor.", {
|
232
|
+
protocol: url.protocol,
|
233
|
+
redirectedProtocol: redirectedUrl.protocol
|
234
|
+
});
|
235
|
+
return null;
|
236
|
+
}
|
237
|
+
url = redirectedUrl;
|
238
|
+
continue;
|
239
|
+
}
|
240
|
+
if (!response.ok) {
|
241
|
+
logger.debug("Failed to fetch WebFinger resource descriptor: {status} {statusText}.", {
|
242
|
+
url: url.href,
|
243
|
+
status: response.status,
|
244
|
+
statusText: response.statusText
|
245
|
+
});
|
246
|
+
return null;
|
247
|
+
}
|
248
|
+
try {
|
249
|
+
return await response.json();
|
250
|
+
} catch (e) {
|
251
|
+
if (e instanceof SyntaxError) {
|
252
|
+
logger.debug("Failed to parse WebFinger resource descriptor as JSON: {error}", { error: e });
|
253
|
+
return null;
|
254
|
+
}
|
255
|
+
throw e;
|
256
|
+
}
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
//#endregion
|
261
|
+
export { deno_default, lookupWebFinger };
|
@@ -3,23 +3,24 @@
|
|
3
3
|
import { URLPattern } from "urlpattern-polyfill";
|
4
4
|
globalThis.addEventListener = () => {};
|
5
5
|
|
6
|
-
import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage,
|
7
|
-
import { getNodeInfo } from "./client-
|
8
|
-
import {
|
9
|
-
import {
|
10
|
-
import {
|
11
|
-
import {
|
12
|
-
import {
|
13
|
-
import {
|
14
|
-
import {
|
15
|
-
import {
|
16
|
-
import { routeActivity } from "./inbox-
|
17
|
-
import { FederationBuilderImpl } from "./builder-
|
18
|
-
import { buildCollectionSynchronizationHeader } from "./collection-
|
19
|
-
import { KvKeyCache } from "./keycache-
|
20
|
-
import { acceptsJsonLd } from "./negotiation-
|
21
|
-
import { createExponentialBackoffPolicy } from "./retry-
|
22
|
-
import { extractInboxes, sendActivity } from "./send-
|
6
|
+
import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, RouterError, deno_default, getTypeId, lookupObject, lookupWebFinger, traverseCollection } from "./lookup-NXjB7xUj.js";
|
7
|
+
import { getNodeInfo } from "./client-pY7-3icS.js";
|
8
|
+
import { nodeInfoToJson } from "./types-C2XVl6gj.js";
|
9
|
+
import { exportJwk, importJwk, validateCryptoKey } from "./key-CgKiloJr.js";
|
10
|
+
import { verifyRequest } from "./http-B9npZ3Md.js";
|
11
|
+
import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-B7TO6JH2.js";
|
12
|
+
import { doesActorOwnKey, getKeyOwner } from "./owner-CSktF-2s.js";
|
13
|
+
import { signObject, verifyObject } from "./proof-Cs5Mcy_U.js";
|
14
|
+
import { getAuthenticatedDocumentLoader } from "./docloader-DtYIz2Pb.js";
|
15
|
+
import { kvCache } from "./kv-cache-z0lgwFi_.js";
|
16
|
+
import { routeActivity } from "./inbox-CY8fblhz.js";
|
17
|
+
import { FederationBuilderImpl } from "./builder-C4gbKvM5.js";
|
18
|
+
import { buildCollectionSynchronizationHeader } from "./collection-BzWsN9pB.js";
|
19
|
+
import { KvKeyCache } from "./keycache-B6O-bhMs.js";
|
20
|
+
import { acceptsJsonLd } from "./negotiation-C4nFufNk.js";
|
21
|
+
import { createExponentialBackoffPolicy } from "./retry-CfF8Gn4d.js";
|
22
|
+
import { extractInboxes, sendActivity } from "./send-vPZ03xUr.js";
|
23
|
+
import { getDocumentLoader } from "@fedify/vocab-runtime";
|
23
24
|
import { getLogger, withContext } from "@logtape/logtape";
|
24
25
|
import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
|
25
26
|
import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
|
@@ -838,7 +839,7 @@ async function handleInboxInternal(request, parameters, span) {
|
|
838
839
|
/**
|
839
840
|
* Handles a custom collection request.
|
840
841
|
* @template TItem The type of items in the collection.
|
841
|
-
* @template
|
842
|
+
* @template TParam The parameter names of the requested URL.
|
842
843
|
* @template TContext The type of the context, extending {@link RequestContext}.
|
843
844
|
* @template TContextData The context data to pass to the `TContext`.
|
844
845
|
* @param request The HTTP request.
|
@@ -856,7 +857,7 @@ async function _handleCustomCollection(request, { name, values, context: context
|
|
856
857
|
/**
|
857
858
|
* Handles an ordered collection request.
|
858
859
|
* @template TItem The type of items in the collection.
|
859
|
-
* @template
|
860
|
+
* @template TParam The parameter names of the requested URL.
|
860
861
|
* @template TContext The type of the context, extending {@link RequestContext}.
|
861
862
|
* @template TContextData The context data to pass to the `TContext`.
|
862
863
|
* @param request The HTTP request.
|
@@ -876,7 +877,7 @@ async function _handleOrderedCollection(request, { name, values, context: contex
|
|
876
877
|
* The main flow is on `getCollection`, `dispatch`.
|
877
878
|
*
|
878
879
|
* @template TItem The type of items in the collection.
|
879
|
-
* @template
|
880
|
+
* @template TParam The parameter names of the requested URL.
|
880
881
|
* @template TContext The type of the context. {@link Context} or {@link RequestContext}.
|
881
882
|
* @template TContextData The context data to pass to the `TContext`.
|
882
883
|
* @template TCollection The type of the collection, extending {@link Collection}.
|
@@ -910,14 +911,14 @@ var CustomCollectionHandler = class {
|
|
910
911
|
#collection = null;
|
911
912
|
/**
|
912
913
|
* Creates a new CustomCollection instance.
|
913
|
-
* @param
|
914
|
-
* @param
|
915
|
-
* @param
|
916
|
-
* @param
|
917
|
-
* @param
|
918
|
-
* @param
|
919
|
-
* @param
|
920
|
-
* @param
|
914
|
+
* @param name The name of the collection.
|
915
|
+
* @param values The parameter values for the collection.
|
916
|
+
* @param context The request context.
|
917
|
+
* @param callbacks The collection callbacks.
|
918
|
+
* @param tracerProvider The tracer provider for telemetry.
|
919
|
+
* @param Collection The Collection constructor.
|
920
|
+
* @param CollectionPage The CollectionPage constructor.
|
921
|
+
* @param filterPredicate Optional filter predicate for items.
|
921
922
|
*/
|
922
923
|
constructor(name, values, context$1, callbacks, tracerProvider = trace.getTracerProvider(), Collection$1, CollectionPage$1, filterPredicate) {
|
923
924
|
this.name = name;
|
@@ -1042,7 +1043,7 @@ var CustomCollectionHandler = class {
|
|
1042
1043
|
/**
|
1043
1044
|
* Creates a function to wrap the dispatcher so tracing can be applied.
|
1044
1045
|
* @param params Parameters including cursor and total items.
|
1045
|
-
* @returns
|
1046
|
+
* @returns A function that handles the span operation.
|
1046
1047
|
*/
|
1047
1048
|
spanPages = ({ totalItems = null, cursor = null }) => async (span) => {
|
1048
1049
|
try {
|
@@ -1063,23 +1064,23 @@ var CustomCollectionHandler = class {
|
|
1063
1064
|
};
|
1064
1065
|
/**
|
1065
1066
|
* Dispatches the collection request to get items.
|
1066
|
-
* @param
|
1067
|
-
* @returns
|
1067
|
+
* @param cursor The cursor for pagination, or null for the first page.
|
1068
|
+
* @returns A promise that resolves to the page items.
|
1068
1069
|
*/
|
1069
1070
|
async dispatch(cursor = null) {
|
1070
1071
|
return await this.#dispatcher(this.context, this.values, cursor) ?? new ItemsNotFoundError().throw();
|
1071
1072
|
}
|
1072
1073
|
/**
|
1073
1074
|
* Filters the items in the collection.
|
1074
|
-
* @param
|
1075
|
-
* @returns
|
1075
|
+
* @param items The items to filter.
|
1076
|
+
* @returns The filtered items.
|
1076
1077
|
*/
|
1077
1078
|
filterItems(items) {
|
1078
1079
|
return filterCollectionItems(items, this.name, this.filterPredicate);
|
1079
1080
|
}
|
1080
1081
|
/**
|
1081
1082
|
* Appends a cursor to the URL if it exists.
|
1082
|
-
* @param
|
1083
|
+
* @param cursor The cursor to append, or null/undefined.
|
1083
1084
|
* @returns The URL with cursor appended, or null if cursor is null/undefined.
|
1084
1085
|
*/
|
1085
1086
|
appendToUrl(cursor) {
|
@@ -1087,8 +1088,7 @@ var CustomCollectionHandler = class {
|
|
1087
1088
|
}
|
1088
1089
|
/**
|
1089
1090
|
* Gets the stored collection or collection page.
|
1090
|
-
* @returns
|
1091
|
-
the collection or collection page.
|
1091
|
+
* @returns A promise that resolves to the collection or collection page.
|
1092
1092
|
*/
|
1093
1093
|
get collection() {
|
1094
1094
|
if (this.#collection === null) this.#collection = this.getCollection();
|
@@ -1096,8 +1096,8 @@ var CustomCollectionHandler = class {
|
|
1096
1096
|
}
|
1097
1097
|
/**
|
1098
1098
|
* Gets the total number of items in the collection.
|
1099
|
-
* @returns
|
1100
|
-
|
1099
|
+
* @returns A promise that resolves to the total items count,
|
1100
|
+
* or null if not available.
|
1101
1101
|
*/
|
1102
1102
|
get totalItems() {
|
1103
1103
|
if (this.#totalItems === void 0) this.totalItems = this.callbacks.counter?.(this.context, this.values);
|
@@ -1113,8 +1113,8 @@ var CustomCollectionHandler = class {
|
|
1113
1113
|
}
|
1114
1114
|
/**
|
1115
1115
|
* Gets the first cursor for pagination.
|
1116
|
-
* @returns
|
1117
|
-
or null if not available.
|
1116
|
+
* @returns A promise that resolves to the first cursor,
|
1117
|
+
* or null if not available.
|
1118
1118
|
*/
|
1119
1119
|
get firstCursor() {
|
1120
1120
|
const cursor = this.callbacks.firstCursor?.(this.context, this.values);
|
@@ -1319,7 +1319,6 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
1319
1319
|
firstKnock;
|
1320
1320
|
constructor(options) {
|
1321
1321
|
super();
|
1322
|
-
const logger$2 = getLogger(["fedify", "federation"]);
|
1323
1322
|
this.kv = options.kv;
|
1324
1323
|
this.kvPrefixes = {
|
1325
1324
|
activityIdempotence: ["_fedify", "activityIdempotence"],
|
@@ -1367,8 +1366,9 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
1367
1366
|
this.router.trailingSlashInsensitive = options.trailingSlashInsensitive ?? false;
|
1368
1367
|
this._initializeRouter();
|
1369
1368
|
if (options.allowPrivateAddress || options.userAgent != null) {
|
1370
|
-
if (options.
|
1371
|
-
|
1369
|
+
if (options.documentLoaderFactory != null) throw new TypeError("Cannot set documentLoaderFactory with allowPrivateAddress or userAgent options.");
|
1370
|
+
if (options.contextLoaderFactory != null) throw new TypeError("Cannot set contextLoaderFactory with allowPrivateAddress or userAgent options.");
|
1371
|
+
if (options.authenticatedDocumentLoaderFactory != null) throw new TypeError("Cannot set authenticatedDocumentLoaderFactory with allowPrivateAddress or userAgent options.");
|
1372
1372
|
}
|
1373
1373
|
const { allowPrivateAddress, userAgent } = options;
|
1374
1374
|
this.allowPrivateAddress = allowPrivateAddress ?? false;
|
@@ -1382,11 +1382,7 @@ var FederationImpl = class extends FederationBuilderImpl {
|
|
1382
1382
|
prefix: this.kvPrefixes.remoteDocument
|
1383
1383
|
});
|
1384
1384
|
});
|
1385
|
-
|
1386
|
-
if (options.contextLoaderFactory != null) throw new TypeError("Cannot set both contextLoader and contextLoaderFactory options at a time; use contextLoaderFactory only.");
|
1387
|
-
this.contextLoaderFactory = () => options.contextLoader;
|
1388
|
-
logger$2.warn("The contextLoader option is deprecated; use contextLoaderFactory option instead.");
|
1389
|
-
} else this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
|
1385
|
+
this.contextLoaderFactory = options.contextLoaderFactory ?? this.documentLoaderFactory;
|
1390
1386
|
this.authenticatedDocumentLoaderFactory = options.authenticatedDocumentLoaderFactory ?? ((identity) => getAuthenticatedDocumentLoader(identity, {
|
1391
1387
|
allowPrivateAddress,
|
1392
1388
|
userAgent,
|