@fedify/fedify 2.0.36-dev.2637 → 2.0.36-dev.2647

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-BC3eRIbe.mjs → builder-Cv8baeaM.mjs} +3 -3
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{deno-Dv6PIwH_.mjs → deno-Bk4jrob6.mjs} +1 -1
  4. package/dist/{docloader-BgHM-JLc.mjs → docloader-w8xGNWvP.mjs} +2 -2
  5. package/dist/federation/builder.test.mjs +1 -1
  6. package/dist/federation/handler.test.mjs +6 -6
  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 +287 -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-D69BMfAn.cjs → http-B9ZWGTaN.cjs} +1 -1
  16. package/dist/{http-CrEB4I8A.js → http-C1v_vvt4.js} +1 -1
  17. package/dist/{http-BWoAqky4.mjs → http-CDK9iAjb.mjs} +2 -2
  18. package/dist/{inbox-0Dbv0QVc.mjs → inbox-DAm48Q_C.mjs} +1 -1
  19. package/dist/{key-ChKDZfvS.mjs → key-C8OKWl8g.mjs} +1 -1
  20. package/dist/{kv-cache-CDvE8__9.js → kv-cache-B1Y7_B63.js} +1 -1
  21. package/dist/{kv-cache-B0JZ30EF.cjs → kv-cache-BFFwfQPZ.cjs} +1 -1
  22. package/dist/{ld-DbSNiv8Q.mjs → ld-gUJKeHbH.mjs} +2 -2
  23. package/dist/{middleware-DCtCNota.cjs → middleware-3t8hmtzt.cjs} +1 -1
  24. package/dist/{middleware-CEufJR5k.js → middleware-D-DIq_jJ.js} +44 -28
  25. package/dist/{middleware-C849kmHB.mjs → middleware-DLxdIffl.mjs} +52 -36
  26. package/dist/{middleware-BA9cM-vz.mjs → middleware-LgcMsPlF.mjs} +1 -1
  27. package/dist/{middleware-C_fDk_dx.cjs → middleware-_yMwRAE9.cjs} +45 -29
  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-BJeJfxnT.mjs → owner-BenEndHH.mjs} +2 -2
  32. package/dist/{proof-CaMBdk_x.mjs → proof-Bo9pmjQJ.mjs} +2 -2
  33. package/dist/{proof-DwooE8kV.js → proof-BvtZYI3N.js} +1 -1
  34. package/dist/{proof-DNgQwz9E.cjs → proof-DF1RSNYg.cjs} +1 -1
  35. package/dist/{send-CYrAOC1K.mjs → send-PTFa5PEa.mjs} +2 -2
  36. package/dist/sig/http.test.mjs +2 -2
  37. package/dist/sig/key.test.mjs +2 -2
  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 +2 -2
  43. package/dist/{temporal-BJoGKOXy.mjs → temporal-CNbx4A18.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-Dv6PIwH_.mjs";
6
- import { t as InboxListenerSet } from "./inbox-0Dbv0QVc.mjs";
5
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
6
+ import { t as InboxListenerSet } from "./inbox-DAm48Q_C.mjs";
7
7
  import { getTypeId } from "@fedify/vocab";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
  import { getLogger } from "@logtape/logtape";
@@ -43,7 +43,7 @@ var FederationBuilderImpl = class {
43
43
  this.collectionTypeIds = {};
44
44
  }
45
45
  async build(options) {
46
- const { FederationImpl } = await import("./middleware-BA9cM-vz.mjs");
46
+ const { FederationImpl } = await import("./middleware-LgcMsPlF.mjs");
47
47
  const f = new FederationImpl(options);
48
48
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
49
49
  f.router = this.router.clone();
@@ -4,7 +4,7 @@ globalThis.addEventListener = () => {};
4
4
  import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
6
6
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
7
- import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-C849kmHB.mjs";
7
+ import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-DLxdIffl.mjs";
8
8
  import { test } from "@fedify/fixture";
9
9
  import { Follow, Person } from "@fedify/vocab";
10
10
  //#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.36-dev.2637+cc2cd6fb";
6
+ var version = "2.0.36-dev.2647+2864b09d";
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 { o as validateCryptoKey } from "./key-ChKDZfvS.mjs";
5
- import { r as doubleKnockScoped } from "./http-BWoAqky4.mjs";
4
+ import { o as validateCryptoKey } from "./key-C8OKWl8g.mjs";
5
+ import { r as doubleKnockScoped } from "./http-CDK9iAjb.mjs";
6
6
  import { curry } from "es-toolkit";
7
7
  import { FetchError, UrlError, createActivityPubRequest, getRemoteDocument, logRequest } from "@fedify/vocab-runtime";
8
8
  import { openDirectFetch, openPublicFetch } from "@fedify/vocab-runtime/internal";
@@ -5,7 +5,7 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { i as assertExists, n as assertStrictEquals } from "../std__assert-DflMZha5.mjs";
6
6
  import { t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
8
- import { n as createFederationBuilder } from "../builder-BC3eRIbe.mjs";
8
+ import { n as createFederationBuilder } from "../builder-Cv8baeaM.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,14 +6,14 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
6
6
  import "../std__assert-DflMZha5.mjs";
7
7
  import { t as assert } from "../assert-BhQd8QHP.mjs";
8
8
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
9
- import { i as generateCryptoKeyPair } from "../key-ChKDZfvS.mjs";
10
- import { c as signRequest } from "../http-BWoAqky4.mjs";
9
+ import { i as generateCryptoKeyPair } from "../key-C8OKWl8g.mjs";
10
+ import { c as signRequest } from "../http-CDK9iAjb.mjs";
11
11
  import { a as rsaPrivateKey3, c as rsaPublicKey3, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
12
- import { a as compactJsonLd, f as signJsonLd } from "../ld-DbSNiv8Q.mjs";
13
- import { n as signObject } from "../proof-CaMBdk_x.mjs";
12
+ import { a as compactJsonLd, f as signJsonLd } from "../ld-gUJKeHbH.mjs";
13
+ import { n as signObject } from "../proof-Bo9pmjQJ.mjs";
14
14
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
15
- 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-C849kmHB.mjs";
16
- import { t as InboxListenerSet } from "../inbox-0Dbv0QVc.mjs";
15
+ 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-DLxdIffl.mjs";
16
+ import { t as InboxListenerSet } from "../inbox-DAm48Q_C.mjs";
17
17
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
18
18
  import { Create, CryptographicKey, Multikey, Note, Person } from "@fedify/vocab";
19
19
  //#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-DflMZha5.mjs";
6
6
  import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
7
- import { n as signObject } from "../proof-CaMBdk_x.mjs";
7
+ import { n as signObject } from "../proof-Bo9pmjQJ.mjs";
8
8
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
9
- import { a as createFederation } from "../middleware-C849kmHB.mjs";
9
+ import { a as createFederation } from "../middleware-DLxdIffl.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 { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
6
- import { n as actorsHaveSameOrigin, t as InboxListenerSet } from "../inbox-0Dbv0QVc.mjs";
6
+ import { n as actorsHaveSameOrigin, t as InboxListenerSet } from "../inbox-DAm48Q_C.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
@@ -9,14 +9,15 @@ import { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.m
9
9
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
10
10
  import { t as assertNotEquals } from "../assert_not_equals-BkxW5QJI.mjs";
11
11
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
12
- import { c as signRequest, u as verifyRequest } from "../http-BWoAqky4.mjs";
12
+ import { c as signRequest, u as verifyRequest } from "../http-CDK9iAjb.mjs";
13
13
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
14
- import { n as getAuthenticatedDocumentLoader } from "../docloader-BgHM-JLc.mjs";
15
- import { a as compactJsonLd, f as signJsonLd, i as attachSignature, m as verifyJsonLd, s as detachSignature } from "../ld-DbSNiv8Q.mjs";
16
- import { t as doesActorOwnKey } from "../owner-BJeJfxnT.mjs";
17
- import { n as signObject, r as verifyObject } from "../proof-CaMBdk_x.mjs";
14
+ import { n as getAuthenticatedDocumentLoader } from "../docloader-w8xGNWvP.mjs";
15
+ import { a as compactJsonLd, f as signJsonLd, i as attachSignature, m as verifyJsonLd, s as detachSignature } from "../ld-gUJKeHbH.mjs";
16
+ import { t as doesActorOwnKey } from "../owner-BenEndHH.mjs";
17
+ import { n as signObject, r as verifyObject } from "../proof-Bo9pmjQJ.mjs";
18
18
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
19
- import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-C849kmHB.mjs";
19
+ import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-DLxdIffl.mjs";
20
+ import { t as SendActivityError } from "../send-PTFa5PEa.mjs";
20
21
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
21
22
  import * as vocab from "@fedify/vocab";
22
23
  import { Create, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
@@ -5074,6 +5075,286 @@ test("ContextImpl.sendActivity() honors the private-address policy", async (t) =
5074
5075
  }
5075
5076
  });
5076
5077
  });
5078
+ function deferredSignal() {
5079
+ let resolve;
5080
+ return {
5081
+ promise: new Promise((r) => resolve = r),
5082
+ resolve
5083
+ };
5084
+ }
5085
+ test("ContextImpl.sendActivity() waits for sibling deliveries on failure", async () => {
5086
+ const failingInbox = "http://127.0.0.1:3001/inbox/fail";
5087
+ const slowInbox = "http://127.0.0.1:3002/inbox/slow";
5088
+ const failingEntered = deferredSignal();
5089
+ const slowEntered = deferredSignal();
5090
+ const slowCompleted = deferredSignal();
5091
+ let releaseSlow;
5092
+ const slowGate = new Promise((resolve) => releaseSlow = resolve);
5093
+ let slowStarted = false;
5094
+ let slowSettled = false;
5095
+ esm_default.spyGlobal();
5096
+ esm_default.post(failingInbox, () => {
5097
+ failingEntered.resolve();
5098
+ return new Response(null, { status: 500 });
5099
+ });
5100
+ esm_default.post(slowInbox, async () => {
5101
+ slowStarted = true;
5102
+ slowEntered.resolve();
5103
+ await slowGate;
5104
+ slowSettled = true;
5105
+ slowCompleted.resolve();
5106
+ return new Response(null, { status: 202 });
5107
+ });
5108
+ let observed;
5109
+ let released = false;
5110
+ try {
5111
+ const ctx = createFederation({
5112
+ kv: new MemoryKvStore(),
5113
+ allowPrivateAddress: true
5114
+ }).createContext(new URL("https://example.com/"));
5115
+ const activity = new Create({
5116
+ id: new URL("https://example.com/activity/fanout"),
5117
+ actor: new URL("https://example.com/person")
5118
+ });
5119
+ let outerSettled = false;
5120
+ let outerError;
5121
+ observed = ctx.sendActivity([{
5122
+ privateKey: ed25519PrivateKey,
5123
+ keyId: ed25519Multikey.id
5124
+ }], [new Person({
5125
+ id: new URL("https://example.com/recipients/failing"),
5126
+ inbox: new URL(failingInbox)
5127
+ }), new Person({
5128
+ id: new URL("https://example.com/recipients/slow"),
5129
+ inbox: new URL(slowInbox)
5130
+ })], activity, { immediate: true }).then(() => {
5131
+ outerSettled = true;
5132
+ }, (error) => {
5133
+ outerSettled = true;
5134
+ outerError = error;
5135
+ });
5136
+ await Promise.all([failingEntered.promise, slowEntered.promise]);
5137
+ await new Promise((resolve) => setTimeout(resolve, 0));
5138
+ assertFalse(outerSettled, "sendActivity() must wait for sibling deliveries before rejecting");
5139
+ releaseSlow();
5140
+ released = true;
5141
+ await observed;
5142
+ assert(slowSettled, "the delayed delivery should have settled");
5143
+ assertInstanceOf(outerError, SendActivityError);
5144
+ } finally {
5145
+ if (!released) releaseSlow();
5146
+ if (slowStarted) await slowCompleted.promise;
5147
+ await observed;
5148
+ esm_default.hardReset();
5149
+ }
5150
+ });
5151
+ test("InboxContextImpl.forwardActivity() waits for sibling deliveries on failure", async () => {
5152
+ const failingInbox = "http://127.0.0.1:3003/inbox/fail";
5153
+ const slowInbox = "http://127.0.0.1:3004/inbox/slow";
5154
+ const failingEntered = deferredSignal();
5155
+ const slowEntered = deferredSignal();
5156
+ const slowCompleted = deferredSignal();
5157
+ let releaseSlow;
5158
+ const slowGate = new Promise((resolve) => releaseSlow = resolve);
5159
+ let slowStarted = false;
5160
+ let slowSettled = false;
5161
+ esm_default.spyGlobal();
5162
+ esm_default.post(failingInbox, () => {
5163
+ failingEntered.resolve();
5164
+ return new Response(null, { status: 500 });
5165
+ });
5166
+ esm_default.post(slowInbox, async () => {
5167
+ slowStarted = true;
5168
+ slowEntered.resolve();
5169
+ await slowGate;
5170
+ slowSettled = true;
5171
+ slowCompleted.resolve();
5172
+ return new Response(null, { status: 202 });
5173
+ });
5174
+ let observed;
5175
+ let released = false;
5176
+ try {
5177
+ const federation = new FederationImpl({
5178
+ kv: new MemoryKvStore(),
5179
+ allowPrivateAddress: true
5180
+ });
5181
+ const activity = await signObject(new vocab.Create({
5182
+ id: new URL("https://example.com/activity/forward"),
5183
+ actor: new URL("https://example.com/person2")
5184
+ }), ed25519PrivateKey, ed25519Multikey.id, {
5185
+ contextLoader: mockDocumentLoader,
5186
+ documentLoader: mockDocumentLoader
5187
+ });
5188
+ const ctx = new InboxContextImpl(null, await activity.toJsonLd({ contextLoader: mockDocumentLoader }), activity.id?.href, getTypeId(activity).href, {
5189
+ data: void 0,
5190
+ federation,
5191
+ url: new URL("https://example.com/"),
5192
+ documentLoader: mockDocumentLoader,
5193
+ contextLoader: mockDocumentLoader
5194
+ });
5195
+ let outerSettled = false;
5196
+ let outerError;
5197
+ observed = ctx.forwardActivity([{
5198
+ privateKey: ed25519PrivateKey,
5199
+ keyId: ed25519Multikey.id
5200
+ }], [{
5201
+ id: new URL("https://example.com/recipients/failing"),
5202
+ inboxId: new URL(failingInbox)
5203
+ }, {
5204
+ id: new URL("https://example.com/recipients/slow"),
5205
+ inboxId: new URL(slowInbox)
5206
+ }], {
5207
+ immediate: true,
5208
+ skipIfUnsigned: true
5209
+ }).then(() => {
5210
+ outerSettled = true;
5211
+ }, (error) => {
5212
+ outerSettled = true;
5213
+ outerError = error;
5214
+ });
5215
+ await Promise.all([failingEntered.promise, slowEntered.promise]);
5216
+ await new Promise((resolve) => setTimeout(resolve, 0));
5217
+ assertFalse(outerSettled, "forwardActivity() must wait for sibling deliveries before rejecting");
5218
+ releaseSlow();
5219
+ released = true;
5220
+ await observed;
5221
+ assert(slowSettled, "the delayed delivery should have settled");
5222
+ assertInstanceOf(outerError, SendActivityError);
5223
+ } finally {
5224
+ if (!released) releaseSlow();
5225
+ if (slowStarted) await slowCompleted.promise;
5226
+ await observed;
5227
+ esm_default.hardReset();
5228
+ }
5229
+ });
5230
+ test("FederationImpl.sendActivity() drains deliveries when fan-out setup fails", async () => {
5231
+ const slowInbox = "http://127.0.0.1:3005/inbox/slow";
5232
+ const slowEntered = deferredSignal();
5233
+ const slowCompleted = deferredSignal();
5234
+ let releaseSlow;
5235
+ const slowGate = new Promise((resolve) => releaseSlow = resolve);
5236
+ let slowStarted = false;
5237
+ let slowSettled = false;
5238
+ esm_default.spyGlobal();
5239
+ esm_default.post(slowInbox, async () => {
5240
+ slowStarted = true;
5241
+ slowEntered.resolve();
5242
+ await slowGate;
5243
+ slowSettled = true;
5244
+ slowCompleted.resolve();
5245
+ return new Response(null, { status: 202 });
5246
+ });
5247
+ let observed;
5248
+ let released = false;
5249
+ try {
5250
+ const federation = new FederationImpl({
5251
+ kv: new MemoryKvStore(),
5252
+ allowPrivateAddress: true
5253
+ });
5254
+ const context = federation.createContext(new URL("https://example.com/"));
5255
+ const activity = new Create({
5256
+ id: new URL("https://example.com/activity/setup-failure"),
5257
+ actor: new URL("https://example.com/person")
5258
+ });
5259
+ let outerSettled = false;
5260
+ let outerError;
5261
+ observed = federation.sendActivity([{
5262
+ privateKey: ed25519PrivateKey,
5263
+ keyId: ed25519Multikey.id
5264
+ }], {
5265
+ [slowInbox]: {
5266
+ actorIds: ["https://example.com/recipients/slow"],
5267
+ sharedInbox: false
5268
+ },
5269
+ "not a url": {
5270
+ actorIds: ["https://example.com/recipients/invalid"],
5271
+ sharedInbox: false
5272
+ }
5273
+ }, activity, {
5274
+ context,
5275
+ immediate: true
5276
+ }).then(() => {
5277
+ outerSettled = true;
5278
+ }, (error) => {
5279
+ outerSettled = true;
5280
+ outerError = error;
5281
+ });
5282
+ await slowEntered.promise;
5283
+ await new Promise((resolve) => setTimeout(resolve, 0));
5284
+ assertFalse(outerSettled, "sendActivity() must drain started deliveries when fan-out setup fails");
5285
+ releaseSlow();
5286
+ released = true;
5287
+ await observed;
5288
+ assert(slowSettled, "the started delivery should have settled");
5289
+ assertInstanceOf(outerError, TypeError);
5290
+ } finally {
5291
+ if (!released) releaseSlow();
5292
+ if (slowStarted) await slowCompleted.promise;
5293
+ await observed;
5294
+ esm_default.hardReset();
5295
+ }
5296
+ });
5297
+ test("FederationImpl.sendActivity() handles rejections while building headers", async () => {
5298
+ const federation = new FederationImpl({ kv: new MemoryKvStore() });
5299
+ const context = federation.createContext(new URL("https://example.com/"));
5300
+ const activity = await signObject(new Create({
5301
+ id: new URL("https://example.com/activity/header-failure"),
5302
+ actor: new URL("https://example.com/person")
5303
+ }), ed25519PrivateKey, ed25519Multikey.id, {
5304
+ contextLoader: mockDocumentLoader,
5305
+ documentLoader: mockDocumentLoader
5306
+ });
5307
+ const subtle = crypto.subtle;
5308
+ const originalDigest = subtle.digest;
5309
+ let digestCalls = 0;
5310
+ let releaseSecondDigest;
5311
+ const secondDigestGate = new Promise((resolve) => {
5312
+ releaseSecondDigest = resolve;
5313
+ });
5314
+ let secondDigestStarted;
5315
+ const secondDigestEntered = new Promise((resolve) => {
5316
+ secondDigestStarted = resolve;
5317
+ });
5318
+ subtle.digest = async (algorithm, data) => {
5319
+ digestCalls++;
5320
+ if (digestCalls === 2) {
5321
+ secondDigestStarted();
5322
+ await secondDigestGate;
5323
+ }
5324
+ return await originalDigest.call(subtle, algorithm, data);
5325
+ };
5326
+ const capture = captureUnhandledRejections();
5327
+ let released = false;
5328
+ try {
5329
+ const observed = federation.sendActivity([{
5330
+ privateKey: ed25519PrivateKey,
5331
+ keyId: ed25519Multikey.id
5332
+ }], {
5333
+ "ftp://example.com/fail": {
5334
+ actorIds: ["https://example.com/recipients/failing"],
5335
+ sharedInbox: false
5336
+ },
5337
+ "http://127.0.0.1:3006/inbox": {
5338
+ actorIds: ["https://example.com/recipients/slow"],
5339
+ sharedInbox: false
5340
+ }
5341
+ }, activity, {
5342
+ context,
5343
+ immediate: true,
5344
+ collectionSync: "https://example.com/followers"
5345
+ }).catch((error) => error);
5346
+ await secondDigestEntered;
5347
+ await capture.settle();
5348
+ assertEquals(capture.reasons, [], "an early rejection must not surface as an unhandled rejection");
5349
+ releaseSecondDigest();
5350
+ released = true;
5351
+ await observed;
5352
+ } finally {
5353
+ if (!released) releaseSecondDigest();
5354
+ subtle.digest = originalDigest;
5355
+ capture.stop();
5356
+ }
5357
+ });
5077
5358
  test("Federation.fetch() bounds inbox bodies before dispatch", async () => {
5078
5359
  let dispatched = false;
5079
5360
  const json = JSON.stringify({
@@ -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-C_fDk_dx.cjs");
5
+ const require_middleware = require("../middleware-_yMwRAE9.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-CEufJR5k.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-D-DIq_jJ.js";
4
4
  import { isEqual } from "es-toolkit";
5
5
  //#region src/federation/kv.ts
6
6
  /**
@@ -8,10 +8,10 @@ import { r as assertFalse } from "../assert_throws-D4DNWrux.mjs";
8
8
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
9
9
  import { t as assertNotEquals } from "../assert_not_equals-BkxW5QJI.mjs";
10
10
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
11
- import { u as verifyRequest } from "../http-BWoAqky4.mjs";
11
+ import { u as verifyRequest } from "../http-CDK9iAjb.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
13
- import { t as doesActorOwnKey } from "../owner-BJeJfxnT.mjs";
14
- import { i as sendActivity, n as extractInboxes, r as fetchWithValidatedRedirects, t as SendActivityError } from "../send-CYrAOC1K.mjs";
13
+ import { t as doesActorOwnKey } from "../owner-BenEndHH.mjs";
14
+ import { i as sendActivity, n as extractInboxes, r as fetchWithValidatedRedirects, t as SendActivityError } from "../send-PTFa5PEa.mjs";
15
15
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
16
16
  import { Activity, Application, Endpoints, Group, Person, Service } from "@fedify/vocab";
17
17
  import { FetchError, UrlError } from "@fedify/vocab-runtime";
@@ -4,7 +4,7 @@ globalThis.addEventListener = () => {};
4
4
  import "../std__assert-DflMZha5.mjs";
5
5
  import { r as assertFalse } from "../assert_throws-D4DNWrux.mjs";
6
6
  import { t as assert } from "../assert-BhQd8QHP.mjs";
7
- import { t as hasMalformedKnownTemporalLiteral } from "../temporal-BJoGKOXy.mjs";
7
+ import { t as hasMalformedKnownTemporalLiteral } from "../temporal-CNbx4A18.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-DflMZha5.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
8
- import { a as createFederation, o as handleWebFinger } from "../middleware-C849kmHB.mjs";
8
+ import { a as createFederation, o as handleWebFinger } from "../middleware-DLxdIffl.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
@@ -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.36-dev.2637+cc2cd6fb";
14
+ var version = "2.0.36-dev.2647+2864b09d";
15
15
  //#endregion
16
16
  //#region src/sig/key.ts
17
17
  /** Classifies decoding failures without hiding unexpected loader errors. */
@@ -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.36-dev.2637+cc2cd6fb";
13
+ var version = "2.0.36-dev.2647+2864b09d";
14
14
  //#endregion
15
15
  //#region src/sig/key.ts
16
16
  /** Classifies decoding failures without hiding unexpected loader errors. */
@@ -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-Dv6PIwH_.mjs";
5
- import { o as validateCryptoKey, r as fetchKey } from "./key-ChKDZfvS.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
5
+ import { o as validateCryptoKey, r as fetchKey } from "./key-C8OKWl8g.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-Dv6PIwH_.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.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-Dv6PIwH_.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.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 { FetchError, UrlError, 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 { l as validateCryptoKey, t as doubleKnockScoped } from "./http-CrEB4I8A.js";
3
+ import { l as validateCryptoKey, t as doubleKnockScoped } from "./http-C1v_vvt4.js";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { curry } from "es-toolkit";
6
6
  import { FetchError, UrlError, createActivityPubRequest, getRemoteDocument, logRequest, preloadedContexts } from "@fedify/vocab-runtime";
@@ -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-D69BMfAn.cjs");
4
+ const require_http = require("./http-B9ZWGTaN.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,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-Dv6PIwH_.mjs";
5
- import { o as validateCryptoKey, r as fetchKey } from "./key-ChKDZfvS.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
5
+ import { o as validateCryptoKey, r as fetchKey } from "./key-C8OKWl8g.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, preloadedContexts } from "@fedify/vocab-runtime";
@@ -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-C_fDk_dx.cjs");
3
+ const require_middleware = require("./middleware-_yMwRAE9.cjs");
4
4
  exports.FederationImpl = require_middleware.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 importJwk, d as name, f as version, i as exportJwk, l as validateCryptoKey, r as verifyRequest, t as doubleKnockScoped } from "./http-CrEB4I8A.js";
5
+ import { c as importJwk, d as name, f as version, i as exportJwk, l as validateCryptoKey, r as verifyRequest, t as doubleKnockScoped } from "./http-C1v_vvt4.js";
6
6
  import { a as MAX_BODY_SIZE, i as BodyTooLargeError, n as getNodeInfo, o as readBoundedText, t as nodeInfoToJson } from "./types-B1_pRFE_.js";
7
- 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-DwooE8kV.js";
8
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-CDvE8__9.js";
7
+ 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-BvtZYI3N.js";
8
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-B1Y7_B63.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";
@@ -3485,19 +3485,27 @@ var FederationImpl = class extends FederationBuilderImpl {
3485
3485
  activity: jsonLd
3486
3486
  });
3487
3487
  const promises = [];
3488
- for (const inbox in inboxes) promises.push(sendActivity({
3489
- allowPrivateAddress: this.allowPrivateAddress,
3490
- keys,
3491
- activity: jsonLd,
3492
- activityId: activity.id?.href,
3493
- activityType: getTypeId(activity).href,
3494
- inbox: new URL(inbox),
3495
- sharedInbox: inboxes[inbox].sharedInbox,
3496
- headers: collectionSync == null ? void 0 : new Headers({ "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox].actorIds) }),
3497
- specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock),
3498
- tracerProvider: this.tracerProvider
3499
- }));
3500
- await Promise.all(promises);
3488
+ try {
3489
+ for (const inbox in inboxes) {
3490
+ const promise = sendActivity({
3491
+ allowPrivateAddress: this.allowPrivateAddress,
3492
+ keys,
3493
+ activity: jsonLd,
3494
+ activityId: activity.id?.href,
3495
+ activityType: getTypeId(activity).href,
3496
+ inbox: new URL(inbox),
3497
+ sharedInbox: inboxes[inbox].sharedInbox,
3498
+ headers: collectionSync == null ? void 0 : new Headers({ "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox].actorIds) }),
3499
+ specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock),
3500
+ tracerProvider: this.tracerProvider
3501
+ });
3502
+ promise.catch(() => {});
3503
+ promises.push(promise);
3504
+ }
3505
+ await Promise.all(promises);
3506
+ } finally {
3507
+ await Promise.allSettled(promises);
3508
+ }
3501
3509
  return;
3502
3510
  }
3503
3511
  logger.debug("Enqueuing activity {activityId} to send later.", {
@@ -4701,18 +4709,26 @@ var InboxContextImpl = class InboxContextImpl extends ContextImpl {
4701
4709
  if (options?.immediate) logger.debug("Forwarding activity immediately without queue since immediate option is set.");
4702
4710
  else logger.debug("Forwarding activity immediately without queue since queue is not set.");
4703
4711
  const promises = [];
4704
- for (const inbox in inboxes) promises.push(sendActivity({
4705
- allowPrivateAddress: this.federation.allowPrivateAddress,
4706
- keys,
4707
- activity: this.activity,
4708
- activityId: this.activityId,
4709
- activityType: this.activityType,
4710
- inbox: new URL(inbox),
4711
- sharedInbox: inboxes[inbox].sharedInbox,
4712
- tracerProvider: this.tracerProvider,
4713
- specDeterminer: new KvSpecDeterminer(this.federation.kv, this.federation.kvPrefixes.httpMessageSignaturesSpec, this.federation.firstKnock)
4714
- }));
4715
- await Promise.all(promises);
4712
+ try {
4713
+ for (const inbox in inboxes) {
4714
+ const promise = sendActivity({
4715
+ allowPrivateAddress: this.federation.allowPrivateAddress,
4716
+ keys,
4717
+ activity: this.activity,
4718
+ activityId: this.activityId,
4719
+ activityType: this.activityType,
4720
+ inbox: new URL(inbox),
4721
+ sharedInbox: inboxes[inbox].sharedInbox,
4722
+ tracerProvider: this.tracerProvider,
4723
+ specDeterminer: new KvSpecDeterminer(this.federation.kv, this.federation.kvPrefixes.httpMessageSignaturesSpec, this.federation.firstKnock)
4724
+ });
4725
+ promise.catch(() => {});
4726
+ promises.push(promise);
4727
+ }
4728
+ await Promise.all(promises);
4729
+ } finally {
4730
+ await Promise.allSettled(promises);
4731
+ }
4716
4732
  return;
4717
4733
  }
4718
4734
  logger.debug("Enqueuing activity {activityId} to forward later.", {
@@ -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-Dv6PIwH_.mjs";
6
- import { a as importJwk, o as validateCryptoKey, t as exportJwk } from "./key-ChKDZfvS.mjs";
7
- import { u as verifyRequest } from "./http-BWoAqky4.mjs";
8
- import { n as getAuthenticatedDocumentLoader } from "./docloader-BgHM-JLc.mjs";
5
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
6
+ import { a as importJwk, o as validateCryptoKey, t as exportJwk } from "./key-C8OKWl8g.mjs";
7
+ import { u as verifyRequest } from "./http-CDK9iAjb.mjs";
8
+ import { n as getAuthenticatedDocumentLoader } from "./docloader-w8xGNWvP.mjs";
9
9
  import { n as kvCache } from "./kv-cache-BrjuJue8.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-DbSNiv8Q.mjs";
11
- import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-BJeJfxnT.mjs";
12
- import { n as signObject, r as verifyObject } from "./proof-CaMBdk_x.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-gUJKeHbH.mjs";
11
+ import { n as getKeyOwner, t as doesActorOwnKey } from "./owner-BenEndHH.mjs";
12
+ import { n as signObject, r as verifyObject } from "./proof-Bo9pmjQJ.mjs";
13
13
  import { d as MAX_BODY_SIZE, f as readBoundedText, t as getNodeInfo, u as BodyTooLargeError } from "./client-DGNacEx_.mjs";
14
14
  import { t as nodeInfoToJson } from "./types-MNlFfxjv.mjs";
15
- import { n as actorsHaveSameOrigin, r as routeActivity } from "./inbox-0Dbv0QVc.mjs";
16
- import { t as FederationBuilderImpl } from "./builder-BC3eRIbe.mjs";
15
+ import { n as actorsHaveSameOrigin, r as routeActivity } from "./inbox-DAm48Q_C.mjs";
16
+ import { t as FederationBuilderImpl } from "./builder-Cv8baeaM.mjs";
17
17
  import { t as buildCollectionSynchronizationHeader } from "./collection-DI6YzYpd.mjs";
18
18
  import { t as KvKeyCache } from "./keycache-DBD6fzl1.mjs";
19
19
  import { t as acceptsJsonLd } from "./negotiation-TWEs6Cl8.mjs";
20
- import { t as hasMalformedKnownTemporalLiteral } from "./temporal-BJoGKOXy.mjs";
20
+ import { t as hasMalformedKnownTemporalLiteral } from "./temporal-CNbx4A18.mjs";
21
21
  import { t as createExponentialBackoffPolicy } from "./retry-Ddbq3AcK.mjs";
22
- import { i as sendActivity, n as extractInboxes, t as SendActivityError } from "./send-CYrAOC1K.mjs";
22
+ import { i as sendActivity, n as extractInboxes, t as SendActivityError } from "./send-PTFa5PEa.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";
@@ -2148,19 +2148,27 @@ var FederationImpl = class extends FederationBuilderImpl {
2148
2148
  activity: jsonLd
2149
2149
  });
2150
2150
  const promises = [];
2151
- for (const inbox in inboxes) promises.push(sendActivity({
2152
- allowPrivateAddress: this.allowPrivateAddress,
2153
- keys,
2154
- activity: jsonLd,
2155
- activityId: activity.id?.href,
2156
- activityType: getTypeId(activity).href,
2157
- inbox: new URL(inbox),
2158
- sharedInbox: inboxes[inbox].sharedInbox,
2159
- headers: collectionSync == null ? void 0 : new Headers({ "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox].actorIds) }),
2160
- specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock),
2161
- tracerProvider: this.tracerProvider
2162
- }));
2163
- await Promise.all(promises);
2151
+ try {
2152
+ for (const inbox in inboxes) {
2153
+ const promise = sendActivity({
2154
+ allowPrivateAddress: this.allowPrivateAddress,
2155
+ keys,
2156
+ activity: jsonLd,
2157
+ activityId: activity.id?.href,
2158
+ activityType: getTypeId(activity).href,
2159
+ inbox: new URL(inbox),
2160
+ sharedInbox: inboxes[inbox].sharedInbox,
2161
+ headers: collectionSync == null ? void 0 : new Headers({ "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox].actorIds) }),
2162
+ specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock),
2163
+ tracerProvider: this.tracerProvider
2164
+ });
2165
+ promise.catch(() => {});
2166
+ promises.push(promise);
2167
+ }
2168
+ await Promise.all(promises);
2169
+ } finally {
2170
+ await Promise.allSettled(promises);
2171
+ }
2164
2172
  return;
2165
2173
  }
2166
2174
  logger.debug("Enqueuing activity {activityId} to send later.", {
@@ -3364,18 +3372,26 @@ var InboxContextImpl = class InboxContextImpl extends ContextImpl {
3364
3372
  if (options?.immediate) logger.debug("Forwarding activity immediately without queue since immediate option is set.");
3365
3373
  else logger.debug("Forwarding activity immediately without queue since queue is not set.");
3366
3374
  const promises = [];
3367
- for (const inbox in inboxes) promises.push(sendActivity({
3368
- allowPrivateAddress: this.federation.allowPrivateAddress,
3369
- keys,
3370
- activity: this.activity,
3371
- activityId: this.activityId,
3372
- activityType: this.activityType,
3373
- inbox: new URL(inbox),
3374
- sharedInbox: inboxes[inbox].sharedInbox,
3375
- tracerProvider: this.tracerProvider,
3376
- specDeterminer: new KvSpecDeterminer(this.federation.kv, this.federation.kvPrefixes.httpMessageSignaturesSpec, this.federation.firstKnock)
3377
- }));
3378
- await Promise.all(promises);
3375
+ try {
3376
+ for (const inbox in inboxes) {
3377
+ const promise = sendActivity({
3378
+ allowPrivateAddress: this.federation.allowPrivateAddress,
3379
+ keys,
3380
+ activity: this.activity,
3381
+ activityId: this.activityId,
3382
+ activityType: this.activityType,
3383
+ inbox: new URL(inbox),
3384
+ sharedInbox: inboxes[inbox].sharedInbox,
3385
+ tracerProvider: this.tracerProvider,
3386
+ specDeterminer: new KvSpecDeterminer(this.federation.kv, this.federation.kvPrefixes.httpMessageSignaturesSpec, this.federation.firstKnock)
3387
+ });
3388
+ promise.catch(() => {});
3389
+ promises.push(promise);
3390
+ }
3391
+ await Promise.all(promises);
3392
+ } finally {
3393
+ await Promise.allSettled(promises);
3394
+ }
3379
3395
  return;
3380
3396
  }
3381
3397
  logger.debug("Enqueuing activity {activityId} to forward later.", {
@@ -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-C849kmHB.mjs";
4
+ import { n as FederationImpl } from "./middleware-DLxdIffl.mjs";
5
5
  export { FederationImpl };
@@ -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-D69BMfAn.cjs");
5
+ const require_http = require("./http-B9ZWGTaN.cjs");
6
6
  const require_types = require("./types-DOvyymM4.cjs");
7
- const require_proof = require("./proof-DNgQwz9E.cjs");
8
- const require_kv_cache = require("./kv-cache-B0JZ30EF.cjs");
7
+ const require_proof = require("./proof-DF1RSNYg.cjs");
8
+ const require_kv_cache = require("./kv-cache-BFFwfQPZ.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");
@@ -351,7 +351,7 @@ var FederationBuilderImpl = class {
351
351
  this.collectionTypeIds = {};
352
352
  }
353
353
  async build(options) {
354
- const { FederationImpl } = await Promise.resolve().then(() => require("./middleware-DCtCNota.cjs"));
354
+ const { FederationImpl } = await Promise.resolve().then(() => require("./middleware-3t8hmtzt.cjs"));
355
355
  const f = new FederationImpl(options);
356
356
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
357
357
  f.router = this.router.clone();
@@ -3479,19 +3479,27 @@ var FederationImpl = class extends FederationBuilderImpl {
3479
3479
  activity: jsonLd
3480
3480
  });
3481
3481
  const promises = [];
3482
- for (const inbox in inboxes) promises.push(sendActivity({
3483
- allowPrivateAddress: this.allowPrivateAddress,
3484
- keys,
3485
- activity: jsonLd,
3486
- activityId: activity.id?.href,
3487
- activityType: (0, _fedify_vocab.getTypeId)(activity).href,
3488
- inbox: new URL(inbox),
3489
- sharedInbox: inboxes[inbox].sharedInbox,
3490
- headers: collectionSync == null ? void 0 : new Headers({ "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox].actorIds) }),
3491
- specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock),
3492
- tracerProvider: this.tracerProvider
3493
- }));
3494
- await Promise.all(promises);
3482
+ try {
3483
+ for (const inbox in inboxes) {
3484
+ const promise = sendActivity({
3485
+ allowPrivateAddress: this.allowPrivateAddress,
3486
+ keys,
3487
+ activity: jsonLd,
3488
+ activityId: activity.id?.href,
3489
+ activityType: (0, _fedify_vocab.getTypeId)(activity).href,
3490
+ inbox: new URL(inbox),
3491
+ sharedInbox: inboxes[inbox].sharedInbox,
3492
+ headers: collectionSync == null ? void 0 : new Headers({ "Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox].actorIds) }),
3493
+ specDeterminer: new KvSpecDeterminer(this.kv, this.kvPrefixes.httpMessageSignaturesSpec, this.firstKnock),
3494
+ tracerProvider: this.tracerProvider
3495
+ });
3496
+ promise.catch(() => {});
3497
+ promises.push(promise);
3498
+ }
3499
+ await Promise.all(promises);
3500
+ } finally {
3501
+ await Promise.allSettled(promises);
3502
+ }
3495
3503
  return;
3496
3504
  }
3497
3505
  logger.debug("Enqueuing activity {activityId} to send later.", {
@@ -4695,18 +4703,26 @@ var InboxContextImpl = class InboxContextImpl extends ContextImpl {
4695
4703
  if (options?.immediate) logger.debug("Forwarding activity immediately without queue since immediate option is set.");
4696
4704
  else logger.debug("Forwarding activity immediately without queue since queue is not set.");
4697
4705
  const promises = [];
4698
- for (const inbox in inboxes) promises.push(sendActivity({
4699
- allowPrivateAddress: this.federation.allowPrivateAddress,
4700
- keys,
4701
- activity: this.activity,
4702
- activityId: this.activityId,
4703
- activityType: this.activityType,
4704
- inbox: new URL(inbox),
4705
- sharedInbox: inboxes[inbox].sharedInbox,
4706
- tracerProvider: this.tracerProvider,
4707
- specDeterminer: new KvSpecDeterminer(this.federation.kv, this.federation.kvPrefixes.httpMessageSignaturesSpec, this.federation.firstKnock)
4708
- }));
4709
- await Promise.all(promises);
4706
+ try {
4707
+ for (const inbox in inboxes) {
4708
+ const promise = sendActivity({
4709
+ allowPrivateAddress: this.federation.allowPrivateAddress,
4710
+ keys,
4711
+ activity: this.activity,
4712
+ activityId: this.activityId,
4713
+ activityType: this.activityType,
4714
+ inbox: new URL(inbox),
4715
+ sharedInbox: inboxes[inbox].sharedInbox,
4716
+ tracerProvider: this.tracerProvider,
4717
+ specDeterminer: new KvSpecDeterminer(this.federation.kv, this.federation.kvPrefixes.httpMessageSignaturesSpec, this.federation.firstKnock)
4718
+ });
4719
+ promise.catch(() => {});
4720
+ promises.push(promise);
4721
+ }
4722
+ await Promise.all(promises);
4723
+ } finally {
4724
+ await Promise.allSettled(promises);
4725
+ }
4710
4726
  return;
4711
4727
  }
4712
4728
  logger.debug("Enqueuing activity {activityId} to forward later.", {
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-D69BMfAn.cjs");
8
- const require_middleware = require("./middleware-C_fDk_dx.cjs");
7
+ const require_http = require("./http-B9ZWGTaN.cjs");
8
+ const require_middleware = require("./middleware-_yMwRAE9.cjs");
9
9
  const require_types = require("./types-DOvyymM4.cjs");
10
- const require_proof = require("./proof-DNgQwz9E.cjs");
11
- const require_kv_cache = require("./kv-cache-B0JZ30EF.cjs");
10
+ const require_proof = require("./proof-DF1RSNYg.cjs");
11
+ const require_kv_cache = require("./kv-cache-BFFwfQPZ.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 { c as importJwk, i as exportJwk, n as signRequest, o as fetchKey, r as verifyRequest, s as generateCryptoKeyPair } from "./http-CrEB4I8A.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-CEufJR5k.js";
6
+ import { c as importJwk, i as exportJwk, n as signRequest, o as fetchKey, r as verifyRequest, s as generateCryptoKeyPair } from "./http-C1v_vvt4.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-D-DIq_jJ.js";
8
8
  import { n as getNodeInfo, r as parseNodeInfo, t as nodeInfoToJson } from "./types-B1_pRFE_.js";
9
- 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-DwooE8kV.js";
10
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-CDvE8__9.js";
9
+ 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-BvtZYI3N.js";
10
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "./kv-cache-B1Y7_B63.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-DflMZha5.mjs";
7
7
  import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
8
- import { a as createFederation, h as handleNodeInfoJrd, m as handleNodeInfo } from "../middleware-C849kmHB.mjs";
8
+ import { a as createFederation, h as handleNodeInfoJrd, m as handleNodeInfo } from "../middleware-DLxdIffl.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-Dv6PIwH_.mjs";
5
- import { n as fetchActorDocument, s as verifyKeyOwnership, t as exportJwk } from "./key-ChKDZfvS.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
5
+ import { n as fetchActorDocument, s as verifyKeyOwnership, t as exportJwk } from "./key-C8OKWl8g.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,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-Dv6PIwH_.mjs";
5
- import { o as validateCryptoKey, r as fetchKey } from "./key-ChKDZfvS.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
5
+ import { o as validateCryptoKey, r as fetchKey } from "./key-C8OKWl8g.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,6 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { a as fetchActorDocument, d as name, f as version, i as exportJwk, l as validateCryptoKey, o as fetchKey, u as verifyKeyOwnership } from "./http-CrEB4I8A.js";
3
+ import { a as fetchActorDocument, d as name, f as version, i as exportJwk, l as validateCryptoKey, o as fetchKey, u as verifyKeyOwnership } from "./http-C1v_vvt4.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-D69BMfAn.cjs");
4
+ const require_http = require("./http-B9ZWGTaN.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 "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-Dv6PIwH_.mjs";
5
- import { r as doubleKnockScoped } from "./http-BWoAqky4.mjs";
4
+ import { n as version, t as name } from "./deno-Bk4jrob6.mjs";
5
+ import { r as doubleKnockScoped } from "./http-CDK9iAjb.mjs";
6
6
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
7
7
  import { FetchError, UrlError } from "@fedify/vocab-runtime";
8
8
  import { openDirectFetch, openPublicFetch } from "@fedify/vocab-runtime/internal";
@@ -7,8 +7,8 @@ import { i as assertExists, t as assertStringIncludes } from "../std__assert-Dfl
7
7
  import { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
8
8
  import { t as assert } from "../assert-BhQd8QHP.mjs";
9
9
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
10
- import { t as exportJwk } from "../key-ChKDZfvS.mjs";
11
- import { a as formatRfc9421SignatureParameters, c as signRequest, i as formatRfc9421Signature, l as timingSafeEqual, n as doubleKnock, o as parseRfc9421Signature, r as doubleKnockScoped, s as parseRfc9421SignatureInput, t as createRfc9421SignatureBase, u as verifyRequest } from "../http-BWoAqky4.mjs";
10
+ import { t as exportJwk } from "../key-C8OKWl8g.mjs";
11
+ import { a as formatRfc9421SignatureParameters, c as signRequest, i as formatRfc9421Signature, l as timingSafeEqual, n as doubleKnock, o as parseRfc9421Signature, r as doubleKnockScoped, s as parseRfc9421SignatureInput, t as createRfc9421SignatureBase, u as verifyRequest } from "../http-CDK9iAjb.mjs";
12
12
  import { i as rsaPrivateKey2, l as rsaPublicKey5, o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-CCxRJhWa.mjs";
13
13
  import { mockDocumentLoader, test } from "@fedify/fixture";
14
14
  import { FetchError, exportSpki } from "@fedify/vocab-runtime";
@@ -6,9 +6,9 @@ import { n as assertStrictEquals } from "../std__assert-DflMZha5.mjs";
6
6
  import { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
7
7
  import { t as assert } from "../assert-BhQd8QHP.mjs";
8
8
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
9
- import { a as importJwk, i as generateCryptoKeyPair, o as validateCryptoKey, r as fetchKey, t as exportJwk } from "../key-ChKDZfvS.mjs";
9
+ import { a as importJwk, i as generateCryptoKeyPair, o as validateCryptoKey, r as fetchKey, t as exportJwk } from "../key-C8OKWl8g.mjs";
10
10
  import { c as rsaPublicKey3, i as rsaPrivateKey2, o as rsaPublicKey1, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
11
- import { g as wrapContextLoaderForJsonLd } from "../ld-DbSNiv8Q.mjs";
11
+ import { g as wrapContextLoaderForJsonLd } from "../ld-gUJKeHbH.mjs";
12
12
  import { mockDocumentLoader, test } from "@fedify/fixture";
13
13
  import { CryptographicKey, Multikey, Person } from "@fedify/vocab";
14
14
  import { FetchError, UrlError, getDocumentLoader } from "@fedify/vocab-runtime";
@@ -5,9 +5,9 @@ import { t as assertEquals } from "../assert_equals-Ew3jOFa3.mjs";
5
5
  import { r as assertFalse, t as assertThrows } from "../assert_throws-D4DNWrux.mjs";
6
6
  import { n as assertInstanceOf, t as assert } from "../assert-BhQd8QHP.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
8
- import { i as generateCryptoKeyPair } from "../key-ChKDZfvS.mjs";
8
+ import { i as generateCryptoKeyPair } from "../key-C8OKWl8g.mjs";
9
9
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.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-DbSNiv8Q.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-gUJKeHbH.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-D69BMfAn.cjs");
5
- const require_proof = require("../proof-DNgQwz9E.cjs");
4
+ const require_http = require("../http-B9ZWGTaN.cjs");
5
+ const require_proof = require("../proof-DF1RSNYg.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 { c as importJwk, i as exportJwk, n as signRequest, o as fetchKey, r as verifyRequest, s as generateCryptoKeyPair } from "../http-CrEB4I8A.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-DwooE8kV.js";
3
+ import { c as importJwk, i as exportJwk, n as signRequest, o as fetchKey, r as verifyRequest, s as generateCryptoKeyPair } from "../http-C1v_vvt4.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-BvtZYI3N.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-DflMZha5.mjs";
6
6
  import { r as assertFalse } from "../assert_throws-D4DNWrux.mjs";
7
7
  import { t as assert } from "../assert-BhQd8QHP.mjs";
8
8
  import { o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-CCxRJhWa.mjs";
9
- import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-BJeJfxnT.mjs";
9
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-BenEndHH.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,8 +6,8 @@ import "../std__assert-DflMZha5.mjs";
6
6
  import { n as assertInstanceOf } from "../assert-BhQd8QHP.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
8
8
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-CCxRJhWa.mjs";
9
- import { f as signJsonLd, h as verifySignature, s as detachSignature } from "../ld-DbSNiv8Q.mjs";
10
- import { i as verifyProof, n as signObject, r as verifyObject, t as createProof } from "../proof-CaMBdk_x.mjs";
9
+ import { f as signJsonLd, h as verifySignature, s as detachSignature } from "../ld-gUJKeHbH.mjs";
10
+ import { i as verifyProof, n as signObject, r as verifyObject, t as createProof } from "../proof-Bo9pmjQJ.mjs";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  import { Create, DataIntegrityProof, Multikey, Note, Place } from "@fedify/vocab";
13
13
  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-DbSNiv8Q.mjs";
4
+ import { c as getNormalizationContextLoader } from "./ld-gUJKeHbH.mjs";
5
5
  import jsonld from "@fedify/vocab-runtime/jsonld";
6
6
  import { normalizeDateTimeLiteral } from "@fedify/vocab-runtime/temporal";
7
7
  //#region src/federation/temporal.ts
@@ -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-DflMZha5.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-WyYSTDDX.mjs";
8
- import { u as verifyRequest } from "../http-BWoAqky4.mjs";
8
+ import { u as verifyRequest } from "../http-CDK9iAjb.mjs";
9
9
  import { i as rsaPrivateKey2 } from "../keys-CCxRJhWa.mjs";
10
- import { n as getAuthenticatedDocumentLoader, t as createAuthenticatedDocumentLoader } from "../docloader-BgHM-JLc.mjs";
10
+ import { n as getAuthenticatedDocumentLoader, t as createAuthenticatedDocumentLoader } from "../docloader-w8xGNWvP.mjs";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  import { FetchError, UrlError } from "@fedify/vocab-runtime";
13
13
  import { openDirectFetch, openPublicFetch } from "@fedify/vocab-runtime/internal";
@@ -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-B0JZ30EF.cjs");
4
+ const require_kv_cache = require("../kv-cache-BFFwfQPZ.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-CDvE8__9.js";
3
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "../kv-cache-B1Y7_B63.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.36-dev.2637+cc2cd6fb",
3
+ "version": "2.0.36-dev.2647+2864b09d",
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.36-dev.2637+cc2cd6fb",
148
- "@fedify/vocab-runtime": "2.0.36-dev.2637+cc2cd6fb",
149
- "@fedify/webfinger": "2.0.36-dev.2637+cc2cd6fb"
147
+ "@fedify/vocab": "2.0.36-dev.2647+2864b09d",
148
+ "@fedify/vocab-runtime": "2.0.36-dev.2647+2864b09d",
149
+ "@fedify/webfinger": "2.0.36-dev.2647+2864b09d"
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.36-dev.2637+cc2cd6fb"
162
+ "@fedify/vocab-tools": "^2.0.36-dev.2647+2864b09d"
163
163
  },
164
164
  "scripts": {
165
165
  "build:self": "tsdown",