@fedify/fedify 2.1.1 → 2.1.3
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/{accept-D7sAxyNa.js → accept-Dd__NiUL.mjs} +10 -8
- 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-f3m3epl3.js → assert_not_equals--wG9hV7u.mjs} +6 -13
- package/dist/{assert_rejects-0h7I2Esa.js → assert_rejects-B-qJtC9Z.mjs} +6 -11
- package/dist/{assert_throws-rjdMBf31.js → assert_throws-4NwKEy2q.mjs} +5 -10
- package/dist/{builder-DbKYZdSy.js → builder-BKo51w-F.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-BxMZiQaD.d.ts → client-AtlibPOU.d.ts} +1 -1
- package/dist/{client-CoCIaTNO.js → client-DEpOVgY1.mjs} +9 -13
- package/dist/{client-C97KOq3x.d.cts → client-z-8dc-e1.d.cts} +1 -1
- 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 -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-DyJjQQ_H.d.ts → context-BOiMZBu5.d.ts} +9 -18
- package/dist/{context-BcqA-0BL.d.cts → context-BhZVy7RB.d.cts} +9 -18
- package/dist/{context-Aqenou7c.js → context-Juj6bdHC.mjs} +7 -11
- package/dist/deno-D5r_9RvZ.mjs +8 -0
- package/dist/{docloader-Ck0SCLXX.js → docloader-B9CXCw8i.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} +21 -44
- 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} +69 -131
- package/dist/federation/idempotency.test.d.mts +2 -0
- package/dist/federation/{idempotency.test.js → idempotency.test.mjs} +31 -63
- 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} +13 -19
- 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} +173 -262
- 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 -30
- package/dist/federation/webfinger.test.d.mts +2 -0
- package/dist/federation/{webfinger.test.js → webfinger.test.mjs} +22 -56
- package/dist/{http-DFzT4YFG.js → http-B53alCGi.mjs} +23 -43
- package/dist/{http-ca2xny58.cjs → http-BngkmEhl.cjs} +177 -302
- package/dist/{http-BudnHZE2.d.cts → http-CrGuipxe.d.cts} +1 -6
- package/dist/{http-EUQ6crVa.js → http-PS3wuU8D.js} +53 -184
- package/dist/{http-Dax_FIBo.d.ts → http-aQzN9Ayi.d.ts} +1 -6
- package/dist/{inbox-BMLz_-pL.js → inbox-CHsLu5ai.mjs} +18 -26
- package/dist/{key-CypuWa94.js → key-D9Np_ZXl.mjs} +29 -37
- package/dist/{keycache-CpGWAUbj.js → keycache-CCSwkQcY.mjs} +5 -10
- package/dist/{keys-BFve7QQv.js → keys-BAK-tUlf.mjs} +5 -9
- 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-Bw2F2ABq.js → kv-cache-B01V7s3h.mjs} +4 -8
- package/dist/{kv-cache-SKgbvvu4.js → kv-cache-B2Qi5MGv.js} +6 -13
- package/dist/{kv-cache-BBJFLMW5.cjs → kv-cache-YCtINZK4.cjs} +27 -34
- package/dist/{kv-QzKcOQgP.js → kv-tL2TOE9X.mjs} +6 -10
- package/dist/{ld-CXLtTc0G.js → ld-BaxRFhDd.mjs} +17 -31
- package/dist/{middleware-CL6XaAFy.cjs → middleware-Bsv-7iX7.cjs} +532 -587
- package/dist/middleware-C37OmOz_.mjs +5 -0
- package/dist/middleware-CelV2xrI.cjs +4 -0
- package/dist/{middleware-CvS6hWm3.js → middleware-Dn1kk96N.js} +335 -382
- package/dist/{middleware-BHJ0xm0L.js → middleware-dFn6ozt5.mjs} +282 -317
- package/dist/{mod-Bx9jcLB8.d.cts → mod-B505FZBC.d.cts} +3 -3
- package/dist/{mod-em2Il1eD.d.cts → mod-Bp_CzKd4.d.cts} +2 -2
- package/dist/{mod-Cs2dYEwI.d.ts → mod-D7PAuO6k.d.ts} +3 -3
- package/dist/{mod-D6MdymW7.d.ts → mod-DKOAow7a.d.ts} +2 -2
- package/dist/{mod-Coe7KEgX.d.cts → mod-DoJBjjnO.d.cts} +2 -2
- package/dist/{mod-D6dOd--H.d.ts → mod-DvxszxXC.d.ts} +2 -2
- package/dist/mod.cjs +29 -74
- package/dist/mod.d.cts +11 -14
- package/dist/mod.d.ts +11 -15
- package/dist/mod.js +17 -71
- package/dist/{negotiation-BlAuS_nr.js → negotiation-DnsfFF8I.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 -43
- 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} +124 -178
- 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-1AbPBOOZ.d.cts → owner-CptqhsOy.d.cts} +1 -1
- package/dist/{owner-CwMai3jn.js → owner-dxM51u36.mjs} +11 -16
- package/dist/{proof-ZuJBOUoi.js → proof-CH5U0k7G.mjs} +21 -33
- package/dist/{proof-sCID81Ua.cjs → proof-D39qiki3.cjs} +133 -157
- package/dist/{proof-6Zw1FW7t.js → proof-Dpgqx9RS.js} +32 -58
- package/dist/{retry-mqLf4b-R.js → retry-B_E3V_Dx.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-BW73dy6Q.js → send-D1-4ZnQq.mjs} +8 -13
- package/dist/sig/accept.test.d.mts +2 -0
- package/dist/sig/{accept.test.js → accept.test.mjs} +35 -70
- package/dist/sig/http.test.d.mts +2 -0
- package/dist/sig/{http.test.js → http.test.mjs} +166 -280
- 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-X-_kMxKM.js → std__assert-Duiq_YC9.mjs} +12 -24
- package/dist/testing/{mod.d.ts → mod.d.mts} +26 -90
- 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-DCP0WLdt.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 -25
- 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 -88
- package/dist/compat-Bb4NuTUO.js +0 -4
- package/dist/compat-DmDDELst.cjs +0 -4
- package/dist/deno-DH972JvX.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-B8FJuMM0.js +0 -27
- package/dist/middleware-BVp930fR.js +0 -12
- package/dist/middleware-BvGP-uXy.cjs +0 -12
- package/dist/mod-B7QkWzrL.d.cts +0 -80
- package/dist/mod-Bh8mqlYw.d.cts +0 -9
- package/dist/mod-D6HodEq7.d.ts +0 -7
- package/dist/mod-SMHOMNpZ.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/accept.test.d.ts +0 -3
- 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
package/dist/otel/mod.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { URLPattern } from "urlpattern-polyfill";
|
|
4
|
-
|
|
1
|
+
import "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
5
3
|
import { getLogger } from "@logtape/logtape";
|
|
6
4
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
7
|
-
|
|
8
5
|
//#region src/otel/exporter.ts
|
|
9
6
|
/**
|
|
10
7
|
* A SpanExporter that persists ActivityPub activity traces to a
|
|
@@ -89,8 +86,7 @@ var FedifySpanExporter = class {
|
|
|
89
86
|
const records = this.#extractRecords(span);
|
|
90
87
|
for (const record of records) storeOperations.push(this.#storeRecord(record));
|
|
91
88
|
}
|
|
92
|
-
const
|
|
93
|
-
const rejected = results.filter((r) => r.status === "rejected");
|
|
89
|
+
const rejected = (await Promise.allSettled(storeOperations)).filter((r) => r.status === "rejected");
|
|
94
90
|
if (rejected.length > 0) throw new AggregateError(rejected.map((r) => r.reason), "Failed to store one or more trace activity records.");
|
|
95
91
|
}
|
|
96
92
|
#extractRecords(span) {
|
|
@@ -195,12 +191,11 @@ var FedifySpanExporter = class {
|
|
|
195
191
|
}
|
|
196
192
|
async #setWithCasRetry(key, transform, options) {
|
|
197
193
|
if (this.#kv.cas != null) for (let attempt = 0; attempt < 3; attempt++) {
|
|
198
|
-
const existing
|
|
199
|
-
const newValue
|
|
200
|
-
if (await this.#kv.cas(key, existing
|
|
194
|
+
const existing = await this.#kv.get(key);
|
|
195
|
+
const newValue = transform(existing);
|
|
196
|
+
if (await this.#kv.cas(key, existing, newValue, options)) return;
|
|
201
197
|
}
|
|
202
|
-
const
|
|
203
|
-
const newValue = transform(existing);
|
|
198
|
+
const newValue = transform(await this.#kv.get(key));
|
|
204
199
|
await this.#kv.set(key, newValue, options);
|
|
205
200
|
}
|
|
206
201
|
async #updateTraceSummary(record, options) {
|
|
@@ -256,6 +251,5 @@ var FedifySpanExporter = class {
|
|
|
256
251
|
*/
|
|
257
252
|
async shutdown() {}
|
|
258
253
|
};
|
|
259
|
-
|
|
260
254
|
//#endregion
|
|
261
|
-
export { FedifySpanExporter };
|
|
255
|
+
export { FedifySpanExporter };
|
|
@@ -65,4 +65,4 @@ interface GetKeyOwnerOptions {
|
|
|
65
65
|
*/
|
|
66
66
|
declare function getKeyOwner(keyId: URL | CryptographicKey, options: GetKeyOwnerOptions): Promise<Actor | null>;
|
|
67
67
|
//#endregion
|
|
68
|
-
export {
|
|
68
|
+
export { getKeyOwner as i, GetKeyOwnerOptions as n, doesActorOwnKey as r, DoesActorOwnKeyOptions as t };
|
|
@@ -63,4 +63,4 @@ interface GetKeyOwnerOptions {
|
|
|
63
63
|
*/
|
|
64
64
|
declare function getKeyOwner(keyId: URL | CryptographicKey, options: GetKeyOwnerOptions): Promise<Actor | null>;
|
|
65
65
|
//#endregion
|
|
66
|
-
export {
|
|
66
|
+
export { getKeyOwner as i, GetKeyOwnerOptions as n, doesActorOwnKey as r, DoesActorOwnKeyOptions as t };
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { deno_default } from "./deno-DH972JvX.js";
|
|
1
|
+
import "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
globalThis.addEventListener = () => {};
|
|
4
|
+
import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
|
|
5
|
+
import "./key-D9Np_ZXl.mjs";
|
|
7
6
|
import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
|
|
8
|
-
import { getDocumentLoader } from "@fedify/vocab-runtime";
|
|
9
7
|
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
10
|
-
|
|
8
|
+
import { getDocumentLoader } from "@fedify/vocab-runtime";
|
|
11
9
|
//#region src/sig/owner.ts
|
|
12
10
|
/**
|
|
13
11
|
* Checks if the actor of the given activity owns the specified key.
|
|
@@ -17,9 +15,7 @@ import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
|
17
15
|
* @returns Whether the actor is the owner of the key.
|
|
18
16
|
*/
|
|
19
17
|
async function doesActorOwnKey(activity, key, options) {
|
|
20
|
-
|
|
21
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
22
|
-
return await tracer.startActiveSpan("activitypub.verify_key_ownership", {
|
|
18
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("activitypub.verify_key_ownership", {
|
|
23
19
|
kind: SpanKind.INTERNAL,
|
|
24
20
|
attributes: {
|
|
25
21
|
"activitypub.actor.id": activity.actorId?.href ?? "",
|
|
@@ -100,9 +96,9 @@ async function getKeyOwner(keyId, options) {
|
|
|
100
96
|
contextLoader,
|
|
101
97
|
tracerProvider
|
|
102
98
|
});
|
|
103
|
-
} catch (e
|
|
104
|
-
if (e
|
|
105
|
-
throw e
|
|
99
|
+
} catch (e) {
|
|
100
|
+
if (e instanceof TypeError) return null;
|
|
101
|
+
throw e;
|
|
106
102
|
}
|
|
107
103
|
}
|
|
108
104
|
}
|
|
@@ -120,6 +116,5 @@ async function getKeyOwner(keyId, options) {
|
|
|
120
116
|
for (const kid of owner.publicKeyIds) if (kid.href === keyId.href) return owner;
|
|
121
117
|
return null;
|
|
122
118
|
}
|
|
123
|
-
|
|
124
119
|
//#endregion
|
|
125
|
-
export {
|
|
120
|
+
export { getKeyOwner as n, doesActorOwnKey as t };
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { deno_default } from "./deno-DH972JvX.js";
|
|
7
|
-
import { fetchKey, validateCryptoKey } from "./key-CypuWa94.js";
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import "urlpattern-polyfill";
|
|
3
|
+
globalThis.addEventListener = () => {};
|
|
4
|
+
import { n as version, t as name } from "./deno-D5r_9RvZ.mjs";
|
|
5
|
+
import { n as fetchKey, o as validateCryptoKey } from "./key-D9Np_ZXl.mjs";
|
|
8
6
|
import { Activity, DataIntegrityProof, Multikey, getTypeId } from "@fedify/vocab";
|
|
9
|
-
import { getLogger } from "@logtape/logtape";
|
|
10
7
|
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
8
|
+
import { getLogger } from "@logtape/logtape";
|
|
11
9
|
import { encodeHex } from "byte-encodings/hex";
|
|
12
10
|
import serialize from "json-canon";
|
|
13
|
-
|
|
14
11
|
//#region src/sig/proof.ts
|
|
15
12
|
const logger = getLogger([
|
|
16
13
|
"fedify",
|
|
@@ -27,29 +24,27 @@ const logger = getLogger([
|
|
|
27
24
|
* @throws {TypeError} If the private key is invalid or unsupported.
|
|
28
25
|
* @since 0.10.0
|
|
29
26
|
*/
|
|
30
|
-
async function createProof(object, privateKey, keyId, { contextLoader, context
|
|
27
|
+
async function createProof(object, privateKey, keyId, { contextLoader, context, created } = {}) {
|
|
31
28
|
validateCryptoKey(privateKey, "private");
|
|
32
29
|
if (privateKey.algorithm.name !== "Ed25519") throw new TypeError("Unsupported algorithm: " + privateKey.algorithm.name);
|
|
33
|
-
const
|
|
34
|
-
const compactMsg = await objectWithoutProofs.toJsonLd({
|
|
30
|
+
const compactMsg = await object.clone({ proofs: [] }).toJsonLd({
|
|
35
31
|
format: "compact",
|
|
36
32
|
contextLoader,
|
|
37
|
-
context
|
|
33
|
+
context
|
|
38
34
|
});
|
|
39
35
|
const msgCanon = serialize(compactMsg);
|
|
40
36
|
const encoder = new TextEncoder();
|
|
41
37
|
const msgBytes = encoder.encode(msgCanon);
|
|
42
38
|
const msgDigest = await crypto.subtle.digest("SHA-256", msgBytes);
|
|
43
39
|
created ??= Temporal.Now.instant();
|
|
44
|
-
const
|
|
40
|
+
const proofCanon = serialize({
|
|
45
41
|
"@context": compactMsg["@context"],
|
|
46
42
|
type: "DataIntegrityProof",
|
|
47
43
|
cryptosuite: "eddsa-jcs-2022",
|
|
48
44
|
verificationMethod: keyId.href,
|
|
49
45
|
proofPurpose: "assertionMethod",
|
|
50
46
|
created: created.toString()
|
|
51
|
-
};
|
|
52
|
-
const proofCanon = serialize(proofConfig);
|
|
47
|
+
});
|
|
53
48
|
const proofBytes = encoder.encode(proofCanon);
|
|
54
49
|
const proofDigest = await crypto.subtle.digest("SHA-256", proofBytes);
|
|
55
50
|
const digest = new Uint8Array(proofDigest.byteLength + msgDigest.byteLength);
|
|
@@ -75,13 +70,11 @@ async function createProof(object, privateKey, keyId, { contextLoader, context:
|
|
|
75
70
|
* @since 0.10.0
|
|
76
71
|
*/
|
|
77
72
|
async function signObject(object, privateKey, keyId, options = {}) {
|
|
78
|
-
|
|
79
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
80
|
-
return await tracer.startActiveSpan("object_integrity_proofs.sign", { attributes: { "activitypub.object.type": getTypeId(object).href } }, async (span) => {
|
|
73
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("object_integrity_proofs.sign", { attributes: { "activitypub.object.type": getTypeId(object).href } }, async (span) => {
|
|
81
74
|
try {
|
|
82
75
|
if (object.id != null) span.setAttribute("activitypub.object.id", object.id.href);
|
|
83
76
|
const existingProofs = [];
|
|
84
|
-
for await (const proof
|
|
77
|
+
for await (const proof of object.getProofs(options)) existingProofs.push(proof);
|
|
85
78
|
const proof = await createProof(object, privateKey, keyId, options);
|
|
86
79
|
if (span.isRecording()) {
|
|
87
80
|
if (proof.cryptosuite != null) span.setAttribute("object_integrity_proofs.cryptosuite", proof.cryptosuite);
|
|
@@ -111,9 +104,7 @@ async function signObject(object, privateKey, keyId, options = {}) {
|
|
|
111
104
|
* @since 0.10.0
|
|
112
105
|
*/
|
|
113
106
|
async function verifyProof(jsonLd, proof, options = {}) {
|
|
114
|
-
|
|
115
|
-
const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
|
|
116
|
-
return await tracer.startActiveSpan("object_integrity_proofs.verify", async (span) => {
|
|
107
|
+
return await (options.tracerProvider ?? trace.getTracerProvider()).getTracer(name, version).startActiveSpan("object_integrity_proofs.verify", async (span) => {
|
|
117
108
|
if (span.isRecording()) {
|
|
118
109
|
if (proof.cryptosuite != null) span.setAttribute("object_integrity_proofs.cryptosuite", proof.cryptosuite);
|
|
119
110
|
if (proof.verificationMethodId != null) span.setAttribute("object_integrity_proofs.key_id", proof.verificationMethodId.href);
|
|
@@ -137,15 +128,14 @@ async function verifyProof(jsonLd, proof, options = {}) {
|
|
|
137
128
|
async function verifyProofInternal(jsonLd, proof, options) {
|
|
138
129
|
if (typeof jsonLd !== "object" || proof.cryptosuite !== "eddsa-jcs-2022" || proof.verificationMethodId == null || proof.proofPurpose !== "assertionMethod" || proof.proofValue == null || proof.created == null) return null;
|
|
139
130
|
const publicKeyPromise = fetchKey(proof.verificationMethodId, Multikey, options);
|
|
140
|
-
const
|
|
131
|
+
const proofCanon = serialize({
|
|
141
132
|
"@context": jsonLd["@context"],
|
|
142
133
|
type: "DataIntegrityProof",
|
|
143
134
|
cryptosuite: proof.cryptosuite,
|
|
144
135
|
verificationMethod: proof.verificationMethodId.href,
|
|
145
136
|
proofPurpose: proof.proofPurpose,
|
|
146
137
|
created: proof.created.toString()
|
|
147
|
-
};
|
|
148
|
-
const proofCanon = serialize(proofConfig);
|
|
138
|
+
});
|
|
149
139
|
const encoder = new TextEncoder();
|
|
150
140
|
const proofBytes = encoder.encode(proofCanon);
|
|
151
141
|
const proofDigest = await crypto.subtle.digest("SHA-256", proofBytes);
|
|
@@ -196,8 +186,7 @@ async function verifyProofInternal(jsonLd, proof, options) {
|
|
|
196
186
|
});
|
|
197
187
|
return null;
|
|
198
188
|
}
|
|
199
|
-
|
|
200
|
-
if (!verified) {
|
|
189
|
+
if (!await crypto.subtle.verify("Ed25519", publicKey.publicKey, proof.proofValue.slice(), digest)) {
|
|
201
190
|
if (fetchedKey.cached) {
|
|
202
191
|
logger.debug("Failed to verify the proof with the cached key {keyId}; retrying with the freshly fetched key...", {
|
|
203
192
|
keyId: proof.verificationMethodId.href,
|
|
@@ -234,7 +223,7 @@ async function verifyProofInternal(jsonLd, proof, options) {
|
|
|
234
223
|
* @since 0.10.0
|
|
235
224
|
*/
|
|
236
225
|
async function verifyObject(cls, jsonLd, options = {}) {
|
|
237
|
-
const logger
|
|
226
|
+
const logger = getLogger([
|
|
238
227
|
"fedify",
|
|
239
228
|
"sig",
|
|
240
229
|
"proof"
|
|
@@ -246,17 +235,16 @@ async function verifyObject(cls, jsonLd, options = {}) {
|
|
|
246
235
|
const key = await verifyProof(jsonLd, proof, options);
|
|
247
236
|
if (key === null) return null;
|
|
248
237
|
if (key.controllerId == null) {
|
|
249
|
-
logger
|
|
238
|
+
logger.debug("Key {keyId} does not have a controller.", { keyId: key.id?.href });
|
|
250
239
|
continue;
|
|
251
240
|
}
|
|
252
241
|
attributions.delete(key.controllerId.href);
|
|
253
242
|
}
|
|
254
243
|
if (attributions.size > 0) {
|
|
255
|
-
logger
|
|
244
|
+
logger.debug("Some attributions are not authenticated by the proofs: {attributions}.", { attributions: [...attributions] });
|
|
256
245
|
return null;
|
|
257
246
|
}
|
|
258
247
|
return object;
|
|
259
248
|
}
|
|
260
|
-
|
|
261
249
|
//#endregion
|
|
262
|
-
export {
|
|
250
|
+
export { verifyProof as i, signObject as n, verifyObject as r, createProof as t };
|