@fedify/fedify 2.1.0-dev.503 → 2.1.0-dev.523

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 (78) hide show
  1. package/dist/{builder-BHUnSQtB.js → builder-CJkMYxxc.js} +9 -3
  2. package/dist/compat/mod.d.cts +3 -3
  3. package/dist/compat/mod.d.ts +3 -3
  4. package/dist/compat/transformers.test.js +12 -12
  5. package/dist/{context-DZJhUmzF.d.ts → context--RwChtri.d.ts} +54 -2
  6. package/dist/{context-D3QkEtZd.d.cts → context-DL0cPpPV.d.cts} +54 -2
  7. package/dist/{deno-BYerLnry.js → deno-CQdJQjC5.js} +1 -1
  8. package/dist/{docloader-MSkogD2T.js → docloader-Cyl0-S8m.js} +2 -2
  9. package/dist/federation/builder.test.js +14 -3
  10. package/dist/federation/handler.test.js +97 -13
  11. package/dist/federation/idempotency.test.js +12 -12
  12. package/dist/federation/inbox.test.js +2 -2
  13. package/dist/federation/keycache.test.js +46 -2
  14. package/dist/federation/middleware.test.js +206 -12
  15. package/dist/federation/mod.cjs +4 -4
  16. package/dist/federation/mod.d.cts +4 -4
  17. package/dist/federation/mod.d.ts +4 -4
  18. package/dist/federation/mod.js +4 -4
  19. package/dist/federation/send.test.js +5 -5
  20. package/dist/federation/webfinger.test.js +12 -12
  21. package/dist/{http-DkHdFfrc.d.ts → http-BbfOqHGG.d.ts} +80 -8
  22. package/dist/{http-DJT6NciB.cjs → http-D6a6mMc0.cjs} +305 -99
  23. package/dist/{http-CSX1-Mgi.js → http-DJmytoC2.js} +295 -101
  24. package/dist/{http-S2U3qDwN.js → http-DK0CTomU.js} +153 -57
  25. package/dist/{http-Cz3MlXAZ.d.cts → http-DsqqmkXi.d.cts} +80 -8
  26. package/dist/{inbox-BaA0g5I_.js → inbox-CWa6sqsk.js} +1 -1
  27. package/dist/{key-DCdTVZiK.js → key-DRgvVevp.js} +145 -47
  28. package/dist/keycache-C7k8s1Bk.js +102 -0
  29. package/dist/{kv-cache-Vtxhbo1W.cjs → kv-cache-DPtsJ1sL.cjs} +1 -1
  30. package/dist/{kv-cache-CQPL_aGY.js → kv-cache-MPcS_mGG.js} +1 -1
  31. package/dist/{ld-CrX7pQda.js → ld-s9_8WfBc.js} +2 -2
  32. package/dist/{middleware-CfI9C9Xy.js → middleware-2XtoTBq0.js} +12 -12
  33. package/dist/{middleware-MlO5iUeZ.js → middleware-Ajnk9qHB.js} +158 -22
  34. package/dist/middleware-BgCIhb_C.cjs +12 -0
  35. package/dist/{middleware-D4S6i4A_.cjs → middleware-BoCzk7-G.cjs} +158 -22
  36. package/dist/{middleware-C8PKuPrm.js → middleware-DGUNDGCl.js} +4 -4
  37. package/dist/{middleware-BelSJK7m.js → middleware-Dn9UDJZP.js} +100 -24
  38. package/dist/{mod-CwZXZJ9d.d.ts → mod-BugwI0JN.d.ts} +1 -1
  39. package/dist/{mod-DPkRU3EK.d.cts → mod-CFBU2OT3.d.cts} +1 -1
  40. package/dist/{mod-DUWcVv49.d.ts → mod-CvxylbuV.d.ts} +1 -1
  41. package/dist/{mod-DVwHUI_x.d.cts → mod-DE8MYisy.d.cts} +1 -1
  42. package/dist/{mod-DXsQakeS.d.cts → mod-DKG0ovjR.d.cts} +1 -1
  43. package/dist/{mod-DnSsduJF.d.ts → mod-DcfFNgYf.d.ts} +1 -1
  44. package/dist/{mod-Di3W5OdP.d.cts → mod-Dp0kK0hO.d.cts} +1 -1
  45. package/dist/{mod-DosD6NsG.d.ts → mod-Z7lIaCfo.d.ts} +1 -1
  46. package/dist/mod.cjs +8 -4
  47. package/dist/mod.d.cts +8 -8
  48. package/dist/mod.d.ts +8 -8
  49. package/dist/mod.js +7 -5
  50. package/dist/nodeinfo/handler.test.js +12 -12
  51. package/dist/otel/exporter.test.js +43 -2
  52. package/dist/otel/mod.cjs +7 -1
  53. package/dist/otel/mod.d.cts +12 -0
  54. package/dist/otel/mod.d.ts +12 -0
  55. package/dist/otel/mod.js +7 -1
  56. package/dist/{owner-BAlnLKMO.js → owner-Cx8gV-j4.js} +1 -1
  57. package/dist/{proof-DMgHaXNJ.js → proof-CDr3NP3R.js} +2 -2
  58. package/dist/{proof-BgUVmaJz.js → proof-Le4DAkqb.js} +1 -1
  59. package/dist/{proof-CR5RUAmy.cjs → proof-qHcNgE5i.cjs} +1 -1
  60. package/dist/{send-B2aZYf9A.js → send-DreBSY1U.js} +2 -2
  61. package/dist/sig/http.test.js +85 -5
  62. package/dist/sig/key.test.js +70 -3
  63. package/dist/sig/ld.test.js +3 -3
  64. package/dist/sig/mod.cjs +4 -2
  65. package/dist/sig/mod.d.cts +3 -3
  66. package/dist/sig/mod.d.ts +3 -3
  67. package/dist/sig/mod.js +3 -3
  68. package/dist/sig/owner.test.js +3 -3
  69. package/dist/sig/proof.test.js +3 -3
  70. package/dist/testing/mod.d.ts +92 -0
  71. package/dist/utils/docloader.test.js +4 -4
  72. package/dist/utils/mod.cjs +2 -2
  73. package/dist/utils/mod.d.cts +2 -2
  74. package/dist/utils/mod.d.ts +2 -2
  75. package/dist/utils/mod.js +2 -2
  76. package/package.json +5 -5
  77. package/dist/keycache-DRxpZ5r9.js +0 -48
  78. package/dist/middleware-D4XcpSBG.cjs +0 -12
