@fedify/fedify 2.0.36-dev.2598 → 2.0.36-dev.2637
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.
- package/dist/{builder-B5hI5Xsn.mjs → builder-BC3eRIbe.mjs} +3 -3
- package/dist/compat/mod.d.cts +1 -1
- package/dist/compat/mod.d.ts +1 -1
- package/dist/compat/transformers.test.mjs +1 -1
- package/dist/{context-lxjaUTAI.d.ts → context-C00pWP8x.d.ts} +6 -0
- package/dist/{context-CnoWxuoB.d.cts → context-ao-qb3eP.d.cts} +6 -0
- package/dist/{deno--OYa_lxj.mjs → deno-Dv6PIwH_.mjs} +1 -1
- package/dist/{docloader-BXR2f83H.mjs → docloader-BgHM-JLc.mjs} +2 -2
- package/dist/federation/builder.test.mjs +1 -1
- package/dist/federation/handler.test.mjs +6 -6
- package/dist/federation/idempotency.test.mjs +2 -2
- package/dist/federation/inbox.test.mjs +1 -1
- package/dist/federation/middleware.test.mjs +321 -6
- package/dist/federation/mod.cjs +1 -1
- package/dist/federation/mod.d.cts +2 -2
- package/dist/federation/mod.d.ts +2 -2
- package/dist/federation/mod.js +1 -1
- package/dist/federation/send.test.mjs +3 -3
- package/dist/federation/temporal.test.mjs +1 -1
- package/dist/federation/webfinger.test.mjs +1 -1
- package/dist/{http-C3d2DXwF.mjs → http-BWoAqky4.mjs} +2 -2
- package/dist/{http-CfyVeGgF.js → http-CrEB4I8A.js} +1 -1
- package/dist/{http-CO_IVq7x.cjs → http-D69BMfAn.cjs} +1 -1
- package/dist/{inbox-huUE3IP8.mjs → inbox-0Dbv0QVc.mjs} +1 -1
- package/dist/{key-D5e9c_yV.mjs → key-ChKDZfvS.mjs} +1 -1
- package/dist/{kv-cache-BMlo_kyv.cjs → kv-cache-B0JZ30EF.cjs} +1 -1
- package/dist/{kv-cache-Zw0soD-7.js → kv-cache-CDvE8__9.js} +1 -1
- package/dist/{ld-9qfz9rP_.mjs → ld-DbSNiv8Q.mjs} +2 -2
- package/dist/{middleware-CT1Lbohd.mjs → middleware-BA9cM-vz.mjs} +1 -1
- package/dist/{middleware-BhYpLGA_.mjs → middleware-C849kmHB.mjs} +52 -17
- package/dist/{middleware-BKs_a9P1.js → middleware-CEufJR5k.js} +44 -9
- package/dist/{middleware-CXoG7ZAW.cjs → middleware-C_fDk_dx.cjs} +45 -10
- package/dist/{middleware-Ad6kTSBf.cjs → middleware-DCtCNota.cjs} +1 -1
- package/dist/{mod-w1oyHseQ.d.cts → mod-6uJWdCc0.d.cts} +1 -1
- package/dist/{mod-I-34OMN3.d.ts → mod-DtRh015i.d.ts} +1 -1
- package/dist/mod.cjs +4 -4
- package/dist/mod.d.cts +2 -2
- package/dist/mod.d.ts +2 -2
- package/dist/mod.js +4 -4
- package/dist/nodeinfo/handler.test.mjs +1 -1
- package/dist/{owner-R4ffU9Ht.mjs → owner-BJeJfxnT.mjs} +2 -2
- package/dist/{proof-CiBs9Q4l.mjs → proof-CaMBdk_x.mjs} +2 -2
- package/dist/{proof-BrreJTRF.cjs → proof-DNgQwz9E.cjs} +1 -1
- package/dist/{proof-CE8nwTF6.js → proof-DwooE8kV.js} +1 -1
- package/dist/{send-DpvZgVSA.mjs → send-CYrAOC1K.mjs} +2 -2
- package/dist/sig/http.test.mjs +2 -2
- package/dist/sig/key.test.mjs +2 -2
- package/dist/sig/ld.test.mjs +2 -2
- package/dist/sig/mod.cjs +2 -2
- package/dist/sig/mod.js +2 -2
- package/dist/sig/owner.test.mjs +1 -1
- package/dist/sig/proof.test.mjs +2 -2
- package/dist/{temporal-Dd-J410Z.mjs → temporal-BJoGKOXy.mjs} +1 -1
- package/dist/utils/docloader.test.mjs +2 -2
- package/dist/utils/mod.cjs +1 -1
- package/dist/utils/mod.js +1 -1
- 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
|
|
6
|
-
import { t as InboxListenerSet } from "./inbox-
|
|
5
|
+
import { n as version, t as name } from "./deno-Dv6PIwH_.mjs";
|
|
6
|
+
import { t as InboxListenerSet } from "./inbox-0Dbv0QVc.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-
|
|
46
|
+
const { FederationImpl } = await import("./middleware-BA9cM-vz.mjs");
|
|
47
47
|
const f = new FederationImpl(options);
|
|
48
48
|
const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
|
|
49
49
|
f.router = this.router.clone();
|
package/dist/compat/mod.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { bt as ActivityTransformer, n as Context } from "../context-
|
|
2
|
+
import { bt as ActivityTransformer, n as Context } from "../context-ao-qb3eP.cjs";
|
|
3
3
|
import { Activity } from "@fedify/vocab";
|
|
4
4
|
|
|
5
5
|
//#region src/compat/transformers.d.ts
|
package/dist/compat/mod.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { bt as ActivityTransformer, n as Context } from "../context-
|
|
2
|
+
import { bt as ActivityTransformer, n as Context } from "../context-C00pWP8x.js";
|
|
3
3
|
import { Activity } from "@fedify/vocab";
|
|
4
4
|
|
|
5
5
|
//#region src/compat/transformers.d.ts
|
|
@@ -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-
|
|
7
|
+
import { _ as autoIdAssigner, g as actorDehydrator, n as FederationImpl } from "../middleware-C849kmHB.mjs";
|
|
8
8
|
import { test } from "@fedify/fixture";
|
|
9
9
|
import { Follow, Person } from "@fedify/vocab";
|
|
10
10
|
//#region src/compat/transformers.test.ts
|
|
@@ -1362,6 +1362,12 @@ interface FederationOptions<TContextData> {
|
|
|
1362
1362
|
*
|
|
1363
1363
|
* By default, the queue starts automatically.
|
|
1364
1364
|
*
|
|
1365
|
+
* Automatic startup is best-effort: if a queue cannot start listening,
|
|
1366
|
+
* a warning is logged once per federation instance and the failed worker is
|
|
1367
|
+
* not retried, while an explicit {@link Federation.startQueue} call rejects.
|
|
1368
|
+
* Runtimes that consume the queue elsewhere, such as Cloudflare Workers with
|
|
1369
|
+
* {@link Federation.processQueuedTask}, should set this to `true`.
|
|
1370
|
+
*
|
|
1365
1371
|
* @since 0.12.0
|
|
1366
1372
|
*/
|
|
1367
1373
|
manuallyStartQueue?: boolean;
|
|
@@ -1362,6 +1362,12 @@ interface FederationOptions<TContextData> {
|
|
|
1362
1362
|
*
|
|
1363
1363
|
* By default, the queue starts automatically.
|
|
1364
1364
|
*
|
|
1365
|
+
* Automatic startup is best-effort: if a queue cannot start listening,
|
|
1366
|
+
* a warning is logged once per federation instance and the failed worker is
|
|
1367
|
+
* not retried, while an explicit {@link Federation.startQueue} call rejects.
|
|
1368
|
+
* Runtimes that consume the queue elsewhere, such as Cloudflare Workers with
|
|
1369
|
+
* {@link Federation.processQueuedTask}, should set this to `true`.
|
|
1370
|
+
*
|
|
1365
1371
|
* @since 0.12.0
|
|
1366
1372
|
*/
|
|
1367
1373
|
manuallyStartQueue?: boolean;
|
|
@@ -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-
|
|
5
|
-
import { r as doubleKnockScoped } from "./http-
|
|
4
|
+
import { o as validateCryptoKey } from "./key-ChKDZfvS.mjs";
|
|
5
|
+
import { r as doubleKnockScoped } from "./http-BWoAqky4.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-
|
|
8
|
+
import { n as createFederationBuilder } from "../builder-BC3eRIbe.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-
|
|
10
|
-
import { c as signRequest } from "../http-
|
|
9
|
+
import { i as generateCryptoKeyPair } from "../key-ChKDZfvS.mjs";
|
|
10
|
+
import { c as signRequest } from "../http-BWoAqky4.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-
|
|
13
|
-
import { n as signObject } from "../proof-
|
|
12
|
+
import { a as compactJsonLd, f as signJsonLd } from "../ld-DbSNiv8Q.mjs";
|
|
13
|
+
import { n as signObject } from "../proof-CaMBdk_x.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-
|
|
16
|
-
import { t as InboxListenerSet } from "../inbox-
|
|
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";
|
|
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-
|
|
7
|
+
import { n as signObject } from "../proof-CaMBdk_x.mjs";
|
|
8
8
|
import { t as MemoryKvStore } from "../kv-mI4Ix2EU.mjs";
|
|
9
|
-
import { a as createFederation } from "../middleware-
|
|
9
|
+
import { a as createFederation } from "../middleware-C849kmHB.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-
|
|
6
|
+
import { n as actorsHaveSameOrigin, t as InboxListenerSet } from "../inbox-0Dbv0QVc.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,18 +9,19 @@ 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-
|
|
12
|
+
import { c as signRequest, u as verifyRequest } from "../http-BWoAqky4.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-
|
|
15
|
-
import { a as compactJsonLd, f as signJsonLd, i as attachSignature, m as verifyJsonLd, s as detachSignature } from "../ld-
|
|
16
|
-
import { t as doesActorOwnKey } from "../owner-
|
|
17
|
-
import { n as signObject, r as verifyObject } from "../proof-
|
|
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";
|
|
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-
|
|
19
|
+
import { a as createFederation, i as KvSpecDeterminer, n as FederationImpl, r as InboxContextImpl, t as ContextImpl } from "../middleware-C849kmHB.mjs";
|
|
20
20
|
import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
|
|
21
21
|
import * as vocab from "@fedify/vocab";
|
|
22
22
|
import { Create, Offer, Person, getTypeId, lookupObject } from "@fedify/vocab";
|
|
23
23
|
import { FetchError, UrlError, getDocumentLoader } from "@fedify/vocab-runtime";
|
|
24
|
+
import { configure, reset } from "@logtape/logtape";
|
|
24
25
|
import dns from "node:dns/promises";
|
|
25
26
|
//#region ../fixture/src/fixtures/example.com/create.json
|
|
26
27
|
var id$2 = "https://example.com/create";
|
|
@@ -1575,6 +1576,320 @@ test("FederationImpl.sendActivity()", async (t) => {
|
|
|
1575
1576
|
});
|
|
1576
1577
|
esm_default.hardReset();
|
|
1577
1578
|
});
|
|
1579
|
+
const QUEUE_STARTUP_WARNING = "Failed to start queue workers automatically: {error}";
|
|
1580
|
+
/**
|
|
1581
|
+
* Captures unhandled promise rejections for the duration of a test step.
|
|
1582
|
+
*
|
|
1583
|
+
* Deno dispatches `unhandledrejection` on `globalThis`, while Node.js and Bun
|
|
1584
|
+
* dispatch `unhandledRejection` on `process`. Bun's test runner currently
|
|
1585
|
+
* fires neither, so there the native runner's own unhandled-rejection failure
|
|
1586
|
+
* remains the signal; the assertion is harmless otherwise.
|
|
1587
|
+
*/
|
|
1588
|
+
function captureUnhandledRejections() {
|
|
1589
|
+
const reasons = [];
|
|
1590
|
+
const isDeno = "Deno" in globalThis;
|
|
1591
|
+
const onRejectionEvent = (event) => {
|
|
1592
|
+
event.preventDefault();
|
|
1593
|
+
reasons.push(event.reason);
|
|
1594
|
+
};
|
|
1595
|
+
const onProcessRejection = (reason) => {
|
|
1596
|
+
reasons.push(reason);
|
|
1597
|
+
};
|
|
1598
|
+
const globalTarget = globalThis;
|
|
1599
|
+
const proc = globalThis.process;
|
|
1600
|
+
if (isDeno) globalTarget.addEventListener?.("unhandledrejection", onRejectionEvent);
|
|
1601
|
+
else proc?.on?.("unhandledRejection", onProcessRejection);
|
|
1602
|
+
async function settle() {
|
|
1603
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
1604
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
1605
|
+
}
|
|
1606
|
+
return {
|
|
1607
|
+
reasons,
|
|
1608
|
+
settle,
|
|
1609
|
+
stop() {
|
|
1610
|
+
if (isDeno) globalTarget.removeEventListener?.("unhandledrejection", onRejectionEvent);
|
|
1611
|
+
else proc?.off?.("unhandledRejection", onProcessRejection);
|
|
1612
|
+
}
|
|
1613
|
+
};
|
|
1614
|
+
}
|
|
1615
|
+
async function configureQueueStartupWarningCapture(records) {
|
|
1616
|
+
await configure({
|
|
1617
|
+
sinks: { buffer(record) {
|
|
1618
|
+
records.push(record);
|
|
1619
|
+
} },
|
|
1620
|
+
loggers: [{
|
|
1621
|
+
category: "fedify",
|
|
1622
|
+
sinks: ["buffer"],
|
|
1623
|
+
lowestLevel: "warning"
|
|
1624
|
+
}, {
|
|
1625
|
+
category: ["logtape", "meta"],
|
|
1626
|
+
sinks: []
|
|
1627
|
+
}],
|
|
1628
|
+
reset: true
|
|
1629
|
+
});
|
|
1630
|
+
}
|
|
1631
|
+
function queueStartupWarnings(records, error) {
|
|
1632
|
+
return records.filter((record) => record.level === "warning" && record.category.length === 3 && record.category[0] === "fedify" && record.category[1] === "federation" && record.category[2] === "queue" && record.rawMessage === QUEUE_STARTUP_WARNING && record.properties.error === error);
|
|
1633
|
+
}
|
|
1634
|
+
test("Federation.fetch() reports automatic queue startup failures", async (t) => {
|
|
1635
|
+
const listenError = /* @__PURE__ */ new TypeError("simulated listen() failure");
|
|
1636
|
+
const queue = {
|
|
1637
|
+
enqueue() {
|
|
1638
|
+
return Promise.resolve();
|
|
1639
|
+
},
|
|
1640
|
+
listen() {
|
|
1641
|
+
throw listenError;
|
|
1642
|
+
}
|
|
1643
|
+
};
|
|
1644
|
+
const capture = captureUnhandledRejections();
|
|
1645
|
+
const records = [];
|
|
1646
|
+
await configureQueueStartupWarningCapture(records);
|
|
1647
|
+
try {
|
|
1648
|
+
const federation = createFederation({
|
|
1649
|
+
kv: new MemoryKvStore(),
|
|
1650
|
+
queue,
|
|
1651
|
+
skipSignatureVerification: true,
|
|
1652
|
+
documentLoaderFactory: () => mockDocumentLoader,
|
|
1653
|
+
contextLoaderFactory: () => mockDocumentLoader
|
|
1654
|
+
});
|
|
1655
|
+
federation.setActorDispatcher("/actors/{identifier}", () => new Person({ id: new URL("https://example.com/actor") }));
|
|
1656
|
+
federation.setInboxListeners("/actors/{identifier}/inbox", "/inbox").on(Create, () => {});
|
|
1657
|
+
const post = (id) => federation.fetch(new Request("https://example.com/inbox", {
|
|
1658
|
+
method: "POST",
|
|
1659
|
+
headers: { "Content-Type": "application/activity+json" },
|
|
1660
|
+
body: JSON.stringify({
|
|
1661
|
+
"@context": "https://www.w3.org/ns/activitystreams",
|
|
1662
|
+
id,
|
|
1663
|
+
type: "Create",
|
|
1664
|
+
actor: "https://example.com/actor"
|
|
1665
|
+
})
|
|
1666
|
+
}), { contextData: void 0 });
|
|
1667
|
+
await t.step("synchronous failure", async () => {
|
|
1668
|
+
assertEquals((await post("https://example.com/activities/queued-1")).status, 202);
|
|
1669
|
+
await capture.settle();
|
|
1670
|
+
assertEquals(queueStartupWarnings(records, listenError).length, 1);
|
|
1671
|
+
assertEquals(capture.reasons, []);
|
|
1672
|
+
assertEquals((await post("https://example.com/activities/queued-2")).status, 202);
|
|
1673
|
+
await capture.settle();
|
|
1674
|
+
assertEquals(queueStartupWarnings(records, listenError).length, 1, "the warning must be logged only once per federation instance");
|
|
1675
|
+
assertEquals(capture.reasons, []);
|
|
1676
|
+
});
|
|
1677
|
+
await t.step("asynchronous failure", async () => {
|
|
1678
|
+
const asyncError = /* @__PURE__ */ new TypeError("simulated async listen() failure");
|
|
1679
|
+
let rejectListen;
|
|
1680
|
+
const asyncFederation = createFederation({
|
|
1681
|
+
kv: new MemoryKvStore(),
|
|
1682
|
+
queue: {
|
|
1683
|
+
enqueue() {
|
|
1684
|
+
return Promise.resolve();
|
|
1685
|
+
},
|
|
1686
|
+
listen() {
|
|
1687
|
+
return new Promise((_resolve, reject) => {
|
|
1688
|
+
rejectListen = reject;
|
|
1689
|
+
});
|
|
1690
|
+
}
|
|
1691
|
+
},
|
|
1692
|
+
skipSignatureVerification: true,
|
|
1693
|
+
documentLoaderFactory: () => mockDocumentLoader,
|
|
1694
|
+
contextLoaderFactory: () => mockDocumentLoader
|
|
1695
|
+
});
|
|
1696
|
+
asyncFederation.setActorDispatcher("/actors/{identifier}", () => new Person({ id: new URL("https://example.com/actor") }));
|
|
1697
|
+
asyncFederation.setInboxListeners("/actors/{identifier}/inbox", "/inbox").on(Create, () => {});
|
|
1698
|
+
assertEquals((await asyncFederation.fetch(new Request("https://example.com/inbox", {
|
|
1699
|
+
method: "POST",
|
|
1700
|
+
headers: { "Content-Type": "application/activity+json" },
|
|
1701
|
+
body: JSON.stringify({
|
|
1702
|
+
"@context": "https://www.w3.org/ns/activitystreams",
|
|
1703
|
+
id: "https://example.com/activities/queued-async",
|
|
1704
|
+
type: "Create",
|
|
1705
|
+
actor: "https://example.com/actor"
|
|
1706
|
+
})
|
|
1707
|
+
}), { contextData: void 0 })).status, 202);
|
|
1708
|
+
await capture.settle();
|
|
1709
|
+
assertEquals(queueStartupWarnings(records, asyncError).length, 0);
|
|
1710
|
+
assert(rejectListen != null);
|
|
1711
|
+
rejectListen(asyncError);
|
|
1712
|
+
await capture.settle();
|
|
1713
|
+
assertEquals(queueStartupWarnings(records, asyncError).length, 1, "a listener that rejects after startup must still be reported");
|
|
1714
|
+
assertEquals(capture.reasons, []);
|
|
1715
|
+
});
|
|
1716
|
+
} finally {
|
|
1717
|
+
await capture.settle();
|
|
1718
|
+
capture.stop();
|
|
1719
|
+
await reset();
|
|
1720
|
+
}
|
|
1721
|
+
});
|
|
1722
|
+
test("Federation.startQueue() rejects when a queue cannot listen", async () => {
|
|
1723
|
+
const listenError = /* @__PURE__ */ new TypeError("simulated listen() failure");
|
|
1724
|
+
const federation = createFederation({
|
|
1725
|
+
kv: new MemoryKvStore(),
|
|
1726
|
+
queue: {
|
|
1727
|
+
enqueue() {
|
|
1728
|
+
return Promise.resolve();
|
|
1729
|
+
},
|
|
1730
|
+
listen() {
|
|
1731
|
+
throw listenError;
|
|
1732
|
+
}
|
|
1733
|
+
},
|
|
1734
|
+
manuallyStartQueue: true
|
|
1735
|
+
});
|
|
1736
|
+
assertStrictEquals(await assertRejects(() => federation.startQueue(void 0)), listenError);
|
|
1737
|
+
});
|
|
1738
|
+
test("Federation.startQueue() keeps other queue workers running", async () => {
|
|
1739
|
+
const outboxError = /* @__PURE__ */ new TypeError("simulated outbox listen() failure");
|
|
1740
|
+
const lateInboxError = /* @__PURE__ */ new TypeError("simulated late inbox failure");
|
|
1741
|
+
let rejectInbox;
|
|
1742
|
+
let fanoutStarted = false;
|
|
1743
|
+
const inbox = {
|
|
1744
|
+
enqueue() {
|
|
1745
|
+
return Promise.resolve();
|
|
1746
|
+
},
|
|
1747
|
+
listen() {
|
|
1748
|
+
return new Promise((_resolve, reject) => {
|
|
1749
|
+
rejectInbox = reject;
|
|
1750
|
+
});
|
|
1751
|
+
}
|
|
1752
|
+
};
|
|
1753
|
+
const outbox = {
|
|
1754
|
+
enqueue() {
|
|
1755
|
+
return Promise.resolve();
|
|
1756
|
+
},
|
|
1757
|
+
listen() {
|
|
1758
|
+
throw outboxError;
|
|
1759
|
+
}
|
|
1760
|
+
};
|
|
1761
|
+
const fanout = {
|
|
1762
|
+
enqueue() {
|
|
1763
|
+
return Promise.resolve();
|
|
1764
|
+
},
|
|
1765
|
+
listen() {
|
|
1766
|
+
fanoutStarted = true;
|
|
1767
|
+
return new Promise(() => {});
|
|
1768
|
+
}
|
|
1769
|
+
};
|
|
1770
|
+
const capture = captureUnhandledRejections();
|
|
1771
|
+
try {
|
|
1772
|
+
const federation = createFederation({
|
|
1773
|
+
kv: new MemoryKvStore(),
|
|
1774
|
+
queue: {
|
|
1775
|
+
inbox,
|
|
1776
|
+
outbox,
|
|
1777
|
+
fanout
|
|
1778
|
+
},
|
|
1779
|
+
manuallyStartQueue: true
|
|
1780
|
+
});
|
|
1781
|
+
assertStrictEquals(await assertRejects(() => federation.startQueue(void 0)), outboxError);
|
|
1782
|
+
assert(fanoutStarted, "a synchronous throw from one queue must not prevent later queues from starting");
|
|
1783
|
+
assert(rejectInbox != null);
|
|
1784
|
+
rejectInbox(lateInboxError);
|
|
1785
|
+
await capture.settle();
|
|
1786
|
+
assertEquals(capture.reasons, [], "an earlier listener rejection must remain handled after startup fails");
|
|
1787
|
+
} finally {
|
|
1788
|
+
await capture.settle();
|
|
1789
|
+
capture.stop();
|
|
1790
|
+
}
|
|
1791
|
+
});
|
|
1792
|
+
test("ContextImpl.sendActivity() reports automatic queue startup failures", async (t) => {
|
|
1793
|
+
const sender = [{
|
|
1794
|
+
privateKey: ed25519PrivateKey,
|
|
1795
|
+
keyId: ed25519Multikey.id
|
|
1796
|
+
}];
|
|
1797
|
+
const recipient = {
|
|
1798
|
+
id: new URL("https://example.com/recipient"),
|
|
1799
|
+
inboxId: new URL("https://example.com/inbox")
|
|
1800
|
+
};
|
|
1801
|
+
const createActivity = () => new Create({
|
|
1802
|
+
id: new URL("https://example.com/activities/queue-startup-send"),
|
|
1803
|
+
actor: new URL("https://example.com/actor")
|
|
1804
|
+
});
|
|
1805
|
+
await t.step("outbox", async () => {
|
|
1806
|
+
const listenError = /* @__PURE__ */ new TypeError("simulated outbox listen() failure");
|
|
1807
|
+
const messages = [];
|
|
1808
|
+
const queue = {
|
|
1809
|
+
enqueue(message) {
|
|
1810
|
+
messages.push(message);
|
|
1811
|
+
return Promise.resolve();
|
|
1812
|
+
},
|
|
1813
|
+
listen() {
|
|
1814
|
+
throw listenError;
|
|
1815
|
+
}
|
|
1816
|
+
};
|
|
1817
|
+
const capture = captureUnhandledRejections();
|
|
1818
|
+
const records = [];
|
|
1819
|
+
await configureQueueStartupWarningCapture(records);
|
|
1820
|
+
try {
|
|
1821
|
+
await new ContextImpl({
|
|
1822
|
+
data: void 0,
|
|
1823
|
+
federation: new FederationImpl({
|
|
1824
|
+
kv: new MemoryKvStore(),
|
|
1825
|
+
queue: { outbox: queue },
|
|
1826
|
+
documentLoaderFactory: () => mockDocumentLoader,
|
|
1827
|
+
contextLoaderFactory: () => mockDocumentLoader
|
|
1828
|
+
}),
|
|
1829
|
+
url: new URL("https://example.com/"),
|
|
1830
|
+
documentLoader: mockDocumentLoader,
|
|
1831
|
+
contextLoader: mockDocumentLoader
|
|
1832
|
+
}).sendActivity(sender, recipient, createActivity());
|
|
1833
|
+
assertEquals(messages.map((message) => message.type), ["outbox"]);
|
|
1834
|
+
await capture.settle();
|
|
1835
|
+
assertEquals(queueStartupWarnings(records, listenError).length, 1);
|
|
1836
|
+
assertEquals(capture.reasons, []);
|
|
1837
|
+
} finally {
|
|
1838
|
+
await capture.settle();
|
|
1839
|
+
capture.stop();
|
|
1840
|
+
await reset();
|
|
1841
|
+
}
|
|
1842
|
+
});
|
|
1843
|
+
await t.step("fanout", async () => {
|
|
1844
|
+
const listenError = /* @__PURE__ */ new TypeError("simulated fanout listen() failure");
|
|
1845
|
+
const messages = [];
|
|
1846
|
+
const outbox = {
|
|
1847
|
+
enqueue() {
|
|
1848
|
+
return Promise.resolve();
|
|
1849
|
+
},
|
|
1850
|
+
listen() {
|
|
1851
|
+
return Promise.resolve();
|
|
1852
|
+
}
|
|
1853
|
+
};
|
|
1854
|
+
const fanout = {
|
|
1855
|
+
enqueue(message) {
|
|
1856
|
+
messages.push(message);
|
|
1857
|
+
return Promise.resolve();
|
|
1858
|
+
},
|
|
1859
|
+
listen() {
|
|
1860
|
+
throw listenError;
|
|
1861
|
+
}
|
|
1862
|
+
};
|
|
1863
|
+
const capture = captureUnhandledRejections();
|
|
1864
|
+
const records = [];
|
|
1865
|
+
await configureQueueStartupWarningCapture(records);
|
|
1866
|
+
try {
|
|
1867
|
+
await new ContextImpl({
|
|
1868
|
+
data: void 0,
|
|
1869
|
+
federation: new FederationImpl({
|
|
1870
|
+
kv: new MemoryKvStore(),
|
|
1871
|
+
queue: {
|
|
1872
|
+
outbox,
|
|
1873
|
+
fanout
|
|
1874
|
+
},
|
|
1875
|
+
documentLoaderFactory: () => mockDocumentLoader,
|
|
1876
|
+
contextLoaderFactory: () => mockDocumentLoader
|
|
1877
|
+
}),
|
|
1878
|
+
url: new URL("https://example.com/"),
|
|
1879
|
+
documentLoader: mockDocumentLoader,
|
|
1880
|
+
contextLoader: mockDocumentLoader
|
|
1881
|
+
}).sendActivity(sender, recipient, createActivity(), { fanout: "force" });
|
|
1882
|
+
assertEquals(messages.map((message) => message.type), ["fanout"]);
|
|
1883
|
+
await capture.settle();
|
|
1884
|
+
assertEquals(queueStartupWarnings(records, listenError).length, 1);
|
|
1885
|
+
assertEquals(capture.reasons, []);
|
|
1886
|
+
} finally {
|
|
1887
|
+
await capture.settle();
|
|
1888
|
+
capture.stop();
|
|
1889
|
+
await reset();
|
|
1890
|
+
}
|
|
1891
|
+
});
|
|
1892
|
+
});
|
|
1578
1893
|
test("FederationImpl.processQueuedTask()", async (t) => {
|
|
1579
1894
|
await t.step("with MessageQueue having nativeRetrial", async () => {
|
|
1580
1895
|
const kv = new MemoryKvStore();
|
package/dist/federation/mod.cjs
CHANGED
|
@@ -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-
|
|
5
|
+
const require_middleware = require("../middleware-C_fDk_dx.cjs");
|
|
6
6
|
let es_toolkit = require("es-toolkit");
|
|
7
7
|
//#region src/federation/kv.ts
|
|
8
8
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-
|
|
2
|
+
import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-ao-qb3eP.cjs";
|
|
3
3
|
import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-CZKl1IUS.cjs";
|
|
4
|
-
import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-
|
|
4
|
+
import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-6uJWdCc0.cjs";
|
|
5
5
|
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 };
|
package/dist/federation/mod.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-
|
|
2
|
+
import { $ as AuthorizePredicate, A as CreateExponentialBackoffPolicyOptions, B as RespondWithObjectOptions, C as InboxListenerSetters, D as FederationOrigin, E as FederationKvPrefixes, F as createFederationBuilder, G as MessageQueue, H as respondWithObjectIfAcceptable, I as Router, J as ParallelMessageQueue, K as MessageQueueEnqueueOptions, L as RouterError, M as RetryPolicy, N as createExponentialBackoffPolicy, O as FederationQueueOptions, P as Message, Q as ActorKeyPairsDispatcher, R as RouterOptions, S as IdempotencyStrategy, T as Rfc6570Expression, U as InProcessMessageQueue, V as respondWithObject, W as InProcessMessageQueueOptions, X as ActorDispatcher, Y as ActorAliasMapper, Z as ActorHandleMapper, _ as FederationBuilder, _t as PageItems, a as InboxContext, at as CustomCollectionDispatcher, b as FederationStartQueueOptions, c as RouteActivityOptions, ct as NodeInfoDispatcher, d as ActorCallbackSetters, dt as OutboxErrorHandler, et as CollectionCounter, f as CollectionCallbackSetters, ft as OutboxPermanentFailureHandler, g as Federation, gt as SenderKeyPair, h as Federatable, ht as SendActivityError, i as GetSignedKeyOptions, it as CustomCollectionCursor, j as RetryContext, k as createFederation, l as SendActivityOptions, lt as ObjectAuthorizePredicate, m as CustomCollectionCallbackSetters, mt as WebFingerLinksDispatcher, n as Context, nt as CollectionDispatcher, o as ParseUriResult, ot as InboxErrorHandler, p as ConstructorWithTypeId, pt as SharedInboxKeyDispatcher, q as MessageQueueListenOptions, r as ForwardActivityOptions, rt as CustomCollectionCounter, s as RequestContext, st as InboxListener, t as ActorKeyPair, tt as CollectionCursor, u as SendActivityOptionsForCollection, ut as ObjectDispatcher, v as FederationFetchOptions, vt as buildCollectionSynchronizationHeader, w as ObjectCallbackSetters, x as IdempotencyKeyCallback, y as FederationOptions, yt as digest, z as RouterRouteResult } from "../context-C00pWP8x.js";
|
|
3
3
|
import { a as MemoryKvStore, i as KvStoreSetOptions, n as KvStore, r as KvStoreListEntry, t as KvKey } from "../kv-CxaI4eGo.js";
|
|
4
|
-
import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-
|
|
4
|
+
import { n as handleWebFinger, t as WebFingerHandlerParameters } from "../mod-DtRh015i.js";
|
|
5
5
|
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 };
|
package/dist/federation/mod.js
CHANGED
|
@@ -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-
|
|
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";
|
|
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-
|
|
11
|
+
import { u as verifyRequest } from "../http-BWoAqky4.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-
|
|
14
|
-
import { i as sendActivity, n as extractInboxes, r as fetchWithValidatedRedirects, t as SendActivityError } from "../send-
|
|
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";
|
|
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-
|
|
7
|
+
import { t as hasMalformedKnownTemporalLiteral } from "../temporal-BJoGKOXy.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-
|
|
8
|
+
import { a as createFederation, o as handleWebFinger } from "../middleware-C849kmHB.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
|
|
@@ -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
|
|
5
|
-
import { o as validateCryptoKey, r as fetchKey } from "./key-
|
|
4
|
+
import { n as version, t as name } from "./deno-Dv6PIwH_.mjs";
|
|
5
|
+
import { o as validateCryptoKey, r as fetchKey } from "./key-ChKDZfvS.mjs";
|
|
6
6
|
import { CryptographicKey } from "@fedify/vocab";
|
|
7
7
|
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
8
8
|
import { FetchError } from "@fedify/vocab-runtime";
|
|
@@ -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.
|
|
13
|
+
var version = "2.0.36-dev.2637+cc2cd6fb";
|
|
14
14
|
//#endregion
|
|
15
15
|
//#region src/sig/key.ts
|
|
16
16
|
/** Classifies decoding failures without hiding unexpected loader errors. */
|
|
@@ -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.
|
|
14
|
+
var version = "2.0.36-dev.2637+cc2cd6fb";
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/sig/key.ts
|
|
17
17
|
/** Classifies decoding failures without hiding unexpected loader errors. */
|
|
@@ -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
|
|
4
|
+
import { n as version, t as name } from "./deno-Dv6PIwH_.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";
|