@fedify/fedify 2.0.8 → 2.0.10
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/{assert-MZs1qjMx.js → assert-ddO5KLpe.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_not_equals-C80BG-_5.js → assert_not_equals--wG9hV7u.mjs} +6 -13
- package/dist/{assert_rejects-Ce45JcFg.js → assert_rejects-B-qJtC9Z.mjs} +6 -11
- package/dist/{assert_throws-BNXdRGWP.js → assert_throws-4NwKEy2q.mjs} +5 -10
- package/dist/{builder-B5cKln9v.js → builder-opzCVeXZ.mjs} +32 -41
- package/dist/{chunk-CGaQZ11T.cjs → chunk-DDcVe30Y.cjs} +23 -24
- package/dist/{chunk-DJNbSFdH.js → chunk-nlSIicah.js} +8 -8
- package/dist/{client-CoCIaTNO.js → client-A1UrnX6I.mjs} +9 -13
- package/dist/{client-BxMZiQaD.d.ts → client-AtlibPOU.d.ts} +1 -1
- package/dist/{client-C97KOq3x.d.cts → client-z-8dc-e1.d.cts} +1 -1
- package/dist/{collection-CcnIw1qY.js → collection-ChgDTHLz.mjs} +7 -12
- package/dist/compat/mod.cjs +5 -8
- package/dist/compat/mod.d.cts +78 -6
- package/dist/compat/mod.d.ts +78 -6
- package/dist/compat/mod.js +4 -8
- package/dist/compat/transformers.test.mjs +62 -0
- package/dist/{context-D3QkEtZd.d.cts → context-CNIt-Qn7.d.cts} +9 -18
- package/dist/{context-DZJhUmzF.d.ts → context-Dyg7P1qW.d.ts} +9 -18
- package/dist/{context-pa9aIrwp.js → context-Juj6bdHC.mjs} +7 -11
- package/dist/deno-CrjRl2cm.mjs +8 -0
- package/dist/{docloader-CBHh0rC5.js → docloader-35wi0JO1.mjs} +8 -14
- package/dist/{esm-nLm00z9V.js → esm-DVILvP5e.mjs} +50 -89
- package/dist/federation/builder.test.d.mts +2 -0
- package/dist/federation/{builder.test.js → builder.test.mjs} +19 -38
- 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} +26 -56
- package/dist/federation/idempotency.test.d.mts +2 -0
- package/dist/federation/{idempotency.test.js → idempotency.test.mjs} +31 -62
- package/dist/federation/inbox.test.d.mts +2 -0
- package/dist/federation/{inbox.test.js → inbox.test.mjs} +8 -12
- package/dist/federation/keycache.test.d.mts +2 -0
- package/dist/federation/{keycache.test.js → keycache.test.mjs} +11 -15
- package/dist/federation/kv.test.d.mts +2 -0
- package/dist/federation/{kv.test.js → kv.test.mjs} +11 -22
- package/dist/federation/middleware.test.d.mts +2 -0
- package/dist/federation/{middleware.test.js → middleware.test.mjs} +146 -225
- package/dist/federation/mod.cjs +327 -16
- package/dist/federation/mod.d.cts +3 -6
- package/dist/federation/mod.d.ts +3 -6
- package/dist/federation/mod.js +322 -13
- package/dist/federation/mq.test.d.mts +2 -0
- package/dist/federation/{mq.test.js → mq.test.mjs} +21 -35
- package/dist/federation/negotiation.test.d.mts +2 -0
- package/dist/federation/{negotiation.test.js → negotiation.test.mjs} +9 -16
- package/dist/federation/retry.test.d.mts +2 -0
- package/dist/federation/{retry.test.js → retry.test.mjs} +8 -11
- package/dist/federation/router.test.d.mts +2 -0
- package/dist/federation/{router.test.js → router.test.mjs} +11 -16
- package/dist/federation/send.test.d.mts +2 -0
- package/dist/federation/{send.test.js → send.test.mjs} +22 -29
- package/dist/federation/webfinger.test.d.mts +2 -0
- package/dist/federation/{webfinger.test.js → webfinger.test.mjs} +22 -55
- package/dist/{http-DkHdFfrc.d.ts → http-B2wiNmSo.d.ts} +1 -6
- package/dist/{http-C_RwU_oN.js → http-BGjkvEDc.js} +25 -156
- package/dist/{http-Cz3MlXAZ.d.cts → http-C_tEAiZj.d.cts} +1 -6
- package/dist/{http-DGs_78tx.cjs → http-DLnqzOtY.cjs} +110 -235
- package/dist/{http-Br3-1dRf.js → http-VQAKycaZ.mjs} +17 -33
- package/dist/{inbox-3bZUqDLE.js → inbox-B6DfJ3h9.mjs} +18 -26
- package/dist/{key-D7Y_J9kt.js → key-C9oV7wk8.mjs} +12 -19
- package/dist/{keycache-BASM0rrX.js → keycache-DaQ3ndaJ.mjs} +5 -9
- package/dist/{keys-ZbcByPg9.js → keys-CtZLJq76.mjs} +5 -9
- package/dist/{kv-QzKcOQgP.js → kv-BrZHNugx.mjs} +6 -10
- package/dist/{kv-BL4nlICN.d.cts → kv-CbLNp3zQ.d.cts} +1 -1
- package/dist/{kv-DXEUEP6z.d.ts → kv-GFYnFoOl.d.ts} +1 -1
- package/dist/{kv-cache-9PANi4tA.cjs → kv-cache-BAEaVRvi.cjs} +27 -34
- package/dist/{kv-cache-El7We5sy.js → kv-cache-OWmRLHir.mjs} +4 -8
- package/dist/{kv-cache-CMM5VJsc.js → kv-cache-QxhhotWv.js} +6 -13
- package/dist/{ld-Bjq9Z4St.js → ld-BfEccFSP.mjs} +17 -31
- package/dist/{middleware-Bj30TZll.js → middleware-Bc4sY_YW.js} +320 -363
- package/dist/middleware-CGkdTPmX.mjs +5 -0
- package/dist/{middleware-CQeA5yF7.cjs → middleware-Dj7uT9F8.cjs} +513 -564
- package/dist/middleware-DuFvBMT2.cjs +4 -0
- package/dist/{middleware-DozhKfB6.js → middleware-ReZIkikn.mjs} +260 -292
- package/dist/{mod-DPkRU3EK.d.cts → mod-1xhgsHef.d.cts} +2 -2
- package/dist/{mod-DUWcVv49.d.ts → mod-BGtYJZKu.d.ts} +2 -2
- package/dist/{mod-DXsQakeS.d.cts → mod-Bld7oeqf.d.cts} +3 -3
- package/dist/{mod-DnSsduJF.d.ts → mod-BnAKGh2w.d.ts} +2 -2
- package/dist/{mod-CwZXZJ9d.d.ts → mod-DTOUyCce.d.ts} +3 -3
- package/dist/{mod-Di3W5OdP.d.cts → mod-DWoQffTD.d.cts} +2 -2
- package/dist/mod.cjs +29 -68
- package/dist/mod.d.cts +11 -14
- package/dist/mod.d.ts +11 -15
- package/dist/mod.js +17 -65
- package/dist/{negotiation-5NPJL6zp.js → negotiation-BehA2uul.mjs} +7 -11
- package/dist/nodeinfo/client.test.d.mts +2 -0
- package/dist/nodeinfo/{client.test.js → client.test.mjs} +22 -40
- package/dist/nodeinfo/handler.test.d.mts +2 -0
- package/dist/nodeinfo/{handler.test.js → handler.test.mjs} +13 -42
- package/dist/nodeinfo/mod.cjs +5 -8
- package/dist/nodeinfo/mod.d.cts +2 -3
- package/dist/nodeinfo/mod.d.ts +2 -3
- package/dist/nodeinfo/mod.js +4 -8
- package/dist/nodeinfo/types.test.d.mts +2 -0
- package/dist/nodeinfo/{types.test.js → types.test.mjs} +9 -16
- package/dist/otel/exporter.test.d.mts +2 -0
- package/dist/otel/{exporter.test.js → exporter.test.mjs} +117 -169
- package/dist/otel/mod.cjs +15 -20
- package/dist/otel/mod.d.cts +2 -2
- package/dist/otel/mod.d.ts +2 -2
- package/dist/otel/mod.js +8 -14
- package/dist/{owner-gd0Q9FuU.d.ts → owner-74ARJ5TL.d.ts} +1 -1
- package/dist/{owner-CImU2dKz.js → owner-CRLqJlP_.mjs} +11 -16
- package/dist/{owner-1AbPBOOZ.d.cts → owner-CptqhsOy.d.cts} +1 -1
- package/dist/{proof-DLL0MLmV.js → proof-9SGtq4tE.mjs} +21 -33
- package/dist/{proof-UhA5do8k.cjs → proof-B4SaJCmK.cjs} +133 -157
- package/dist/{proof-BygvN4r5.js → proof-DvQ28mUJ.js} +32 -58
- package/dist/{retry-D4GJ670a.js → retry-Ddbq3AcK.mjs} +4 -7
- package/dist/{router-D9eI0s4b.js → router-CrMLXoOr.mjs} +4 -8
- package/dist/runtime/mod.cjs +11 -13
- package/dist/runtime/mod.d.cts +6 -2
- package/dist/runtime/mod.d.ts +0 -1
- package/dist/runtime/mod.js +4 -7
- package/dist/{send-DbW03azY.js → send-DN2ywoe8.mjs} +8 -13
- package/dist/sig/http.test.d.mts +2 -0
- package/dist/sig/{http.test.js → http.test.mjs} +117 -199
- package/dist/sig/key.test.d.mts +2 -0
- package/dist/sig/{key.test.js → key.test.mjs} +11 -18
- package/dist/sig/ld.test.d.mts +2 -0
- package/dist/sig/{ld.test.js → ld.test.mjs} +22 -35
- package/dist/sig/mod.cjs +6 -9
- package/dist/sig/mod.d.cts +3 -3
- package/dist/sig/mod.d.ts +3 -3
- package/dist/sig/mod.js +5 -9
- package/dist/sig/owner.test.d.mts +2 -0
- package/dist/sig/{owner.test.js → owner.test.mjs} +19 -34
- package/dist/sig/proof.test.d.mts +2 -0
- package/dist/sig/{proof.test.js → proof.test.mjs} +16 -27
- package/dist/{std__assert-DWivtrGR.js → std__assert-Duiq_YC9.mjs} +12 -24
- package/dist/testing/{mod.d.ts → mod.d.mts} +26 -78
- package/dist/testing/mod.mjs +6 -0
- package/dist/{transformers-3g8GZwkZ.cjs → transformers-NeAONrAq.cjs} +20 -25
- package/dist/{transformers-C3FLHUd6.js → transformers-ve6e2xcg.js} +3 -7
- package/dist/{types-CPz01LGH.js → types-C37hquWI.mjs} +4 -7
- package/dist/{types-Cd_hszr_.cjs → types-KC4QAoxe.cjs} +29 -34
- package/dist/{types-C93Ob9cU.js → types-hvL8ElAs.js} +8 -13
- package/dist/utils/docloader.test.d.mts +2 -0
- package/dist/utils/{docloader.test.js → docloader.test.mjs} +14 -24
- package/dist/utils/kv-cache.test.d.mts +2 -0
- package/dist/utils/{kv-cache.test.js → kv-cache.test.mjs} +25 -40
- package/dist/utils/mod.cjs +5 -9
- package/dist/utils/mod.d.cts +1 -3
- package/dist/utils/mod.d.ts +1 -3
- package/dist/utils/mod.js +4 -9
- package/dist/vocab/cjs.test.d.mts +2 -0
- package/dist/vocab/cjs.test.mjs +14 -0
- package/dist/vocab/mod.cjs +10 -12
- package/dist/vocab/mod.js +3 -5
- package/package.json +8 -8
- package/dist/compat/transformers.test.d.ts +0 -3
- package/dist/compat/transformers.test.js +0 -87
- package/dist/compat-Bb4NuTUO.js +0 -4
- package/dist/compat-DmDDELst.cjs +0 -4
- package/dist/deno-4w047OFk.js +0 -121
- 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 -32
- 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/negotiation.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/webfinger.test.d.ts +0 -3
- package/dist/federation-Bp3HI26G.cjs +0 -350
- package/dist/federation-DaMfqRm4.js +0 -332
- package/dist/middleware-B73ZyDmk.js +0 -12
- package/dist/middleware-Dr61i4Jo.cjs +0 -12
- package/dist/middleware-_1PYruC5.js +0 -26
- package/dist/mod-Bh8mqlYw.d.cts +0 -9
- package/dist/mod-D6HodEq7.d.ts +0 -7
- package/dist/mod-DVwHUI_x.d.cts +0 -80
- package/dist/mod-DosD6NsG.d.ts +0 -82
- package/dist/mod-gq_Xfdz8.d.cts +0 -1
- package/dist/nodeinfo/client.test.d.ts +0 -3
- package/dist/nodeinfo/handler.test.d.ts +0 -3
- package/dist/nodeinfo/types.test.d.ts +0 -3
- package/dist/nodeinfo-DoESQxq5.js +0 -4
- package/dist/nodeinfo-DuMYTpbZ.cjs +0 -4
- package/dist/otel/exporter.test.d.ts +0 -3
- package/dist/runtime-c2Njxsry.cjs +0 -17
- package/dist/runtime-poamPCMb.js +0 -13
- 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/proof.test.d.ts +0 -3
- package/dist/sig-BNhspNOf.js +0 -4
- package/dist/sig-vX39WyWI.cjs +0 -4
- package/dist/testing/mod.js +0 -10
- package/dist/utils/docloader.test.d.ts +0 -3
- package/dist/utils/kv-cache.test.d.ts +0 -3
- package/dist/utils-BQ9KqEK9.cjs +0 -4
- package/dist/utils-Dn5OPdSW.js +0 -4
- /package/dist/{mod-AGjRfPjT.d.ts → compat/transformers.test.d.mts} +0 -0
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { deno_default, fetchKey, validateCryptoKey } from "./http-C_RwU_oN.js";
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
import { a as fetchKey, c as validateCryptoKey, l as name, u as version } from "./http-BGjkvEDc.js";
|
|
6
4
|
import { getLogger } from "@logtape/logtape";
|
|
7
5
|
import { Activity, CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1, getTypeId, isActor } from "@fedify/vocab";
|
|
8
6
|
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
@@ -11,7 +9,6 @@ import { getDocumentLoader } from "@fedify/vocab-runtime";
|
|
|
11
9
|
import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
|
|
12
10
|
import jsonld from "@fedify/vocab-runtime/jsonld";
|
|
13
11
|
import serialize from "json-canon";
|
|
14
|
-
|
|
15
12
|
//#region src/sig/ld.ts
|
|
16
13
|
const logger$1 = getLogger([
|
|
17
14
|
"fedify",
|
|
@@ -53,11 +50,8 @@ async function createSignature(jsonLd, privateKey, keyId, { contextLoader, creat
|
|
|
53
50
|
creator: keyId.href,
|
|
54
51
|
created: created?.toString() ?? (/* @__PURE__ */ new Date()).toISOString()
|
|
55
52
|
};
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const message = optionsHash + docHash;
|
|
59
|
-
const encoder = new TextEncoder();
|
|
60
|
-
const messageBytes = encoder.encode(message);
|
|
53
|
+
const message = await hashJsonLd(options, contextLoader) + await hashJsonLd(jsonLd, contextLoader);
|
|
54
|
+
const messageBytes = new TextEncoder().encode(message);
|
|
61
55
|
const signature = await crypto.subtle.sign("RSASSA-PKCS1-v1_5", privateKey, messageBytes);
|
|
62
56
|
return {
|
|
63
57
|
...options,
|
|
@@ -79,9 +73,7 @@ async function createSignature(jsonLd, privateKey, keyId, { contextLoader, creat
|
|
|
79
73
|
* @since 1.0.0
|
|
80
74
|
*/
|
|
81
75
|
async function signJsonLd(jsonLd, privateKey, keyId, options) {
|
|
82
|
-
|
|
83
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
84
|
-
return await tracer.startActiveSpan("ld_signatures.sign", { attributes: { "ld_signatures.key_id": keyId.href } }, async (span) => {
|
|
76
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("ld_signatures.sign", { attributes: { "ld_signatures.key_id": keyId.href } }, async (span) => {
|
|
85
77
|
try {
|
|
86
78
|
const signature = await createSignature(jsonLd, privateKey, keyId, options);
|
|
87
79
|
if (span.isRecording()) {
|
|
@@ -183,23 +175,21 @@ async function verifySignature(jsonLd, options = {}) {
|
|
|
183
175
|
const encoder = new TextEncoder();
|
|
184
176
|
const message = sigOptsHash + docHash;
|
|
185
177
|
const messageBytes = encoder.encode(message);
|
|
186
|
-
|
|
187
|
-
if (verified) return key;
|
|
178
|
+
if (await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, signature.slice(), messageBytes)) return key;
|
|
188
179
|
if (cached) {
|
|
189
180
|
logger$1.debug("Failed to verify with the cached key {keyId}; signature {signatureValue} is invalid. Retrying with the freshly fetched key...", {
|
|
190
181
|
keyId: sig.creator,
|
|
191
182
|
...sig
|
|
192
183
|
});
|
|
193
|
-
const { key
|
|
184
|
+
const { key } = await fetchKey(new URL(sig.creator), CryptographicKey, {
|
|
194
185
|
...options,
|
|
195
186
|
keyCache: {
|
|
196
187
|
get: () => Promise.resolve(void 0),
|
|
197
|
-
set: async (keyId, key
|
|
188
|
+
set: async (keyId, key) => await options.keyCache?.set(keyId, key)
|
|
198
189
|
}
|
|
199
190
|
});
|
|
200
|
-
if (key
|
|
201
|
-
|
|
202
|
-
return verified$1 ? key$1 : null;
|
|
191
|
+
if (key == null) return null;
|
|
192
|
+
return await crypto.subtle.verify("RSASSA-PKCS1-v1_5", key.publicKey, signature.slice(), messageBytes) ? key : null;
|
|
203
193
|
}
|
|
204
194
|
logger$1.debug("Failed to verify with the fetched key {keyId}; signature {signatureValue} is invalid. Check if the key is correct or if the signed message is correct. The message to sign is:\n{message}", {
|
|
205
195
|
keyId: sig.creator,
|
|
@@ -218,9 +208,7 @@ async function verifySignature(jsonLd, options = {}) {
|
|
|
218
208
|
* @returns `true` if the document is authentic; `false` otherwise.
|
|
219
209
|
*/
|
|
220
210
|
async function verifyJsonLd(jsonLd, options = {}) {
|
|
221
|
-
|
|
222
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
223
|
-
return await tracer.startActiveSpan("ld_signatures.verify", async (span) => {
|
|
211
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("ld_signatures.verify", async (span) => {
|
|
224
212
|
try {
|
|
225
213
|
const object = await Object$1.fromJsonLd(jsonLd, options);
|
|
226
214
|
if (object.id != null) span.setAttribute("activitypub.object.id", object.id.href);
|
|
@@ -261,10 +249,8 @@ async function hashJsonLd(jsonLd, contextLoader) {
|
|
|
261
249
|
documentLoader: contextLoader ?? getDocumentLoader()
|
|
262
250
|
});
|
|
263
251
|
const encoder = new TextEncoder();
|
|
264
|
-
|
|
265
|
-
return encodeHex(hash);
|
|
252
|
+
return encodeHex(await crypto.subtle.digest("SHA-256", encoder.encode(canon)));
|
|
266
253
|
}
|
|
267
|
-
|
|
268
254
|
//#endregion
|
|
269
255
|
//#region src/sig/owner.ts
|
|
270
256
|
/**
|
|
@@ -275,9 +261,7 @@ async function hashJsonLd(jsonLd, contextLoader) {
|
|
|
275
261
|
* @returns Whether the actor is the owner of the key.
|
|
276
262
|
*/
|
|
277
263
|
async function doesActorOwnKey(activity, key, options) {
|
|
278
|
-
|
|
279
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
280
|
-
return await tracer.startActiveSpan("activitypub.verify_key_ownership", {
|
|
264
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("activitypub.verify_key_ownership", {
|
|
281
265
|
kind: SpanKind.INTERNAL,
|
|
282
266
|
attributes: {
|
|
283
267
|
"activitypub.actor.id": activity.actorId?.href ?? "",
|
|
@@ -358,9 +342,9 @@ async function getKeyOwner(keyId, options) {
|
|
|
358
342
|
contextLoader,
|
|
359
343
|
tracerProvider
|
|
360
344
|
});
|
|
361
|
-
} catch (e
|
|
362
|
-
if (e
|
|
363
|
-
throw e
|
|
345
|
+
} catch (e) {
|
|
346
|
+
if (e instanceof TypeError) return null;
|
|
347
|
+
throw e;
|
|
364
348
|
}
|
|
365
349
|
}
|
|
366
350
|
}
|
|
@@ -378,7 +362,6 @@ async function getKeyOwner(keyId, options) {
|
|
|
378
362
|
for (const kid of owner.publicKeyIds) if (kid.href === keyId.href) return owner;
|
|
379
363
|
return null;
|
|
380
364
|
}
|
|
381
|
-
|
|
382
365
|
//#endregion
|
|
383
366
|
//#region src/sig/proof.ts
|
|
384
367
|
const logger = getLogger([
|
|
@@ -396,29 +379,27 @@ const logger = getLogger([
|
|
|
396
379
|
* @throws {TypeError} If the private key is invalid or unsupported.
|
|
397
380
|
* @since 0.10.0
|
|
398
381
|
*/
|
|
399
|
-
async function createProof(object, privateKey, keyId, { contextLoader, context
|
|
382
|
+
async function createProof(object, privateKey, keyId, { contextLoader, context, created } = {}) {
|
|
400
383
|
validateCryptoKey(privateKey, "private");
|
|
401
384
|
if (privateKey.algorithm.name !== "Ed25519") throw new TypeError("Unsupported algorithm: " + privateKey.algorithm.name);
|
|
402
|
-
const
|
|
403
|
-
const compactMsg = await objectWithoutProofs.toJsonLd({
|
|
385
|
+
const compactMsg = await object.clone({ proofs: [] }).toJsonLd({
|
|
404
386
|
format: "compact",
|
|
405
387
|
contextLoader,
|
|
406
|
-
context
|
|
388
|
+
context
|
|
407
389
|
});
|
|
408
390
|
const msgCanon = serialize(compactMsg);
|
|
409
391
|
const encoder = new TextEncoder();
|
|
410
392
|
const msgBytes = encoder.encode(msgCanon);
|
|
411
393
|
const msgDigest = await crypto.subtle.digest("SHA-256", msgBytes);
|
|
412
394
|
created ??= Temporal.Now.instant();
|
|
413
|
-
const
|
|
395
|
+
const proofCanon = serialize({
|
|
414
396
|
"@context": compactMsg["@context"],
|
|
415
397
|
type: "DataIntegrityProof",
|
|
416
398
|
cryptosuite: "eddsa-jcs-2022",
|
|
417
399
|
verificationMethod: keyId.href,
|
|
418
400
|
proofPurpose: "assertionMethod",
|
|
419
401
|
created: created.toString()
|
|
420
|
-
};
|
|
421
|
-
const proofCanon = serialize(proofConfig);
|
|
402
|
+
});
|
|
422
403
|
const proofBytes = encoder.encode(proofCanon);
|
|
423
404
|
const proofDigest = await crypto.subtle.digest("SHA-256", proofBytes);
|
|
424
405
|
const digest = new Uint8Array(proofDigest.byteLength + msgDigest.byteLength);
|
|
@@ -444,13 +425,11 @@ async function createProof(object, privateKey, keyId, { contextLoader, context:
|
|
|
444
425
|
* @since 0.10.0
|
|
445
426
|
*/
|
|
446
427
|
async function signObject(object, privateKey, keyId, options = {}) {
|
|
447
|
-
|
|
448
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
449
|
-
return await tracer.startActiveSpan("object_integrity_proofs.sign", { attributes: { "activitypub.object.type": getTypeId(object).href } }, async (span) => {
|
|
428
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("object_integrity_proofs.sign", { attributes: { "activitypub.object.type": getTypeId(object).href } }, async (span) => {
|
|
450
429
|
try {
|
|
451
430
|
if (object.id != null) span.setAttribute("activitypub.object.id", object.id.href);
|
|
452
431
|
const existingProofs = [];
|
|
453
|
-
for await (const proof
|
|
432
|
+
for await (const proof of object.getProofs(options)) existingProofs.push(proof);
|
|
454
433
|
const proof = await createProof(object, privateKey, keyId, options);
|
|
455
434
|
if (span.isRecording()) {
|
|
456
435
|
if (proof.cryptosuite != null) span.setAttribute("object_integrity_proofs.cryptosuite", proof.cryptosuite);
|
|
@@ -480,9 +459,7 @@ async function signObject(object, privateKey, keyId, options = {}) {
|
|
|
480
459
|
* @since 0.10.0
|
|
481
460
|
*/
|
|
482
461
|
async function verifyProof(jsonLd, proof, options = {}) {
|
|
483
|
-
|
|
484
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
485
|
-
return await tracer.startActiveSpan("object_integrity_proofs.verify", async (span) => {
|
|
462
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("object_integrity_proofs.verify", async (span) => {
|
|
486
463
|
if (span.isRecording()) {
|
|
487
464
|
if (proof.cryptosuite != null) span.setAttribute("object_integrity_proofs.cryptosuite", proof.cryptosuite);
|
|
488
465
|
if (proof.verificationMethodId != null) span.setAttribute("object_integrity_proofs.key_id", proof.verificationMethodId.href);
|
|
@@ -506,15 +483,14 @@ async function verifyProof(jsonLd, proof, options = {}) {
|
|
|
506
483
|
async function verifyProofInternal(jsonLd, proof, options) {
|
|
507
484
|
if (typeof jsonLd !== "object" || proof.cryptosuite !== "eddsa-jcs-2022" || proof.verificationMethodId == null || proof.proofPurpose !== "assertionMethod" || proof.proofValue == null || proof.created == null) return null;
|
|
508
485
|
const publicKeyPromise = fetchKey(proof.verificationMethodId, Multikey, options);
|
|
509
|
-
const
|
|
486
|
+
const proofCanon = serialize({
|
|
510
487
|
"@context": jsonLd["@context"],
|
|
511
488
|
type: "DataIntegrityProof",
|
|
512
489
|
cryptosuite: proof.cryptosuite,
|
|
513
490
|
verificationMethod: proof.verificationMethodId.href,
|
|
514
491
|
proofPurpose: proof.proofPurpose,
|
|
515
492
|
created: proof.created.toString()
|
|
516
|
-
};
|
|
517
|
-
const proofCanon = serialize(proofConfig);
|
|
493
|
+
});
|
|
518
494
|
const encoder = new TextEncoder();
|
|
519
495
|
const proofBytes = encoder.encode(proofCanon);
|
|
520
496
|
const proofDigest = await crypto.subtle.digest("SHA-256", proofBytes);
|
|
@@ -565,8 +541,7 @@ async function verifyProofInternal(jsonLd, proof, options) {
|
|
|
565
541
|
});
|
|
566
542
|
return null;
|
|
567
543
|
}
|
|
568
|
-
|
|
569
|
-
if (!verified) {
|
|
544
|
+
if (!await crypto.subtle.verify("Ed25519", publicKey.publicKey, proof.proofValue.slice(), digest)) {
|
|
570
545
|
if (fetchedKey.cached) {
|
|
571
546
|
logger.debug("Failed to verify the proof with the cached key {keyId}; retrying with the freshly fetched key...", {
|
|
572
547
|
keyId: proof.verificationMethodId.href,
|
|
@@ -603,7 +578,7 @@ async function verifyProofInternal(jsonLd, proof, options) {
|
|
|
603
578
|
* @since 0.10.0
|
|
604
579
|
*/
|
|
605
580
|
async function verifyObject(cls, jsonLd, options = {}) {
|
|
606
|
-
const logger
|
|
581
|
+
const logger = getLogger([
|
|
607
582
|
"fedify",
|
|
608
583
|
"sig",
|
|
609
584
|
"proof"
|
|
@@ -615,17 +590,16 @@ async function verifyObject(cls, jsonLd, options = {}) {
|
|
|
615
590
|
const key = await verifyProof(jsonLd, proof, options);
|
|
616
591
|
if (key === null) return null;
|
|
617
592
|
if (key.controllerId == null) {
|
|
618
|
-
logger
|
|
593
|
+
logger.debug("Key {keyId} does not have a controller.", { keyId: key.id?.href });
|
|
619
594
|
continue;
|
|
620
595
|
}
|
|
621
596
|
attributions.delete(key.controllerId.href);
|
|
622
597
|
}
|
|
623
598
|
if (attributions.size > 0) {
|
|
624
|
-
logger
|
|
599
|
+
logger.debug("Some attributions are not authenticated by the proofs: {attributions}.", { attributions: [...attributions] });
|
|
625
600
|
return null;
|
|
626
601
|
}
|
|
627
602
|
return object;
|
|
628
603
|
}
|
|
629
|
-
|
|
630
604
|
//#endregion
|
|
631
|
-
export {
|
|
605
|
+
export { doesActorOwnKey as a, createSignature as c, signJsonLd as d, verifyJsonLd as f, verifyProof as i, detachSignature as l, signObject as n, getKeyOwner as o, verifySignature as p, verifyObject as r, attachSignature as s, createProof as t, hasSignature as u };
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
globalThis.addEventListener = () => {};
|
|
5
|
-
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
globalThis.addEventListener = () => {};
|
|
6
4
|
//#region src/federation/retry.ts
|
|
7
5
|
/**
|
|
8
6
|
* Creates an exponential backoff retry policy. The delay between retries
|
|
@@ -32,6 +30,5 @@ function createExponentialBackoffPolicy(options = {}) {
|
|
|
32
30
|
return Temporal.Duration.compare(delay, maxDelay) > 0 ? maxDelay : delay;
|
|
33
31
|
};
|
|
34
32
|
}
|
|
35
|
-
|
|
36
33
|
//#endregion
|
|
37
|
-
export { createExponentialBackoffPolicy };
|
|
34
|
+
export { createExponentialBackoffPolicy as t };
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
globalThis.addEventListener = () => {};
|
|
5
|
-
|
|
1
|
+
import "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
globalThis.addEventListener = () => {};
|
|
6
4
|
import { cloneDeep } from "es-toolkit";
|
|
7
5
|
import { Router } from "uri-template-router";
|
|
8
6
|
import { parseTemplate } from "url-template";
|
|
9
|
-
|
|
10
7
|
//#region src/federation/router.ts
|
|
11
8
|
function cloneInnerRouter(router) {
|
|
12
9
|
const clone = new Router();
|
|
@@ -113,6 +110,5 @@ var RouterError = class extends Error {
|
|
|
113
110
|
this.name = "RouterError";
|
|
114
111
|
}
|
|
115
112
|
};
|
|
116
|
-
|
|
117
113
|
//#endregion
|
|
118
|
-
export { Router$1 as
|
|
114
|
+
export { RouterError as n, Router$1 as t };
|
package/dist/runtime/mod.cjs
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
get: function () { return __fedify_vocab_runtime[k]; }
|
|
13
|
-
});
|
|
1
|
+
const { Temporal } = require("@js-temporal/polyfill");
|
|
2
|
+
const { URLPattern } = require("urlpattern-polyfill");
|
|
3
|
+
require("../chunk-DDcVe30Y.cjs");
|
|
4
|
+
var _fedify_vocab_runtime = require("@fedify/vocab-runtime");
|
|
5
|
+
Object.keys(_fedify_vocab_runtime).forEach(function(k) {
|
|
6
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function() {
|
|
9
|
+
return _fedify_vocab_runtime[k];
|
|
10
|
+
}
|
|
11
|
+
});
|
|
14
12
|
});
|
package/dist/runtime/mod.d.cts
CHANGED
package/dist/runtime/mod.d.ts
CHANGED
package/dist/runtime/mod.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import "../runtime-poamPCMb.js";
|
|
6
|
-
|
|
7
|
-
export * from "@fedify/vocab-runtime"
|
|
1
|
+
import "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
import "../chunk-nlSIicah.js";
|
|
4
|
+
export * from "@fedify/vocab-runtime";
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { deno_default } from "./deno-4w047OFk.js";
|
|
7
|
-
import { doubleKnock } from "./http-Br3-1dRf.js";
|
|
8
|
-
import { getLogger } from "@logtape/logtape";
|
|
1
|
+
import "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
globalThis.addEventListener = () => {};
|
|
4
|
+
import { n as version, t as name } from "./deno-CrjRl2cm.mjs";
|
|
5
|
+
import { n as doubleKnock } from "./http-VQAKycaZ.mjs";
|
|
9
6
|
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
10
|
-
|
|
7
|
+
import { getLogger } from "@logtape/logtape";
|
|
11
8
|
//#region src/federation/send.ts
|
|
12
9
|
/**
|
|
13
10
|
* Extracts the inbox URLs from recipients.
|
|
@@ -44,8 +41,7 @@ function extractInboxes({ recipients, preferSharedInbox, excludeBaseUris }) {
|
|
|
44
41
|
*/
|
|
45
42
|
function sendActivity(options) {
|
|
46
43
|
const tracerProvider = options.tracerProvider ?? trace.getTracerProvider();
|
|
47
|
-
|
|
48
|
-
return tracer.startActiveSpan("activitypub.send_activity", {
|
|
44
|
+
return tracerProvider.getTracer(name, version).startActiveSpan("activitypub.send_activity", {
|
|
49
45
|
kind: SpanKind.CLIENT,
|
|
50
46
|
attributes: { "activitypub.shared_inbox": options.sharedInbox ?? false }
|
|
51
47
|
}, async (span) => {
|
|
@@ -193,6 +189,5 @@ var SendActivityError = class extends Error {
|
|
|
193
189
|
this.responseBody = responseBody;
|
|
194
190
|
}
|
|
195
191
|
};
|
|
196
|
-
|
|
197
192
|
//#endregion
|
|
198
|
-
export {
|
|
193
|
+
export { extractInboxes as n, sendActivity as r, SendActivityError as t };
|