@fedify/fedify 2.3.12 → 2.3.13

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 (68) hide show
  1. package/dist/{assert_rejects-DN60FHPX.mjs → assert_rejects-D1HYAik3.mjs} +2 -20
  2. package/dist/{assert_throws-BOkhLGYc.mjs → assert_throws-BbSMEFKo.mjs} +19 -1
  3. package/dist/{builder-B6ixdT3y.mjs → builder-BagNDcQw.mjs} +2 -2
  4. package/dist/compat/transformers.test.mjs +2 -2
  5. package/dist/{deno-D4dcoVfF.mjs → deno-XpcjbHwj.mjs} +1 -1
  6. package/dist/{docloader-NOKfswJV.mjs → docloader-QDpF5t9M.mjs} +4 -2
  7. package/dist/federation/builder.test.mjs +3 -3
  8. package/dist/federation/circuit-breaker.test.mjs +3 -3
  9. package/dist/federation/collection.test.mjs +1 -1
  10. package/dist/federation/handler.test.mjs +262 -9
  11. package/dist/federation/idempotency.test.mjs +3 -3
  12. package/dist/federation/inbox.test.mjs +25 -1
  13. package/dist/federation/keycache.test.mjs +1 -1
  14. package/dist/federation/kv.test.mjs +1 -1
  15. package/dist/federation/metrics.test.mjs +3 -3
  16. package/dist/federation/middleware.test.mjs +177 -15
  17. package/dist/federation/mod.cjs +1 -1
  18. package/dist/federation/mod.js +1 -1
  19. package/dist/federation/mq.test.mjs +4 -3
  20. package/dist/federation/negotiation.test.mjs +4 -4
  21. package/dist/federation/retry.test.mjs +1 -1
  22. package/dist/federation/router.test.mjs +3 -4
  23. package/dist/federation/send.test.mjs +7 -6
  24. package/dist/federation/temporal.test.mjs +4 -4
  25. package/dist/federation/webfinger.test.mjs +2 -2
  26. package/dist/{http-HjidyDfF.mjs → http-BRrpIDS1.mjs} +3 -3
  27. package/dist/{http-D_Xrr6kp.cjs → http-DwPnG87d.cjs} +1 -1
  28. package/dist/{http-DkyUBs_T.js → http-GHVGCeb5.js} +1 -1
  29. package/dist/inbox-BzOuCPLY.mjs +180 -0
  30. package/dist/{key-Dg-NXm4K.mjs → key-PdEu1lDF.mjs} +2 -2
  31. package/dist/{kv-cache-BhGeZk_o.js → kv-cache-BmqdF048.js} +3 -1
  32. package/dist/{kv-cache-BpVwvcSI.mjs → kv-cache-Clx3SwMp.mjs} +1 -1
  33. package/dist/{kv-cache-BwnC6JGt.cjs → kv-cache-poF6Tqnz.cjs} +3 -1
  34. package/dist/{ld-C1wveXXf.mjs → ld-D6UlzNnG.mjs} +3 -3
  35. package/dist/{metrics-cIaMxG0v.mjs → metrics-62qolVUY.mjs} +1 -1
  36. package/dist/{middleware-VxPpU0h_.mjs → middleware-C3Q3CoR8.mjs} +1 -1
  37. package/dist/{middleware-I-XlrRVl.mjs → middleware-CfbFdEO-.mjs} +96 -194
  38. package/dist/{middleware-DhOFTXmo.cjs → middleware-DkrXqZO_.cjs} +106 -34
  39. package/dist/{middleware-CnrzVu9i.js → middleware-xw9fBZoB.js} +106 -34
  40. package/dist/mod.cjs +4 -4
  41. package/dist/mod.js +4 -4
  42. package/dist/nodeinfo/client.test.mjs +2 -2
  43. package/dist/nodeinfo/handler.test.mjs +2 -2
  44. package/dist/nodeinfo/types.test.mjs +2 -2
  45. package/dist/otel/exporter.test.mjs +1 -1
  46. package/dist/{owner-CFKfE85G.mjs → owner-DWnLg-vk.mjs} +2 -2
  47. package/dist/{proof-HU__qtUD.js → proof-CUSzBztF.js} +1 -1
  48. package/dist/{proof-DBxu6g2K.cjs → proof-DF6CU-SU.cjs} +1 -1
  49. package/dist/{proof-DtpGEj0u.mjs → proof-mf6h7n4_.mjs} +3 -3
  50. package/dist/{send-CwMea5r6.mjs → send-LJUzNpVF.mjs} +3 -3
  51. package/dist/sig/http.test.mjs +6 -6
  52. package/dist/sig/key.test.mjs +6 -6
  53. package/dist/sig/ld.test.mjs +5 -5
  54. package/dist/sig/mod.cjs +2 -2
  55. package/dist/sig/mod.js +2 -2
  56. package/dist/sig/owner.test.mjs +4 -4
  57. package/dist/sig/proof.test.mjs +5 -4
  58. package/dist/{std__assert-BvGuO4xO.mjs → std__assert-BjJn2daJ.mjs} +2 -2
  59. package/dist/{temporal-ClSXyHyu.mjs → temporal-_3yIqdvy.mjs} +1 -1
  60. package/dist/utils/docloader.test.mjs +114 -39
  61. package/dist/utils/kv-cache.test.mjs +1 -1
  62. package/dist/utils/mod.cjs +1 -1
  63. package/dist/utils/mod.js +1 -1
  64. package/package.json +6 -6
  65. /package/dist/{assert-jSdZMYam.mjs → assert-CEO06XCw.mjs} +0 -0
  66. /package/dist/{circuit-breaker-test-utils-Dm5MM6l9.mjs → circuit-breaker-test-utils-CAdwjgMi.mjs} +0 -0
  67. /package/dist/{negotiation-CDW-_gUU.mjs → negotiation-DDstyBvc.mjs} +0 -0
  68. /package/dist/{retry-_VvV0h9f.mjs → retry-CXg_MBI-.mjs} +0 -0
