@fedify/fedify 2.0.20 → 2.0.21-dev.1426

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.
Files changed (47) hide show
  1. package/dist/{builder-gxfdO5yl.mjs → builder-CcYos18n.mjs} +3 -3
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{deno-UZHVTBeV.mjs → deno-C9coSHzH.mjs} +1 -1
  4. package/dist/{docloader-DF3UnbK7.mjs → docloader-CgRaAwHU.mjs} +2 -2
  5. package/dist/federation/builder.test.mjs +1 -1
  6. package/dist/federation/handler.test.mjs +4 -4
  7. package/dist/federation/idempotency.test.mjs +2 -2
  8. package/dist/federation/inbox.test.mjs +1 -1
  9. package/dist/federation/middleware.test.mjs +6 -6
  10. package/dist/federation/mod.cjs +1 -1
  11. package/dist/federation/mod.js +1 -1
  12. package/dist/federation/send.test.mjs +3 -3
  13. package/dist/federation/temporal.test.mjs +1 -1
  14. package/dist/federation/webfinger.test.mjs +1 -1
  15. package/dist/{http-CKF5iuro.js → http--7b6B0b8.js} +17 -7
  16. package/dist/{http-skN4rtRO.cjs → http-CpnKyIt0.cjs} +17 -7
  17. package/dist/{http-gcaUXIwe.mjs → http-wJNckb6A.mjs} +2 -2
  18. package/dist/{inbox-B6hfVah6.mjs → inbox-SygTqoge.mjs} +1 -1
  19. package/dist/{key-3a6o6xKM.mjs → key-46iHSKPb.mjs} +17 -7
  20. package/dist/{kv-cache-BKM_CfbU.cjs → kv-cache-4irN1yHr.cjs} +1 -1
  21. package/dist/{kv-cache-BR7E440Z.js → kv-cache-JT449dGm.js} +1 -1
  22. package/dist/{ld-DqhQjuAn.mjs → ld-um2rXWg_.mjs} +2 -2
  23. package/dist/{middleware-RIasP4l0.mjs → middleware-BkKhx4g3.mjs} +32 -15
  24. package/dist/{middleware-CZUXnQHJ.cjs → middleware-BxCqGoAs.cjs} +1 -1
  25. package/dist/{middleware-DUeacJwN.mjs → middleware-DV0SWvt1.mjs} +1 -1
  26. package/dist/{middleware-CLfIiN6T.js → middleware-DbBOHGUK.js} +24 -7
  27. package/dist/{middleware-FQOxwD7Q.cjs → middleware-GjHOtb4l.cjs} +25 -8
  28. package/dist/mod.cjs +4 -4
  29. package/dist/mod.js +4 -4
  30. package/dist/nodeinfo/handler.test.mjs +1 -1
  31. package/dist/{owner-nwg_KZAs.mjs → owner-D06XqfYj.mjs} +2 -2
  32. package/dist/{proof-DdKv1_rb.js → proof-CVZp38M5.js} +1 -1
  33. package/dist/{proof-CR2QkhSu.cjs → proof-ChjPkvaY.cjs} +1 -1
  34. package/dist/{proof-ELq6Rldh.mjs → proof-D7oLae2P.mjs} +2 -2
  35. package/dist/{send-DGzgxpj7.mjs → send-BdAIWh1B.mjs} +2 -2
  36. package/dist/sig/http.test.mjs +2 -2
  37. package/dist/sig/key.test.mjs +51 -1
  38. package/dist/sig/ld.test.mjs +2 -2
  39. package/dist/sig/mod.cjs +2 -2
  40. package/dist/sig/mod.js +2 -2
  41. package/dist/sig/owner.test.mjs +1 -1
  42. package/dist/sig/proof.test.mjs +1 -1
  43. package/dist/{temporal-DhSc8ur4.mjs → temporal-BQM7vCqV.mjs} +1 -1
  44. package/dist/utils/docloader.test.mjs +2 -2
  45. package/dist/utils/mod.cjs +1 -1
  46. package/dist/utils/mod.js +1 -1
  47. package/package.json +5 -5
@@ -2,8 +2,8 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { n as RouterError, t as Router } from "./router-CrMLXoOr.mjs";
5
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
6
- import { t as InboxListenerSet } from "./inbox-B6hfVah6.mjs";
5
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
6
+ import { t as InboxListenerSet } from "./inbox-SygTqoge.mjs";
7
7
  import { getTypeId } from "@fedify/vocab";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
  import { getLogger } from "@logtape/logtape";
@@ -42,7 +42,7 @@ var FederationBuilderImpl = class {
42
42
  this.collectionTypeIds = {};
43
43
  }