@@ -8,25 +8,25 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
11
- import "../deno-BYerLnry.js";
12
- import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "../middleware-BelSJK7m.js";
11
+ import "../deno-CQdJQjC5.js";
12
+ import { ContextImpl, FederationImpl, InboxContextImpl, KvSpecDeterminer, createFederation } from "../middleware-Dn9UDJZP.js";
13
13
  import "../client-Dg7OfUDA.js";
14
14
  import { RouterError } from "../router-D9eI0s4b.js";
15
15
  import "../types-CPz01LGH.js";
16
- import "../key-DCdTVZiK.js";
17
- import { signRequest, verifyRequest } from "../http-S2U3qDwN.js";
18
- import { detachSignature, signJsonLd, verifyJsonLd } from "../ld-CrX7pQda.js";
19
- import { doesActorOwnKey } from "../owner-BAlnLKMO.js";
20
- import { signObject, verifyObject } from "../proof-DMgHaXNJ.js";
21
- import { getAuthenticatedDocumentLoader } from "../docloader-MSkogD2T.js";
16
+ import "../key-DRgvVevp.js";
17
+ import { signRequest, verifyRequest } from "../http-DK0CTomU.js";
18
+ import { detachSignature, signJsonLd, verifyJsonLd } from "../ld-s9_8WfBc.js";
19
+ import { doesActorOwnKey } from "../owner-Cx8gV-j4.js";
20
+ import { signObject, verifyObject } from "../proof-CDr3NP3R.js";
21
+ import { getAuthenticatedDocumentLoader } from "../docloader-Cyl0-S8m.js";
22
22
  import "../kv-cache-B__dHl7g.js";
23
- import "../inbox-BaA0g5I_.js";
24
- import "../builder-BHUnSQtB.js";
23
+ import "../inbox-CWa6sqsk.js";
24
+ import "../builder-CJkMYxxc.js";
25
25
  import "../collection-CcnIw1qY.js";
26
- import "../keycache-DRxpZ5r9.js";
26
+ import "../keycache-C7k8s1Bk.js";
27
27
  import "../negotiation-5NPJL6zp.js";
28
28
  import "../retry-D4GJ670a.js";