@@ -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 { A as recordWebFingerHandle, C as recordCollectionRequest, D as recordInboxActivity, E as recordFanoutRecipients, I as name, L as version, M as formatAcceptSignature, O as recordOutboxActivity, S as recordCollectionPageItems, _ as instrumentDocumentLoader, a as verifyRequestDetailed, b as recordCircuitBreakerStateChange, d as importJwk, f as validateCryptoKey, g as getRemoteHost, h as getFederationMetrics, i as verifyRequest, j as registerQueueDepthGauge, k as recordOutboxEnqueue, m as getDurationMs, n as parseRfc9421SignatureInput, o as exportJwk, t as doubleKnock, v as isAbortError, w as recordCollectionTotalItems, x as recordCollectionDispatchDuration } from "./http-DkyUBs_T.js";
5
+ import { A as recordWebFingerHandle, C as recordCollectionRequest, D as recordInboxActivity, E as recordFanoutRecipients, I as name, L as version, M as formatAcceptSignature, O as recordOutboxActivity, S as recordCollectionPageItems, _ as instrumentDocumentLoader, a as verifyRequestDetailed, b as recordCircuitBreakerStateChange, d as importJwk, f as validateCryptoKey, g as getRemoteHost, h as getFederationMetrics, i as verifyRequest, j as registerQueueDepthGauge, k as recordOutboxEnqueue, m as getDurationMs, n as parseRfc9421SignatureInput, o as exportJwk, t as doubleKnock, v as isAbortError, w as recordCollectionTotalItems, x as recordCollectionDispatchDuration } from "./http-GHVGCeb5.js";
6
6
  import { a as MAX_BODY_SIZE, i as BodyTooLargeError, n as getNodeInfo, o as readBoundedText, t as nodeInfoToJson } from "./types-miAYfiGO.js";
7
- import { _ as hasSignatureLike, b as signJsonLd, c as getKeyOwner, f as compactJsonLd, g as hasSignature, h as getNormalizationContextLoader, i as verifyObject, l as InvalidContextReferenceError, m as detachSignature, n as hasProofLike, o as normalizeOutgoingActivityJsonLd, r as signObject, s as doesActorOwnKey, u as assertSafeJsonLd, v as isClearlyMalformedContextReference, w as wrapContextLoaderForJsonLd, x as verifyCompactJsonLd, y as isInvalidUrlTypeError } from "./proof-HU__qtUD.js";
8
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BhGeZk_o.js";
7
+ import { _ as hasSignatureLike, b as signJsonLd, c as getKeyOwner, f as compactJsonLd, g as hasSignature, h as getNormalizationContextLoader, i as verifyObject, l as InvalidContextReferenceError, m as detachSignature, n as hasProofLike, o as normalizeOutgoingActivityJsonLd, r as signObject, s as doesActorOwnKey, u as assertSafeJsonLd, v as isClearlyMalformedContextReference, w as wrapContextLoaderForJsonLd, x as verifyCompactJsonLd, y as isInvalidUrlTypeError } from "./proof-CUSzBztF.js";
8
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BmqdF048.js";
9
9
  import { getLogger, withContext } from "@logtape/logtape";
10
10
  import { Router, RouterError, assertPath } from "@fedify/uri-template";
11
11
  import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, Tombstone, getTypeId, lookupObject, traverseCollection } from "@fedify/vocab";
@@ -1263,12 +1263,34 @@ async function buildCollectionSynchronizationHeader(collectionId, actorIds) {
1263
1263
  }
