@fedify/fedify 2.4.0-dev.2157 → 2.4.0-dev.2164

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 (98) hide show
  1. package/dist/{builder-CLaS4-yA.mjs → builder-BqRmnx7p.mjs} +2 -2
  2. package/dist/compat/mod.d.cts +1 -1
  3. package/dist/compat/mod.d.ts +1 -1
  4. package/dist/compat/transformers.test.mjs +1 -1
  5. package/dist/{compound-proof-D7K94KPz.mjs → compound-proof-CxDBdtNz.mjs} +2 -2
  6. package/dist/{context-exYu7gDU.d.ts → context-BykNUf04.d.ts} +120 -3
  7. package/dist/{context-BMggDR-l.d.cts → context-L0Fnib9j.d.cts} +120 -3
  8. package/dist/{deno-D1gcWWqB.mjs → deno-CizGaYeG.mjs} +1 -1
  9. package/dist/{docloader-BMqr3hji.mjs → docloader-BBFAItNB.mjs} +2 -2
  10. package/dist/federation/builder.test.mjs +1 -1
  11. package/dist/federation/compound-fanout.test.mjs +3 -3
  12. package/dist/federation/handler-compound-proof.test.mjs +3 -3
  13. package/dist/federation/handler.test.mjs +5 -5
  14. package/dist/federation/hashlink-media.test.mjs +2 -2
  15. package/dist/federation/idempotency.test.mjs +2 -2
  16. package/dist/federation/keycache.test.mjs +67 -1
  17. package/dist/federation/metrics.test.mjs +1 -1
  18. package/dist/federation/middleware.test.mjs +7 -7
  19. package/dist/federation/mod.cjs +1 -1
  20. package/dist/federation/mod.d.cts +3 -3
  21. package/dist/federation/mod.d.ts +3 -3
  22. package/dist/federation/mod.js +1 -1
  23. package/dist/federation/outgoing-proof.test.mjs +5 -5
  24. package/dist/federation/portable-actor.test.mjs +3 -3
  25. package/dist/federation/portable-chain.test.mjs +3 -3
  26. package/dist/federation/portable-collection.test.mjs +4 -4
  27. package/dist/federation/portable-gateway-keys.test.mjs +180 -6
  28. package/dist/federation/portable-inbox.test.mjs +4 -4
  29. package/dist/federation/portable-parse-uri.test.d.mts +2 -0
  30. package/dist/federation/portable-parse-uri.test.mjs +348 -0
  31. package/dist/federation/portable.test.mjs +3 -3
  32. package/dist/federation/send.test.mjs +3 -3
  33. package/dist/federation/tasks/enqueue.test.mjs +1 -1
  34. package/dist/federation/tasks/tasks.test.mjs +2 -2
  35. package/dist/federation/temporal.test.mjs +1 -1
  36. package/dist/federation/webfinger.test.mjs +1 -1
  37. package/dist/{federation-2e8XrN7q.cjs → federation-DFCnp94y.cjs} +103 -29
  38. package/dist/{http-Dgtt45-K.js → http-Baovr6xq.js} +161 -7
  39. package/dist/{http-CjezPjFX.d.cts → http-Cok5-vIC.d.ts} +6 -1
  40. package/dist/{http-C-x_OLSp.d.ts → http-DC1cqAQ2.d.cts} +6 -1
  41. package/dist/{http-CGcLv8rh.mjs → http-DRH0n8TD.mjs} +7 -5
  42. package/dist/{http-BObQoB0j.cjs → http-R4g1McwE.cjs} +185 -11
  43. package/dist/{key-CPM4r6tP.mjs → key-D5awqp7u.mjs} +58 -7
  44. package/dist/key-owner-evidence-Bo3yaeL5.mjs +108 -0
  45. package/dist/{keycache-BInaECGj.mjs → keycache-PiOM9pM0.mjs} +46 -21
  46. package/dist/{kv-cache-bdPqTR1k.mjs → kv-cache-C7RWL7hz.mjs} +1 -1
  47. package/dist/{kv-cache-BweyIZTb.js → kv-cache-CZiBDLPi.js} +1 -1
  48. package/dist/{kv-cache-D2fnB8qu.cjs → kv-cache-Ct-KWRta.cjs} +1 -1
  49. package/dist/{ld-lU_ZqzsQ.mjs → ld-CyliEU48.mjs} +3 -3
  50. package/dist/{metrics-B41pRPfd.mjs → metrics-CFBEehTc.mjs} +1 -1
  51. package/dist/{middleware-xdukzV3x.mjs → middleware-B99JjvFn.mjs} +70 -20
  52. package/dist/{middleware-TrCVULgs.mjs → middleware-BmqEWsWP.mjs} +1 -1
  53. package/dist/{middleware-BYWyYjmX.js → middleware-CdpTFsa2.js} +103 -29
  54. package/dist/{mod-Bz9tFXI2.d.ts → mod--jv6vyrP.d.ts} +1 -1
  55. package/dist/{mod-DaiBrWDW.d.ts → mod-B5z_q9TH.d.ts} +1 -1
  56. package/dist/{mod-Mt4aO3DX.d.cts → mod-BA_F2x53.d.cts} +1 -1
  57. package/dist/{mod-Decmur1U.d.cts → mod-BLOXGs6m.d.cts} +1 -1
  58. package/dist/{mod-S--JxYjo.d.cts → mod-CPPqkyV_.d.cts} +1 -1
  59. package/dist/{mod-CnGtADvO.d.ts → mod-DK0y9fd-.d.ts} +1 -1
  60. package/dist/mod.cjs +4 -4
  61. package/dist/mod.d.cts +7 -7
  62. package/dist/mod.d.ts +7 -7
  63. package/dist/mod.js +4 -4
  64. package/dist/nodeinfo/handler.test.mjs +1 -1
  65. package/dist/{owner-D63yPo_i.mjs → owner-DKdtsrEq.mjs} +18 -3
  66. package/dist/{portable-collection-_lZg-osX.mjs → portable-collection-Cb5cdPIU.mjs} +2 -2
  67. package/dist/{portable-collection-B8ojoQ50.cjs → portable-collection-UajqDrSL.cjs} +15 -1
  68. package/dist/{portable-collection-C3xEzYri.js → portable-collection-uv4CuQXm.js} +15 -1
  69. package/dist/{portable-key-D8uWZF7b.mjs → portable-key-Bv1RdQ0n.mjs} +2 -1
  70. package/dist/{proof-C2YwD8a_.mjs → proof-CRTPWbVh.mjs} +4 -4
  71. package/dist/{send-D9SGhxTB.mjs → send-2dULlZc8.mjs} +3 -3
  72. package/dist/sig/compound-proof-discovery.test.mjs +1 -1
  73. package/dist/sig/compound-proof-producer.test.mjs +1 -1
  74. package/dist/sig/compound-proof-verification.test.mjs +2 -2
  75. package/dist/sig/compound-proof.test.mjs +2 -2
  76. package/dist/sig/http.test.mjs +2 -2
  77. package/dist/sig/key-owner-evidence.test.d.mts +2 -0
  78. package/dist/sig/key-owner-evidence.test.mjs +100 -0
  79. package/dist/sig/key.test.mjs +1 -1
  80. package/dist/sig/ld.test.mjs +2 -2
  81. package/dist/sig/mod.cjs +2 -2
  82. package/dist/sig/mod.d.cts +2 -2
  83. package/dist/sig/mod.d.ts +2 -2
  84. package/dist/sig/mod.js +2 -2
  85. package/dist/sig/owner.test.mjs +1 -1
  86. package/dist/sig/portable-collection.test.mjs +1 -1
  87. package/dist/sig/portable-key.test.mjs +6 -6
  88. package/dist/sig/proof.test.mjs +3 -3
  89. package/dist/{temporal-q6FSekcN.mjs → temporal-Dhsk6aUT.mjs} +1 -1
  90. package/dist/testing/kv.test.mjs +1 -1
  91. package/dist/testing/mod.d.mts +118 -1
  92. package/dist/utils/docloader.test.mjs +2 -2
  93. package/dist/utils/kv-cache.test.mjs +1 -1
  94. package/dist/utils/mod.cjs +1 -1
  95. package/dist/utils/mod.d.cts +1 -1
  96. package/dist/utils/mod.d.ts +1 -1
  97. package/dist/utils/mod.js +1 -1
  98. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as version, t as name } from "./deno-D1gcWWqB.mjs";
