@fedify/fedify 1.9.6 → 1.9.8
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-CEGEmRll.js → actor-BTA45fXF.js} +1205 -2768
- package/dist/{actor-Ydzhc8dj.d.cts → actor-Be-68iJP.d.cts} +3 -3
- package/dist/{actor-C1Euqngb.d.ts → actor-C5AY0Tno.d.ts} +3 -3
- package/dist/{actor-DbpZ6pzg.js → actor-DGa1EWaV.mjs} +8 -15
- package/dist/{actor-DlS-Q8hE.cjs → actor-DxfJk4lY.cjs} +3112 -4674
- package/dist/{assert-MZs1qjMx.js → assert-DikXweDx.mjs} +5 -9
- package/dist/{assert_equals-DSbWqCm3.js → assert_equals-Ew3jOFa3.mjs} +55 -69
- package/dist/{assert_instance_of-DHz7EHNU.js → assert_instance_of-C4Ri6VuN.mjs} +5 -9
- package/dist/{assert_is_error-BPGph1Jx.js → assert_is_error-C50x8tnw.mjs} +5 -9
- package/dist/{assert_not_equals-f3m3epl3.js → assert_not_equals--wG9hV7u.mjs} +6 -13
- package/dist/{assert_rejects-DiIiJbZn.js → assert_rejects-CJC9ThS-.mjs} +6 -11
- package/dist/{assert_throws-BOO88avQ.js → assert_throws-BIL7gChy.mjs} +6 -10
- package/dist/{authdocloader-DUQcOTRS.js → authdocloader-BC2rYCy1.mjs} +9 -14
- package/dist/{authdocloader-CT_V4Z7G.cjs → authdocloader-BrhFB421.cjs} +14 -22
- package/dist/{authdocloader-BLqMyboS.js → authdocloader-CqtNsX_N.js} +8 -15
- package/dist/{builder-BO61xeXE.js → builder-CIkAhIGC.mjs} +31 -40
- package/dist/{client-DF8anIB5.d.ts → client-D8OSiPBT.d.ts} +2 -2
- package/dist/{client-UG5wpNhG.js → client-MXqit6c-.mjs} +11 -15
- package/dist/{client-DjT_tegg.d.cts → client-T0VFOdMw.d.cts} +2 -2
- package/dist/{collection-CSzG2j1P.js → collection-BD6-SZ6O.mjs} +7 -12
- package/dist/compat/mod.cjs +5 -8
- package/dist/compat/mod.d.cts +78 -12
- package/dist/compat/mod.d.ts +78 -12
- package/dist/compat/mod.js +4 -8
- package/dist/compat/transformers.test.mjs +62 -0
- package/dist/{context-CwUAkopp.d.cts → context-CACMqDzl.d.cts} +33 -26
- package/dist/{context-CXUibY4L.d.ts → context-K4cCphQj.d.ts} +33 -26
- package/dist/{denokv-Bv33Xxea.js → denokv-CoSB_Eps.mjs} +22 -11
- package/dist/{docloader-BIFI3OS7.cjs → docloader-BVuUhBLI.cjs} +112 -212
- package/dist/{docloader-fJgJeqiX.js → docloader-BoXhusJ1.js} +17 -151
- package/dist/{docloader-CxWcuWqQ.d.ts → docloader-DSaLRXEA.d.ts} +2 -7
- package/dist/{docloader-D-MrRyHl.d.cts → docloader-DpGRDZrn.d.cts} +2 -7
- package/dist/{esm-C1EfGjSS.js → esm-BHJ7sdNg.mjs} +49 -85
- package/dist/federation/{builder.test.js → builder.test.mjs} +22 -41
- package/dist/federation/collection.test.d.mts +2 -0
- package/dist/federation/collection.test.mjs +21 -0
- package/dist/federation/handler.test.d.mts +2 -0
- package/dist/federation/{handler.test.js → handler.test.mjs} +22 -49
- package/dist/federation/idempotency.test.d.mts +2 -0
- package/dist/federation/{idempotency.test.js → idempotency.test.mjs} +29 -59
- package/dist/federation/inbox.test.d.mts +2 -0
- package/dist/federation/{inbox.test.js → inbox.test.mjs} +10 -15
- package/dist/federation/keycache.test.d.mts +2 -0
- package/dist/federation/{keycache.test.js → keycache.test.mjs} +13 -18
- package/dist/federation/kv.test.d.mts +2 -0
- package/dist/federation/{kv.test.js → kv.test.mjs} +9 -20
- package/dist/federation/middleware.test.d.mts +2 -0
- package/dist/federation/{middleware.test.js → middleware.test.mjs} +182 -197
- package/dist/federation/mod.cjs +223 -21
- package/dist/federation/mod.d.cts +4 -13
- package/dist/federation/mod.d.ts +4 -13
- package/dist/federation/mod.js +218 -18
- package/dist/federation/mq.test.d.mts +2 -0
- package/dist/federation/{mq.test.js → mq.test.mjs} +23 -38
- package/dist/federation/retry.test.d.mts +2 -0
- package/dist/federation/{retry.test.js → retry.test.mjs} +9 -14
- package/dist/federation/router.test.d.mts +2 -0
- package/dist/federation/{router.test.js → router.test.mjs} +12 -19
- package/dist/federation/send.test.d.mts +2 -0
- package/dist/federation/{send.test.js → send.test.mjs} +17 -26
- package/dist/{http-wsGR6KkT.d.ts → http-BZpls--H.d.ts} +5 -9
- package/dist/{http-CR-Eg1Uq.js → http-Bu5ZNlhZ.mjs} +16 -32
- package/dist/{http-B1_DzfAU.d.cts → http-C7WoprmE.d.cts} +5 -9
- package/dist/{http-BgopPF-8.cjs → http-DKw-O_VY.cjs} +51 -68
- package/dist/{http-05HxN-lp.js → http-VJbz6sKD.js} +17 -33
- package/dist/{inbox-DcJN1cxM.js → inbox-DkbTULXE.mjs} +17 -25
- package/dist/key-4fu6v0Jf.mjs +5 -0
- package/dist/{key-DjS1X9TG.cjs → key-B-wFdaPB.cjs} +42 -50
- package/dist/{key-ibMO03_0.js → key-BNMK_IVr.mjs} +12 -18
- package/dist/key-CancShOo.cjs +4 -0
- package/dist/{key-CPJcJjp-.js → key-DK3o0FEH.js} +19 -19
- package/dist/{keycache-CMUfqYqr.js → keycache-D-Vj8z88.mjs} +6 -10
- package/dist/{keys-IZ5050fT.js → keys-B27nVeIs.mjs} +6 -10
- package/dist/{kv-C7sopW2E.d.ts → kv-Bq9QLKm5.d.ts} +1 -1
- package/dist/{kv-CRZrzyXm.js → kv-DM1zFCtL.mjs} +6 -10
- package/dist/{kv-63Cil1MD.d.cts → kv-GIrOktyG.d.cts} +1 -1
- package/dist/{ld-DHNA2RSQ.js → ld-6jAVu3jV.mjs} +17 -31
- package/dist/{lookup-CKZfuyxA.js → lookup-BaU75j-d.js} +5 -11
- package/dist/{lookup-C4_dVYz7.cjs → lookup-BiIPmTwB.cjs} +16 -23
- package/dist/{lookup-BMAWLsP2.js → lookup-DmeJ8WUw.mjs} +8 -17
- package/dist/middleware-9ByEpBvV.cjs +4 -0
- package/dist/{middleware-CGbvIGvy.cjs → middleware-C188G4Go.cjs} +494 -547
- package/dist/{middleware-DrhEvfTo.js → middleware-Db1yZQaT.mjs} +276 -321
- package/dist/{middleware-ODfDRN3q.js → middleware-Do06X21v.js} +349 -393
- package/dist/middleware-DrfZEjyc.mjs +5 -0
- package/dist/{mod-CDObsV1d.d.ts → mod-BSwc3_rD.d.ts} +3 -3
- package/dist/{mod-DBzN0aCM.d.ts → mod-BTNpXcPj.d.ts} +2 -2
- package/dist/{mod-fjqfsrty.d.cts → mod-Chb_NKPp.d.cts} +4 -4
- package/dist/{mod-DgcYoyZK.d.ts → mod-DHoc3toL.d.ts} +4 -4
- package/dist/{mod-jQ4OODsl.d.cts → mod-DIMx6YjJ.d.cts} +2 -2
- package/dist/{mod-BUbqxBev.d.cts → mod-HElaq2UB.d.cts} +3 -3
- package/dist/mod.cjs +31 -33
- package/dist/mod.d.cts +15 -17
- package/dist/mod.d.ts +15 -17
- package/dist/mod.js +20 -23
- package/dist/{mq-B7R1Q-M5.d.cts → mq-CrItclRD.d.cts} +1 -1
- package/dist/{mq-CRGm1e_F.d.ts → mq-D_ZZRdby.d.ts} +1 -1
- package/dist/nodeinfo/client.test.d.mts +2 -0
- package/dist/nodeinfo/{client.test.js → client.test.mjs} +23 -45
- package/dist/nodeinfo/handler.test.d.mts +2 -0
- package/dist/nodeinfo/{handler.test.js → handler.test.mjs} +14 -43
- package/dist/nodeinfo/mod.cjs +5 -9
- package/dist/nodeinfo/mod.d.cts +2 -5
- package/dist/nodeinfo/mod.d.ts +2 -5
- package/dist/nodeinfo/mod.js +4 -9
- package/dist/nodeinfo/semver.test.d.mts +2 -0
- package/dist/nodeinfo/{semver.test.js → semver.test.mjs} +28 -51
- package/dist/nodeinfo/types.test.d.mts +2 -0
- package/dist/nodeinfo/{types.test.js → types.test.mjs} +10 -21
- package/dist/{owner-DDHsHYQO.js → owner-CKuGt_T9.mjs} +10 -13
- package/dist/{owner-BbeUDvOu.d.ts → owner-DPAPnB0R.d.ts} +4 -4
- package/dist/{owner-6KSEp9eV.d.cts → owner-_rFs0ik_.d.cts} +4 -4
- package/dist/{proof-V1uQaB2y.js → proof-CmTtG_t-.js} +33 -57
- package/dist/{proof-CX7ujFFX.cjs → proof-DLOy7HYU.cjs} +112 -135
- package/dist/{proof-exgGRW88.js → proof-mJLL2gSA.mjs} +20 -32
- package/dist/{retry-D4GJ670a.js → retry-Ddbq3AcK.mjs} +4 -7
- package/dist/rolldown-runtime-C7fyD9f2.js +15 -0
- package/dist/runtime/authdocloader.test.d.mts +2 -0
- package/dist/runtime/{authdocloader.test.js → authdocloader.test.mjs} +16 -28
- package/dist/runtime/docloader.test.d.mts +2 -0
- package/dist/runtime/{docloader.test.js → docloader.test.mjs} +52 -72
- package/dist/runtime/key.test.d.mts +2 -0
- package/dist/runtime/{key.test.js → key.test.mjs} +27 -57
- package/dist/runtime/langstr.test.d.mts +2 -0
- package/dist/runtime/{langstr.test.js → langstr.test.mjs} +9 -19
- package/dist/runtime/link.test.d.mts +2 -0
- package/dist/runtime/{link.test.js → link.test.mjs} +7 -11
- package/dist/runtime/mod.cjs +7 -13
- package/dist/runtime/mod.d.cts +103 -6
- package/dist/runtime/mod.d.ts +103 -6
- package/dist/runtime/mod.js +6 -13
- package/dist/runtime/multibase/multibase.test.d.mts +2 -0
- package/dist/runtime/multibase/{multibase.test.js → multibase.test.mjs} +16 -33
- package/dist/runtime/url.test.d.mts +2 -0
- package/dist/runtime/{url.test.js → url.test.mjs} +10 -15
- package/dist/{semver-dArNLkR9.js → semver-CgD82xxg.mjs} +13 -28
- package/dist/{send-BfMYakUE.js → send-BsQbGuw4.mjs} +7 -12
- package/dist/sig/http.test.d.mts +2 -0
- package/dist/sig/{http.test.js → http.test.mjs} +119 -203
- package/dist/sig/key.test.d.mts +2 -0
- package/dist/sig/{key.test.js → key.test.mjs} +13 -22
- package/dist/sig/ld.test.d.mts +2 -0
- package/dist/sig/{ld.test.js → ld.test.mjs} +24 -39
- package/dist/sig/mod.cjs +7 -13
- package/dist/sig/mod.d.cts +3 -7
- package/dist/sig/mod.d.ts +3 -7
- package/dist/sig/mod.js +6 -13
- package/dist/sig/owner.test.d.mts +2 -0
- package/dist/sig/owner.test.mjs +39 -0
- package/dist/sig/proof.test.d.mts +2 -0
- package/dist/sig/{proof.test.js → proof.test.mjs} +18 -31
- package/dist/{std__assert-X-_kMxKM.js → std__assert-2v7gYiZp.mjs} +13 -24
- package/dist/testing/docloader.test.d.mts +2 -0
- package/dist/testing/docloader.test.mjs +12 -0
- package/dist/testing/{mod.d.ts → mod.d.mts} +371 -541
- package/dist/testing/mod.mjs +5 -0
- package/dist/{testing-RPOc_gVG.js → testing-DS3gcq8V.mjs} +27 -35
- package/dist/{transformers-CoBS-oFG.cjs → transformers-BM0M8hnW.cjs} +20 -25
- package/dist/{transformers-BFT6d7J5.js → transformers-BV4OeK9o.js} +3 -7
- package/dist/{types-Cptev2nt.js → types-BXfL-dsX.js} +18 -36
- package/dist/{types-BIgY6c-l.js → types-CAnkAQGM.mjs} +5 -9
- package/dist/{types-CGnM1vft.cjs → types-DpM4FhjW.cjs} +45 -64
- package/dist/vocab/actor.test.d.mts +2 -0
- package/dist/vocab/{actor.test.js → actor.test.mjs} +308 -550
- package/dist/vocab/cjs.test.d.mts +2 -0
- package/dist/vocab/cjs.test.mjs +14 -0
- package/dist/vocab/lookup.test.d.mts +2 -0
- package/dist/vocab/{lookup.test.js → lookup.test.mjs} +29 -45
- package/dist/vocab/mod.cjs +251 -16
- package/dist/vocab/mod.d.cts +3 -5
- package/dist/vocab/mod.d.ts +3 -5
- package/dist/vocab/mod.js +244 -10
- package/dist/vocab/type.test.d.mts +2 -0
- package/dist/vocab/type.test.mjs +16 -0
- package/dist/vocab/vocab.test.d.mts +2 -0
- package/dist/vocab/{vocab.test.js → vocab.test.mjs} +178 -311
- package/dist/{vocab-CDHNj5zp.d.ts → vocab-BLvSEtuz.d.cts} +2 -4
- package/dist/{type-COPv6pMi.js → vocab-DuW9rL1h.mjs} +1177 -2871
- package/dist/{vocab-Cfs0937i.d.cts → vocab-lhCS9lzq.d.ts} +4 -2
- package/dist/webfinger/handler.test.d.mts +2 -0
- package/dist/webfinger/{handler.test.js → handler.test.mjs} +23 -56
- package/dist/webfinger/lookup.test.d.mts +2 -0
- package/dist/webfinger/{lookup.test.js → lookup.test.mjs} +13 -27
- package/dist/webfinger/mod.cjs +5 -9
- package/dist/webfinger/mod.d.cts +1 -3
- package/dist/webfinger/mod.d.ts +1 -3
- package/dist/webfinger/mod.js +4 -9
- package/dist/x/cfworkers.cjs +25 -14
- package/dist/x/cfworkers.d.cts +33 -6
- package/dist/x/cfworkers.d.ts +33 -6
- package/dist/x/cfworkers.js +22 -12
- package/dist/x/cfworkers.test.d.mts +2 -0
- package/dist/x/{cfworkers.test.js → cfworkers.test.mjs} +28 -26
- package/dist/x/hono.cjs +25 -14
- package/dist/x/hono.d.cts +1 -11
- package/dist/x/hono.d.ts +1 -11
- package/dist/x/hono.js +22 -12
- package/dist/x/sveltekit.cjs +23 -12
- package/dist/x/sveltekit.d.cts +1 -11
- package/dist/x/sveltekit.d.ts +1 -11
- package/dist/x/sveltekit.js +20 -10
- package/package.json +2 -2
- package/dist/chunk-DqRYRqnO.cjs +0 -34
- package/dist/compat/transformers.test.d.ts +0 -3
- package/dist/compat/transformers.test.js +0 -86
- package/dist/compat-DmDDELst.cjs +0 -4
- package/dist/compat-nxUqe4Z-.js +0 -4
- package/dist/federation/builder.test.d.ts +0 -3
- package/dist/federation/collection.test.d.ts +0 -3
- package/dist/federation/collection.test.js +0 -35
- package/dist/federation/handler.test.d.ts +0 -3
- package/dist/federation/idempotency.test.d.ts +0 -3
- package/dist/federation/inbox.test.d.ts +0 -3
- package/dist/federation/keycache.test.d.ts +0 -3
- package/dist/federation/kv.test.d.ts +0 -3
- package/dist/federation/middleware.test.d.ts +0 -3
- package/dist/federation/mq.test.d.ts +0 -3
- package/dist/federation/retry.test.d.ts +0 -3
- package/dist/federation/router.test.d.ts +0 -3
- package/dist/federation/send.test.d.ts +0 -3
- package/dist/federation-D1U8YY9t.js +0 -226
- package/dist/federation-H2_En3j5.cjs +0 -244
- package/dist/key-BCUd8FWp.js +0 -10
- package/dist/key-BUardnTH.cjs +0 -10
- package/dist/key-Dr6H_e3K.js +0 -10
- package/dist/middleware-BJ83veqi.js +0 -26
- package/dist/middleware-CJ4W2ir5.cjs +0 -17
- package/dist/middleware-Ve2mHJgo.js +0 -17
- package/dist/mod-BcObK1Lz.d.ts +0 -82
- package/dist/mod-C2tOeRkN.d.cts +0 -1
- package/dist/mod-CIbqfZW0.d.ts +0 -104
- package/dist/mod-Dt-G9ZOS.d.cts +0 -102
- package/dist/mod-FZd39qVq.d.cts +0 -1
- package/dist/mod-mXx9V0q5.d.cts +0 -80
- package/dist/nodeinfo/client.test.d.ts +0 -3
- package/dist/nodeinfo/handler.test.d.ts +0 -3
- package/dist/nodeinfo/semver.test.d.ts +0 -3
- package/dist/nodeinfo/types.test.d.ts +0 -3
- package/dist/nodeinfo-Co9lJrWl.cjs +0 -4
- package/dist/nodeinfo-DfycQ8Wf.js +0 -4
- package/dist/runtime/authdocloader.test.d.ts +0 -3
- package/dist/runtime/docloader.test.d.ts +0 -3
- package/dist/runtime/key.test.d.ts +0 -3
- package/dist/runtime/langstr.test.d.ts +0 -3
- package/dist/runtime/link.test.d.ts +0 -3
- package/dist/runtime/multibase/multibase.test.d.ts +0 -3
- package/dist/runtime/url.test.d.ts +0 -3
- package/dist/runtime-C58AJWSv.cjs +0 -4
- package/dist/runtime-DPYEDf-o.js +0 -4
- package/dist/sig/http.test.d.ts +0 -3
- package/dist/sig/key.test.d.ts +0 -3
- package/dist/sig/ld.test.d.ts +0 -3
- package/dist/sig/owner.test.d.ts +0 -3
- package/dist/sig/owner.test.js +0 -52
- package/dist/sig/proof.test.d.ts +0 -3
- package/dist/sig-ByHXzqUi.cjs +0 -4
- package/dist/sig-Cj3tk-ig.js +0 -4
- package/dist/testing/docloader.test.d.ts +0 -3
- package/dist/testing/docloader.test.js +0 -24
- package/dist/testing/mod.js +0 -10
- package/dist/vocab/actor.test.d.ts +0 -3
- package/dist/vocab/lookup.test.d.ts +0 -3
- package/dist/vocab/type.test.d.ts +0 -3
- package/dist/vocab/type.test.js +0 -25
- package/dist/vocab/vocab.test.d.ts +0 -3
- package/dist/vocab-BFy1CS5L.cjs +0 -289
- package/dist/vocab-BPFiQ650.js +0 -253
- package/dist/webfinger/handler.test.d.ts +0 -3
- package/dist/webfinger/lookup.test.d.ts +0 -3
- package/dist/webfinger-BjOEdFPs.cjs +0 -4
- package/dist/webfinger-De_bU0iE.js +0 -4
- package/dist/x/cfworkers.test.d.ts +0 -3
- /package/dist/{mod-1pDWKvUL.d.ts → compat/transformers.test.d.mts} +0 -0
- /package/dist/{mod-g0xFzAP9.d.ts → federation/builder.test.d.mts} +0 -0
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const byte_encodings_hex = require_chunk.__toESM(require("byte-encodings/hex"));
|
|
13
|
-
const __opentelemetry_semantic_conventions = require_chunk.__toESM(require("@opentelemetry/semantic-conventions"));
|
|
14
|
-
const structured_field_values = require_chunk.__toESM(require("structured-field-values"));
|
|
15
|
-
|
|
1
|
+
const { Temporal } = require("@js-temporal/polyfill");
|
|
2
|
+
const { URLPattern } = require("urlpattern-polyfill");
|
|
3
|
+
const require_docloader = require("./docloader-BVuUhBLI.cjs");
|
|
4
|
+
const require_actor = require("./actor-DxfJk4lY.cjs");
|
|
5
|
+
const require_key = require("./key-B-wFdaPB.cjs");
|
|
6
|
+
let _logtape_logtape = require("@logtape/logtape");
|
|
7
|
+
let _opentelemetry_api = require("@opentelemetry/api");
|
|
8
|
+
let byte_encodings_base64 = require("byte-encodings/base64");
|
|
9
|
+
let byte_encodings_hex = require("byte-encodings/hex");
|
|
10
|
+
let _opentelemetry_semantic_conventions = require("@opentelemetry/semantic-conventions");
|
|
11
|
+
let structured_field_values = require("structured-field-values");
|
|
16
12
|
//#region src/sig/http.ts
|
|
17
13
|
const DEFAULT_MAX_REDIRECTION = 20;
|
|
18
14
|
/**
|
|
@@ -26,24 +22,22 @@ const DEFAULT_MAX_REDIRECTION = 20;
|
|
|
26
22
|
*/
|
|
27
23
|
async function signRequest(request, privateKey, keyId, options = {}) {
|
|
28
24
|
require_key.validateCryptoKey(privateKey, "private");
|
|
29
|
-
|
|
30
|
-
const tracer = tracerProvider.getTracer(require_docloader.deno_default.name, require_docloader.deno_default.version);
|
|
31
|
-
return await tracer.startActiveSpan("http_signatures.sign", async (span) => {
|
|
25
|
+
return await (options.tracerProvider ?? _opentelemetry_api.trace.getTracerProvider()).getTracer(require_docloader.name, require_docloader.version).startActiveSpan("http_signatures.sign", async (span) => {
|
|
32
26
|
try {
|
|
33
27
|
const spec = options.spec ?? "draft-cavage-http-signatures-12";
|
|
34
28
|
let signed;
|
|
35
29
|
if (spec === "rfc9421") signed = await signRequestRfc9421(request, privateKey, keyId, span, options.currentTime, options.body);
|
|
36
30
|
else signed = await signRequestDraft(request, privateKey, keyId, span, options.currentTime, options.body);
|
|
37
31
|
if (span.isRecording()) {
|
|
38
|
-
span.setAttribute(
|
|
39
|
-
span.setAttribute(
|
|
40
|
-
for (const [name, value] of signed.headers) span.setAttribute((0,
|
|
32
|
+
span.setAttribute(_opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_METHOD, signed.method);
|
|
33
|
+
span.setAttribute(_opentelemetry_semantic_conventions.ATTR_URL_FULL, signed.url);
|
|
34
|
+
for (const [name, value] of signed.headers) span.setAttribute((0, _opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_HEADER)(name), value);
|
|
41
35
|
span.setAttribute("http_signatures.key_id", keyId.href);
|
|
42
36
|
}
|
|
43
37
|
return signed;
|
|
44
38
|
} catch (error) {
|
|
45
39
|
span.setStatus({
|
|
46
|
-
code:
|
|
40
|
+
code: _opentelemetry_api.SpanStatusCode.ERROR,
|
|
47
41
|
message: String(error)
|
|
48
42
|
});
|
|
49
43
|
throw error;
|
|
@@ -123,9 +117,7 @@ function createRfc9421SignatureBase(request, components, parameters) {
|
|
|
123
117
|
* @returns The formatted signature string.
|
|
124
118
|
*/
|
|
125
119
|
function formatRfc9421Signature(signature, components, parameters) {
|
|
126
|
-
|
|
127
|
-
const signatureValue = `sig1=:${(0, byte_encodings_base64.encodeBase64)(signature)}:`;
|
|
128
|
-
return [signatureInputValue, signatureValue];
|
|
120
|
+
return [`sig1=("${components.join("\" \"")}");${parameters}`, `sig1=:${(0, byte_encodings_base64.encodeBase64)(signature)}:`];
|
|
129
121
|
}
|
|
130
122
|
/**
|
|
131
123
|
* Parse RFC 9421 Signature-Input header.
|
|
@@ -137,7 +129,7 @@ function parseRfc9421SignatureInput(signatureInput) {
|
|
|
137
129
|
try {
|
|
138
130
|
dict = (0, structured_field_values.decodeDict)(signatureInput);
|
|
139
131
|
} catch (error) {
|
|
140
|
-
(0,
|
|
132
|
+
(0, _logtape_logtape.getLogger)([
|
|
141
133
|
"fedify",
|
|
142
134
|
"sig",
|
|
143
135
|
"http"
|
|
@@ -172,7 +164,7 @@ function parseRfc9421Signature(signature) {
|
|
|
172
164
|
try {
|
|
173
165
|
dict = (0, structured_field_values.decodeDict)(signature);
|
|
174
166
|
} catch (error) {
|
|
175
|
-
(0,
|
|
167
|
+
(0, _logtape_logtape.getLogger)([
|
|
176
168
|
"fedify",
|
|
177
169
|
"sig",
|
|
178
170
|
"http"
|
|
@@ -255,13 +247,11 @@ const supportedHashAlgorithms = {
|
|
|
255
247
|
* could not be verified.
|
|
256
248
|
*/
|
|
257
249
|
async function verifyRequest(request, options = {}) {
|
|
258
|
-
|
|
259
|
-
const tracer = tracerProvider.getTracer(require_docloader.deno_default.name, require_docloader.deno_default.version);
|
|
260
|
-
return await tracer.startActiveSpan("http_signatures.verify", async (span) => {
|
|
250
|
+
return await (options.tracerProvider ?? _opentelemetry_api.trace.getTracerProvider()).getTracer(require_docloader.name, require_docloader.version).startActiveSpan("http_signatures.verify", async (span) => {
|
|
261
251
|
if (span.isRecording()) {
|
|
262
|
-
span.setAttribute(
|
|
263
|
-
span.setAttribute(
|
|
264
|
-
for (const [name, value] of request.headers) span.setAttribute((0,
|
|
252
|
+
span.setAttribute(_opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_METHOD, request.method);
|
|
253
|
+
span.setAttribute(_opentelemetry_semantic_conventions.ATTR_URL_FULL, request.url);
|
|
254
|
+
for (const [name, value] of request.headers) span.setAttribute((0, _opentelemetry_semantic_conventions.ATTR_HTTP_REQUEST_HEADER)(name), value);
|
|
265
255
|
}
|
|
266
256
|
try {
|
|
267
257
|
let spec = options.spec;
|
|
@@ -269,11 +259,11 @@ async function verifyRequest(request, options = {}) {
|
|
|
269
259
|
let key;
|
|
270
260
|
if (spec === "rfc9421") key = await verifyRequestRfc9421(request, span, options);
|
|
271
261
|
else key = await verifyRequestDraft(request, span, options);
|
|
272
|
-
if (key == null) span.setStatus({ code:
|
|
262
|
+
if (key == null) span.setStatus({ code: _opentelemetry_api.SpanStatusCode.ERROR });
|
|
273
263
|
return key;
|
|
274
264
|
} catch (error) {
|
|
275
265
|
span.setStatus({
|
|
276
|
-
code:
|
|
266
|
+
code: _opentelemetry_api.SpanStatusCode.ERROR,
|
|
277
267
|
message: String(error)
|
|
278
268
|
});
|
|
279
269
|
throw error;
|
|
@@ -283,7 +273,7 @@ async function verifyRequest(request, options = {}) {
|
|
|
283
273
|
});
|
|
284
274
|
}
|
|
285
275
|
async function verifyRequestDraft(request, span, { documentLoader, contextLoader, timeWindow, currentTime, keyCache, tracerProvider } = {}) {
|
|
286
|
-
const logger = (0,
|
|
276
|
+
const logger = (0, _logtape_logtape.getLogger)([
|
|
287
277
|
"fedify",
|
|
288
278
|
"sig",
|
|
289
279
|
"http"
|
|
@@ -447,8 +437,7 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
|
|
|
447
437
|
const message = headerNames.map((name) => `${name}: ` + (name === "(request-target)" ? `${request.method.toLowerCase()} ${new URL(request.url).pathname}` : name === "(created)" ? sigValues.created ?? "" : name === "(expires)" ? sigValues.expires ?? "" : name === "host" ? request.headers.get("host") ?? new URL(request.url).host : request.headers.get(name))).join("\n");
|
|
448
438
|
const sig = (0, byte_encodings_base64.decodeBase64)(signature);
|
|
449
439
|
span?.setAttribute("http_signatures.signature", (0, byte_encodings_hex.encodeHex)(sig));
|
|
450
|
-
|
|
451
|
-
if (!verified) {
|
|
440
|
+
if (!await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, sig, new TextEncoder().encode(message))) {
|
|
452
441
|
if (cached) {
|
|
453
442
|
logger.debug("Failed to verify with the cached key {keyId}; signature {signature} is invalid. Retrying with the freshly fetched key...", {
|
|
454
443
|
keyId,
|
|
@@ -462,7 +451,7 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
|
|
|
462
451
|
currentTime,
|
|
463
452
|
keyCache: {
|
|
464
453
|
get: () => Promise.resolve(void 0),
|
|
465
|
-
set: async (keyId
|
|
454
|
+
set: async (keyId, key) => await keyCache?.set(keyId, key)
|
|
466
455
|
}
|
|
467
456
|
});
|
|
468
457
|
}
|
|
@@ -537,7 +526,7 @@ async function verifyRfc9421ContentDigest(digestHeader, body) {
|
|
|
537
526
|
return false;
|
|
538
527
|
}
|
|
539
528
|
async function verifyRequestRfc9421(request, span, { documentLoader, contextLoader, timeWindow, currentTime, keyCache, tracerProvider } = {}) {
|
|
540
|
-
const logger = (0,
|
|
529
|
+
const logger = (0, _logtape_logtape.getLogger)([
|
|
541
530
|
"fedify",
|
|
542
531
|
"sig",
|
|
543
532
|
"http"
|
|
@@ -612,9 +601,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
|
|
|
612
601
|
logger.debug("Failed to verify; Content-Digest header required but not found.", { components: sigInput.components });
|
|
613
602
|
continue;
|
|
614
603
|
}
|
|
615
|
-
|
|
616
|
-
const digestValid = await verifyRfc9421ContentDigest(contentDigestHeader, body);
|
|
617
|
-
if (!digestValid) {
|
|
604
|
+
if (!await verifyRfc9421ContentDigest(contentDigestHeader, await request.arrayBuffer())) {
|
|
618
605
|
logger.debug("Failed to verify; Content-Digest verification failed.", { contentDigest: contentDigestHeader });
|
|
619
606
|
continue;
|
|
620
607
|
}
|
|
@@ -660,8 +647,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
|
|
|
660
647
|
const signatureBaseBytes = new TextEncoder().encode(signatureBase);
|
|
661
648
|
span?.setAttribute("http_signatures.signature", (0, byte_encodings_hex.encodeHex)(sigBytes));
|
|
662
649
|
try {
|
|
663
|
-
|
|
664
|
-
if (verified) {
|
|
650
|
+
if (await crypto.subtle.verify(algorithm, key.publicKey, sigBytes.slice(), signatureBaseBytes)) {
|
|
665
651
|
validKey = key;
|
|
666
652
|
break;
|
|
667
653
|
} else if (cached) {
|
|
@@ -673,7 +659,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
|
|
|
673
659
|
currentTime,
|
|
674
660
|
keyCache: {
|
|
675
661
|
get: () => Promise.resolve(void 0),
|
|
676
|
-
set: async (keyId, key
|
|
662
|
+
set: async (keyId, key) => await keyCache?.set(keyId, key)
|
|
677
663
|
},
|
|
678
664
|
spec: "rfc9421"
|
|
679
665
|
});
|
|
@@ -746,8 +732,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
746
732
|
});
|
|
747
733
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
748
734
|
if (redirected >= DEFAULT_MAX_REDIRECTION) throw new require_docloader.FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
749
|
-
const
|
|
750
|
-
const redirectRequest = createRedirectRequest(request, location, body);
|
|
735
|
+
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
751
736
|
if (visited.has(redirectRequest.url)) throw new require_docloader.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
752
737
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
753
738
|
...options,
|
|
@@ -755,7 +740,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
755
740
|
}, redirected + 1, visited);
|
|
756
741
|
} else if (response.status === 400 || response.status === 401 || response.status > 401) {
|
|
757
742
|
const spec = firstTrySpec === "draft-cavage-http-signatures-12" ? "rfc9421" : "draft-cavage-http-signatures-12";
|
|
758
|
-
(0,
|
|
743
|
+
(0, _logtape_logtape.getLogger)([
|
|
759
744
|
"fedify",
|
|
760
745
|
"sig",
|
|
761
746
|
"http"
|
|
@@ -777,8 +762,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
777
762
|
});
|
|
778
763
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
779
764
|
if (redirected >= DEFAULT_MAX_REDIRECTION) throw new require_docloader.FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
780
|
-
const
|
|
781
|
-
const redirectRequest = createRedirectRequest(request, location, body);
|
|
765
|
+
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
782
766
|
if (visited.has(redirectRequest.url)) throw new require_docloader.FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
783
767
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
784
768
|
...options,
|
|
@@ -815,23 +799,22 @@ function timingSafeEqual(a, b) {
|
|
|
815
799
|
result |= lenA ^ lenB;
|
|
816
800
|
return result === 0;
|
|
817
801
|
}
|
|
818
|
-
|
|
819
802
|
//#endregion
|
|
820
|
-
Object.defineProperty(exports,
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
803
|
+
Object.defineProperty(exports, "doubleKnock", {
|
|
804
|
+
enumerable: true,
|
|
805
|
+
get: function() {
|
|
806
|
+
return doubleKnock;
|
|
807
|
+
}
|
|
808
|
+
});
|
|
809
|
+
Object.defineProperty(exports, "signRequest", {
|
|
810
|
+
enumerable: true,
|
|
811
|
+
get: function() {
|
|
812
|
+
return signRequest;
|
|
813
|
+
}
|
|
825
814
|
});
|
|
826
|
-
Object.defineProperty(exports,
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
815
|
+
Object.defineProperty(exports, "verifyRequest", {
|
|
816
|
+
enumerable: true,
|
|
817
|
+
get: function() {
|
|
818
|
+
return verifyRequest;
|
|
819
|
+
}
|
|
831
820
|
});
|
|
832
|
-
Object.defineProperty(exports, 'verifyRequest', {
|
|
833
|
-
enumerable: true,
|
|
834
|
-
get: function () {
|
|
835
|
-
return verifyRequest;
|
|
836
|
-
}
|
|
837
|
-
});
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { CryptographicKey, FetchError, deno_default } from "./type-COPv6pMi.js";
|
|
7
|
-
import { fetchKey, validateCryptoKey } from "./key-CPJcJjp-.js";
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
import { d as name, f as version, t as FetchError } from "./docloader-BoXhusJ1.js";
|
|
4
|
+
import { y as CryptographicKey } from "./actor-BTA45fXF.js";
|
|
5
|
+
import { n as fetchKey, o as validateCryptoKey } from "./key-DK3o0FEH.js";
|
|
8
6
|
import { getLogger } from "@logtape/logtape";
|
|
9
7
|
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
10
|
-
import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
|
|
11
8
|
import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
|
|
12
9
|
import { encodeHex } from "byte-encodings/hex";
|
|
10
|
+
import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
|
|
13
11
|
import { Item, decodeDict, encodeItem } from "structured-field-values";
|
|
14
|
-
|
|
15
12
|
//#region src/sig/http.ts
|
|
16
13
|
const DEFAULT_MAX_REDIRECTION = 20;
|
|
17
14
|
/**
|
|
@@ -25,9 +22,7 @@ const DEFAULT_MAX_REDIRECTION = 20;
|
|
|
25
22
|
*/
|
|
26
23
|
async function signRequest(request, privateKey, keyId, options = {}) {
|
|
27
24
|
validateCryptoKey(privateKey, "private");
|
|
28
|
-
|
|
29
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
30
|
-
return await tracer.startActiveSpan("http_signatures.sign", async (span) => {
|
|
25
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("http_signatures.sign", async (span) => {
|
|
31
26
|
try {
|
|
32
27
|
const spec = options.spec ?? "draft-cavage-http-signatures-12";
|
|
33
28
|
let signed;
|
|
@@ -122,9 +117,7 @@ function createRfc9421SignatureBase(request, components, parameters) {
|
|
|
122
117
|
* @returns The formatted signature string.
|
|
123
118
|
*/
|
|
124
119
|
function formatRfc9421Signature(signature, components, parameters) {
|
|
125
|
-
|
|
126
|
-
const signatureValue = `sig1=:${encodeBase64(signature)}:`;
|
|
127
|
-
return [signatureInputValue, signatureValue];
|
|
120
|
+
return [`sig1=("${components.join("\" \"")}");${parameters}`, `sig1=:${encodeBase64(signature)}:`];
|
|
128
121
|
}
|
|
129
122
|
/**
|
|
130
123
|
* Parse RFC 9421 Signature-Input header.
|
|
@@ -254,9 +247,7 @@ const supportedHashAlgorithms = {
|
|
|
254
247
|
* could not be verified.
|
|
255
248
|
*/
|
|
256
249
|
async function verifyRequest(request, options = {}) {
|
|
257
|
-
|
|
258
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
259
|
-
return await tracer.startActiveSpan("http_signatures.verify", async (span) => {
|
|
250
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("http_signatures.verify", async (span) => {
|
|
260
251
|
if (span.isRecording()) {
|
|
261
252
|
span.setAttribute(ATTR_HTTP_REQUEST_METHOD, request.method);
|
|
262
253
|
span.setAttribute(ATTR_URL_FULL, request.url);
|
|
@@ -446,8 +437,7 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
|
|
|
446
437
|
const message = headerNames.map((name) => `${name}: ` + (name === "(request-target)" ? `${request.method.toLowerCase()} ${new URL(request.url).pathname}` : name === "(created)" ? sigValues.created ?? "" : name === "(expires)" ? sigValues.expires ?? "" : name === "host" ? request.headers.get("host") ?? new URL(request.url).host : request.headers.get(name))).join("\n");
|
|
447
438
|
const sig = decodeBase64(signature);
|
|
448
439
|
span?.setAttribute("http_signatures.signature", encodeHex(sig));
|
|
449
|
-
|
|
450
|
-
if (!verified) {
|
|
440
|
+
if (!await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, sig, new TextEncoder().encode(message))) {
|
|
451
441
|
if (cached) {
|
|
452
442
|
logger.debug("Failed to verify with the cached key {keyId}; signature {signature} is invalid. Retrying with the freshly fetched key...", {
|
|
453
443
|
keyId,
|
|
@@ -461,7 +451,7 @@ async function verifyRequestDraft(request, span, { documentLoader, contextLoader
|
|
|
461
451
|
currentTime,
|
|
462
452
|
keyCache: {
|
|
463
453
|
get: () => Promise.resolve(void 0),
|
|
464
|
-
set: async (keyId
|
|
454
|
+
set: async (keyId, key) => await keyCache?.set(keyId, key)
|
|
465
455
|
}
|
|
466
456
|
});
|
|
467
457
|
}
|
|
@@ -611,9 +601,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
|
|
|
611
601
|
logger.debug("Failed to verify; Content-Digest header required but not found.", { components: sigInput.components });
|
|
612
602
|
continue;
|
|
613
603
|
}
|
|
614
|
-
|
|
615
|
-
const digestValid = await verifyRfc9421ContentDigest(contentDigestHeader, body);
|
|
616
|
-
if (!digestValid) {
|
|
604
|
+
if (!await verifyRfc9421ContentDigest(contentDigestHeader, await request.arrayBuffer())) {
|
|
617
605
|
logger.debug("Failed to verify; Content-Digest verification failed.", { contentDigest: contentDigestHeader });
|
|
618
606
|
continue;
|
|
619
607
|
}
|
|
@@ -659,8 +647,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
|
|
|
659
647
|
const signatureBaseBytes = new TextEncoder().encode(signatureBase);
|
|
660
648
|
span?.setAttribute("http_signatures.signature", encodeHex(sigBytes));
|
|
661
649
|
try {
|
|
662
|
-
|
|
663
|
-
if (verified) {
|
|
650
|
+
if (await crypto.subtle.verify(algorithm, key.publicKey, sigBytes.slice(), signatureBaseBytes)) {
|
|
664
651
|
validKey = key;
|
|
665
652
|
break;
|
|
666
653
|
} else if (cached) {
|
|
@@ -672,7 +659,7 @@ async function verifyRequestRfc9421(request, span, { documentLoader, contextLoad
|
|
|
672
659
|
currentTime,
|
|
673
660
|
keyCache: {
|
|
674
661
|
get: () => Promise.resolve(void 0),
|
|
675
|
-
set: async (keyId, key
|
|
662
|
+
set: async (keyId, key) => await keyCache?.set(keyId, key)
|
|
676
663
|
},
|
|
677
664
|
spec: "rfc9421"
|
|
678
665
|
});
|
|
@@ -745,8 +732,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
745
732
|
});
|
|
746
733
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
747
734
|
if (redirected >= DEFAULT_MAX_REDIRECTION) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
748
|
-
const
|
|
749
|
-
const redirectRequest = createRedirectRequest(request, location, body);
|
|
735
|
+
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
750
736
|
if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
751
737
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
752
738
|
...options,
|
|
@@ -776,8 +762,7 @@ async function doubleKnockInternal(request, identity, options, redirected = 0, v
|
|
|
776
762
|
});
|
|
777
763
|
if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
|
|
778
764
|
if (redirected >= DEFAULT_MAX_REDIRECTION) throw new FetchError(request.url, `Too many redirections (${redirected + 1})`);
|
|
779
|
-
const
|
|
780
|
-
const redirectRequest = createRedirectRequest(request, location, body);
|
|
765
|
+
const redirectRequest = createRedirectRequest(request, response.headers.get("Location"), body);
|
|
781
766
|
if (visited.has(redirectRequest.url)) throw new FetchError(request.url, `Redirect loop detected: ${redirectRequest.url}`);
|
|
782
767
|
return doubleKnockInternal(redirectRequest, identity, {
|
|
783
768
|
...options,
|
|
@@ -814,6 +799,5 @@ function timingSafeEqual(a, b) {
|
|
|
814
799
|
result |= lenA ^ lenB;
|
|
815
800
|
return result === 0;
|
|
816
801
|
}
|
|
817
|
-
|
|
818
802
|
//#endregion
|
|
819
|
-
export {
|
|
803
|
+
export { signRequest as n, verifyRequest as r, doubleKnock as t };
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { Activity, deno_default, getTypeId } from "./type-COPv6pMi.js";
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
globalThis.addEventListener = () => {};
|
|
4
|
+
import { U as getTypeId, ot as name, st as version, t as Activity } from "./vocab-DuW9rL1h.mjs";
|
|
7
5
|
import { getLogger } from "@logtape/logtape";
|
|
8
6
|
import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
|
|
9
|
-
|
|
10
7
|
//#region src/federation/inbox.ts
|
|
11
8
|
var InboxListenerSet = class InboxListenerSet {
|
|
12
9
|
#listeners;
|
|
@@ -57,10 +54,8 @@ async function routeActivity({ context: ctx, json, activity, recipient, inboxLis
|
|
|
57
54
|
warnedAboutDefaultIdempotency = true;
|
|
58
55
|
}
|
|
59
56
|
let keyString;
|
|
60
|
-
if (typeof strategy === "function")
|
|
61
|
-
|
|
62
|
-
keyString = result;
|
|
63
|
-
} else switch (strategy) {
|
|
57
|
+
if (typeof strategy === "function") keyString = await strategy(inboxContext, activity);
|
|
58
|
+
else switch (strategy) {
|
|
64
59
|
case "global":
|
|
65
60
|
keyString = activity.id.href;
|
|
66
61
|
break;
|
|
@@ -75,8 +70,7 @@ async function routeActivity({ context: ctx, json, activity, recipient, inboxLis
|
|
|
75
70
|
if (keyString != null) cacheKey = [...kvPrefixes.activityIdempotence, keyString];
|
|
76
71
|
}
|
|
77
72
|
if (cacheKey != null) {
|
|
78
|
-
|
|
79
|
-
if (cached === true) {
|
|
73
|
+
if (await kv.get(cacheKey) === true) {
|
|
80
74
|
logger.debug("Activity {activityId} has already been processed.", {
|
|
81
75
|
activityId: activity.id?.href,
|
|
82
76
|
activity: json,
|
|
@@ -133,31 +127,30 @@ async function routeActivity({ context: ctx, json, activity, recipient, inboxLis
|
|
|
133
127
|
return "enqueued";
|
|
134
128
|
}
|
|
135
129
|
tracerProvider = tracerProvider ?? trace.getTracerProvider();
|
|
136
|
-
|
|
137
|
-
return await tracer.startActiveSpan("activitypub.dispatch_inbox_listener", { kind: SpanKind.INTERNAL }, async (span$1) => {
|
|
130
|
+
return await tracerProvider.getTracer(name, version).startActiveSpan("activitypub.dispatch_inbox_listener", { kind: SpanKind.INTERNAL }, async (span) => {
|
|
138
131
|
const dispatched = inboxListeners?.dispatchWithClass(activity);
|
|
139
132
|
if (dispatched == null) {
|
|
140
133
|
logger.error("Unsupported activity type:\n{activity}", {
|
|
141
134
|
activity: json,
|
|
142
135
|
recipient
|
|
143
136
|
});
|
|
144
|
-
span
|
|
137
|
+
span.setStatus({
|
|
145
138
|
code: SpanStatusCode.UNSET,
|
|
146
139
|
message: `Unsupported activity type: ${getTypeId(activity).href}`
|
|
147
140
|
});
|
|
148
|
-
span
|
|
141
|
+
span.end();
|
|
149
142
|
return "unsupportedActivity";
|
|
150
143
|
}
|
|
151
144
|
const { class: cls, listener } = dispatched;
|
|
152
|
-
span
|
|
145
|
+
span.updateName(`activitypub.dispatch_inbox_listener ${cls.name}`);
|
|
153
146
|
try {
|
|
154
147
|
await listener(inboxContextFactory(recipient, json, activity?.id?.href, getTypeId(activity).href), activity);
|
|
155
148
|
} catch (error) {
|
|
156
149
|
try {
|
|
157
150
|
await inboxErrorHandler?.(ctx, error);
|
|
158
|
-
} catch (error
|
|
151
|
+
} catch (error) {
|
|
159
152
|
logger.error("An unexpected error occurred in inbox error handler:\n{error}", {
|
|
160
|
-
error
|
|
153
|
+
error,
|
|
161
154
|
activityId: activity.id?.href,
|
|
162
155
|
activity: json,
|
|
163
156
|
recipient
|
|
@@ -169,11 +162,11 @@ async function routeActivity({ context: ctx, json, activity, recipient, inboxLis
|
|
|
169
162
|
activity: json,
|
|
170
163
|
recipient
|
|
171
164
|
});
|
|
172
|
-
span
|
|
165
|
+
span.setStatus({
|
|
173
166
|
code: SpanStatusCode.ERROR,
|
|
174
167
|
message: String(error)
|
|
175
168
|
});
|
|
176
|
-
span
|
|
169
|
+
span.end();
|
|
177
170
|
return "error";
|
|
178
171
|
}
|
|
179
172
|
if (cacheKey != null) await kv.set(cacheKey, true, { ttl: Temporal.Duration.from({ days: 1 }) });
|
|
@@ -182,10 +175,9 @@ async function routeActivity({ context: ctx, json, activity, recipient, inboxLis
|
|
|
182
175
|
activity: json,
|
|
183
176
|
recipient
|
|
184
177
|
});
|
|
185
|
-
span
|
|
178
|
+
span.end();
|
|
186
179
|
return "success";
|
|
187
180
|
});
|
|
188
181
|
}
|
|
189
|
-
|
|
190
182
|
//#endregion
|
|
191
|
-
export {
|
|
183
|
+
export { routeActivity as n, InboxListenerSet as t };
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const require_actor = require('./actor-DlS-Q8hE.cjs');
|
|
8
|
-
const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
|
|
9
|
-
const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
|
|
10
|
-
|
|
1
|
+
const { Temporal } = require("@js-temporal/polyfill");
|
|
2
|
+
const { URLPattern } = require("urlpattern-polyfill");
|
|
3
|
+
const require_docloader = require("./docloader-BVuUhBLI.cjs");
|
|
4
|
+
const require_actor = require("./actor-DxfJk4lY.cjs");
|
|
5
|
+
let _logtape_logtape = require("@logtape/logtape");
|
|
6
|
+
let _opentelemetry_api = require("@opentelemetry/api");
|
|
11
7
|
//#region src/sig/key.ts
|
|
12
8
|
/**
|
|
13
9
|
* Checks if the given key is valid and supported. No-op if the key is valid,
|
|
@@ -22,8 +18,7 @@ function validateCryptoKey(key, type) {
|
|
|
22
18
|
if (!key.extractable) throw new TypeError("The key is not extractable.");
|
|
23
19
|
if (key.algorithm.name !== "RSASSA-PKCS1-v1_5" && key.algorithm.name !== "Ed25519") throw new TypeError("Currently only RSASSA-PKCS1-v1_5 and Ed25519 keys are supported. More algorithms will be added in the future!");
|
|
24
20
|
if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
|
|
25
|
-
|
|
26
|
-
if (algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
|
|
21
|
+
if (key.algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
|
|
27
22
|
}
|
|
28
23
|
}
|
|
29
24
|
/**
|
|
@@ -34,7 +29,7 @@ function validateCryptoKey(key, type) {
|
|
|
34
29
|
* @throws {TypeError} If the algorithm is unsupported.
|
|
35
30
|
*/
|
|
36
31
|
function generateCryptoKeyPair(algorithm) {
|
|
37
|
-
if (algorithm == null) (0,
|
|
32
|
+
if (algorithm == null) (0, _logtape_logtape.getLogger)([
|
|
38
33
|
"fedify",
|
|
39
34
|
"sig",
|
|
40
35
|
"key"
|
|
@@ -102,11 +97,10 @@ async function importJwk(jwk, type) {
|
|
|
102
97
|
* @since 1.3.0
|
|
103
98
|
*/
|
|
104
99
|
function fetchKey(keyId, cls, options = {}) {
|
|
105
|
-
const
|
|
106
|
-
const tracer = tracerProvider.getTracer(require_docloader.deno_default.name, require_docloader.deno_default.version);
|
|
100
|
+
const tracer = (options.tracerProvider ?? _opentelemetry_api.trace.getTracerProvider()).getTracer(require_docloader.name, require_docloader.version);
|
|
107
101
|
keyId = typeof keyId === "string" ? new URL(keyId) : keyId;
|
|
108
102
|
return tracer.startActiveSpan("activitypub.fetch_key", {
|
|
109
|
-
kind:
|
|
103
|
+
kind: _opentelemetry_api.SpanKind.CLIENT,
|
|
110
104
|
attributes: {
|
|
111
105
|
"http.method": "GET",
|
|
112
106
|
"url.full": keyId.href,
|
|
@@ -123,7 +117,7 @@ function fetchKey(keyId, cls, options = {}) {
|
|
|
123
117
|
return result;
|
|
124
118
|
} catch (e) {
|
|
125
119
|
span.setStatus({
|
|
126
|
-
code:
|
|
120
|
+
code: _opentelemetry_api.SpanStatusCode.ERROR,
|
|
127
121
|
message: String(e)
|
|
128
122
|
});
|
|
129
123
|
throw e;
|
|
@@ -133,7 +127,7 @@ function fetchKey(keyId, cls, options = {}) {
|
|
|
133
127
|
});
|
|
134
128
|
}
|
|
135
129
|
async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, keyCache, tracerProvider } = {}) {
|
|
136
|
-
const logger = (0,
|
|
130
|
+
const logger = (0, _logtape_logtape.getLogger)([
|
|
137
131
|
"fedify",
|
|
138
132
|
"sig",
|
|
139
133
|
"key"
|
|
@@ -159,8 +153,7 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
|
|
|
159
153
|
logger.debug("Fetching key {keyId} to verify signature...", { keyId });
|
|
160
154
|
let document;
|
|
161
155
|
try {
|
|
162
|
-
|
|
163
|
-
document = remoteDocument.document;
|
|
156
|
+
document = (await (documentLoader ?? require_docloader.getDocumentLoader())(keyId)).document;
|
|
164
157
|
} catch (_) {
|
|
165
158
|
logger.debug("Failed to fetch key {keyId}.", { keyId });
|
|
166
159
|
await keyCache?.set(cacheKey, null);
|
|
@@ -184,8 +177,8 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
|
|
|
184
177
|
contextLoader,
|
|
185
178
|
tracerProvider
|
|
186
179
|
});
|
|
187
|
-
} catch (e
|
|
188
|
-
if (e
|
|
180
|
+
} catch (e) {
|
|
181
|
+
if (e instanceof TypeError) {
|
|
189
182
|
logger.debug("Failed to verify; key {keyId} returned an invalid object.", { keyId });
|
|
190
183
|
await keyCache?.set(cacheKey, null);
|
|
191
184
|
return {
|
|
@@ -193,7 +186,7 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
|
|
|
193
186
|
cached: false
|
|
194
187
|
};
|
|
195
188
|
}
|
|
196
|
-
throw e
|
|
189
|
+
throw e;
|
|
197
190
|
}
|
|
198
191
|
}
|
|
199
192
|
let key = null;
|
|
@@ -256,35 +249,34 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
|
|
|
256
249
|
cached: false
|
|
257
250
|
};
|
|
258
251
|
}
|
|
259
|
-
|
|
260
252
|
//#endregion
|
|
261
|
-
Object.defineProperty(exports,
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
253
|
+
Object.defineProperty(exports, "exportJwk", {
|
|
254
|
+
enumerable: true,
|
|
255
|
+
get: function() {
|
|
256
|
+
return exportJwk;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, "fetchKey", {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function() {
|
|
262
|
+
return fetchKey;
|
|
263
|
+
}
|
|
266
264
|
});
|
|
267
|
-
Object.defineProperty(exports,
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
265
|
+
Object.defineProperty(exports, "generateCryptoKeyPair", {
|
|
266
|
+
enumerable: true,
|
|
267
|
+
get: function() {
|
|
268
|
+
return generateCryptoKeyPair;
|
|
269
|
+
}
|
|
272
270
|
});
|
|
273
|
-
Object.defineProperty(exports,
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
271
|
+
Object.defineProperty(exports, "importJwk", {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: function() {
|
|
274
|
+
return importJwk;
|
|
275
|
+
}
|
|
278
276
|
});
|
|
279
|
-
Object.defineProperty(exports,
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
277
|
+
Object.defineProperty(exports, "validateCryptoKey", {
|
|
278
|
+
enumerable: true,
|
|
279
|
+
get: function() {
|
|
280
|
+
return validateCryptoKey;
|
|
281
|
+
}
|
|
284
282
|
});
|
|
285
|
-
Object.defineProperty(exports, 'validateCryptoKey', {
|
|
286
|
-
enumerable: true,
|
|
287
|
-
get: function () {
|
|
288
|
-
return validateCryptoKey;
|
|
289
|
-
}
|
|
290
|
-
});
|