29
- import "../send-B2aZYf9A.js";
29
+ import "../send-DreBSY1U.js";
30
30
  import { assertStrictEquals } from "../std__assert-DWivtrGR.js";
31
31
  import { assertFalse, assertRejects } from "../assert_rejects-Ce45JcFg.js";
32
32
  import { assertThrows } from "../assert_throws-BNXdRGWP.js";
@@ -1082,6 +1082,200 @@ test("Federation.setInboxListeners()", async (t) => {
1082
1082
  await inbox[0][0].documentLoader("https://example.com/person");
1083
1083
  assertEquals(authenticatedRequests, [["https://example.com/person", "https://example.com/users/john#main-key"]]);
1084
1084
  });
1085
+ await t.step("onUnverifiedActivity()", async (t$1) => {
1086
+ const options = {
1087
+ documentLoader: mockDocumentLoader,
1088
+ contextLoader: mockDocumentLoader
1089
+ };
1090
+ async function createInboxRequest(activity, signature) {
1091
+ let request = new Request("https://example.com/inbox", {
1092
+ method: "POST",
1093
+ headers: {
1094
+ "Content-Type": "application/activity+json",
1095
+ accept: "application/ld+json"
1096
+ },
1097
+ body: JSON.stringify(await activity.toJsonLd(options))
1098
+ });
1099
+ if (signature != null) request = await signRequest(request, signature.privateKey, signature.keyId);
1100
+ return request;
1101
+ }
1102
+ function createFederationWithLoader(documentLoader$1) {
1103
+ const federation = createFederation({
1104
+ kv: new MemoryKvStore(),
1105
+ documentLoaderFactory: () => documentLoader$1,
1106
+ contextLoaderFactory: () => mockDocumentLoader
1107
+ });
1108
+ const verified = [];
1109
+ federation.setActorDispatcher("/users/{identifier}", () => {
1110
+ return new vocab.Person({});
1111
+ });
1112
+ const inboxListeners = federation.setInboxListeners("/users/{identifier}/inbox", "/inbox").on(vocab.Create, (_ctx, activity) => {
1113
+ verified.push(activity);
1114
+ });
1115
+ return {
1116
+ federation,
1117
+ verified,
1118
+ inboxListeners
1119
+ };
1120
+ }
1121
+ await t$1.step("receives noSignature reason", async () => {
1122
+ const { federation, verified, inboxListeners } = createFederationWithLoader(mockDocumentLoader);
1123
+ let receivedReason = null;
1124
+ inboxListeners.onUnverifiedActivity((_ctx, _activity, reason) => {
1125
+ receivedReason = reason;
1126
+ return new Response(null, { status: 202 });
1127
+ });
1128
+ const response = await federation.fetch(await createInboxRequest(new vocab.Create({
1129
+ id: new URL("https://remote.example/activities/no-signature"),
1130
+ actor: new URL("https://remote.example/actors/alice")
1131
+ })), { contextData: void 0 });
1132
+ assertEquals(response.status, 202);
1133
+ assertEquals(receivedReason, { type: "noSignature" });
1134
+ assertEquals(verified, []);
1135
+ });
1136
+ await t$1.step("receives keyFetchError for 410 responses", async () => {
1137
+ const goneKeyId = new URL("https://gone.example/actors/alice#main-key");
1138
+ const goneLoader = async (url) => {
1139
+ if (url === goneKeyId.href) throw new FetchError(goneKeyId, `HTTP 410: ${goneKeyId.href}`, new Response(null, { status: 410 }));
1140
+ return await mockDocumentLoader(url);
1141
+ };
1142
+ const { federation, verified, inboxListeners } = createFederationWithLoader(goneLoader);
1143
+ let receivedReason = null;
1144
+ inboxListeners.onUnverifiedActivity((_ctx, _activity, reason) => {
1145
+ receivedReason = reason;
1146
+ return new Response(null, { status: 202 });
1147
+ });
1148
+ const response = await federation.fetch(await createInboxRequest(new vocab.Create({
1149
+ id: new URL("https://gone.example/activities/delete"),
1150
+ actor: new URL("https://gone.example/actors/alice")
1151
+ }), {
1152
+ privateKey: rsaPrivateKey3,
1153
+ keyId: goneKeyId
1154
+ }), { contextData: void 0 });
1155
+ assertEquals(response.status, 202);
1156
+ assertEquals(verified, []);
1157
+ assertEquals(receivedReason.type, "keyFetchError");
1158
+ assertEquals(receivedReason.keyId.href, goneKeyId.href);
1159
+ assertEquals(receivedReason.result.status, 410);
1160
+ });
1161
+ await t$1.step("preserves keyFetchError details across retries", async () => {
1162
+ const keyId = new URL("https://gone.example/actors/alice#main-key");
1163
+ let keyFetches = 0;
1164
+ const goneLoader = async (url) => {
1165
+ if (url === keyId.href) {
1166
+ keyFetches++;
1167
+ throw new FetchError(keyId, `HTTP 410: ${keyId.href}`, new Response(null, { status: 410 }));
1168
+ }
1169
+ return await mockDocumentLoader(url);
1170
+ };
1171
+ const { federation, inboxListeners } = createFederationWithLoader(goneLoader);
1172
+ const reasons = [];
1173
+ inboxListeners.onUnverifiedActivity((_ctx, _activity, reason) => {
1174
+ reasons.push(reason);
1175
+ return new Response(null, { status: 202 });
1176
+ });
1177
+ const request = await createInboxRequest(new vocab.Create({
1178
+ id: new URL("https://gone.example/activities/retry"),
1179
+ actor: new URL("https://gone.example/actors/alice")
1180
+ }), {
1181
+ privateKey: rsaPrivateKey3,
1182
+ keyId
1183
+ });
1184
+ const first = await federation.fetch(request.clone(), { contextData: void 0 });
1185
+ const second = await federation.fetch(request.clone(), { contextData: void 0 });
1186
+ assertEquals(first.status, 202);
1187
+ assertEquals(second.status, 202);
1188
+ assertEquals(keyFetches, 1);
1189
+ assertEquals(reasons[0].type, "keyFetchError");
1190
+ assertEquals(reasons[1].type, "keyFetchError");
1191
+ assertEquals(reasons[1].result.status, 410);
1192
+ });
1193
+ await t$1.step("falls back to 401 when handler returns void", async () => {
1194
+ const missingKeyId = new URL("https://missing.example/actors/alice#main-key");
1195
+ const missingLoader = async (url) => {
1196
+ if (url === missingKeyId.href) throw new FetchError(missingKeyId, `HTTP 404: ${missingKeyId.href}`, new Response(null, { status: 404 }));
1197
+ return await mockDocumentLoader(url);
1198
+ };
1199
+ const { federation, verified, inboxListeners } = createFederationWithLoader(missingLoader);
1200
+ let receivedReason = null;
1201
+ inboxListeners.onUnverifiedActivity((_ctx, _activity, reason) => {
1202
+ receivedReason = reason;
1203
+ });
1204
+ const response = await federation.fetch(await createInboxRequest(new vocab.Create({
1205
+ id: new URL("https://missing.example/activities/delete"),
1206
+ actor: new URL("https://missing.example/actors/alice")
1207
+ }), {
1208
+ privateKey: rsaPrivateKey3,
1209
+ keyId: missingKeyId
1210
+ }), { contextData: void 0 });
1211
+ assertEquals(response.status, 401);
1212
+ assertEquals(verified, []);
1213
+ assertEquals(receivedReason.type, "keyFetchError");
1214
+ assertEquals(receivedReason.result.status, 404);
1215
+ });
1216
+ await t$1.step("falls back to 401 and reports hook errors", async () => {
1217
+ const missingKeyId = new URL("https://missing.example/actors/alice#main-key");
1218
+ const missingLoader = async (url) => {
1219
+ if (url === missingKeyId.href) throw new FetchError(missingKeyId, `HTTP 404: ${missingKeyId.href}`, new Response(null, { status: 404 }));
1220
+ return await mockDocumentLoader(url);
1221
+ };
1222
+ const { federation, verified, inboxListeners } = createFederationWithLoader(missingLoader);
1223
+ let receivedErrorMessage = null;
1224
+ inboxListeners.onUnverifiedActivity(() => {
1225
+ throw new Error("Intended unverified hook failure");
1226
+ }).onError((_ctx, error) => {
1227
+ receivedErrorMessage = error.message;
1228
+ });
1229
+ const response = await federation.fetch(await createInboxRequest(new vocab.Create({
1230
+ id: new URL("https://missing.example/activities/error"),
1231
+ actor: new URL("https://missing.example/actors/alice")
1232
+ }), {
1233
+ privateKey: rsaPrivateKey3,
1234
+ keyId: missingKeyId
1235
+ }), { contextData: void 0 });
1236
+ assertEquals(response.status, 401);
1237
+ assertEquals(verified, []);
1238
+ assertEquals(receivedErrorMessage, "Intended unverified hook failure");
1239
+ });
1240
+ await t$1.step("receives invalidSignature reason", async () => {
1241
+ const { federation, verified, inboxListeners } = createFederationWithLoader(mockDocumentLoader);
1242
+ let receivedReason = null;
1243
+ inboxListeners.onUnverifiedActivity((_ctx, _activity, reason) => {
1244
+ receivedReason = reason;
1245
+ return new Response(null, { status: 202 });
1246
+ });
1247
+ const keyId = new URL("https://example.com/person2#key3");
1248
+ const response = await federation.fetch(await createInboxRequest(new vocab.Create({
1249
+ id: new URL("https://example.com/activities/invalid-signature"),
1250
+ actor: new URL("https://example.com/person2")
1251
+ }), {
1252
+ privateKey: rsaPrivateKey2,
1253
+ keyId
1254
+ }), { contextData: void 0 });
1255
+ assertEquals(response.status, 202);
1256
+ assertEquals(verified, []);
1257
+ assertEquals(receivedReason.type, "invalidSignature");
1258
+ assertEquals(receivedReason.keyId.href, keyId.href);
1259
+ });
1260
+ await t$1.step("does not run for verified activities", async () => {
1261
+ const { federation, verified, inboxListeners } = createFederationWithLoader(mockDocumentLoader);
1262
+ let unverifiedCalls = 0;
1263
+ inboxListeners.onUnverifiedActivity(() => {
1264
+ unverifiedCalls++;
1265
+ return new Response(null, { status: 202 });
1266
+ });
1267
+ const response = await federation.fetch(await createInboxRequest(new vocab.Create({
1268
+ id: new URL("https://example.com/activities/verified"),
1269
+ actor: new URL("https://example.com/person2")
1270
+ }), {
1271
+ privateKey: rsaPrivateKey3,
1272
+ keyId: new URL("https://example.com/person2#key3")
1273
+ }), { contextData: void 0 });
1274
+ assertEquals(response.status, 202);
1275
+ assertEquals(unverifiedCalls, 0);
1276
+ assertEquals(verified.length, 1);
1277
+ });
1278
+ });
1085
1279
  await t.step("onError()", async () => {
1086
1280
  const federation = createFederation({
1087
1281
  kv,
@@ -3,12 +3,12 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  require('../transformers-3g8GZwkZ.cjs');
6
- require('../http-DJT6NciB.cjs');
7
- const require_middleware = require('../middleware-D4S6i4A_.cjs');
8
- require('../proof-CR5RUAmy.cjs');
6
+ require('../http-D6a6mMc0.cjs');
7
+ const require_middleware = require('../middleware-BoCzk7-G.cjs');
8
+ require('../proof-qHcNgE5i.cjs');
9
9
  const require_federation = require('../federation-Bp3HI26G.cjs');
10
10
  require('../types-Cd_hszr_.cjs');
11
- require('../kv-cache-Vtxhbo1W.cjs');
11
+ require('../kv-cache-DPtsJ1sL.cjs');
12
12
 
13
13
  exports.InProcessMessageQueue = require_federation.InProcessMessageQueue;
14
14
  exports.MemoryKvStore = require_federation.MemoryKvStore;
@@ -1,7 +1,7 @@
1
1
  import "../client-C97KOq3x.cjs";
2
- import "../http-Cz3MlXAZ.cjs";
2
+ import "../http-DsqqmkXi.cjs";
3
3
  import "../owner-1AbPBOOZ.cjs";
4
- import { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable } from "../context-D3QkEtZd.cjs";
4
+ import { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable } from "../context-DL0cPpPV.cjs";
5
5
  import { KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore } from "../kv-BL4nlICN.cjs";
6
- import { WebFingerHandlerParameters, handleWebFinger } from "../mod-Di3W5OdP.cjs";
7
- export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
6
+ import { WebFingerHandlerParameters, handleWebFinger } from "../mod-Dp0kK0hO.cjs";
7
+ export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -1,9 +1,9 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
3
  import "../client-BxMZiQaD.js";
4
- import "../http-DkHdFfrc.js";
4
+ import "../http-BbfOqHGG.js";
5
5
  import "../owner-gd0Q9FuU.js";
6
- import { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable } from "../context-DZJhUmzF.js";
6
+ import { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable } from "../context--RwChtri.js";
7
7
  import { KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore } from "../kv-DXEUEP6z.js";
8
- import { WebFingerHandlerParameters, handleWebFinger } from "../mod-DnSsduJF.js";
9
- export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
8
+ import { WebFingerHandlerParameters, handleWebFinger } from "../mod-DcfFNgYf.js";
9
+ export { ActorAliasMapper, ActorCallbackSetters, ActorDispatcher, ActorHandleMapper, ActorKeyPair, ActorKeyPairsDispatcher, AuthorizePredicate, CollectionCallbackSetters, CollectionCounter, CollectionCursor, CollectionDispatcher, ConstructorWithTypeId, Context, CreateExponentialBackoffPolicyOptions, CustomCollectionCallbackSetters, CustomCollectionCounter, CustomCollectionCursor, CustomCollectionDispatcher, Federatable, Federation, FederationBuilder, FederationFetchOptions, FederationKvPrefixes, FederationOptions, FederationOrigin, FederationQueueOptions, FederationStartQueueOptions, ForwardActivityOptions, GetSignedKeyOptions, IdempotencyKeyCallback, IdempotencyStrategy, InProcessMessageQueue, InProcessMessageQueueOptions, InboxContext, InboxErrorHandler, InboxListener, InboxListenerSetters, KvKey, KvStore, KvStoreListEntry, KvStoreSetOptions, MemoryKvStore, Message, MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions, NodeInfoDispatcher, ObjectAuthorizePredicate, ObjectCallbackSetters, ObjectDispatcher, OutboxErrorHandler, OutboxPermanentFailureHandler, PageItems, ParallelMessageQueue, ParseUriResult, RequestContext, RespondWithObjectOptions, RetryContext, RetryPolicy, Rfc6570Expression, RouteActivityOptions, Router, RouterError, RouterOptions, RouterRouteResult, SendActivityError, SendActivityOptions, SendActivityOptionsForCollection, SenderKeyPair, SharedInboxKeyDispatcher, UnverifiedActivityHandler, UnverifiedActivityReason, WebFingerHandlerParameters, WebFingerLinksDispatcher, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -3,11 +3,11 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
5
  import "../transformers-C3FLHUd6.js";
6
- import "../http-CSX1-Mgi.js";
7
- import { Router, RouterError, SendActivityError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-MlO5iUeZ.js";
8
- import "../proof-BgUVmaJz.js";
6
+ import "../http-DJmytoC2.js";
7
+ import { Router, RouterError, SendActivityError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable } from "../middleware-Ajnk9qHB.js";
8
+ import "../proof-Le4DAkqb.js";
9
9
  import { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue } from "../federation-DaMfqRm4.js";
10
10
  import "../types-C93Ob9cU.js";
11
- import "../kv-cache-CQPL_aGY.js";
11
+ import "../kv-cache-MPcS_mGG.js";
12
12
 
13
13
  export { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue, Router, RouterError, SendActivityError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, handleWebFinger, respondWithObject, respondWithObjectIfAcceptable };
@@ -7,11 +7,11 @@ import { createTestTracerProvider, mockDocumentLoader, test } from "../dist-B5f6
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import { assertInstanceOf } from "../assert_instance_of-DHz7EHNU.js";
10
- import "../deno-BYerLnry.js";
11
- import "../key-DCdTVZiK.js";
12
- import { verifyRequest } from "../http-S2U3qDwN.js";
13
- import { doesActorOwnKey } from "../owner-BAlnLKMO.js";
14
- import { SendActivityError, extractInboxes, sendActivity } from "../send-B2aZYf9A.js";
10
+ import "../deno-CQdJQjC5.js";
11
+ import "../key-DRgvVevp.js";
12
+ import { verifyRequest } from "../http-DK0CTomU.js";
13
+ import { doesActorOwnKey } from "../owner-Cx8gV-j4.js";
14
+ import { SendActivityError, extractInboxes, sendActivity } from "../send-DreBSY1U.js";
15
15
  import "../std__assert-DWivtrGR.js";
16
16
  import { assertFalse, assertRejects } from "../assert_rejects-Ce45JcFg.js";
17
17
  import "../assert_throws-BNXdRGWP.js";
@@ -8,25 +8,25 @@ import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
11
- import "../deno-BYerLnry.js";
12
- import { createFederation, handleWebFinger } from "../middleware-BelSJK7m.js";
11
+ import "../deno-CQdJQjC5.js";
12
+ import { createFederation, handleWebFinger } from "../middleware-Dn9UDJZP.js";
13
13
  import "../client-Dg7OfUDA.js";
14
14
  import "../router-D9eI0s4b.js";
15
15
  import "../types-CPz01LGH.js";
16
- import "../key-DCdTVZiK.js";
17
- import "../http-S2U3qDwN.js";
18
- import "../ld-CrX7pQda.js";
19
- import "../owner-BAlnLKMO.js";
20
- import "../proof-DMgHaXNJ.js";
21
- import "../docloader-MSkogD2T.js";
16
+ import "../key-DRgvVevp.js";
17
+ import "../http-DK0CTomU.js";
18
+ import "../ld-s9_8WfBc.js";
19
+ import "../owner-Cx8gV-j4.js";
20
+ import "../proof-CDr3NP3R.js";
21
+ import "../docloader-Cyl0-S8m.js";
22
22
  import "../kv-cache-B__dHl7g.js";
23
- import "../inbox-BaA0g5I_.js";
24
- import "../builder-BHUnSQtB.js";
23
+ import "../inbox-CWa6sqsk.js";
24
+ import "../builder-CJkMYxxc.js";
25
25
  import "../collection-CcnIw1qY.js";
26
- import "../keycache-DRxpZ5r9.js";
26
+ import "../keycache-C7k8s1Bk.js";
27
27
  import "../negotiation-5NPJL6zp.js";
28
28
  import "../retry-D4GJ670a.js";
29
- import "../send-B2aZYf9A.js";
29
+ import "../send-DreBSY1U.js";
30
30
  import "../std__assert-DWivtrGR.js";
31
31
  import "../assert_rejects-Ce45JcFg.js";
32
32
  import "../assert_throws-BNXdRGWP.js";
@@ -72,6 +72,34 @@ interface FetchKeyResult<T extends CryptographicKey | Multikey> {
72
72
  readonly cached: boolean;
73
73
  }
74
74
  /**
75
+ * Detailed fetch failure information from {@link fetchKeyDetailed}.
76
+ * @since 2.1.0
77
+ */
78
+ type FetchKeyErrorResult = {
79
+ readonly status: number;
80
+ readonly response: Response;
81
+ } | {
82
+ readonly error: Error;
83
+ };
84
+ /**
85
+ * The result of {@link fetchKeyDetailed}.
86
+ * @since 2.1.0
87
+ */
88
+ interface FetchKeyDetailedResult<T extends CryptographicKey | Multikey> extends FetchKeyResult<T> {
89
+ /**
90
+ * The error that occurred while fetching the key, if fetching failed before
91
+ * a document could be parsed.
92
+ */
93
+ readonly fetchError?: FetchKeyErrorResult;
94
+ }
95
+ type FetchableKeyClass<T extends CryptographicKey | Multikey> = (new (...args: any[]) => T) & {
96
+ fromJsonLd(jsonLd: unknown, options: {
97
+ documentLoader?: DocumentLoader;
98
+ contextLoader?: DocumentLoader;
99
+ tracerProvider?: TracerProvider;
100
+ }): Promise<T>;
101
+ };
102
+ /**
75
103
  * Fetches a {@link CryptographicKey} or {@link Multikey} from the given URL.
76
104
  * If the given URL contains an {@link Actor} object, it tries to find
77
105
  * the corresponding key in the `publicKey` or `assertionMethod` property.
@@ -84,13 +112,22 @@ interface FetchKeyResult<T extends CryptographicKey | Multikey> {
84
112
  * @returns The fetched key or `null` if the key is not found.
85
113
  * @since 1.3.0
86
114
  */
87
- declare function fetchKey<T extends CryptographicKey | Multikey>(keyId: URL | string, cls: (new (...args: any[]) => T) & {
88
- fromJsonLd(jsonLd: unknown, options: {
89
- documentLoader?: DocumentLoader;
90
- contextLoader?: DocumentLoader;
91
- tracerProvider?: TracerProvider;
92
- }): Promise<T>;
93
- }, options?: FetchKeyOptions): Promise<FetchKeyResult<T>>;
115
+ declare function fetchKey<T extends CryptographicKey | Multikey>(keyId: URL | string, cls: FetchableKeyClass<T>, options?: FetchKeyOptions): Promise<FetchKeyResult<T>>;
116
+ /**
117
+ * Fetches a {@link CryptographicKey} or {@link Multikey} from the given URL,
118
+ * preserving transport-level fetch failures for callers that need to inspect
119
+ * why the key could not be loaded.
120
+ *
121
+ * @template T The type of the key to fetch. Either {@link CryptographicKey}
122
+ * or {@link Multikey}.
123
+ * @param keyId The URL of the key.
124
+ * @param cls The class of the key to fetch. Either {@link CryptographicKey}
125
+ * or {@link Multikey}.
126
+ * @param options Options for fetching the key.
127
+ * @returns The fetched key, or detailed fetch failure information.
128
+ * @since 2.1.0
129
+ */
130
+ declare function fetchKeyDetailed<T extends CryptographicKey | Multikey>(keyId: URL | string, cls: FetchableKeyClass<T>, options?: FetchKeyOptions): Promise<FetchKeyDetailedResult<T>>;
94
131
  /**
95
132
  * A cache for storing cryptographic keys.
96
133
  * @since 0.12.0
@@ -204,6 +241,31 @@ interface VerifyRequestOptions {
204
241
  tracerProvider?: TracerProvider;
205
242
  }
206
243
  /**
244
+ * The reason why {@link verifyRequestDetailed} could not verify a request.
245
+ * @since 2.1.0
246
+ */
247
+ type VerifyRequestFailureReason = {
248
+ readonly type: "keyFetchError";
249
+ readonly keyId: URL;
250
+ readonly result: FetchKeyErrorResult;
251
+ } | {
252
+ readonly type: "invalidSignature";
253
+ readonly keyId?: URL;
254
+ } | {
255
+ readonly type: "noSignature";
256
+ };
257
+ /**
258
+ * The detailed result of {@link verifyRequestDetailed}.
259
+ * @since 2.1.0
260
+ */
261
+ type VerifyRequestDetailedResult = {
262
+ readonly verified: true;
263
+ readonly key: CryptographicKey;
264
+ } | {
265
+ readonly verified: false;
266
+ readonly reason: VerifyRequestFailureReason;
267
+ };
268
+ /**
207
269
  * Verifies the signature of a request.
208
270
  *
209
271
  * Note that this function consumes the request body, so it should not be used
@@ -218,6 +280,16 @@ interface VerifyRequestOptions {
218
280
  */
219
281
  declare function verifyRequest(request: Request, options?: VerifyRequestOptions): Promise<CryptographicKey | null>;
220
282
  /**
283
+ * Verifies the signature of a request and returns a structured failure reason
284
+ * when verification does not succeed.
285
+ *
286
+ * @param request The request to verify.
287
+ * @param options Options for verifying the request.
288
+ * @returns The verified public key, or a structured verification failure.
289
+ * @since 2.1.0
290
+ */
291
+ declare function verifyRequestDetailed(request: Request, options?: VerifyRequestOptions): Promise<VerifyRequestDetailedResult>;
292
+ /**
221
293
  * A spec determiner for HTTP Message Signatures.
222
294
  * It determines the spec to use for signing requests.
223
295
  * It is used for double-knocking
@@ -243,4 +315,4 @@ interface HttpMessageSignaturesSpecDeterminer {
243
315
  * @since 1.6.0
244
316
  */
245
317
  //#endregion
246
- export { FetchKeyOptions, FetchKeyResult, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, KeyCache, SignRequestOptions, VerifyRequestOptions, exportJwk, fetchKey, generateCryptoKeyPair, importJwk, signRequest, verifyRequest };
318
+ export { FetchKeyDetailedResult, FetchKeyErrorResult, FetchKeyOptions, FetchKeyResult, HttpMessageSignaturesSpec, HttpMessageSignaturesSpecDeterminer, KeyCache, SignRequestOptions, VerifyRequestDetailedResult, VerifyRequestFailureReason, VerifyRequestOptions, exportJwk, fetchKey, fetchKeyDetailed, generateCryptoKeyPair, importJwk, signRequest, verifyRequest, verifyRequestDetailed };