4
+ import { n as version, t as name } from "./deno-CizGaYeG.mjs";
5
5
  import { c as isPortableId, r as getPortableDid, t as getCanonicalPortableId } from "./portable-key-id-Bg259c4Z.mjs";
6
6
  import { t as ActivityListenerSet } from "./activity-listener-C-BSbKI7.mjs";
7
7
  import { getLogger } from "@logtape/logtape";
@@ -89,7 +89,7 @@ var FederationBuilderImpl = class {
89
89
  * specified.
90
90
  */
91
91
  async build(options) {
92
- const { FederationImpl } = await import("./middleware-TrCVULgs.mjs");
92
+ const { FederationImpl } = await import("./middleware-BmqEWsWP.mjs");
93
93
  const f = new FederationImpl(options);
94
94
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
95
95
  f.router = this.router.clone();
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { Qt as ActivityTransformer, n as Context } from "../context-BMggDR-l.cjs";
2
+ import { $t as ActivityTransformer, n as Context } from "../context-L0Fnib9j.cjs";
3
3
  import { Activity } from "@fedify/vocab";
4
4
 
5
5
  //#region src/compat/transformers.d.ts
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { Qt as ActivityTransformer, n as Context } from "../context-exYu7gDU.js";
2
+ import { $t as ActivityTransformer, n as Context } from "../context-BykNUf04.js";
3
3
  import { Activity } from "@fedify/vocab";
4
4
 
5
5
  //#region src/compat/transformers.d.ts
@@ -5,7 +5,7 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
6
6
  import { t as assertInstanceOf } from "../assert_instance_of-mrXWWNY-.mjs";
7
7
  import { t as assert } from "../assert-D1Eafmd_.mjs";
8
- import { E as autoIdAssigner, T as actorDehydrator, n as FederationImpl } from "../middleware-xdukzV3x.mjs";
8
+ import { E as autoIdAssigner, T as actorDehydrator, n as FederationImpl } from "../middleware-B99JjvFn.mjs";
9
9
  import { Follow, Person } from "@fedify/vocab";
10
10
  import { test } from "@fedify/fixture";
11
11
  //#region src/compat/transformers.test.ts
@@ -3,8 +3,8 @@ import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
4
  import { c as isPortableId, i as getRawCanonicalPortableId, t as getCanonicalPortableId } from "./portable-key-id-Bg259c4Z.mjs";
5
5
  import { n as preloadedOnlyDocumentLoader } from "./public-audience--klBIOk1.mjs";
6
- import { c as getNormalizationContextLoader } from "./ld-lU_ZqzsQ.mjs";
7
- import { l as verifyPortableObjectProofPolicy, n as classifyFep2277CoreType, o as verifyMapLocalProof } from "./proof-C2YwD8a_.mjs";
6
+ import { c as getNormalizationContextLoader } from "./ld-CyliEU48.mjs";
7
+ import { l as verifyPortableObjectProofPolicy, n as classifyFep2277CoreType, o as verifyMapLocalProof } from "./proof-CRTPWbVh.mjs";
8
8
  import { parseIri, preloadedContexts } from "@fedify/vocab-runtime";
9
9
  import jsonld from "@fedify/vocab-runtime/jsonld";
10
10
  //#region src/sig/compound-proof.ts
@@ -1,6 +1,6 @@
1
1
  /// <reference lib="esnext.temporal" />
2
2
  import { o as JsonValue, s as NodeInfo, t as GetNodeInfoOptions } from "./client-D-XP_Ccb.js";
3
- import { o as VerifyRequestFailureReason, t as HttpMessageSignaturesSpec } from "./http-C-x_OLSp.js";
3
+ import { o as VerifyRequestFailureReason, t as HttpMessageSignaturesSpec } from "./http-Cok5-vIC.js";
4
4
  import { n as GetKeyOwnerOptions } from "./owner-BSzr5-I8.js";
5
5
  import { n as KvStore, t as KvKey } from "./kv-BhNbN8Ed.js";
6
6
  import { Router } from "@fedify/uri-template";
@@ -3350,12 +3350,38 @@ interface Context<TContextData> {
3350
3350
  getPortableFeaturedTagsUri(identifier: string, authority: string): URL;
3351
3351
  /**
3352
3352
  * Determines the type of the URI and extracts the associated data.
3353
+ *
3354
+ * By default, only URIs on this server's origin are recognized. With
3355
+ * the `portable` option, [FEP-ef61] portable IDs, e.g.,
3356
+ * `ap+ef61://did:key:z6Mk.../users/alice`, and their compatible
3357
+ * identifiers on any gateway, e.g.,
3358
+ * `https://example.com/.well-known/apgateway/did:key:z6Mk.../users/alice`,
3359
+ * are also recognized by the same paths that the gateway endpoint routes
3360
+ * to the dispatchers, and the result has the DID in its `authority`
3361
+ * property.
3362
+ *
3363
+ * The DID of a portable ID is anyone's to choose, so recognizing it does
3364
+ * not mean that this server hosts anything for the DID. Check that
3365
+ * `authority` is the DID that the application stores for the actor or
3366
+ * object before acting on it:
3367
+ *
3368
+ * ~~~~ typescript
3369
+ * const parsed = ctx.parseUri(follow.objectId, { portable: true });
3370
+ * if (parsed?.type !== "actor") return;
3371
+ * const user = await getUser(parsed.identifier);
3372
+ * if (user == null) return;
3373
+ * if (parsed.authority != null && parsed.authority !== user.did) return;
3374
+ * ~~~~
3375
+ *
3376
+ * [FEP-ef61]: https://w3id.org/fep/ef61
3377
+ *
3353
3378
  * @param uri The URI to parse.
3379
+ * @param options Options for parsing the URI. Since 2.4.0.
3354
3380
  * @returns The result of parsing the URI. If `null` is given or
3355
3381
  * the URI is not recognized, `null` is returned.
3356
3382
  * @since 0.9.0
3357
3383
  */
3358
- parseUri(uri: URL | null): ParseUriResult | null;
3384
+ parseUri(uri: URL | null, options?: ParseUriOptions): ParseUriResult | null;
3359
3385
  /**
3360
3386
  * Gets the key pairs for an actor.
3361
3387
  * @param identifier The actor's identifier.
@@ -4254,52 +4280,143 @@ interface OutboxContext<TContextData> extends Context<TContextData> {
4254
4280
  clone(data: TContextData): OutboxContext<TContextData>;
4255
4281
  }
4256
4282
  /**
4283
+ * Options for {@link Context.parseUri}.
4284
+ * @since 2.4.0
4285
+ */
4286
+ interface ParseUriOptions {
4287
+ /**
4288
+ * Whether to also recognize [FEP-ef61] portable IDs, i.e., `ap:` and
4289
+ * `ap+ef61:` URIs, and their compatible identifiers on any gateway.
4290
+ * The result of a portable ID has its DID, without percent-encoding, in
4291
+ * the `authority` property, which the caller has to compare with the DID
4292
+ * that it stores for the actor or object, since anyone can make a portable
4293
+ * ID with the same path under another DID.
4294
+ *
4295
+ * Like URIs on this server's origin, a portable ID is recognized by its
4296
+ * path, and its query, e.g., location hints, and fragment are ignored.
4297
+ * A shared inbox is never recognized in a portable ID, and a portable ID
4298
+ * with a malformed DID, or with a `did:key` DID that is not encoded in
4299
+ * base58-btc, is not recognized either.
4300
+ *
4301
+ * [FEP-ef61]: https://w3id.org/fep/ef61
4302
+ * @default `false`
4303
+ */
4304
+ readonly portable?: boolean;
4305
+ }
4306
+ /**
4257
4307
  * A result of parsing an URI.
4258
4308
  */
4259
4309
  type ParseUriResult = {
4260
4310
  readonly type: "actor";
4261
4311
  readonly identifier: string;
4312
+ /**
4313
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4314
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4315
+ * @since 2.4.0
4316
+ */
4317
+ readonly authority?: string;
4262
4318
  } | {
4263
4319
  readonly type: "object";
4264
4320
  readonly class: ConstructorWithTypeId<Object$1>;
4265
4321
  readonly typeId: URL;
4266
4322
  readonly values: Record<string, string>;
4323
+ /**
4324
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4325
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4326
+ * @since 2.4.0
4327
+ */
4328
+ readonly authority?: string;
4267
4329
  } | {
4268
4330
  readonly type: "inbox";
4269
4331
  readonly identifier: undefined;
4332
+ readonly authority?: undefined;
4270
4333
  } | {
4271
4334
  readonly type: "inbox";
4272
4335
  readonly identifier: string;
4336
+ /**
4337
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4338
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4339
+ * @since 2.4.0
4340
+ */
4341
+ readonly authority?: string;
4273
4342
  } | {
4274
4343
  readonly type: "outbox";
4275
4344
  readonly identifier: string;
4345
+ /**
4346
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4347
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4348
+ * @since 2.4.0
4349
+ */
4350
+ readonly authority?: string;
4276
4351
  } | {
4277
4352
  readonly type: "following";
4278
4353
  readonly identifier: string;
4354
+ /**
4355
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4356
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4357
+ * @since 2.4.0
4358
+ */
4359
+ readonly authority?: string;
4279
4360
  } | {
4280
4361
  readonly type: "followers";
4281
4362
  readonly identifier: string;
4363
+ /**
4364
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4365
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4366
+ * @since 2.4.0
4367
+ */
4368
+ readonly authority?: string;
4282
4369
  } | {
4283
4370
  readonly type: "liked";
4284
4371
  readonly identifier: string;
4372
+ /**
4373
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4374
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4375
+ * @since 2.4.0
4376
+ */
4377
+ readonly authority?: string;
4285
4378
  } | {
4286
4379
  readonly type: "featured";
4287
4380
  readonly identifier: string;
4381
+ /**
4382
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4383
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4384
+ * @since 2.4.0
4385
+ */
4386
+ readonly authority?: string;
4288
4387
  } | {
4289
4388
  readonly type: "featuredTags";
4290
4389
  readonly identifier: string;
4390
+ /**
4391
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4392
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4393
+ * @since 2.4.0
4394
+ */
4395
+ readonly authority?: string;
4291
4396
  } | {
4292
4397
  readonly type: "collection";
4293
4398
  readonly name: string | symbol;
4294
4399
  readonly class: ConstructorWithTypeId<Object$1>;
4295
4400
  readonly typeId: URL;
4296
4401
  readonly values: Record<string, string>;
4402
+ /**
4403
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4404
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4405
+ * @since 2.4.0
4406
+ */
4407
+ readonly authority?: string;
4297
4408
  } | {
4298
4409
  readonly type: "orderedCollection";
4299
4410
  readonly name: string | symbol;
4300
4411
  readonly class: ConstructorWithTypeId<Object$1>;
4301
4412
  readonly typeId: URL;
4302
4413
  readonly values: Record<string, string>;
4414
+ /**
4415
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4416
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4417
+ * @since 2.4.0
4418
+ */
4419
+ readonly authority?: string;
4303
4420
  };
4304
4421
  /**
4305
4422
  * Options for {@link Context.sendActivity} method.
@@ -4466,4 +4583,4 @@ interface ActorKeyPair extends CryptoKeyPair {
4466
4583
  readonly multikey: Multikey;
4467
4584
  }
4468
4585
  //#endregion
4469
- export { InProcessMessageQueue as $, MediaUploaderSetters as A, HashlinkMediaRequest as At, createFederationBuilder as B, OutboxPermanentFailureHandler as Bt, FederationFetchOptions as C, CollectionCounter as Ct, IdempotencyStrategy as D, CustomCollectionCursor as Dt, IdempotencyKeyCallback as E, CustomCollectionCounter as Et, FederationKvPrefixes as F, ObjectAuthorizePredicate as Ft, TaskRegistry as G, UnverifiedActivityReason as Gt, TaskDefinitionOptions as H, PortableCollectionOwnerMapper as Ht, FederationOrigin as I, ObjectDispatcher as It, RetryPolicy as J, SenderKeyPair as Jt, CreateExponentialBackoffPolicyOptions as K, WebFingerLinksDispatcher as Kt, FederationQueueOptions as L, OutboxErrorHandler as Lt, OutboxListenerSetters as M, InboxListener as Mt, PortableInboxForwardingOptions as N, MediaUploaderCallback as Nt, InboxChallengePolicy as O, CustomCollectionDispatcher as Ot, Rfc6570Expression as P, NodeInfoDispatcher as Pt, respondWithObjectIfAcceptable as Q, ActivityTransformer as Qt, createFederation as R, OutboxListener as Rt, FederationBuilder as S, AuthorizePredicate as St, FederationStartQueueOptions as T, CollectionDispatcher as Tt, TaskEnqueueOptions as U, SharedInboxKeyDispatcher as Ut, TaskDefinition as V, PortableActorIdMapper as Vt, TaskHandler as W, UnverifiedActivityHandler as Wt, RespondWithObjectOptions as X, buildCollectionSynchronizationHeader as Xt, createExponentialBackoffPolicy as Y, PageItems as Yt, respondWithObject as Z, digest as Zt, ConstructorWithTypeId as _, parseCircuitBreakerKvState as _t, GetObjectOptions as a, ParallelMessageQueue as at, Federation as b, ActorHandleMapper as bt, OutboxContext as c, CircuitBreakerBeforeSendDecision as ct, RequestContext as d, CircuitBreakerKvState as dt, InProcessMessageQueueOptions as et, RouteActivityOptions as f, CircuitBreakerOptions as ft, CollectionCallbackSetters as g, normalizeCircuitBreakerOptions as gt, ActorCallbackSetters as h, NormalizedCircuitBreakerOptions as ht, GetActorOptions as i, MessageQueueListenOptions as it, ObjectCallbackSetters as j, InboxErrorHandler as jt, InboxListenerSetters as k, HashlinkMediaDispatcher as kt, ParseUriResult as l, CircuitBreakerCreateOptions as lt, SendActivityOptionsForCollection as m, CircuitBreakerStateChange as mt, Context as n, MessageQueueDepth as nt, GetSignedKeyOptions as o, CircuitBreaker as ot, SendActivityOptions as p, CircuitBreakerState as pt, RetryContext as q, SendActivityError as qt, ForwardActivityOptions as r, MessageQueueEnqueueOptions as rt, InboxContext as s, CircuitBreakerActivityDrop as st, ActorKeyPair as t, MessageQueue as tt, PortableRequest as u, CircuitBreakerFailurePolicy as ut, CustomCollectionCallbackSetters as v, ActorAliasMapper as vt, FederationOptions as w, CollectionCursor as wt, FederationBenchmarkOptions as x, ActorKeyPairsDispatcher as xt, Federatable as y, ActorDispatcher as yt, Message as z, OutboxListenerErrorHandler as zt };
4586
+ export { respondWithObjectIfAcceptable as $, ActivityTransformer as $t, InboxListenerSetters as A, HashlinkMediaDispatcher as At, Message as B, OutboxListenerErrorHandler as Bt, FederationBuilder as C, AuthorizePredicate as Ct, IdempotencyKeyCallback as D, CustomCollectionCounter as Dt, FederationStartQueueOptions as E, CollectionDispatcher as Et, Rfc6570Expression as F, NodeInfoDispatcher as Ft, TaskHandler as G, UnverifiedActivityHandler as Gt, TaskDefinition as H, PortableActorIdMapper as Ht, FederationKvPrefixes as I, ObjectAuthorizePredicate as It, RetryContext as J, SendActivityError as Jt, TaskRegistry as K, UnverifiedActivityReason as Kt, FederationOrigin as L, ObjectDispatcher as Lt, ObjectCallbackSetters as M, InboxErrorHandler as Mt, OutboxListenerSetters as N, InboxListener as Nt, IdempotencyStrategy as O, CustomCollectionCursor as Ot, PortableInboxForwardingOptions as P, MediaUploaderCallback as Pt, respondWithObject as Q, digest as Qt, FederationQueueOptions as R, OutboxErrorHandler as Rt, FederationBenchmarkOptions as S, ActorKeyPairsDispatcher as St, FederationOptions as T, CollectionCursor as Tt, TaskDefinitionOptions as U, PortableCollectionOwnerMapper as Ut, createFederationBuilder as V, OutboxPermanentFailureHandler as Vt, TaskEnqueueOptions as W, SharedInboxKeyDispatcher as Wt, createExponentialBackoffPolicy as X, PageItems as Xt, RetryPolicy as Y, SenderKeyPair as Yt, RespondWithObjectOptions as Z, buildCollectionSynchronizationHeader as Zt, CollectionCallbackSetters as _, normalizeCircuitBreakerOptions as _t, GetObjectOptions as a, MessageQueueListenOptions as at, Federatable as b, ActorDispatcher as bt, OutboxContext as c, CircuitBreakerActivityDrop as ct, PortableRequest as d, CircuitBreakerFailurePolicy as dt, InProcessMessageQueue as et, RequestContext as f, CircuitBreakerKvState as ft, ActorCallbackSetters as g, NormalizedCircuitBreakerOptions as gt, SendActivityOptionsForCollection as h, CircuitBreakerStateChange as ht, GetActorOptions as i, MessageQueueEnqueueOptions as it, MediaUploaderSetters as j, HashlinkMediaRequest as jt, InboxChallengePolicy as k, CustomCollectionDispatcher as kt, ParseUriOptions as l, CircuitBreakerBeforeSendDecision as lt, SendActivityOptions as m, CircuitBreakerState as mt, Context as n, MessageQueue as nt, GetSignedKeyOptions as o, ParallelMessageQueue as ot, RouteActivityOptions as p, CircuitBreakerOptions as pt, CreateExponentialBackoffPolicyOptions as q, WebFingerLinksDispatcher as qt, ForwardActivityOptions as r, MessageQueueDepth as rt, InboxContext as s, CircuitBreaker as st, ActorKeyPair as t, InProcessMessageQueueOptions as tt, ParseUriResult as u, CircuitBreakerCreateOptions as ut, ConstructorWithTypeId as v, parseCircuitBreakerKvState as vt, FederationFetchOptions as w, CollectionCounter as wt, Federation as x, ActorHandleMapper as xt, CustomCollectionCallbackSetters as y, ActorAliasMapper as yt, createFederation as z, OutboxListener as zt };
@@ -1,6 +1,6 @@
1
1
  /// <reference lib="esnext.temporal" />
2
2
  import { o as JsonValue, s as NodeInfo, t as GetNodeInfoOptions } from "./client-D-XP_Ccb.cjs";
3
- import { o as VerifyRequestFailureReason, t as HttpMessageSignaturesSpec } from "./http-CjezPjFX.cjs";
3
+ import { o as VerifyRequestFailureReason, t as HttpMessageSignaturesSpec } from "./http-DC1cqAQ2.cjs";
4
4
  import { n as GetKeyOwnerOptions } from "./owner-BF0L9cMt.cjs";
5
5
  import { n as KvStore, t as KvKey } from "./kv-BhNbN8Ed.cjs";
6
6
  import { Activity, Actor, Collection, CryptographicKey, Hashtag, Link, LookupObjectOptions, Multikey, Object as Object$1, Recipient, Tombstone, TraverseCollectionOptions } from "@fedify/vocab";
@@ -3348,12 +3348,38 @@ interface Context<TContextData> {
3348
3348
  getPortableFeaturedTagsUri(identifier: string, authority: string): URL;
3349
3349
  /**
3350
3350
  * Determines the type of the URI and extracts the associated data.
3351
+ *
3352
+ * By default, only URIs on this server's origin are recognized. With
3353
+ * the `portable` option, [FEP-ef61] portable IDs, e.g.,
3354
+ * `ap+ef61://did:key:z6Mk.../users/alice`, and their compatible
3355
+ * identifiers on any gateway, e.g.,
3356
+ * `https://example.com/.well-known/apgateway/did:key:z6Mk.../users/alice`,
3357
+ * are also recognized by the same paths that the gateway endpoint routes
3358
+ * to the dispatchers, and the result has the DID in its `authority`
3359
+ * property.
3360
+ *
3361
+ * The DID of a portable ID is anyone's to choose, so recognizing it does
3362
+ * not mean that this server hosts anything for the DID. Check that
3363
+ * `authority` is the DID that the application stores for the actor or
3364
+ * object before acting on it:
3365
+ *
3366
+ * ~~~~ typescript
3367
+ * const parsed = ctx.parseUri(follow.objectId, { portable: true });
3368
+ * if (parsed?.type !== "actor") return;
3369
+ * const user = await getUser(parsed.identifier);
3370
+ * if (user == null) return;
3371
+ * if (parsed.authority != null && parsed.authority !== user.did) return;
3372
+ * ~~~~
3373
+ *
3374
+ * [FEP-ef61]: https://w3id.org/fep/ef61
3375
+ *
3351
3376
  * @param uri The URI to parse.
3377
+ * @param options Options for parsing the URI. Since 2.4.0.
3352
3378
  * @returns The result of parsing the URI. If `null` is given or
3353
3379
  * the URI is not recognized, `null` is returned.
3354
3380
  * @since 0.9.0
3355
3381
  */
3356
- parseUri(uri: URL | null): ParseUriResult | null;
3382
+ parseUri(uri: URL | null, options?: ParseUriOptions): ParseUriResult | null;
3357
3383
  /**
3358
3384
  * Gets the key pairs for an actor.
3359
3385
  * @param identifier The actor's identifier.
@@ -4252,52 +4278,143 @@ interface OutboxContext<TContextData> extends Context<TContextData> {
4252
4278
  clone(data: TContextData): OutboxContext<TContextData>;
4253
4279
  }
4254
4280
  /**
4281
+ * Options for {@link Context.parseUri}.
4282
+ * @since 2.4.0
4283
+ */
4284
+ interface ParseUriOptions {
4285
+ /**
4286
+ * Whether to also recognize [FEP-ef61] portable IDs, i.e., `ap:` and
4287
+ * `ap+ef61:` URIs, and their compatible identifiers on any gateway.
4288
+ * The result of a portable ID has its DID, without percent-encoding, in
4289
+ * the `authority` property, which the caller has to compare with the DID
4290
+ * that it stores for the actor or object, since anyone can make a portable
4291
+ * ID with the same path under another DID.
4292
+ *
4293
+ * Like URIs on this server's origin, a portable ID is recognized by its
4294
+ * path, and its query, e.g., location hints, and fragment are ignored.
4295
+ * A shared inbox is never recognized in a portable ID, and a portable ID
4296
+ * with a malformed DID, or with a `did:key` DID that is not encoded in
4297
+ * base58-btc, is not recognized either.
4298
+ *
4299
+ * [FEP-ef61]: https://w3id.org/fep/ef61
4300
+ * @default `false`
4301
+ */
4302
+ readonly portable?: boolean;
4303
+ }
4304
+ /**
4255
4305
  * A result of parsing an URI.
4256
4306
  */
4257
4307
  type ParseUriResult = {
4258
4308
  readonly type: "actor";
4259
4309
  readonly identifier: string;
4310
+ /**
4311
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4312
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4313
+ * @since 2.4.0
4314
+ */
4315
+ readonly authority?: string;
4260
4316
  } | {
4261
4317
  readonly type: "object";
4262
4318
  readonly class: ConstructorWithTypeId<Object$1>;
4263
4319
  readonly typeId: URL;
4264
4320
  readonly values: Record<string, string>;
4321
+ /**
4322
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4323
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4324
+ * @since 2.4.0
4325
+ */
4326
+ readonly authority?: string;
4265
4327
  } | {
4266
4328
  readonly type: "inbox";
4267
4329
  readonly identifier: undefined;
4330
+ readonly authority?: undefined;
4268
4331
  } | {
4269
4332
  readonly type: "inbox";
4270
4333
  readonly identifier: string;
4334
+ /**
4335
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4336
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4337
+ * @since 2.4.0
4338
+ */
4339
+ readonly authority?: string;
4271
4340
  } | {
4272
4341
  readonly type: "outbox";
4273
4342
  readonly identifier: string;
4343
+ /**
4344
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4345
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4346
+ * @since 2.4.0
4347
+ */
4348
+ readonly authority?: string;
4274
4349
  } | {
4275
4350
  readonly type: "following";
4276
4351
  readonly identifier: string;
4352
+ /**
4353
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4354
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4355
+ * @since 2.4.0
4356
+ */
4357
+ readonly authority?: string;
4277
4358
  } | {
4278
4359
  readonly type: "followers";
4279
4360
  readonly identifier: string;
4361
+ /**
4362
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4363
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4364
+ * @since 2.4.0
4365
+ */
4366
+ readonly authority?: string;
4280
4367
  } | {
4281
4368
  readonly type: "liked";
4282
4369
  readonly identifier: string;
4370
+ /**
4371
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4372
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4373
+ * @since 2.4.0
4374
+ */
4375
+ readonly authority?: string;
4283
4376
  } | {
4284
4377
  readonly type: "featured";
4285
4378
  readonly identifier: string;
4379
+ /**
4380
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4381
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4382
+ * @since 2.4.0
4383
+ */
4384
+ readonly authority?: string;
4286
4385
  } | {
4287
4386
  readonly type: "featuredTags";
4288
4387
  readonly identifier: string;
4388
+ /**
4389
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4390
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4391
+ * @since 2.4.0
4392
+ */
4393
+ readonly authority?: string;
4289
4394
  } | {
4290
4395
  readonly type: "collection";
4291
4396
  readonly name: string | symbol;
4292
4397
  readonly class: ConstructorWithTypeId<Object$1>;
4293
4398
  readonly typeId: URL;
4294
4399
  readonly values: Record<string, string>;
4400
+ /**
4401
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4402
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4403
+ * @since 2.4.0
4404
+ */
4405
+ readonly authority?: string;
4295
4406
  } | {
4296
4407
  readonly type: "orderedCollection";
4297
4408
  readonly name: string | symbol;
4298
4409
  readonly class: ConstructorWithTypeId<Object$1>;
4299
4410
  readonly typeId: URL;
4300
4411
  readonly values: Record<string, string>;
4412
+ /**
4413
+ * The DID of the portable ID, e.g., `did:key:z6Mk...`, or `undefined`
4414
+ * for a URI on this server's origin. See {@link ParseUriOptions.portable}.
4415
+ * @since 2.4.0
4416
+ */
4417
+ readonly authority?: string;
4301
4418
  };
4302
4419
  /**
4303
4420
  * Options for {@link Context.sendActivity} method.
@@ -4464,4 +4581,4 @@ interface ActorKeyPair extends CryptoKeyPair {
4464
4581
  readonly multikey: Multikey;
4465
4582
  }
4466
4583
  //#endregion
4467
- export { InProcessMessageQueue as $, MediaUploaderSetters as A, HashlinkMediaRequest as At, createFederationBuilder as B, OutboxPermanentFailureHandler as Bt, FederationFetchOptions as C, CollectionCounter as Ct, IdempotencyStrategy as D, CustomCollectionCursor as Dt, IdempotencyKeyCallback as E, CustomCollectionCounter as Et, FederationKvPrefixes as F, ObjectAuthorizePredicate as Ft, TaskRegistry as G, UnverifiedActivityReason as Gt, TaskDefinitionOptions as H, PortableCollectionOwnerMapper as Ht, FederationOrigin as I, ObjectDispatcher as It, RetryPolicy as J, SenderKeyPair as Jt, CreateExponentialBackoffPolicyOptions as K, WebFingerLinksDispatcher as Kt, FederationQueueOptions as L, OutboxErrorHandler as Lt, OutboxListenerSetters as M, InboxListener as Mt, PortableInboxForwardingOptions as N, MediaUploaderCallback as Nt, InboxChallengePolicy as O, CustomCollectionDispatcher as Ot, Rfc6570Expression as P, NodeInfoDispatcher as Pt, respondWithObjectIfAcceptable as Q, ActivityTransformer as Qt, createFederation as R, OutboxListener as Rt, FederationBuilder as S, AuthorizePredicate as St, FederationStartQueueOptions as T, CollectionDispatcher as Tt, TaskEnqueueOptions as U, SharedInboxKeyDispatcher as Ut, TaskDefinition as V, PortableActorIdMapper as Vt, TaskHandler as W, UnverifiedActivityHandler as Wt, RespondWithObjectOptions as X, buildCollectionSynchronizationHeader as Xt, createExponentialBackoffPolicy as Y, PageItems as Yt, respondWithObject as Z, digest as Zt, ConstructorWithTypeId as _, parseCircuitBreakerKvState as _t, GetObjectOptions as a, ParallelMessageQueue as at, Federation as b, ActorHandleMapper as bt, OutboxContext as c, CircuitBreakerBeforeSendDecision as ct, RequestContext as d, CircuitBreakerKvState as dt, InProcessMessageQueueOptions as et, RouteActivityOptions as f, CircuitBreakerOptions as ft, CollectionCallbackSetters as g, normalizeCircuitBreakerOptions as gt, ActorCallbackSetters as h, NormalizedCircuitBreakerOptions as ht, GetActorOptions as i, MessageQueueListenOptions as it, ObjectCallbackSetters as j, InboxErrorHandler as jt, InboxListenerSetters as k, HashlinkMediaDispatcher as kt, ParseUriResult as l, CircuitBreakerCreateOptions as lt, SendActivityOptionsForCollection as m, CircuitBreakerStateChange as mt, Context as n, MessageQueueDepth as nt, GetSignedKeyOptions as o, CircuitBreaker as ot, SendActivityOptions as p, CircuitBreakerState as pt, RetryContext as q, SendActivityError as qt, ForwardActivityOptions as r, MessageQueueEnqueueOptions as rt, InboxContext as s, CircuitBreakerActivityDrop as st, ActorKeyPair as t, MessageQueue as tt, PortableRequest as u, CircuitBreakerFailurePolicy as ut, CustomCollectionCallbackSetters as v, ActorAliasMapper as vt, FederationOptions as w, CollectionCursor as wt, FederationBenchmarkOptions as x, ActorKeyPairsDispatcher as xt, Federatable as y, ActorDispatcher as yt, Message as z, OutboxListenerErrorHandler as zt };
4584
+ export { respondWithObjectIfAcceptable as $, ActivityTransformer as $t, InboxListenerSetters as A, HashlinkMediaDispatcher as At, Message as B, OutboxListenerErrorHandler as Bt, FederationBuilder as C, AuthorizePredicate as Ct, IdempotencyKeyCallback as D, CustomCollectionCounter as Dt, FederationStartQueueOptions as E, CollectionDispatcher as Et, Rfc6570Expression as F, NodeInfoDispatcher as Ft, TaskHandler as G, UnverifiedActivityHandler as Gt, TaskDefinition as H, PortableActorIdMapper as Ht, FederationKvPrefixes as I, ObjectAuthorizePredicate as It, RetryContext as J, SendActivityError as Jt, TaskRegistry as K, UnverifiedActivityReason as Kt, FederationOrigin as L, ObjectDispatcher as Lt, ObjectCallbackSetters as M, InboxErrorHandler as Mt, OutboxListenerSetters as N, InboxListener as Nt, IdempotencyStrategy as O, CustomCollectionCursor as Ot, PortableInboxForwardingOptions as P, MediaUploaderCallback as Pt, respondWithObject as Q, digest as Qt, FederationQueueOptions as R, OutboxErrorHandler as Rt, FederationBenchmarkOptions as S, ActorKeyPairsDispatcher as St, FederationOptions as T, CollectionCursor as Tt, TaskDefinitionOptions as U, PortableCollectionOwnerMapper as Ut, createFederationBuilder as V, OutboxPermanentFailureHandler as Vt, TaskEnqueueOptions as W, SharedInboxKeyDispatcher as Wt, createExponentialBackoffPolicy as X, PageItems as Xt, RetryPolicy as Y, SenderKeyPair as Yt, RespondWithObjectOptions as Z, buildCollectionSynchronizationHeader as Zt, CollectionCallbackSetters as _, normalizeCircuitBreakerOptions as _t, GetObjectOptions as a, MessageQueueListenOptions as at, Federatable as b, ActorDispatcher as bt, OutboxContext as c, CircuitBreakerActivityDrop as ct, PortableRequest as d, CircuitBreakerFailurePolicy as dt, InProcessMessageQueue as et, RequestContext as f, CircuitBreakerKvState as ft, ActorCallbackSetters as g, NormalizedCircuitBreakerOptions as gt, SendActivityOptionsForCollection as h, CircuitBreakerStateChange as ht, GetActorOptions as i, MessageQueueEnqueueOptions as it, MediaUploaderSetters as j, HashlinkMediaRequest as jt, InboxChallengePolicy as k, CustomCollectionDispatcher as kt, ParseUriOptions as l, CircuitBreakerBeforeSendDecision as lt, SendActivityOptions as m, CircuitBreakerState as mt, Context as n, MessageQueue as nt, GetSignedKeyOptions as o, ParallelMessageQueue as ot, RouteActivityOptions as p, CircuitBreakerOptions as pt, CreateExponentialBackoffPolicyOptions as q, WebFingerLinksDispatcher as qt, ForwardActivityOptions as r, MessageQueueDepth as rt, InboxContext as s, CircuitBreaker as st, ActorKeyPair as t, InProcessMessageQueueOptions as tt, ParseUriResult as u, CircuitBreakerCreateOptions as ut, ConstructorWithTypeId as v, parseCircuitBreakerKvState as vt, FederationFetchOptions as w, CollectionCounter as wt, Federation as x, ActorHandleMapper as xt, CustomCollectionCallbackSetters as y, ActorAliasMapper as yt, createFederation as z, OutboxListener as zt };
@@ -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.4.0-dev.2157+b76e5888";
6
+ var version = "2.4.0-dev.2164+db2b8571";
7
7
  //#endregion
8
8
  export { version as n, name as t };
@@ -1,8 +1,8 @@
1
1
  import "temporal-polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { c as validateCryptoKey } from "./key-CPM4r6tP.mjs";
5
- import { n as doubleKnock } from "./http-CGcLv8rh.mjs";
4
+ import { c as validateCryptoKey } from "./key-D5awqp7u.mjs";
5
+ import { n as doubleKnock } from "./http-DRH0n8TD.mjs";
6
6
  import { getLogger } from "@logtape/logtape";
7
7
  import { curry } from "es-toolkit";
8
8
  import { FetchError, UrlError, createActivityPubRequest, getRemoteDocument, logRequest, validatePublicUrl } from "@fedify/vocab-runtime";
@@ -6,7 +6,7 @@ import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
6
6
  import { t as assertExists } from "../assert_exists-cffSpJ7X.mjs";
7
7
  import { t as assertThrows } from "../assert_throws-BYITOvPO.mjs";
8
8
  import "../std__assert-DvMDRPes.mjs";
9
- import { r as createFederationBuilder } from "../builder-CLaS4-yA.mjs";
9
+ import { r as createFederationBuilder } from "../builder-BqRmnx7p.mjs";
10
10
  import { DisallowedOperatorError, DisallowedVarSpecModifierError, DuplicateRouteVariableError, RouteTemplateOptionsNotMatchedError, RouterError } from "@fedify/uri-template";
11
11
  import { Activity, Note, Person } from "@fedify/vocab";
12
12
  import { test } from "@fedify/fixture";
@@ -6,11 +6,11 @@ import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import "../std__assert-DvMDRPes.mjs";
8
8
  import { t as assert } from "../assert-D1Eafmd_.mjs";
9
- import { n as exportJwk } from "../key-CPM4r6tP.mjs";
9
+ import { n as exportJwk } from "../key-D5awqp7u.mjs";
10
10
  import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-4IJqPYos.mjs";
11
- import { a as signObject, d as verifyProof } from "../proof-C2YwD8a_.mjs";
11
+ import { a as signObject, d as verifyProof } from "../proof-CRTPWbVh.mjs";
12
12
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
13
- import { n as FederationImpl } from "../middleware-xdukzV3x.mjs";
13
+ import { n as FederationImpl } from "../middleware-B99JjvFn.mjs";
14
14
  import { Create, DataIntegrityProof, Note } from "@fedify/vocab";
15
15
  import { mockDocumentLoader, test } from "@fedify/fixture";
16
16
  import { exportDidKey, parseIri } from "@fedify/vocab-runtime";
@@ -5,10 +5,10 @@ import { r as createRequestContext, t as createInboxContext } from "../context-B
5
5
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
6
6
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
7
7
  import "../std__assert-DvMDRPes.mjs";
8
- import { a as compactJsonLd, m as verifyCompactJsonLd, p as signJsonLd } from "../ld-lU_ZqzsQ.mjs";
9
- import { l as signRequest } from "../http-CGcLv8rh.mjs";
8
+ import { a as compactJsonLd, m as verifyCompactJsonLd, p as signJsonLd } from "../ld-CyliEU48.mjs";
9
+ import { l as signRequest } from "../http-DRH0n8TD.mjs";
10
10
  import { a as rsaPrivateKey3, c as rsaPublicKey3, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
11
- import { f as handleInbox, o as createFederation } from "../middleware-xdukzV3x.mjs";
11
+ import { f as handleInbox, o as createFederation } from "../middleware-B99JjvFn.mjs";
12
12
  import { t as ActivityListenerSet } from "../activity-listener-C-BSbKI7.mjs";
13
13
  import { t as map_local_create_note_default } from "../map-local-create-note-B0SeXJms.mjs";
14
14
  import { Create, CryptographicKey, Multikey, Person, Update } from "@fedify/vocab";
@@ -10,12 +10,12 @@ import "../std__assert-DvMDRPes.mjs";
10
10
  import { t as assertRejects } from "../assert_rejects-CTptdYck.mjs";
11
11
  import { t as assert } from "../assert-D1Eafmd_.mjs";
12
12
  import { r as parseAcceptSignature } from "../accept-CPVqki78.mjs";
13
- import { o as generateCryptoKeyPair } from "../key-CPM4r6tP.mjs";
14
- import { a as compactJsonLd, p as signJsonLd } from "../ld-lU_ZqzsQ.mjs";
15
- import { a as signObject } from "../proof-C2YwD8a_.mjs";
16
- import { l as signRequest } from "../http-CGcLv8rh.mjs";
13
+ import { o as generateCryptoKeyPair } from "../key-D5awqp7u.mjs";
14
+ import { a as compactJsonLd, p as signJsonLd } from "../ld-CyliEU48.mjs";
15
+ import { a as signObject } from "../proof-CRTPWbVh.mjs";
16
+ import { l as signRequest } from "../http-DRH0n8TD.mjs";
17
17
  import { a as rsaPrivateKey3, c as rsaPublicKey3, s as rsaPublicKey2 } from "../keys-DIJNHW-Y.mjs";
18
- import { d as handleCustomCollection, f as handleInbox, g as respondWithObjectIfAcceptable, h as respondWithObject, l as handleActor, m as handleOutbox, o as createFederation, p as handleObject, u as handleCollection } from "../middleware-xdukzV3x.mjs";
18
+ import { d as handleCustomCollection, f as handleInbox, g as respondWithObjectIfAcceptable, h as respondWithObject, l as handleActor, m as handleOutbox, o as createFederation, p as handleObject, u as handleCollection } from "../middleware-B99JjvFn.mjs";
19
19
  import { t as ActivityListenerSet } from "../activity-listener-C-BSbKI7.mjs";
20
20
  import { Activity, Create, CryptographicKey, Multikey, Note, Person, Tombstone } from "@fedify/vocab";
21
21
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
@@ -10,8 +10,8 @@ import "../std__assert-DvMDRPes.mjs";
10
10
  import { t as assertStrictEquals } from "../assert_strict_equals-CYvBmkpC.mjs";
11
11
  import { t as assert } from "../assert-D1Eafmd_.mjs";
12
12
  import { r as ed25519PublicKey } from "../keys-DIJNHW-Y.mjs";
13
- import { o as createFederation, x as parseHashlinkGatewayRequest } from "../middleware-xdukzV3x.mjs";
14
- import { r as createFederationBuilder } from "../builder-CLaS4-yA.mjs";
13
+ import { o as createFederation, x as parseHashlinkGatewayRequest } from "../middleware-B99JjvFn.mjs";
14
+ import { r as createFederationBuilder } from "../builder-BqRmnx7p.mjs";
15
15
  import { n as RouterError } from "../router-u5O5KCQr.mjs";
16
16
  import { Note } from "@fedify/vocab";
17
17
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
@@ -4,9 +4,9 @@ globalThis.addEventListener = () => {};
4
4
  import { t as MemoryKvStore } from "../kv-DCHkaJ9-.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-Z6IcEbWU.mjs";
6
6
  import "../std__assert-DvMDRPes.mjs";
7
- import { a as signObject } from "../proof-C2YwD8a_.mjs";
7
+ import { a as signObject } from "../proof-CRTPWbVh.mjs";
8
8
  import { n as ed25519PrivateKey, r as ed25519PublicKey, t as ed25519Multikey } from "../keys-DIJNHW-Y.mjs";
9
- import { o as createFederation } from "../middleware-xdukzV3x.mjs";
9
+ import { o as createFederation } from "../middleware-B99JjvFn.mjs";
10
10
  import { Create, Follow, Person } from "@fedify/vocab";
11
11
  import { mockDocumentLoader, test } from "@fedify/fixture";
12
12
  //#region src/federation/idempotency.test.ts