44
44
  async build(options) {
45
- const { FederationImpl } = await import("./middleware-DUeacJwN.mjs");
45
+ const { FederationImpl } = await import("./middleware-DV0SWvt1.mjs");
46
46
  const f = new FederationImpl(options);
47
47
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
48
48
  f.router = this.router.clone();
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
6
6
  import { t as assert } from "../assert-ddO5KLpe.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
8
- import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-RIasP4l0.mjs";
8
+ import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-BkKhx4g3.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  import { Follow, Person } from "@fedify/vocab";
11
11
  //#region src/compat/transformers.test.ts
@@ -3,6 +3,6 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  //#region deno.json
5
5
  var name = "@fedify/fedify";
6
- var version = "2.0.20";
6
+ var version = "2.0.21-dev.1426+9829bc7d";
7
7
  //#endregion
8
8
  export { version as n, name as t };
@@ -1,8 +1,8 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { a as validateCryptoKey } from "./key-3a6o6xKM.mjs";
5
- import { n as doubleKnock } from "./http-gcaUXIwe.mjs";
4
+ import { a as validateCryptoKey } from "./key-46iHSKPb.mjs";
5
+ import { n as doubleKnock } from "./http-wJNckb6A.mjs";
6
6
  import { curry } from "es-toolkit";
7
7
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
8
8
  import { getLogger } from "@logtape/logtape";
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { a as assertExists } from "../std__assert-Duiq_YC9.mjs";
6
6
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
8
- import { n as createFederationBuilder } from "../builder-gxfdO5yl.mjs";
8
+ import { n as createFederationBuilder } from "../builder-CcYos18n.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  import { Activity, Note, Person } from "@fedify/vocab";
11
11
  //#region src/federation/builder.test.ts
@@ -6,12 +6,12 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-Duiq_YC9.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-B-qJtC9Z.mjs";
8
8
  import { t as assert } from "../assert-ddO5KLpe.mjs";
9
- import { s as signRequest } from "../http-gcaUXIwe.mjs";
9
+ import { s as signRequest } from "../http-wJNckb6A.mjs";
10
10
  import { a as rsaPrivateKey3, c as rsaPublicKey3, s as rsaPublicKey2 } from "../keys-CtZLJq76.mjs";
11
- import { a as compactJsonLd, f as signJsonLd } from "../ld-DqhQjuAn.mjs";
11
+ import { a as compactJsonLd, f as signJsonLd } from "../ld-um2rXWg_.mjs";
12
12
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
13
- import { a as createFederation, c as handleCollection, d as handleObject, f as respondWithObject, l as handleCustomCollection, p as respondWithObjectIfAcceptable, s as handleActor, u as handleInbox } from "../middleware-RIasP4l0.mjs";
14
- import { t as InboxListenerSet } from "../inbox-B6hfVah6.mjs";
13
+ import { a as createFederation, c as handleCollection, d as handleObject, f as respondWithObject, l as handleCustomCollection, p as respondWithObjectIfAcceptable, s as handleActor, u as handleInbox } from "../middleware-BkKhx4g3.mjs";
14
+ import { t as InboxListenerSet } from "../inbox-SygTqoge.mjs";
15
15
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
16
16
  import { Create, Note, Person } from "@fedify/vocab";
17
17
  //#region src/federation/handler.test.ts
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import "../std__assert-Duiq_YC9.mjs";
6
6
  import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-CtZLJq76.mjs";
7
- import { n as signObject } from "../proof-ELq6Rldh.mjs";
7
+ import { n as signObject } from "../proof-D7oLae2P.mjs";
8
8
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
9
- import { a as createFederation } from "../middleware-RIasP4l0.mjs";
9
+ import { a as createFederation } from "../middleware-BkKhx4g3.mjs";
10
10
  import { mockDocumentLoader, test } from "@fedify/fixture";
11
11
  import { Create, Follow, Person } from "@fedify/vocab";
12
12
  //#region src/federation/idempotency.test.ts
@@ -3,7 +3,7 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
6
- import { t as InboxListenerSet } from "../inbox-B6hfVah6.mjs";
6
+ import { t as InboxListenerSet } from "../inbox-SygTqoge.mjs";
7
7
  import { test } from "@fedify/fixture";
8
8
  import { Activity, Create, Invite, Offer, Update } from "@fedify/vocab";
9
9
  //#region src/federation/inbox.test.ts
@@ -10,14 +10,14 @@ import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
10
10
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
11
11
  import { t as assertNotEquals } from "../assert_not_equals--wG9hV7u.mjs";
12
12
  import { t as assert } from "../assert-ddO5KLpe.mjs";
13
- import { l as verifyRequest, s as signRequest } from "../http-gcaUXIwe.mjs";
13
+ import { l as verifyRequest, s as signRequest } from "../http-wJNckb6A.mjs";
14
14
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CtZLJq76.mjs";
15
- import { t as getAuthenticatedDocumentLoader } from "../docloader-DF3UnbK7.mjs";
16
- import { a as compactJsonLd, f as signJsonLd, m as verifyJsonLd, s as detachSignature } from "../ld-DqhQjuAn.mjs";
17
- import { t as doesActorOwnKey } from "../owner-nwg_KZAs.mjs";
18
- import { n as signObject, r as verifyObject } from "../proof-ELq6Rldh.mjs";
15
+ import { t as getAuthenticatedDocumentLoader } from "../docloader-CgRaAwHU.mjs";
16
+ import { a as compactJsonLd, f as signJsonLd, m as verifyJsonLd, s as detachSignature } from "../ld-um2rXWg_.mjs";
17
+ import { t as doesActorOwnKey } from "../owner-D06XqfYj.mjs";
18
+ import { n as signObject, r as verifyObject } from "../proof-D7oLae2P.mjs";
19
19
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
20
- import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-RIasP4l0.mjs";
20
+ import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-BkKhx4g3.mjs";
21
21
  import { mockDocumentLoader, test } from "@fedify/fixture";
22
22
  import * as vocab from "@fedify/vocab";
23
23
  import { Create, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
@@ -2,7 +2,7 @@ const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  require("../chunk-DDcVe30Y.cjs");
5
- const require_middleware = require("../middleware-FQOxwD7Q.cjs");
5
+ const require_middleware = require("../middleware-GjHOtb4l.cjs");
6
6
  let es_toolkit = require("es-toolkit");
7
7
  //#region src/federation/kv.ts
8
8
  /**
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { a as createExponentialBackoffPolicy, c as buildCollectionSynchronizationHeader, d as Router, f as RouterError, i as SendActivityError, l as digest, o as respondWithObject, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as createFederationBuilder } from "../middleware-CLfIiN6T.js";
3
+ import { a as createExponentialBackoffPolicy, c as buildCollectionSynchronizationHeader, d as Router, f as RouterError, i as SendActivityError, l as digest, o as respondWithObject, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as createFederationBuilder } from "../middleware-DbBOHGUK.js";
4
4
  import { isEqual } from "es-toolkit";
5
5
  //#region src/federation/kv.ts
6
6
  /**
@@ -8,10 +8,10 @@ import { n as assertFalse, t as assertRejects } from "../assert_rejects-B-qJtC9Z
8
8
  import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
9
9
  import { t as assertNotEquals } from "../assert_not_equals--wG9hV7u.mjs";
10
10
  import { t as assert } from "../assert-ddO5KLpe.mjs";
11
- import { l as verifyRequest } from "../http-gcaUXIwe.mjs";
11
+ import { l as verifyRequest } from "../http-wJNckb6A.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CtZLJq76.mjs";
13
- import { t as doesActorOwnKey } from "../owner-nwg_KZAs.mjs";
14
- import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "../send-DGzgxpj7.mjs";
13
+ import { t as doesActorOwnKey } from "../owner-D06XqfYj.mjs";
14
+ import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "../send-BdAIWh1B.mjs";
15
15
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
16
16
  import { Activity, Application, Endpoints, Group, Person, Service } from "@fedify/vocab";
17
17
  //#region src/federation/send.test.ts
@@ -4,7 +4,7 @@ globalThis.addEventListener = () => {};
4
4
  import "../std__assert-Duiq_YC9.mjs";
5
5
  import { n as assertFalse } from "../assert_rejects-B-qJtC9Z.mjs";
6
6
  import { t as assert } from "../assert-ddO5KLpe.mjs";
7
- import { t as hasMalformedKnownTemporalLiteral } from "../temporal-DhSc8ur4.mjs";
7
+ import { t as hasMalformedKnownTemporalLiteral } from "../temporal-BQM7vCqV.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  //#region src/federation/temporal.test.ts
10
10
  test("hasMalformedKnownTemporalLiteral() detects expanded proof timestamps", async () => {
@@ -5,7 +5,7 @@ import { n as createRequestContext } from "../context-Juj6bdHC.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-Duiq_YC9.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
8
- import { a as createFederation, o as handleWebFinger } from "../middleware-RIasP4l0.mjs";
8
+ import { a as createFederation, o as handleWebFinger } from "../middleware-BkKhx4g3.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  import { Image, Link, Person } from "@fedify/vocab";
11
11
  //#region src/federation/webfinger.test.ts
@@ -10,7 +10,7 @@ import { decodeBase64, encodeBase64 } from "byte-encodings/base64";
10
10
  import { Item, decodeDict, encodeItem } from "structured-field-values";
11
11
  //#region deno.json
12
12
  var name = "@fedify/fedify";
13
- var version = "2.0.20";
13
+ var version = "2.0.21-dev.1426+9829bc7d";
14
14
  //#endregion
15
15
  //#region src/sig/key.ts
16
16
  /**
@@ -203,21 +203,31 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
203
203
  const keys = cls === CryptographicKey ? object.getPublicKeys({
204
204
  documentLoader,
205
205
  contextLoader,
206
+ suppressError: true,
206
207
  tracerProvider
207
208
  }) : object.getAssertionMethods({
208
209
  documentLoader,
209
210
  contextLoader,
211
+ suppressError: true,
210
212
  tracerProvider
211
213
  });
212
214
  let length = 0;
213
215
  let lastKey = null;
214
- for await (const k of keys) {
215
- length++;
216
- lastKey = k;
217
- if (k.id?.href === keyId) {
218
- key = k;
219
- break;
216
+ try {
217
+ for await (const k of keys) {
218
+ length++;
219
+ lastKey = k;
220
+ if (k.id?.href === keyId) {
221
+ key = k;
222
+ break;
223
+ }
220
224
  }
225
+ } catch (e) {
226
+ if (!(e instanceof TypeError)) throw e;
227
+ logger.debug("Failed to verify; a malformed key was encountered while iterating the keys of {keyId}; treating it as a missing key: {error}", {
228
+ keyId,
229
+ error: e
230
+ });
221
231
  }
222
232
  const keyIdUrl = new URL(keyId);
223
233
  if (key == null && keyIdUrl.hash === "" && length === 1) key = lastKey;
@@ -11,7 +11,7 @@ let byte_encodings_base64 = require("byte-encodings/base64");
11
11
  let structured_field_values = require("structured-field-values");
12
12
  //#region deno.json
13
13
  var name = "@fedify/fedify";
14
- var version = "2.0.20";
14
+ var version = "2.0.21-dev.1426+9829bc7d";
15
15
  //#endregion
16
16
  //#region src/sig/key.ts
17
17
  /**
@@ -204,21 +204,31 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
204
204
  const keys = cls === _fedify_vocab.CryptographicKey ? object.getPublicKeys({
205
205
  documentLoader,
206
206
  contextLoader,
207
+ suppressError: true,
207
208
  tracerProvider
208
209
  }) : object.getAssertionMethods({
209
210
  documentLoader,
210
211
  contextLoader,
212
+ suppressError: true,
211
213
  tracerProvider
212
214
  });
213
215
  let length = 0;
214
216
  let lastKey = null;
215
- for await (const k of keys) {
216
- length++;
217
- lastKey = k;
218
- if (k.id?.href === keyId) {
219
- key = k;
220
- break;
217
+ try {
218
+ for await (const k of keys) {
219
+ length++;
220
+ lastKey = k;
221
+ if (k.id?.href === keyId) {
222
+ key = k;
223
+ break;
224
+ }
221
225
  }
226
+ } catch (e) {
227
+ if (!(e instanceof TypeError)) throw e;
228
+ logger.debug("Failed to verify; a malformed key was encountered while iterating the keys of {keyId}; treating it as a missing key: {error}", {
229
+ keyId,
230
+ error: e
231
+ });
222
232
  }
223
233
  const keyIdUrl = new URL(keyId);
224
234
  if (key == null && keyIdUrl.hash === "" && length === 1) key = lastKey;
@@ -1,8 +1,8 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
5
- import { a as validateCryptoKey, n as fetchKey } from "./key-3a6o6xKM.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
+ import { a as validateCryptoKey, n as fetchKey } from "./key-46iHSKPb.mjs";
6
6
  import { CryptographicKey } from "@fedify/vocab";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { FetchError } from "@fedify/vocab-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
5
  import { Activity, getTypeId } from "@fedify/vocab";
6
6
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
7
7
  import { getLogger } from "@logtape/logtape";
@@ -1,7 +1,7 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
5
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
6
6
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
7
7
  import { getDocumentLoader } from "@fedify/vocab-runtime";
@@ -197,21 +197,31 @@ async function fetchKeyInternal(keyId, cls, { documentLoader, contextLoader, key
197
197
  const keys = cls === CryptographicKey ? object.getPublicKeys({
198
198
  documentLoader,
199
199
  contextLoader,
200
+ suppressError: true,
200
201
  tracerProvider
201
202
  }) : object.getAssertionMethods({
202
203
  documentLoader,
203
204
  contextLoader,
205
+ suppressError: true,
204
206
  tracerProvider
205
207
  });
206
208
  let length = 0;
207
209
  let lastKey = null;
208
- for await (const k of keys) {
209
- length++;
210
- lastKey = k;
211
- if (k.id?.href === keyId) {
212
- key = k;
213
- break;
210
+ try {
211
+ for await (const k of keys) {
212
+ length++;
213
+ lastKey = k;
214
+ if (k.id?.href === keyId) {
215
+ key = k;
216
+ break;
217
+ }
214
218
  }
219
+ } catch (e) {
220
+ if (!(e instanceof TypeError)) throw e;
221
+ logger.debug("Failed to verify; a malformed key was encountered while iterating the keys of {keyId}; treating it as a missing key: {error}", {
222
+ keyId,
223
+ error: e
224
+ });
215
225
  }
216
226
  const keyIdUrl = new URL(keyId);
217
227
  if (key == null && keyIdUrl.hash === "" && length === 1) key = lastKey;
@@ -1,7 +1,7 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  require("./chunk-DDcVe30Y.cjs");
4
- const require_http = require("./http-skN4rtRO.cjs");
4
+ const require_http = require("./http-CpnKyIt0.cjs");
5
5
  let _logtape_logtape = require("@logtape/logtape");
6
6
  let es_toolkit = require("es-toolkit");
7
7
  let _fedify_vocab_runtime = require("@fedify/vocab-runtime");
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { c as validateCryptoKey, t as doubleKnock } from "./http-CKF5iuro.js";
3
+ import { c as validateCryptoKey, t as doubleKnock } from "./http--7b6B0b8.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { curry } from "es-toolkit";
6
6
  import { UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts, validatePublicUrl } from "@fedify/vocab-runtime";
@@ -1,8 +1,8 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
5
- import { a as validateCryptoKey, n as fetchKey } from "./key-3a6o6xKM.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
+ import { a as validateCryptoKey, n as fetchKey } from "./key-46iHSKPb.mjs";
6
6
  import { Activity, CryptographicKey, Object as Object$1, getTypeId } from "@fedify/vocab";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { getDocumentLoader } from "@fedify/vocab-runtime";
@@ -2,24 +2,24 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { n as RouterError } from "./router-CrMLXoOr.mjs";
5
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
6
- import { a as validateCryptoKey, i as importJwk, t as exportJwk } from "./key-3a6o6xKM.mjs";
7
- import { l as verifyRequest } from "./http-gcaUXIwe.mjs";
8
- import { t as getAuthenticatedDocumentLoader } from "./docloader-DF3UnbK7.mjs";
5
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
6
+ import { a as validateCryptoKey, i as importJwk, t as exportJwk } from "./key-46iHSKPb.mjs";
7
+ import { l as verifyRequest } from "./http-wJNckb6A.mjs";
8
+ import { t as getAuthenticatedDocumentLoader } from "./docloader-CgRaAwHU.mjs";
9
9
  import { n as kvCache } from "./kv-cache-DqEKe5E0.mjs";
10
- import { a as compactJsonLd, c as getNormalizationContextLoader, d as isInvalidUrlTypeError, f as signJsonLd, g as wrapContextLoaderForJsonLd, l as hasSignature, p as verifyCompactJsonLd, r as assertSafeJsonLd, s as detachSignature, t as InvalidContextReferenceError, u as isClearlyMalformedContextReference } from "./ld-DqhQjuAn.mjs";
11
- import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-nwg_KZAs.mjs";
12
- import { n as signObject, r as verifyObject } from "./proof-ELq6Rldh.mjs";
10
+ import { a as compactJsonLd, c as getNormalizationContextLoader, d as isInvalidUrlTypeError, f as signJsonLd, g as wrapContextLoaderForJsonLd, l as hasSignature, p as verifyCompactJsonLd, r as assertSafeJsonLd, s as detachSignature, t as InvalidContextReferenceError, u as isClearlyMalformedContextReference } from "./ld-um2rXWg_.mjs";
11
+ import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-D06XqfYj.mjs";
12
+ import { n as signObject, r as verifyObject } from "./proof-D7oLae2P.mjs";
13
13
  import { t as getNodeInfo } from "./client-A1UrnX6I.mjs";
14
14
  import { t as nodeInfoToJson } from "./types-C37hquWI.mjs";
15
- import { n as routeActivity } from "./inbox-B6hfVah6.mjs";
16
- import { t as FederationBuilderImpl } from "./builder-gxfdO5yl.mjs";
15
+ import { n as routeActivity } from "./inbox-SygTqoge.mjs";
16
+ import { t as FederationBuilderImpl } from "./builder-CcYos18n.mjs";
17
17
  import { t as buildCollectionSynchronizationHeader } from "./collection-ChgDTHLz.mjs";
18
18
  import { t as KvKeyCache } from "./keycache-DaQ3ndaJ.mjs";
19
19
  import { t as acceptsJsonLd } from "./negotiation-BehA2uul.mjs";
20
- import { t as hasMalformedKnownTemporalLiteral } from "./temporal-DhSc8ur4.mjs";
20
+ import { t as hasMalformedKnownTemporalLiteral } from "./temporal-BQM7vCqV.mjs";
21
21
  import { t as createExponentialBackoffPolicy } from "./retry-B_E3V_Dx.mjs";
22
- import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-DGzgxpj7.mjs";
22
+ import { n as extractInboxes, r as sendActivity, t as SendActivityError } from "./send-BdAIWh1B.mjs";
23
23
  import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
24
24
  import { lookupWebFinger } from "@fedify/webfinger";
25
25
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
@@ -1340,6 +1340,15 @@ function isPermanentRemoteContextError(error) {
1340
1340
  function isPermanentInboxParseError(error) {
1341
1341
  return error instanceof Error && (error.name === "UnsafeJsonLdError" || error instanceof InvalidContextReferenceError || isPermanentRemoteContextError(error) || error.name === "jsonld.SyntaxError" && !isRemoteContextLoadingFailure(error)) || error instanceof TypeError && (/^(Invalid JSON-LD:|Invalid type:|Unexpected type:)/.test(error.message) || isInvalidUrlTypeError(error));
1342
1342
  }
1343
+ function hasLinkedDataSignatureJsonLdProcessingError(error) {
1344
+ if (error.message.startsWith("Maximum deep iterations exceeded")) return true;
1345
+ const cause = error.cause instanceof Error ? error.cause : error.details?.cause;
1346
+ if (error.name === "jsonld.InvalidUrl" && error.details?.code === "loading remote context failed" && cause instanceof Error) return cause.message.startsWith("Maximum deep iterations exceeded") || cause.name.startsWith("jsonld.");
1347
+ return error.name !== "jsonld.InvalidUrl" && error.name.startsWith("jsonld.");
1348
+ }
1349
+ function isLinkedDataSignatureJsonLdProcessingError(error) {
1350
+ return error instanceof Error && hasLinkedDataSignatureJsonLdProcessingError(error);
1351
+ }
1343
1352
  /**
1344
1353
  * Create a new {@link Federation} instance.
1345
1354
  * @param parameters Parameters for initializing the instance.
@@ -1990,10 +1999,18 @@ var FederationImpl = class extends FederationBuilderImpl {
1990
1999
  privateKey: pair.privateKey
1991
2000
  }))
1992
2001
  });
1993
- else jsonLd = await signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
1994
- contextLoader,
1995
- tracerProvider: this.tracerProvider
1996
- });
2002
+ else try {
2003
+ jsonLd = await signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
2004
+ contextLoader,
2005
+ tracerProvider: this.tracerProvider
2006
+ });
2007
+ } catch (error) {
2008
+ if (!isLinkedDataSignatureJsonLdProcessingError(error)) throw error;
2009
+ logger.warn("Failed to create a Linked Data signature for the activity {activityId}. The activity will be sent without a Linked Data signature.", {
2010
+ activityId,
2011
+ error
2012
+ });
2013
+ }
1997
2014
  if (!proofCreated) logger.warn("No supported key found to create a proof for the activity {activityId}. The activity will be sent without a proof. In order to create a proof, at least one Ed25519 key must be provided.", {
1998
2015
  activityId,
1999
2016
  keys: keys.map((pair) => ({
@@ -1,4 +1,4 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
- const require_middleware = require("./middleware-FQOxwD7Q.cjs");
3
+ const require_middleware = require("./middleware-GjHOtb4l.cjs");
4
4
  exports.FederationImpl = require_middleware.FederationImpl;
@@ -1,5 +1,5 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as FederationImpl } from "./middleware-RIasP4l0.mjs";
4
+ import { n as FederationImpl } from "./middleware-BkKhx4g3.mjs";
5
5
  export { FederationImpl };
@@ -2,10 +2,10 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
3
  import { t as __exportAll } from "./chunk-CRNNMoPX.js";
4
4
  import { r as getDefaultActivityTransformers } from "./transformers-BGMIq1cs.js";
5
- import { c as validateCryptoKey, i as exportJwk, l as name, r as verifyRequest, s as importJwk, t as doubleKnock, u as version } from "./http-CKF5iuro.js";
6
- import { _ as signJsonLd, a as doesActorOwnKey, c as assertSafeJsonLd, f as detachSignature, g as isInvalidUrlTypeError, h as isClearlyMalformedContextReference, m as hasSignature, n as signObject, o as getKeyOwner, p as getNormalizationContextLoader, r as verifyObject, s as InvalidContextReferenceError, u as compactJsonLd, v as verifyCompactJsonLd, x as wrapContextLoaderForJsonLd } from "./proof-DdKv1_rb.js";
5
+ import { c as validateCryptoKey, i as exportJwk, l as name, r as verifyRequest, s as importJwk, t as doubleKnock, u as version } from "./http--7b6B0b8.js";
6
+ import { _ as signJsonLd, a as doesActorOwnKey, c as assertSafeJsonLd, f as detachSignature, g as isInvalidUrlTypeError, h as isClearlyMalformedContextReference, m as hasSignature, n as signObject, o as getKeyOwner, p as getNormalizationContextLoader, r as verifyObject, s as InvalidContextReferenceError, u as compactJsonLd, v as verifyCompactJsonLd, x as wrapContextLoaderForJsonLd } from "./proof-CVZp38M5.js";
7
7
  import { n as getNodeInfo, t as nodeInfoToJson } from "./types-CAY3OdLq.js";
8
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BR7E440Z.js";
8
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-JT449dGm.js";
9
9
  import { getLogger, withContext } from "@logtape/logtape";
10
10
  import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
11
11
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
@@ -2497,6 +2497,15 @@ function isPermanentRemoteContextError(error) {
2497
2497
  function isPermanentInboxParseError(error) {
2498
2498
  return error instanceof Error && (error.name === "UnsafeJsonLdError" || error instanceof InvalidContextReferenceError || isPermanentRemoteContextError(error) || error.name === "jsonld.SyntaxError" && !isRemoteContextLoadingFailure(error)) || error instanceof TypeError && (/^(Invalid JSON-LD:|Invalid type:|Unexpected type:)/.test(error.message) || isInvalidUrlTypeError(error));
2499
2499
  }
2500
+ function hasLinkedDataSignatureJsonLdProcessingError(error) {
2501
+ if (error.message.startsWith("Maximum deep iterations exceeded")) return true;
2502
+ const cause = error.cause instanceof Error ? error.cause : error.details?.cause;
2503
+ if (error.name === "jsonld.InvalidUrl" && error.details?.code === "loading remote context failed" && cause instanceof Error) return cause.message.startsWith("Maximum deep iterations exceeded") || cause.name.startsWith("jsonld.");
2504
+ return error.name !== "jsonld.InvalidUrl" && error.name.startsWith("jsonld.");
2505
+ }
2506
+ function isLinkedDataSignatureJsonLdProcessingError(error) {
2507
+ return error instanceof Error && hasLinkedDataSignatureJsonLdProcessingError(error);
2508
+ }
2500
2509
  /**
2501
2510
  * Create a new {@link Federation} instance.
2502
2511
  * @param parameters Parameters for initializing the instance.
@@ -3147,10 +3156,18 @@ var FederationImpl = class extends FederationBuilderImpl {
3147
3156
  privateKey: pair.privateKey
3148
3157
  }))
3149
3158
  });
3150
- else jsonLd = await signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
3151
- contextLoader,
3152
- tracerProvider: this.tracerProvider
3153
- });
3159
+ else try {
3160
+ jsonLd = await signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
3161
+ contextLoader,
3162
+ tracerProvider: this.tracerProvider
3163
+ });
3164
+ } catch (error) {
3165
+ if (!isLinkedDataSignatureJsonLdProcessingError(error)) throw error;
3166
+ logger.warn("Failed to create a Linked Data signature for the activity {activityId}. The activity will be sent without a Linked Data signature.", {
3167
+ activityId,
3168
+ error
3169
+ });
3170
+ }
3154
3171
  if (!proofCreated) logger.warn("No supported key found to create a proof for the activity {activityId}. The activity will be sent without a proof. In order to create a proof, at least one Ed25519 key must be provided.", {
3155
3172
  activityId,
3156
3173
  keys: keys.map((pair) => ({
@@ -2,10 +2,10 @@ const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  const require_chunk = require("./chunk-DDcVe30Y.cjs");
4
4
  const require_transformers = require("./transformers-NeAONrAq.cjs");
5
- const require_http = require("./http-skN4rtRO.cjs");
6
- const require_proof = require("./proof-CR2QkhSu.cjs");
5
+ const require_http = require("./http-CpnKyIt0.cjs");
6
+ const require_proof = require("./proof-ChjPkvaY.cjs");
7
7
  const require_types = require("./types-KC4QAoxe.cjs");
8
- const require_kv_cache = require("./kv-cache-BKM_CfbU.cjs");
8
+ const require_kv_cache = require("./kv-cache-4irN1yHr.cjs");
9
9
  let _logtape_logtape = require("@logtape/logtape");
10
10
  let _fedify_vocab = require("@fedify/vocab");
11
11
  let _opentelemetry_api = require("@opentelemetry/api");
@@ -335,7 +335,7 @@ var FederationBuilderImpl = class {
335
335
  this.collectionTypeIds = {};
336
336
  }
337
337
  async build(options) {
338
- const { FederationImpl } = await Promise.resolve().then(() => require("./middleware-CZUXnQHJ.cjs"));
338
+ const { FederationImpl } = await Promise.resolve().then(() => require("./middleware-BxCqGoAs.cjs"));
339
339
  const f = new FederationImpl(options);
340
340
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
341
341
  f.router = this.router.clone();
@@ -2491,6 +2491,15 @@ function isPermanentRemoteContextError(error) {
2491
2491
  function isPermanentInboxParseError(error) {
2492
2492
  return error instanceof Error && (error.name === "UnsafeJsonLdError" || error instanceof require_proof.InvalidContextReferenceError || isPermanentRemoteContextError(error) || error.name === "jsonld.SyntaxError" && !isRemoteContextLoadingFailure(error)) || error instanceof TypeError && (/^(Invalid JSON-LD:|Invalid type:|Unexpected type:)/.test(error.message) || require_proof.isInvalidUrlTypeError(error));
2493
2493
  }
2494
+ function hasLinkedDataSignatureJsonLdProcessingError(error) {
2495
+ if (error.message.startsWith("Maximum deep iterations exceeded")) return true;
2496
+ const cause = error.cause instanceof Error ? error.cause : error.details?.cause;
2497
+ if (error.name === "jsonld.InvalidUrl" && error.details?.code === "loading remote context failed" && cause instanceof Error) return cause.message.startsWith("Maximum deep iterations exceeded") || cause.name.startsWith("jsonld.");
2498
+ return error.name !== "jsonld.InvalidUrl" && error.name.startsWith("jsonld.");
2499
+ }
2500
+ function isLinkedDataSignatureJsonLdProcessingError(error) {
2501
+ return error instanceof Error && hasLinkedDataSignatureJsonLdProcessingError(error);
2502
+ }
2494
2503
  /**
2495
2504
  * Create a new {@link Federation} instance.
2496
2505
  * @param parameters Parameters for initializing the instance.
@@ -3141,10 +3150,18 @@ var FederationImpl = class extends FederationBuilderImpl {
3141
3150
  privateKey: pair.privateKey
3142
3151
  }))
3143
3152
  });
3144
- else jsonLd = await require_proof.signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
3145
- contextLoader,
3146
- tracerProvider: this.tracerProvider
3147
- });
3153
+ else try {
3154
+ jsonLd = await require_proof.signJsonLd(jsonLd, rsaKey.privateKey, rsaKey.keyId, {
3155
+ contextLoader,
3156
+ tracerProvider: this.tracerProvider
3157
+ });
3158
+ } catch (error) {
3159
+ if (!isLinkedDataSignatureJsonLdProcessingError(error)) throw error;
3160
+ logger.warn("Failed to create a Linked Data signature for the activity {activityId}. The activity will be sent without a Linked Data signature.", {
3161
+ activityId,
3162
+ error
3163
+ });
3164
+ }
3148
3165
  if (!proofCreated) logger.warn("No supported key found to create a proof for the activity {activityId}. The activity will be sent without a proof. In order to create a proof, at least one Ed25519 key must be provided.", {
3149
3166
  activityId,
3150
3167
  keys: keys.map((pair) => ({
package/dist/mod.cjs CHANGED
@@ -4,11 +4,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  require("./chunk-DDcVe30Y.cjs");
5
5
  const require_transformers = require("./transformers-NeAONrAq.cjs");
6
6
  require("./compat/mod.cjs");
7
- const require_http = require("./http-skN4rtRO.cjs");
8
- const require_middleware = require("./middleware-FQOxwD7Q.cjs");
9
- const require_proof = require("./proof-CR2QkhSu.cjs");
7
+ const require_http = require("./http-CpnKyIt0.cjs");
8
+ const require_middleware = require("./middleware-GjHOtb4l.cjs");
9
+ const require_proof = require("./proof-ChjPkvaY.cjs");
10
10
  const require_types = require("./types-KC4QAoxe.cjs");
11
- const require_kv_cache = require("./kv-cache-BKM_CfbU.cjs");
11
+ const require_kv_cache = require("./kv-cache-4irN1yHr.cjs");
12
12
  const require_federation_mod = require("./federation/mod.cjs");
13
13
  require("./nodeinfo/mod.cjs");
14
14
  require("./runtime/mod.cjs");
package/dist/mod.js CHANGED
@@ -3,11 +3,11 @@ import { URLPattern } from "urlpattern-polyfill";
3
3
  import "./chunk-CRNNMoPX.js";
4
4
  import { n as autoIdAssigner, r as getDefaultActivityTransformers, t as actorDehydrator } from "./transformers-BGMIq1cs.js";
5
5
  import "./compat/mod.js";
6
- import { a as fetchKey, i as exportJwk, n as signRequest, o as generateCryptoKeyPair, r as verifyRequest, s as importJwk } from "./http-CKF5iuro.js";
7
- import { a as createExponentialBackoffPolicy, c as buildCollectionSynchronizationHeader, d as Router, f as RouterError, i as SendActivityError, l as digest, o as respondWithObject, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as createFederationBuilder } from "./middleware-CLfIiN6T.js";
8
- import { _ as signJsonLd, a as doesActorOwnKey, b as verifySignature, d as createSignature, f as detachSignature, i as verifyProof, l as attachSignature, n as signObject, o as getKeyOwner, r as verifyObject, t as createProof, y as verifyJsonLd } from "./proof-DdKv1_rb.js";
6
+ import { a as fetchKey, i as exportJwk, n as signRequest, o as generateCryptoKeyPair, r as verifyRequest, s as importJwk } from "./http--7b6B0b8.js";
7
+ import { a as createExponentialBackoffPolicy, c as buildCollectionSynchronizationHeader, d as Router, f as RouterError, i as SendActivityError, l as digest, o as respondWithObject, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as createFederationBuilder } from "./middleware-DbBOHGUK.js";
8
+ import { _ as signJsonLd, a as doesActorOwnKey, b as verifySignature, d as createSignature, f as detachSignature, i as verifyProof, l as attachSignature, n as signObject, o as getKeyOwner, r as verifyObject, t as createProof, y as verifyJsonLd } from "./proof-CVZp38M5.js";
9
9
  import { n as getNodeInfo, r as parseNodeInfo, t as nodeInfoToJson } from "./types-CAY3OdLq.js";
10
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BR7E440Z.js";
10
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-JT449dGm.js";
11
11
  import { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue } from "./federation/mod.js";
12
12
  import "./nodeinfo/mod.js";
13
13
  import "./runtime/mod.js";
@@ -5,7 +5,7 @@ import { n as createRequestContext } from "../context-Juj6bdHC.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-Duiq_YC9.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-BrZHNugx.mjs";
8
- import { a as createFederation, h as handleNodeInfoJrd, m as handleNodeInfo } from "../middleware-RIasP4l0.mjs";
8
+ import { a as createFederation, h as handleNodeInfoJrd, m as handleNodeInfo } from "../middleware-BkKhx4g3.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  //#region src/nodeinfo/handler.test.ts
11
11
  test("handleNodeInfo()", async () => {
@@ -1,8 +1,8 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
5
- import "./key-3a6o6xKM.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
+ import "./key-46iHSKPb.mjs";
6
6
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
7
7
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { getDocumentLoader } from "@fedify/vocab-runtime";
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { a as fetchKey, c as validateCryptoKey, l as name, u as version } from "./http-CKF5iuro.js";
3
+ import { a as fetchKey, c as validateCryptoKey, l as name, u as version } from "./http--7b6B0b8.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { Activity, CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1, getTypeId, isActor } from "@fedify/vocab";
6
6
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
@@ -1,7 +1,7 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  const require_chunk = require("./chunk-DDcVe30Y.cjs");
4
- const require_http = require("./http-skN4rtRO.cjs");
4
+ const require_http = require("./http-CpnKyIt0.cjs");
5
5
  let _logtape_logtape = require("@logtape/logtape");
6
6
  let _fedify_vocab = require("@fedify/vocab");
7
7
  let _opentelemetry_api = require("@opentelemetry/api");
@@ -1,8 +1,8 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
5
- import { a as validateCryptoKey, n as fetchKey } from "./key-3a6o6xKM.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
+ import { a as validateCryptoKey, n as fetchKey } from "./key-46iHSKPb.mjs";
6
6
  import { Activity, DataIntegrityProof, Multikey, getTypeId } from "@fedify/vocab";
7
7
  import { SpanStatusCode, trace } from "@opentelemetry/api";
8
8
  import { getLogger } from "@logtape/logtape";
@@ -1,8 +1,8 @@
1
1
  import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-UZHVTBeV.mjs";
5
- import { n as doubleKnock } from "./http-gcaUXIwe.mjs";
4
+ import { n as version, t as name } from "./deno-C9coSHzH.mjs";
5
+ import { n as doubleKnock } from "./http-wJNckb6A.mjs";
6
6
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  //#region src/federation/send.ts
@@ -7,8 +7,8 @@ import { a as assertExists, t as assertStringIncludes } from "../std__assert-Dui
7
7
  import { n as assertFalse, t as assertRejects } from "../assert_rejects-B-qJtC9Z.mjs";
8
8
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
9
9
  import { t as assert } from "../assert-ddO5KLpe.mjs";
10
- import { t as exportJwk } from "../key-3a6o6xKM.mjs";
11
- import { a as parseRfc9421Signature, c as timingSafeEqual, i as formatRfc9421SignatureParameters, l as verifyRequest, n as doubleKnock, o as parseRfc9421SignatureInput, r as formatRfc9421Signature, s as signRequest, t as createRfc9421SignatureBase } from "../http-gcaUXIwe.mjs";
10
+ import { t as exportJwk } from "../key-46iHSKPb.mjs";
11
+ import { a as parseRfc9421Signature, c as timingSafeEqual, i as formatRfc9421SignatureParameters, l as verifyRequest, n as doubleKnock, o as parseRfc9421SignatureInput, r as formatRfc9421Signature, s as signRequest, t as createRfc9421SignatureBase } from "../http-wJNckb6A.mjs";
12
12
  import { i as rsaPrivateKey2, l as rsaPublicKey5, o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-CtZLJq76.mjs";
13
13
  import { mockDocumentLoader, test } from "@fedify/fixture";
14
14
  import { FetchError, exportSpki } from "@fedify/vocab-runtime";
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import "../std__assert-Duiq_YC9.mjs";
6
6
  import { t as assertRejects } from "../assert_rejects-B-qJtC9Z.mjs";
7
7
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
8
- import { a as validateCryptoKey, i as importJwk, n as fetchKey, r as generateCryptoKeyPair, t as exportJwk } from "../key-3a6o6xKM.mjs";
8
+ import { a as validateCryptoKey, i as importJwk, n as fetchKey, r as generateCryptoKeyPair, t as exportJwk } from "../key-46iHSKPb.mjs";
9
9
  import { c as rsaPublicKey3, i as rsaPrivateKey2, o as rsaPublicKey1, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CtZLJq76.mjs";
10
10
  import { mockDocumentLoader, test } from "@fedify/fixture";
11
11
  import { CryptographicKey, Multikey } from "@fedify/vocab";
@@ -236,5 +236,55 @@ test("fetchKey()", async () => {
236
236
  cached: false
237
237
  });
238
238
  });
239
+ test("fetchKey() returns null for a malformed actor publicKey", async () => {
240
+ const actorId = "https://example.com/malformed-public-key";
241
+ const keyId = "https://example.com/malformed-public-key#main-key";
242
+ const cache = {};
243
+ const options = {
244
+ async documentLoader(resource) {
245
+ if (resource === actorId) return {
246
+ contextUrl: null,
247
+ documentUrl: resource,
248
+ document: {
249
+ "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1"],
250
+ id: actorId,
251
+ type: "Person",
252
+ publicKey: keyId
253
+ }
254
+ };
255
+ if (resource === keyId) return {
256
+ contextUrl: null,
257
+ documentUrl: resource,
258
+ document: {
259
+ "@context": "https://w3id.org/security/v1",
260
+ id: keyId,
261
+ type: "Key",
262
+ owner: actorId,
263
+ publicKeyPem: "not a public key"
264
+ }
265
+ };
266
+ return await mockDocumentLoader(resource);
267
+ },
268
+ contextLoader: mockDocumentLoader,
269
+ keyCache: {
270
+ get(keyId) {
271
+ return Promise.resolve(cache[keyId.href]);
272
+ },
273
+ set(keyId, key) {
274
+ cache[keyId.href] = key;
275
+ return Promise.resolve();
276
+ }
277
+ }
278
+ };
279
+ assertEquals(await fetchKey(actorId, CryptographicKey, options), {
280
+ key: null,
281
+ cached: false
282
+ });
283
+ assertEquals(cache, { [actorId]: null });
284
+ assertEquals(await fetchKey(actorId, CryptographicKey, options), {
285
+ key: null,
286
+ cached: true
287
+ });
288
+ });
239
289
  //#endregion
240
290
  export {};
@@ -5,9 +5,9 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { n as assertFalse, t as assertRejects } from "../assert_rejects-B-qJtC9Z.mjs";
6
6
  import { t as assertThrows } from "../assert_throws-4NwKEy2q.mjs";
7
7
  import { t as assert } from "../assert-ddO5KLpe.mjs";
8
- import { r as generateCryptoKeyPair } from "../key-3a6o6xKM.mjs";
8
+ import { r as generateCryptoKeyPair } from "../key-46iHSKPb.mjs";
9
9
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CtZLJq76.mjs";
10
- import { a as compactJsonLd, d as isInvalidUrlTypeError, f as signJsonLd, h as verifySignature, i as attachSignature, m as verifyJsonLd, n as UnsafeJsonLdError, o as createSignature, s as detachSignature } from "../ld-DqhQjuAn.mjs";
10
+ import { a as compactJsonLd, d as isInvalidUrlTypeError, f as signJsonLd, h as verifySignature, i as attachSignature, m as verifyJsonLd, n as UnsafeJsonLdError, o as createSignature, s as detachSignature } from "../ld-um2rXWg_.mjs";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  import { CryptographicKey } from "@fedify/vocab";
13
13
  import { encodeBase64 } from "byte-encodings/base64";
package/dist/sig/mod.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const require_http = require("../http-skN4rtRO.cjs");
5
- const require_proof = require("../proof-CR2QkhSu.cjs");
4
+ const require_http = require("../http-CpnKyIt0.cjs");
5
+ const require_proof = require("../proof-ChjPkvaY.cjs");
6
6
  exports.attachSignature = require_proof.attachSignature;
7
7
  exports.createProof = require_proof.createProof;
8
8
  exports.createSignature = require_proof.createSignature;
package/dist/sig/mod.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { a as fetchKey, i as exportJwk, n as signRequest, o as generateCryptoKeyPair, r as verifyRequest, s as importJwk } from "../http-CKF5iuro.js";
4
- import { _ as signJsonLd, a as doesActorOwnKey, b as verifySignature, d as createSignature, f as detachSignature, i as verifyProof, l as attachSignature, n as signObject, o as getKeyOwner, r as verifyObject, t as createProof, y as verifyJsonLd } from "../proof-DdKv1_rb.js";
3
+ import { a as fetchKey, i as exportJwk, n as signRequest, o as generateCryptoKeyPair, r as verifyRequest, s as importJwk } from "../http--7b6B0b8.js";
4
+ import { _ as signJsonLd, a as doesActorOwnKey, b as verifySignature, d as createSignature, f as detachSignature, i as verifyProof, l as attachSignature, n as signObject, o as getKeyOwner, r as verifyObject, t as createProof, y as verifyJsonLd } from "../proof-CVZp38M5.js";
5
5
  export { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, generateCryptoKeyPair, getKeyOwner, importJwk, signJsonLd, signObject, signRequest, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifySignature };
@@ -6,7 +6,7 @@ import "../std__assert-Duiq_YC9.mjs";
6
6
  import { n as assertFalse } from "../assert_rejects-B-qJtC9Z.mjs";
7
7
  import { t as assert } from "../assert-ddO5KLpe.mjs";
8
8
  import { o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-CtZLJq76.mjs";
9
- import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-nwg_KZAs.mjs";
9
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-D06XqfYj.mjs";
10
10
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
11
11
  import { Create, CryptographicKey, lookupObject } from "@fedify/vocab";
12
12
  //#region src/sig/owner.test.ts
@@ -6,7 +6,7 @@ import "../std__assert-Duiq_YC9.mjs";
6
6
  import { t as assertRejects } from "../assert_rejects-B-qJtC9Z.mjs";
7
7
  import { t as assertInstanceOf } from "../assert_instance_of-C4Ri6VuN.mjs";
8
8
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CtZLJq76.mjs";
9
- import { i as verifyProof, n as signObject, r as verifyObject, t as createProof } from "../proof-ELq6Rldh.mjs";
9
+ import { i as verifyProof, n as signObject, r as verifyObject, t as createProof } from "../proof-D7oLae2P.mjs";
10
10
  import { mockDocumentLoader, test } from "@fedify/fixture";
11
11
  import { Create, DataIntegrityProof, Multikey, Note, Place } from "@fedify/vocab";
12
12
  import { decodeMultibase, importMultibaseKey } from "@fedify/vocab-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { c as getNormalizationContextLoader } from "./ld-DqhQjuAn.mjs";
4
+ import { c as getNormalizationContextLoader } from "./ld-um2rXWg_.mjs";
5
5
  import jsonld from "@fedify/vocab-runtime/jsonld";
6
6
  //#region src/federation/temporal.ts
7
7
  function isPlainObject(value) {
@@ -5,9 +5,9 @@ import { t as esm_default } from "../esm-DVILvP5e.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-Duiq_YC9.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-B-qJtC9Z.mjs";
8
- import { l as verifyRequest } from "../http-gcaUXIwe.mjs";
8
+ import { l as verifyRequest } from "../http-wJNckb6A.mjs";
9
9
  import { i as rsaPrivateKey2 } from "../keys-CtZLJq76.mjs";
10
- import { t as getAuthenticatedDocumentLoader } from "../docloader-DF3UnbK7.mjs";
10
+ import { t as getAuthenticatedDocumentLoader } from "../docloader-CgRaAwHU.mjs";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  import { UrlError } from "@fedify/vocab-runtime";
13
13
  //#region src/utils/docloader.test.ts
@@ -1,6 +1,6 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const require_kv_cache = require("../kv-cache-BKM_CfbU.cjs");
4
+ const require_kv_cache = require("../kv-cache-4irN1yHr.cjs");
5
5
  exports.getAuthenticatedDocumentLoader = require_kv_cache.getAuthenticatedDocumentLoader;
6
6
  exports.kvCache = require_kv_cache.kvCache;
package/dist/utils/mod.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "../kv-cache-BR7E440Z.js";
3
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "../kv-cache-JT449dGm.js";
4
4
  export { getAuthenticatedDocumentLoader, kvCache };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/fedify",
3
- "version": "2.0.20",
3
+ "version": "2.0.21-dev.1426+9829bc7d",
4
4
  "description": "An ActivityPub server framework",
5
5
  "keywords": [
6
6
  "ActivityPub",
@@ -144,9 +144,9 @@
144
144
  "uri-template-router": "^1.0.0",
145
145
  "url-template": "^3.1.1",
146
146
  "urlpattern-polyfill": "^10.1.0",
147
- "@fedify/vocab": "2.0.20",
148
- "@fedify/webfinger": "2.0.20",
149
- "@fedify/vocab-runtime": "2.0.20"
147
+ "@fedify/vocab-runtime": "2.0.21-dev.1426+9829bc7d",
148
+ "@fedify/webfinger": "2.0.21-dev.1426+9829bc7d",
149
+ "@fedify/vocab": "2.0.21-dev.1426+9829bc7d"
150
150
  },
151
151
  "devDependencies": {
152
152
  "@std/assert": "npm:@jsr/std__assert@^0.226.0",
@@ -159,7 +159,7 @@
159
159
  "typescript": "^6.0.0",
160
160
  "wrangler": "^4.17.0",
161
161
  "@fedify/fixture": "2.0.0",
162
- "@fedify/vocab-tools": "^2.0.20"
162
+ "@fedify/vocab-tools": "^2.0.21-dev.1426+9829bc7d"
163
163
  },
164
164
  "scripts": {
165
165
  "build:self": "tsdown",