1264
1264
  //#endregion
1265
1265
  //#region src/federation/inbox.ts
1266
+ /**
1267
+ * Checks whether an activity's ID and all of its actor IDs have the same
1268
+ * non-opaque origin. Activities without an ID have no origin to authenticate.
1269
+ *
1270
+ * The caller is responsible for rejecting a missing primary actor ID before
1271
+ * relying on this check.
1272
+ * @internal
1273
+ */
1274
+ function actorsHaveSameOrigin(activity) {
1275
+ if (activity.id == null) return true;
1276
+ const origin = activity.id.origin;
1277
+ return origin !== "null" && activity.actorIds.every((actor) => actor.origin === origin);
1278
+ }
1266
1279
  async function routeActivity({ context: ctx, json, originalJson, normalizedActivity, ldSignatureVerified, activity, recipient, inboxListeners, inboxContextFactory, listenerInboxContextFactory, inboxErrorHandler, kv, kvPrefixes, queue, span, meterProvider, tracerProvider, idempotencyStrategy }) {
1267
1280
  const logger = getLogger([
1268
1281
  "fedify",
1269
1282
  "federation",
1270
1283
  "inbox"
1271
1284
  ]);
1285
+ if (activity.actorId == null) {
1286
+ logger.error("Missing actor.", { activity: json });
1287
+ span.setStatus({
1288
+ code: SpanStatusCode.ERROR,
1289
+ message: "Missing actor."
1290
+ });
1291
+ recordInboxActivity(meterProvider, "rejected", getTypeId(activity).href);
1292
+ return "missingActor";
1293
+ }
1272
1294
  let cacheKey = null;
1273
1295
  if (activity.id != null) {
1274
1296
  const inboxContext = inboxContextFactory(recipient, json, activity.id?.href, getTypeId(activity).href);
@@ -1304,15 +1326,6 @@ async function routeActivity({ context: ctx, json, originalJson, normalizedActiv
1304
1326
  return "alreadyProcessed";
1305
1327
  }
1306
1328
  }
1307
- if (activity.actorId == null) {
1308
- logger.error("Missing actor.", { activity: json });
1309
- span.setStatus({
1310
- code: SpanStatusCode.ERROR,
1311
- message: "Missing actor."
1312
- });
1313
- recordInboxActivity(meterProvider, "rejected", getTypeId(activity).href);
1314
- return "missingActor";
1315
- }
1316
1329
  span.setAttribute("activitypub.actor.id", activity.actorId.href);
1317
1330
  if (queue != null) {
1318
1331
  const carrier = {};
@@ -1847,13 +1860,13 @@ function recordCollectionMetrics(meterProvider, base, result, options = {}) {
1847
1860
  * @param parameters The parameters for handling the collection.
1848
1861
  * @returns A promise that resolves to an HTTP response.
1849
1862
  */
1850
- async function handleCollection(request, { name: name$2, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
1851
- const spanName = name$2.trim().replace(/\s+/g, "_");
1863
+ async function handleCollection(request, { name: name$1, identifier, uriGetter, filter, filterPredicate, context, collectionCallbacks, tracerProvider, meterProvider, onUnauthorized, onNotFound }) {
1864
+ const spanName = name$1.trim().replace(/\s+/g, "_");
1852
1865
  tracerProvider = tracerProvider ?? trace.getTracerProvider();
1853
1866
  const tracer = tracerProvider.getTracer(name, version);
1854
1867
  const cursor = new URL(request.url).searchParams.get("cursor");
1855
1868
  const metricBase = {
1856
- kind: getCollectionMetricKind(name$2),
1869
+ kind: getCollectionMetricKind(name$1),
1857
1870
  page: cursor != null,
1858
1871
  dispatcher: "built_in"
1859
1872
  };
@@ -1894,7 +1907,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
1894
1907
  span.setStatus({ code: SpanStatusCode.ERROR });
1895
1908
  return await onNotFound(request);
1896
1909
  }
1897
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
1910
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
1898
1911
  itemCount = items.length;
1899
1912
  span.setAttribute("fedify.collection.items", itemCount);
1900
1913
  return items;
@@ -1934,7 +1947,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
1934
1947
  } else {
1935
1948
  const uri = new URL(baseUri);
1936
1949
  uri.searchParams.set("cursor", cursor);
1937
- const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$2}`, {
1950
+ const pageOrResponse = await tracer.startActiveSpan(`activitypub.dispatch_collection_page ${name$1}`, {
1938
1951
  kind: SpanKind.SERVER,
1939
1952
  attributes: {
1940
1953
  "activitypub.collection.id": uri.href,
@@ -1950,7 +1963,7 @@ async function handleCollection(request, { name: name$2, identifier, uriGetter,
1950
1963
  span.setStatus({ code: SpanStatusCode.ERROR });
1951
1964
  return await onNotFound(request);
1952
1965
  }
1953
- const items = filterCollectionItems(page.items, name$2, filterPredicate);
1966
+ const items = filterCollectionItems(page.items, name$1, filterPredicate);
1954
1967
  itemCount = items.length;
1955
1968
  span.setAttribute("fedify.collection.items", itemCount);
1956
1969
  return {
@@ -2659,6 +2672,36 @@ async function handleInboxInternal(request, parameters, span) {
2659
2672
  return await getFailedSignatureResponse(inboxChallengePolicy, kv, kvPrefixes);
2660
2673
  }
2661
2674
  }
2675
+ if (activity.actorId == null) {
2676
+ logger.error("Missing actor.", {
2677
+ activity: json,
2678
+ recipient
2679
+ });
2680
+ span.setStatus({
2681
+ code: SpanStatusCode.ERROR,
2682
+ message: "Missing actor."
2683
+ });
2684
+ return new Response("Missing actor.", {
2685
+ status: 400,
2686
+ headers: { "Content-Type": "text/plain; charset=utf-8" }
2687
+ });
2688
+ }
2689
+ if (!skipSignatureVerification && activity.id != null && !actorsHaveSameOrigin(activity)) {
2690
+ logger.error("The activity ({activityId}) and its actors do not have the same origin.", {
2691
+ activity: json,
2692
+ recipient,
2693
+ activityId: activity.id.href,
2694
+ actorIds: activity.actorIds.map((actor) => actor.href)
2695
+ });
2696
+ span.setStatus({
2697
+ code: SpanStatusCode.ERROR,
2698
+ message: `The activity (${activity.id.href}) and its actors do not have the same origin.`
2699
+ });
2700
+ return new Response("The activity and its actors do not have the same origin.", {
2701
+ status: 401,
2702
+ headers: { "Content-Type": "text/plain; charset=utf-8" }
2703
+ });
2704
+ }
2662
2705
  const routeResult = await routeActivity({
2663
2706
  context: ctx,
2664
2707
  json,
@@ -2826,8 +2869,8 @@ var CustomCollectionHandler = class {
2826
2869
  * @param CollectionPage The CollectionPage constructor.
2827
2870
  * @param filterPredicate Optional filter predicate for items.
2828
2871
  */
2829
- constructor(name$1, values, context, callbacks, tracerProvider = trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
2830
- this.name = name$1;
2872
+ constructor(name$2, values, context, callbacks, tracerProvider = trace.getTracerProvider(), meterProvider, Collection, CollectionPage, filterPredicate) {
2873
+ this.name = name$2;
2831
2874
  this.values = values;
2832
2875
  this.context = context;
2833
2876
  this.callbacks = callbacks;
@@ -5060,6 +5103,35 @@ var FederationImpl = class extends FederationBuilderImpl {
5060
5103
  span.setAttribute("activitypub.activity.id", activity.id.href);
5061
5104
  listenerSpan.setAttribute("activitypub.activity.id", activity.id.href);
5062
5105
  }
5106
+ if (activity.actorId == null) {
5107
+ logger.error("Missing actor in queued incoming activity.", {
5108
+ activityId: activity.id?.href,
5109
+ activity: message.activity,
5110
+ recipient: message.identifier
5111
+ });
5112
+ listenerSpan.setStatus({
5113
+ code: SpanStatusCode.ERROR,
5114
+ message: "Missing actor."
5115
+ });
5116
+ recordInboxActivity(this.meterProvider, "rejected", activityType);
5117
+ listenerSpan.end();
5118
+ return;
5119
+ }
5120
+ if (!this.skipSignatureVerification && activity.id != null && !actorsHaveSameOrigin(activity)) {
5121
+ logger.error("The queued activity ({activityId}) and its actors do not have the same origin.", {
5122
+ activityId: activity.id.href,
5123
+ actorIds: activity.actorIds.map((actor) => actor.href),
5124
+ activity: message.activity,
5125
+ recipient: message.identifier
5126
+ });
5127
+ listenerSpan.setStatus({
5128
+ code: SpanStatusCode.ERROR,
5129
+ message: `The activity (${activity.id.href}) and its actors do not have the same origin.`
5130
+ });
5131
+ recordInboxActivity(this.meterProvider, "rejected", activityType);
5132
+ listenerSpan.end();
5133
+ return;
5134
+ }
5063
5135
  cacheKey = activity.id == null ? null : [
5064
5136
  ...this.kvPrefixes.activityIdempotence,
5065
5137
  context.origin,
@@ -6322,20 +6394,6 @@ var ContextImpl = class ContextImpl {
6322
6394
  activity: await fetched.toJsonLd({ contextLoader })
6323
6395
  });
6324
6396
  return false;
6325
- } else if (fetched.actorIds.length < 1) {
6326
- logger.debug("Fetched activity object is missing an actor; unable to verify.", {
6327
- recipient,
6328
- activity: await fetched.toJsonLd({ contextLoader })
6329
- });
6330
- return false;
6331
- }
6332
- const activityId = fetched.id;
6333
- if (!fetched.actorIds.every((actor) => actor.origin === activityId.origin)) {
6334
- logger.debug("Fetched activity object has actors from different origins; unable to verify.", {
6335
- recipient,
6336
- activity: await fetched.toJsonLd({ contextLoader })
6337
- });
6338
- return false;
6339
6397
  }
6340
6398
  logger.debug("Successfully fetched the remote activity object {activityId}; ignore the original activity and use the fetched one, which is trustworthy.");
6341
6399
  activity = fetched;
@@ -6344,6 +6402,20 @@ var ContextImpl = class ContextImpl {
6344
6402
  recipient,
6345
6403
  activity: json
6346
6404
  });
6405
+ if (activity.actorId == null) {
6406
+ logger.debug("Activity is missing an actor; unable to verify.", {
6407
+ recipient,
6408
+ activity: json
6409
+ });
6410
+ return false;
6411
+ }
6412
+ if (activity.id != null && !actorsHaveSameOrigin(activity)) {
6413
+ logger.debug("Activity has actors from different origins; unable to verify.", {
6414
+ recipient,
6415
+ activity: json
6416
+ });
6417
+ return false;
6418
+ }
6347
6419
  const routeResult = await routeActivity({
6348
6420
  context: this,
6349
6421
  json,
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-D_Xrr6kp.cjs");
8
- const require_middleware = require("./middleware-DhOFTXmo.cjs");
7
+ const require_http = require("./http-DwPnG87d.cjs");
8
+ const require_middleware = require("./middleware-DkrXqZO_.cjs");
9
9
  const require_types = require("./types-DRPjmHVV.cjs");
10
- const require_proof = require("./proof-DBxu6g2K.cjs");
11
- const require_kv_cache = require("./kv-cache-BwnC6JGt.cjs");
10
+ const require_proof = require("./proof-DF6CU-SU.cjs");
11
+ const require_kv_cache = require("./kv-cache-poF6Tqnz.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 { F as validateAcceptSignature, M as formatAcceptSignature, N as fulfillAcceptSignature, P as parseAcceptSignature, a as verifyRequestDetailed, c as fetchKey, d as importJwk, i as verifyRequest, l as fetchKeyDetailed, o as exportJwk, r as signRequest, u as generateCryptoKeyPair } from "./http-DkyUBs_T.js";
7
- import { a as SendActivityError, c as buildCollectionSynchronizationHeader, d as normalizeCircuitBreakerOptions, f as parseCircuitBreakerKvState, i as createExponentialBackoffPolicy, l as digest, o as respondWithObject, p as createFederationBuilder, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as CircuitBreaker } from "./middleware-CnrzVu9i.js";
6
+ import { F as validateAcceptSignature, M as formatAcceptSignature, N as fulfillAcceptSignature, P as parseAcceptSignature, a as verifyRequestDetailed, c as fetchKey, d as importJwk, i as verifyRequest, l as fetchKeyDetailed, o as exportJwk, r as signRequest, u as generateCryptoKeyPair } from "./http-GHVGCeb5.js";
7
+ import { a as SendActivityError, c as buildCollectionSynchronizationHeader, d as normalizeCircuitBreakerOptions, f as parseCircuitBreakerKvState, i as createExponentialBackoffPolicy, l as digest, o as respondWithObject, p as createFederationBuilder, r as handleWebFinger, s as respondWithObjectIfAcceptable, t as createFederation, u as CircuitBreaker } from "./middleware-xw9fBZoB.js";
8
8
  import { n as getNodeInfo, r as parseNodeInfo, t as nodeInfoToJson } from "./types-miAYfiGO.js";
9
- import { C as verifySignature, S as verifyJsonLd, _ as hasSignatureLike, a as verifyProof, b as signJsonLd, c as getKeyOwner, d as attachSignature, i as verifyObject, m as detachSignature, n as hasProofLike, p as createSignature, r as signObject, s as doesActorOwnKey, t as createProof } from "./proof-HU__qtUD.js";
10
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BhGeZk_o.js";
9
+ import { C as verifySignature, S as verifyJsonLd, _ as hasSignatureLike, a as verifyProof, b as signJsonLd, c as getKeyOwner, d as attachSignature, i as verifyObject, m as detachSignature, n as hasProofLike, p as createSignature, r as signObject, s as doesActorOwnKey, t as createProof } from "./proof-CUSzBztF.js";
10
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-BmqdF048.js";
11
11
  import { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue, Router, RouterError } from "./federation/mod.js";
12
12
  import "./nodeinfo/mod.js";
13
13
  import "./runtime/mod.js";
@@ -3,8 +3,8 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as esm_default } from "../esm-vrlUxr60.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
6
- import "../std__assert-BvGuO4xO.mjs";
7
- import { n as assertInstanceOf } from "../assert-jSdZMYam.mjs";
6
+ import "../std__assert-BjJn2daJ.mjs";
7
+ import { n as assertInstanceOf } from "../assert-CEO06XCw.mjs";
8
8
  import { a as parseProtocol, c as parseUsage, i as parseOutboundService, n as parseInboundService, o as parseServices, r as parseNodeInfo, s as parseSoftware, t as getNodeInfo } from "../client-1He2YuBF.mjs";
9
9
  import { configure, reset } from "@logtape/logtape";
10
10
  import { test } from "@fedify/fixture";
@@ -3,9 +3,9 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { r as createRequestContext } from "../context-CxbCIptr.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
6
- import "../std__assert-BvGuO4xO.mjs";
6
+ import "../std__assert-BjJn2daJ.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
8
- import { _ as handleNodeInfo, o as createFederation, v as handleNodeInfoJrd } from "../middleware-I-XlrRVl.mjs";
8
+ import { _ as handleNodeInfo, o as createFederation, v as handleNodeInfoJrd } from "../middleware-CfbFdEO-.mjs";
9
9
  import { test } from "@fedify/fixture";
10
10
  //#region src/nodeinfo/handler.test.ts
11
11
  test("handleNodeInfo()", async () => {
@@ -2,8 +2,8 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import "../std__assert-BvGuO4xO.mjs";
6
- import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
5
+ import "../std__assert-BjJn2daJ.mjs";
6
+ import { t as assertThrows } from "../assert_throws-BbSMEFKo.mjs";
7
7
  import { t as nodeInfoToJson } from "../types-J53Kw7so.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  //#region src/nodeinfo/types.test.ts
@@ -2,7 +2,7 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import "../std__assert-BvGuO4xO.mjs";
5
+ import "../std__assert-BjJn2daJ.mjs";
6
6
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { ExportResultCode } from "@opentelemetry/core";
@@ -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-D4dcoVfF.mjs";
5
- import { c as verifyKeyOwnership, n as fetchActorDocument, t as exportJwk } from "./key-Dg-NXm4K.mjs";
4
+ import { n as version, t as name } from "./deno-XpcjbHwj.mjs";
5
+ import { c as verifyKeyOwnership, n as fetchActorDocument, t as exportJwk } from "./key-PdEu1lDF.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { CryptographicKey, Object as Object$1, isActor } from "@fedify/vocab";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
@@ -1,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { I as name, L as version, c as fetchKey, f as validateCryptoKey, h as getFederationMetrics, m as getDurationMs, o as exportJwk, p as verifyKeyOwnership, s as fetchActorDocument, y as measureSignatureKeyFetch } from "./http-DkyUBs_T.js";
3
+ import { I as name, L as version, c as fetchKey, f as validateCryptoKey, h as getFederationMetrics, m as getDurationMs, o as exportJwk, p as verifyKeyOwnership, s as fetchActorDocument, y as measureSignatureKeyFetch } from "./http-GHVGCeb5.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { Activity, CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1, PUBLIC_COLLECTION, 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-D_Xrr6kp.cjs");
4
+ const require_http = require("./http-DwPnG87d.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,9 +1,9 @@
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-D4dcoVfF.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-cIaMxG0v.mjs";
6
- import { r as fetchKey, s as validateCryptoKey } from "./key-Dg-NXm4K.mjs";
4
+ import { n as version, t as name } from "./deno-XpcjbHwj.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics, s as measureSignatureKeyFetch } from "./metrics-62qolVUY.mjs";
6
+ import { r as fetchKey, s as validateCryptoKey } from "./key-PdEu1lDF.mjs";
7
7
  import { n as preloadedOnlyDocumentLoader } from "./public-audience-Dp4ZScSr.mjs";
8
8
  import { r as normalizeOutgoingActivityJsonLd } from "./outgoing-jsonld-D4iTv7uM.mjs";
9
9
  import { getLogger } from "@logtape/logtape";
@@ -1,9 +1,9 @@
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-D4dcoVfF.mjs";
5
- import { n as getDurationMs, r as getFederationMetrics } from "./metrics-cIaMxG0v.mjs";
6
- import { n as doubleKnock } from "./http-HjidyDfF.mjs";
4
+ import { n as version, t as name } from "./deno-XpcjbHwj.mjs";
5
+ import { n as getDurationMs, r as getFederationMetrics } from "./metrics-62qolVUY.mjs";
6
+ import { n as doubleKnock } from "./http-BRrpIDS1.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
  import { FetchError, UrlError, validatePublicUrl } from "@fedify/vocab-runtime";
@@ -3,12 +3,12 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as esm_default } from "../esm-vrlUxr60.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
6
- import { n as assertExists, t as assertStringIncludes } from "../std__assert-BvGuO4xO.mjs";
7
- import { n as assertGreaterOrEqual, r as assertFalse, t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
8
- import { t as assert } from "../assert-jSdZMYam.mjs";
9
- import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
10
- import { t as exportJwk } from "../key-Dg-NXm4K.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, u as verifyRequestDetailed } from "../http-HjidyDfF.mjs";
6
+ import { n as assertExists, t as assertStringIncludes } from "../std__assert-BjJn2daJ.mjs";
7
+ import { r as assertFalse, t as assertThrows } from "../assert_throws-BbSMEFKo.mjs";
8
+ import { n as assertGreaterOrEqual, t as assertRejects } from "../assert_rejects-D1HYAik3.mjs";
9
+ import { t as assert } from "../assert-CEO06XCw.mjs";
10
+ import { t as exportJwk } from "../key-PdEu1lDF.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, u as verifyRequestDetailed } from "../http-BRrpIDS1.mjs";
12
12
  import { i as rsaPrivateKey2, l as rsaPublicKey5, o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-BAK-tUlf.mjs";
13
13
  import { t as KvKeyCache } from "../keycache-Dkc_sflV.mjs";
14
14
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
@@ -2,14 +2,14 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import "../std__assert-BvGuO4xO.mjs";
6
- import { t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
7
- import { t as assert } from "../assert-jSdZMYam.mjs";
8
- import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
5
+ import "../std__assert-BjJn2daJ.mjs";
6
+ import { t as assertThrows } from "../assert_throws-BbSMEFKo.mjs";
7
+ import { t as assertRejects } from "../assert_rejects-D1HYAik3.mjs";
8
+ import { t as assert } from "../assert-CEO06XCw.mjs";
9
9
  import { t as assertStrictEquals } from "../assert_strict_equals-XEgZAlrj.mjs";
10
- import { a as generateCryptoKeyPair, i as fetchKeyDetailed, o as importJwk, r as fetchKey, s as validateCryptoKey, t as exportJwk } from "../key-Dg-NXm4K.mjs";
10
+ import { a as generateCryptoKeyPair, i as fetchKeyDetailed, o as importJwk, r as fetchKey, s as validateCryptoKey, t as exportJwk } from "../key-PdEu1lDF.mjs";
11
11
  import { c as rsaPublicKey3, i as rsaPrivateKey2, o as rsaPublicKey1, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
12
- import { _ as wrapContextLoaderForJsonLd } from "../ld-C1wveXXf.mjs";
12
+ import { _ as wrapContextLoaderForJsonLd } from "../ld-D6UlzNnG.mjs";
13
13
  import { CryptographicKey, Multikey, Person } from "@fedify/vocab";
14
14
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
15
15
  import { FetchError, UrlError, getDocumentLoader } from "@fedify/vocab-runtime";
@@ -2,12 +2,12 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import { n as assertGreaterOrEqual, r as assertFalse, t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
6
- import { n as assertInstanceOf, t as assert } from "../assert-jSdZMYam.mjs";
7
- import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
8
- import { a as generateCryptoKeyPair } from "../key-Dg-NXm4K.mjs";
5
+ import { r as assertFalse, t as assertThrows } from "../assert_throws-BbSMEFKo.mjs";
6
+ import { n as assertGreaterOrEqual, t as assertRejects } from "../assert_rejects-D1HYAik3.mjs";
7
+ import { n as assertInstanceOf, t as assert } from "../assert-CEO06XCw.mjs";
8
+ import { a as generateCryptoKeyPair } from "../key-PdEu1lDF.mjs";
9
9
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
10
- import { a as compactJsonLd, f as isInvalidUrlTypeError, g as verifySignature, h as verifyJsonLd, i as attachSignature, n as UnsafeJsonLdError, o as createSignature, p as signJsonLd, s as detachSignature, u as hasSignatureLike } from "../ld-C1wveXXf.mjs";
10
+ import { a as compactJsonLd, f as isInvalidUrlTypeError, g as verifySignature, h as verifyJsonLd, i as attachSignature, n as UnsafeJsonLdError, o as createSignature, p as signJsonLd, s as detachSignature, u as hasSignatureLike } from "../ld-D6UlzNnG.mjs";
11
11
  import { CryptographicKey } from "@fedify/vocab";
12
12
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
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-D_Xrr6kp.cjs");
5
- const require_proof = require("../proof-DBxu6g2K.cjs");
4
+ const require_http = require("../http-DwPnG87d.cjs");
5
+ const require_proof = require("../proof-DF6CU-SU.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 { F as validateAcceptSignature, M as formatAcceptSignature, N as fulfillAcceptSignature, P as parseAcceptSignature, a as verifyRequestDetailed, c as fetchKey, d as importJwk, i as verifyRequest, l as fetchKeyDetailed, o as exportJwk, r as signRequest, u as generateCryptoKeyPair } from "../http-DkyUBs_T.js";
4
- import { C as verifySignature, S as verifyJsonLd, _ as hasSignatureLike, a as verifyProof, b as signJsonLd, c as getKeyOwner, d as attachSignature, i as verifyObject, m as detachSignature, n as hasProofLike, p as createSignature, r as signObject, s as doesActorOwnKey, t as createProof } from "../proof-HU__qtUD.js";
3
+ import { F as validateAcceptSignature, M as formatAcceptSignature, N as fulfillAcceptSignature, P as parseAcceptSignature, a as verifyRequestDetailed, c as fetchKey, d as importJwk, i as verifyRequest, l as fetchKeyDetailed, o as exportJwk, r as signRequest, u as generateCryptoKeyPair } from "../http-GHVGCeb5.js";
4
+ import { C as verifySignature, S as verifyJsonLd, _ as hasSignatureLike, a as verifyProof, b as signJsonLd, c as getKeyOwner, d as attachSignature, i as verifyObject, m as detachSignature, n as hasProofLike, p as createSignature, r as signObject, s as doesActorOwnKey, t as createProof } from "../proof-CUSzBztF.js";
5
5
  export { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getKeyOwner, hasProofLike, hasSignatureLike, importJwk, parseAcceptSignature, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
@@ -2,11 +2,11 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import "../std__assert-BvGuO4xO.mjs";
6
- import { r as assertFalse } from "../assert_rejects-DN60FHPX.mjs";
7
- import { t as assert } from "../assert-jSdZMYam.mjs";
5
+ import "../std__assert-BjJn2daJ.mjs";
6
+ import { r as assertFalse } from "../assert_throws-BbSMEFKo.mjs";
7
+ import { t as assert } from "../assert-CEO06XCw.mjs";
8
8
  import { o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-BAK-tUlf.mjs";
9
- import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-CFKfE85G.mjs";
9
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-DWnLg-vk.mjs";
10
10
  import { Create, CryptographicKey, lookupObject } from "@fedify/vocab";
11
11
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
12
12
  //#region src/sig/owner.test.ts
@@ -2,12 +2,13 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
- import "../std__assert-BvGuO4xO.mjs";
6
- import { n as assertGreaterOrEqual, r as assertFalse, t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
7
- import { n as assertInstanceOf, t as assert } from "../assert-jSdZMYam.mjs";
5
+ import "../std__assert-BjJn2daJ.mjs";
6
+ import { r as assertFalse } from "../assert_throws-BbSMEFKo.mjs";
7
+ import { n as assertGreaterOrEqual, t as assertRejects } from "../assert_rejects-D1HYAik3.mjs";
8
+ import { n as assertInstanceOf, t as assert } from "../assert-CEO06XCw.mjs";
8
9
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
9
10
  import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-D4iTv7uM.mjs";
10
- import { a as verifyProof, i as verifyObject, n as hasProofLike, r as signObject, t as createProof } from "../proof-DtpGEj0u.mjs";
11
+ import { a as verifyProof, i as verifyObject, n as hasProofLike, r as signObject, t as createProof } from "../proof-mf6h7n4_.mjs";
11
12
  import { Create, DataIntegrityProof, Document, Multikey, Note, PUBLIC_COLLECTION, Place } from "@fedify/vocab";
12
13
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
13
14
  import { decodeMultibase, importMultibaseKey } from "@fedify/vocab-runtime";
@@ -2,8 +2,8 @@ import "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { l as AssertionError } from "./assert_equals-C-ZRDbaf.mjs";
5
- import "./assert_rejects-DN60FHPX.mjs";
6
- import "./assert_throws-BOkhLGYc.mjs";
5
+ import "./assert_throws-BbSMEFKo.mjs";
6
+ import "./assert_rejects-D1HYAik3.mjs";
7
7
  import "./assert_strict_equals-XEgZAlrj.mjs";
8
8
  //#region ../../node_modules/.pnpm/@jsr+std__assert@0.226.0/node_modules/@jsr/std__assert/assert_exists.js
9
9
  /**
@@ -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-C1wveXXf.mjs";
4
+ import { c as getNormalizationContextLoader } from "./ld-D6UlzNnG.mjs";
5
5
  import jsonld from "@fedify/vocab-runtime/jsonld";
6
6
  //#region src/federation/temporal.ts
7
7
  function isPlainObject(value) {