@fedify/fedify 0.11.0-dev.236 → 0.11.0-dev.238
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/CHANGES.md +8 -1
- package/esm/federation/middleware.js +66 -1
- package/esm/vocab/vocab.js +1117 -76
- package/package.json +1 -1
- package/types/federation/context.d.ts +16 -0
- package/types/federation/context.d.ts.map +1 -1
- package/types/federation/middleware.d.ts +14 -1
- package/types/federation/middleware.d.ts.map +1 -1
- package/types/testing/context.d.ts.map +1 -1
- package/types/vocab/vocab.d.ts +102 -0
- package/types/vocab/vocab.d.ts.map +1 -1
package/CHANGES.md
CHANGED
@@ -10,7 +10,13 @@ To be released.
|
|
10
10
|
|
11
11
|
- Improved runtime type error messages for Activity Vocabulary API. [[#79]]
|
12
12
|
|
13
|
-
- Added `
|
13
|
+
- Added `suppressError` option to dereferencing accessors of Activity
|
14
|
+
Vocabulary classes.
|
15
|
+
|
16
|
+
- Added more collection dispatchers. [[#78]]
|
17
|
+
|
18
|
+
- Added `Federation.setInboxDispatcher()` method. [[#71]]
|
19
|
+
- Added `Federation.setLikedDispatcher()` method.
|
14
20
|
|
15
21
|
- Frequently used JSON-LD contexts are now preloaded. [[74]]
|
16
22
|
|
@@ -41,6 +47,7 @@ To be released.
|
|
41
47
|
[#71]: https://github.com/dahlia/fedify/issues/71
|
42
48
|
[#74]: https://github.com/dahlia/fedify/issues/74
|
43
49
|
[#76]: https://github.com/dahlia/fedify/pull/76
|
50
|
+
[#78]: https://github.com/dahlia/fedify/issues/78
|
44
51
|
[#79]: https://github.com/dahlia/fedify/issues/79
|
45
52
|
|
46
53
|
|
@@ -5,7 +5,7 @@ import { fetchDocumentLoader, getAuthenticatedDocumentLoader, kvCache, } from ".
|
|
5
5
|
import { verifyRequest } from "../sig/http.js";
|
6
6
|
import { exportJwk, importJwk, validateCryptoKey } from "../sig/key.js";
|
7
7
|
import { getKeyOwner } from "../sig/owner.js";
|
8
|
-
import { Activity, CryptographicKey, Multikey, } from "../vocab/
|
8
|
+
import { Activity, CryptographicKey, Multikey, } from "../vocab/vocab.js";
|
9
9
|
import { handleWebFinger } from "../webfinger/handler.js";
|
10
10
|
import { buildCollectionSynchronizationHeader } from "./collection.js";
|
11
11
|
import { handleActor, handleCollection, handleInbox, handleObject, } from "./handler.js";
|
@@ -47,6 +47,7 @@ export class Federation {
|
|
47
47
|
#outboxCallbacks;
|
48
48
|
#followingCallbacks;
|
49
49
|
#followersCallbacks;
|
50
|
+
#likedCallbacks;
|
50
51
|
#inboxListeners;
|
51
52
|
#inboxErrorHandler;
|
52
53
|
#sharedInboxKeyDispatcher;
|
@@ -600,6 +601,50 @@ export class Federation {
|
|
600
601
|
};
|
601
602
|
return setters;
|
602
603
|
}
|
604
|
+
/**
|
605
|
+
* Registers a liked collection dispatcher.
|
606
|
+
* @param path The URI path pattern for the liked collection. The syntax
|
607
|
+
* is based on URI Template
|
608
|
+
* ([RFC 6570](https://tools.ietf.org/html/rfc6570)). The path
|
609
|
+
* must have one variable: `{handle}`.
|
610
|
+
* @param dispatcher A liked collection callback to register.
|
611
|
+
* @returns An object with methods to set other liked collection
|
612
|
+
* callbacks.
|
613
|
+
* @throws {@link RouterError} Thrown if the path pattern is invalid.
|
614
|
+
* @since 0.11.0
|
615
|
+
*/
|
616
|
+
setLikedDispatcher(path, dispatcher) {
|
617
|
+
if (this.#router.has("liked")) {
|
618
|
+
throw new RouterError("Liked collection dispatcher already set.");
|
619
|
+
}
|
620
|
+
const variables = this.#router.add(path, "liked");
|
621
|
+
if (variables.size !== 1 || !variables.has("handle")) {
|
622
|
+
throw new RouterError("Path for liked collection dispatcher must have one variable: {handle}");
|
623
|
+
}
|
624
|
+
const callbacks = {
|
625
|
+
dispatcher,
|
626
|
+
};
|
627
|
+
this.#likedCallbacks = callbacks;
|
628
|
+
const setters = {
|
629
|
+
setCounter(counter) {
|
630
|
+
callbacks.counter = counter;
|
631
|
+
return setters;
|
632
|
+
},
|
633
|
+
setFirstCursor(cursor) {
|
634
|
+
callbacks.firstCursor = cursor;
|
635
|
+
return setters;
|
636
|
+
},
|
637
|
+
setLastCursor(cursor) {
|
638
|
+
callbacks.lastCursor = cursor;
|
639
|
+
return setters;
|
640
|
+
},
|
641
|
+
authorize(predicate) {
|
642
|
+
callbacks.authorizePredicate = predicate;
|
643
|
+
return setters;
|
644
|
+
},
|
645
|
+
};
|
646
|
+
return setters;
|
647
|
+
}
|
603
648
|
/**
|
604
649
|
* Assigns the URL path for the inbox and starts setting inbox listeners.
|
605
650
|
*
|
@@ -926,6 +971,16 @@ export class Federation {
|
|
926
971
|
onNotAcceptable,
|
927
972
|
});
|
928
973
|
}
|
974
|
+
case "liked":
|
975
|
+
return await handleCollection(request, {
|
976
|
+
name: "liked",
|
977
|
+
handle: route.values.handle,
|
978
|
+
context,
|
979
|
+
collectionCallbacks: this.#likedCallbacks,
|
980
|
+
onUnauthorized,
|
981
|
+
onNotFound,
|
982
|
+
onNotAcceptable,
|
983
|
+
});
|
929
984
|
default: {
|
930
985
|
const response = onNotFound(request);
|
931
986
|
return response instanceof Promise ? await response : response;
|
@@ -1024,6 +1079,13 @@ class ContextImpl {
|
|
1024
1079
|
}
|
1025
1080
|
return new URL(path, this.#url);
|
1026
1081
|
}
|
1082
|
+
getLikedUri(handle) {
|
1083
|
+
const path = this.#router.build("liked", { handle });
|
1084
|
+
if (path == null) {
|
1085
|
+
throw new RouterError("No liked collection path registered.");
|
1086
|
+
}
|
1087
|
+
return new URL(path, this.#url);
|
1088
|
+
}
|
1027
1089
|
parseUri(uri) {
|
1028
1090
|
if (uri.origin !== this.#url.origin)
|
1029
1091
|
return null;
|
@@ -1057,6 +1119,9 @@ class ContextImpl {
|
|
1057
1119
|
else if (route.name === "followers") {
|
1058
1120
|
return { type: "followers", handle: route.values.handle };
|
1059
1121
|
}
|
1122
|
+
else if (route.name === "liked") {
|
1123
|
+
return { type: "liked", handle: route.values.handle };
|
1124
|
+
}
|
1060
1125
|
return null;
|
1061
1126
|
}
|
1062
1127
|
getHandleFromActorUri(actorUri) {
|