@fedify/fedify 1.3.0-dev.502 → 1.3.0-dev.508
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 +239 -0
- package/esm/deno.js +1 -1
- package/esm/federation/middleware.js +46 -19
- package/esm/testing/fixtures/example.com/orderedcollectionpage +24 -0
- package/esm/vocab/application.yaml +2 -0
- package/esm/vocab/group.yaml +2 -0
- package/esm/vocab/organization.yaml +2 -0
- package/esm/vocab/person.yaml +2 -0
- package/esm/vocab/service.yaml +2 -0
- package/esm/vocab/vocab.js +450 -110
- package/package.json +1 -1
- package/types/federation/federation.d.ts +6 -0
- package/types/federation/federation.d.ts.map +1 -1
- package/types/federation/middleware.d.ts +29 -6
- package/types/federation/middleware.d.ts.map +1 -1
- package/types/vocab/vocab.d.ts +30 -30
- package/types/vocab/vocab.d.ts.map +1 -1
package/CHANGES.md
CHANGED
@@ -8,6 +8,15 @@ Version 1.3.0
|
|
8
8
|
|
9
9
|
To be released.
|
10
10
|
|
11
|
+
- `MessageQueue`s now can be differently configured for incoming and outgoing
|
12
|
+
activities.
|
13
|
+
|
14
|
+
- Changed the type of `CreateFederationOptions.queue` option to
|
15
|
+
`FederationQueueOptions | MessageQueue | undefined` (was `MessageQueue |
|
16
|
+
undefined`).
|
17
|
+
- Added `FederationQueueOptions` interface.
|
18
|
+
- Added `FederationStartQueueOptions.queue` option.
|
19
|
+
|
11
20
|
- Fedify now makes HTTP requests with the proper `User-Agent` header. [[#162]]
|
12
21
|
|
13
22
|
- Added `getUserAgent()` function.
|
@@ -33,6 +42,63 @@ To be released.
|
|
33
42
|
[#162]: https://github.com/dahlia/fedify/issues/162
|
34
43
|
|
35
44
|
|
45
|
+
Version 1.2.6
|
46
|
+
-------------
|
47
|
+
|
48
|
+
Released on December 19, 2024.
|
49
|
+
|
50
|
+
- Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
|
51
|
+
able to be set to an `OrderedCollectionPage` object, even though it is
|
52
|
+
a subtype of `OrderedCollection` according to Activity Vocabulary
|
53
|
+
specification. [[#165]]
|
54
|
+
|
55
|
+
- The type of `Application()` constructor's `inbox` and `outbox` options
|
56
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
57
|
+
(was `OrderedCollection | null | undefined`).
|
58
|
+
- The type of `Application.clone()` method's `inbox` and `outbox` options
|
59
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
60
|
+
(was `OrderedCollection | null | undefined`).
|
61
|
+
- The return type of `Application.getInbox()` and
|
62
|
+
`Application.getOutbox()` methods is now `OrderedCollection |
|
63
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
64
|
+
- The type of `Group()` constructor's `inbox` and `outbox` options is
|
65
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
66
|
+
`OrderedCollection | null | undefined`).
|
67
|
+
- The type of `Group.clone()` method's `inbox` and `outbox` options is
|
68
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
69
|
+
`OrderedCollection | null | undefined`).
|
70
|
+
- The return type of `Group.getInbox()` and `Group.getOutbox()` methods
|
71
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
72
|
+
`OrderedCollection | null`).
|
73
|
+
- The type of `Organization()` constructor's `inbox` and `outbox` options
|
74
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
75
|
+
(was `OrderedCollection | null | undefined`).
|
76
|
+
- The type of `Organization.clone()` method's `inbox` and `outbox` options
|
77
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
78
|
+
(was `OrderedCollection | null | undefined`).
|
79
|
+
- The return type of `Organization.getInbox()` and
|
80
|
+
`Organization.getOutbox()` methods is now `OrderedCollection |
|
81
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
82
|
+
- The type of `Person()` constructor's `inbox` and `outbox` options is
|
83
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
84
|
+
`OrderedCollection | null | undefined`).
|
85
|
+
- The type of `Person.clone()` method's `inbox` and `outbox` options is
|
86
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
87
|
+
`OrderedCollection | null | undefined`).
|
88
|
+
- The return type of `Person.getInbox()` and `Person.getOutbox()` methods
|
89
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
90
|
+
`OrderedCollection | null`).
|
91
|
+
- The type of `Service()` constructor's `inbox` and `outbox` options is
|
92
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
93
|
+
`OrderedCollection | null | undefined`).
|
94
|
+
- The type of `Service.clone()` method's `inbox` and `outbox` options is
|
95
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
96
|
+
`OrderedCollection | null | undefined`).
|
97
|
+
- The return type of `Service.getInbox()` and `Service.getOutbox()`
|
98
|
+
methods is now `OrderedCollection | OrderedCollectionPage | null` (was
|
99
|
+
`OrderedCollection | null`).
|
100
|
+
|
101
|
+
|
36
102
|
Version 1.2.5
|
37
103
|
-------------
|
38
104
|
|
@@ -157,6 +223,63 @@ Released on October 31, 2024.
|
|
157
223
|
[#118]: https://github.com/dahlia/fedify/issues/118
|
158
224
|
|
159
225
|
|
226
|
+
Version 1.1.6
|
227
|
+
-------------
|
228
|
+
|
229
|
+
Released on November 19, 2024.
|
230
|
+
|
231
|
+
- Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
|
232
|
+
able to be set to an `OrderedCollectionPage` object, even though it is
|
233
|
+
a subtype of `OrderedCollection` according to Activity Vocabulary
|
234
|
+
specification. [[#165]]
|
235
|
+
|
236
|
+
- The type of `Application()` constructor's `inbox` and `outbox` options
|
237
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
238
|
+
(was `OrderedCollection | null | undefined`).
|
239
|
+
- The type of `Application.clone()` method's `inbox` and `outbox` options
|
240
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
241
|
+
(was `OrderedCollection | null | undefined`).
|
242
|
+
- The return type of `Application.getInbox()` and
|
243
|
+
`Application.getOutbox()` methods is now `OrderedCollection |
|
244
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
245
|
+
- The type of `Group()` constructor's `inbox` and `outbox` options is
|
246
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
247
|
+
`OrderedCollection | null | undefined`).
|
248
|
+
- The type of `Group.clone()` method's `inbox` and `outbox` options is
|
249
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
250
|
+
`OrderedCollection | null | undefined`).
|
251
|
+
- The return type of `Group.getInbox()` and `Group.getOutbox()` methods
|
252
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
253
|
+
`OrderedCollection | null`).
|
254
|
+
- The type of `Organization()` constructor's `inbox` and `outbox` options
|
255
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
256
|
+
(was `OrderedCollection | null | undefined`).
|
257
|
+
- The type of `Organization.clone()` method's `inbox` and `outbox` options
|
258
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
259
|
+
(was `OrderedCollection | null | undefined`).
|
260
|
+
- The return type of `Organization.getInbox()` and
|
261
|
+
`Organization.getOutbox()` methods is now `OrderedCollection |
|
262
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
263
|
+
- The type of `Person()` constructor's `inbox` and `outbox` options is
|
264
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
265
|
+
`OrderedCollection | null | undefined`).
|
266
|
+
- The type of `Person.clone()` method's `inbox` and `outbox` options is
|
267
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
268
|
+
`OrderedCollection | null | undefined`).
|
269
|
+
- The return type of `Person.getInbox()` and `Person.getOutbox()` methods
|
270
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
271
|
+
`OrderedCollection | null`).
|
272
|
+
- The type of `Service()` constructor's `inbox` and `outbox` options is
|
273
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
274
|
+
`OrderedCollection | null | undefined`).
|
275
|
+
- The type of `Service.clone()` method's `inbox` and `outbox` options is
|
276
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
277
|
+
`OrderedCollection | null | undefined`).
|
278
|
+
- The return type of `Service.getInbox()` and `Service.getOutbox()`
|
279
|
+
methods is now `OrderedCollection | OrderedCollectionPage | null` (was
|
280
|
+
`OrderedCollection | null`).
|
281
|
+
|
282
|
+
|
160
283
|
Version 1.1.5
|
161
284
|
-------------
|
162
285
|
|
@@ -322,6 +445,63 @@ Released on October 20, 2024.
|
|
322
445
|
[#150]: https://github.com/dahlia/fedify/issues/150
|
323
446
|
|
324
447
|
|
448
|
+
Version 1.0.10
|
449
|
+
--------------
|
450
|
+
|
451
|
+
Released on December 19, 2024.
|
452
|
+
|
453
|
+
- Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
|
454
|
+
able to be set to an `OrderedCollectionPage` object, even though it is
|
455
|
+
a subtype of `OrderedCollection` according to Activity Vocabulary
|
456
|
+
specification. [[#165]]
|
457
|
+
|
458
|
+
- The type of `Application()` constructor's `inbox` and `outbox` options
|
459
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
460
|
+
(was `OrderedCollection | null | undefined`).
|
461
|
+
- The type of `Application.clone()` method's `inbox` and `outbox` options
|
462
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
463
|
+
(was `OrderedCollection | null | undefined`).
|
464
|
+
- The return type of `Application.getInbox()` and
|
465
|
+
`Application.getOutbox()` methods is now `OrderedCollection |
|
466
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
467
|
+
- The type of `Group()` constructor's `inbox` and `outbox` options is
|
468
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
469
|
+
`OrderedCollection | null | undefined`).
|
470
|
+
- The type of `Group.clone()` method's `inbox` and `outbox` options is
|
471
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
472
|
+
`OrderedCollection | null | undefined`).
|
473
|
+
- The return type of `Group.getInbox()` and `Group.getOutbox()` methods
|
474
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
475
|
+
`OrderedCollection | null`).
|
476
|
+
- The type of `Organization()` constructor's `inbox` and `outbox` options
|
477
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
478
|
+
(was `OrderedCollection | null | undefined`).
|
479
|
+
- The type of `Organization.clone()` method's `inbox` and `outbox` options
|
480
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
481
|
+
(was `OrderedCollection | null | undefined`).
|
482
|
+
- The return type of `Organization.getInbox()` and
|
483
|
+
`Organization.getOutbox()` methods is now `OrderedCollection |
|
484
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
485
|
+
- The type of `Person()` constructor's `inbox` and `outbox` options is
|
486
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
487
|
+
`OrderedCollection | null | undefined`).
|
488
|
+
- The type of `Person.clone()` method's `inbox` and `outbox` options is
|
489
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
490
|
+
`OrderedCollection | null | undefined`).
|
491
|
+
- The return type of `Person.getInbox()` and `Person.getOutbox()` methods
|
492
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
493
|
+
`OrderedCollection | null`).
|
494
|
+
- The type of `Service()` constructor's `inbox` and `outbox` options is
|
495
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
496
|
+
`OrderedCollection | null | undefined`).
|
497
|
+
- The type of `Service.clone()` method's `inbox` and `outbox` options is
|
498
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
499
|
+
`OrderedCollection | null | undefined`).
|
500
|
+
- The return type of `Service.getInbox()` and `Service.getOutbox()`
|
501
|
+
methods is now `OrderedCollection | OrderedCollectionPage | null` (was
|
502
|
+
`OrderedCollection | null`).
|
503
|
+
|
504
|
+
|
325
505
|
Version 1.0.9
|
326
506
|
-------------
|
327
507
|
|
@@ -606,6 +786,65 @@ Released on September 26, 2024.
|
|
606
786
|
[#137]: https://github.com/dahlia/fedify/issues/137
|
607
787
|
|
608
788
|
|
789
|
+
Version 0.15.8
|
790
|
+
--------------
|
791
|
+
|
792
|
+
Released on November 159, 2024.
|
793
|
+
|
794
|
+
- Fix a bug where `Actor`'s `inbox` and `outbox` properties had not been
|
795
|
+
able to be set to an `OrderedCollectionPage` object, even though it is
|
796
|
+
a subtype of `OrderedCollection` according to Activity Vocabulary
|
797
|
+
specification. [[#165]]
|
798
|
+
|
799
|
+
- The type of `Application()` constructor's `inbox` and `outbox` options
|
800
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
801
|
+
(was `OrderedCollection | null | undefined`).
|
802
|
+
- The type of `Application.clone()` method's `inbox` and `outbox` options
|
803
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
804
|
+
(was `OrderedCollection | null | undefined`).
|
805
|
+
- The return type of `Application.getInbox()` and
|
806
|
+
`Application.getOutbox()` methods is now `OrderedCollection |
|
807
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
808
|
+
- The type of `Group()` constructor's `inbox` and `outbox` options is
|
809
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
810
|
+
`OrderedCollection | null | undefined`).
|
811
|
+
- The type of `Group.clone()` method's `inbox` and `outbox` options is
|
812
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
813
|
+
`OrderedCollection | null | undefined`).
|
814
|
+
- The return type of `Group.getInbox()` and `Group.getOutbox()` methods
|
815
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
816
|
+
`OrderedCollection | null`).
|
817
|
+
- The type of `Organization()` constructor's `inbox` and `outbox` options
|
818
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
819
|
+
(was `OrderedCollection | null | undefined`).
|
820
|
+
- The type of `Organization.clone()` method's `inbox` and `outbox` options
|
821
|
+
is now `OrderedCollection | OrderedCollectionPage | null | undefined`
|
822
|
+
(was `OrderedCollection | null | undefined`).
|
823
|
+
- The return type of `Organization.getInbox()` and
|
824
|
+
`Organization.getOutbox()` methods is now `OrderedCollection |
|
825
|
+
OrderedCollectionPage | null` (was `OrderedCollection | null`).
|
826
|
+
- The type of `Person()` constructor's `inbox` and `outbox` options is
|
827
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
828
|
+
`OrderedCollection | null | undefined`).
|
829
|
+
- The type of `Person.clone()` method's `inbox` and `outbox` options is
|
830
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
831
|
+
`OrderedCollection | null | undefined`).
|
832
|
+
- The return type of `Person.getInbox()` and `Person.getOutbox()` methods
|
833
|
+
is now `OrderedCollection | OrderedCollectionPage | null` (was
|
834
|
+
`OrderedCollection | null`).
|
835
|
+
- The type of `Service()` constructor's `inbox` and `outbox` options is
|
836
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
837
|
+
`OrderedCollection | null | undefined`).
|
838
|
+
- The type of `Service.clone()` method's `inbox` and `outbox` options is
|
839
|
+
now `OrderedCollection | OrderedCollectionPage | null | undefined` (was
|
840
|
+
`OrderedCollection | null | undefined`).
|
841
|
+
- The return type of `Service.getInbox()` and `Service.getOutbox()`
|
842
|
+
methods is now `OrderedCollection | OrderedCollectionPage | null` (was
|
843
|
+
`OrderedCollection | null`).
|
844
|
+
|
845
|
+
[#165]: https://github.com/dahlia/fedify/issues/165
|
846
|
+
|
847
|
+
|
609
848
|
Version 0.15.7
|
610
849
|
--------------
|
611
850
|
|
package/esm/deno.js
CHANGED
@@ -28,8 +28,10 @@ export function createFederation(options) {
|
|
28
28
|
export class FederationImpl {
|
29
29
|
kv;
|
30
30
|
kvPrefixes;
|
31
|
-
|
32
|
-
|
31
|
+
inboxQueue;
|
32
|
+
outboxQueue;
|
33
|
+
inboxQueueStarted;
|
34
|
+
outboxQueueStarted;
|
33
35
|
manuallyStartQueue;
|
34
36
|
router;
|
35
37
|
nodeInfoDispatcher;
|
@@ -66,8 +68,20 @@ export class FederationImpl {
|
|
66
68
|
}),
|
67
69
|
...(options.kvPrefixes ?? {}),
|
68
70
|
};
|
69
|
-
|
70
|
-
|
71
|
+
if (options.queue == null) {
|
72
|
+
this.inboxQueue = undefined;
|
73
|
+
this.outboxQueue = undefined;
|
74
|
+
}
|
75
|
+
else if ("enqueue" in options.queue && "listen" in options.queue) {
|
76
|
+
this.inboxQueue = options.queue;
|
77
|
+
this.outboxQueue = options.queue;
|
78
|
+
}
|
79
|
+
else {
|
80
|
+
this.inboxQueue = options.queue.inbox;
|
81
|
+
this.outboxQueue = options.queue.outbox;
|
82
|
+
}
|
83
|
+
this.inboxQueueStarted = false;
|
84
|
+
this.outboxQueueStarted = false;
|
71
85
|
this.manuallyStartQueue = options.manuallyStartQueue ?? false;
|
72
86
|
this.router = new Router({
|
73
87
|
trailingSlashInsensitive: options.trailingSlashInsensitive,
|
@@ -112,13 +126,26 @@ export class FederationImpl {
|
|
112
126
|
this.inboxRetryPolicy = options.inboxRetryPolicy ??
|
113
127
|
createExponentialBackoffPolicy();
|
114
128
|
}
|
115
|
-
async #startQueue(ctxData, signal) {
|
116
|
-
if (this.
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
129
|
+
async #startQueue(ctxData, signal, queue) {
|
130
|
+
if (this.inboxQueue == null && this.outboxQueue == null)
|
131
|
+
return;
|
132
|
+
const logger = getLogger(["fedify", "federation", "queue"]);
|
133
|
+
const promises = [];
|
134
|
+
if (this.inboxQueue != null && (queue == null || queue === "inbox") &&
|
135
|
+
!this.inboxQueueStarted) {
|
136
|
+
logger.debug("Starting an inbox task worker.");
|
137
|
+
this.inboxQueueStarted = true;
|
138
|
+
promises.push(this.inboxQueue.listen((msg) => this.#listenQueue(ctxData, msg), { signal }));
|
139
|
+
}
|
140
|
+
if (this.outboxQueue != null &&
|
141
|
+
this.outboxQueue !== this.inboxQueue &&
|
142
|
+
(queue == null || queue === "outbox") &&
|
143
|
+
!this.outboxQueueStarted) {
|
144
|
+
logger.debug("Starting an outbox task worker.");
|
145
|
+
this.outboxQueueStarted = true;
|
146
|
+
promises.push(this.outboxQueue.listen((msg) => this.#listenQueue(ctxData, msg), { signal }));
|
147
|
+
}
|
148
|
+
await Promise.all(promises);
|
122
149
|
}
|
123
150
|
#listenQueue(ctxData, message) {
|
124
151
|
return withContext({ messageId: message.id }, async () => {
|
@@ -182,7 +209,7 @@ export class FederationImpl {
|
|
182
209
|
if (delay != null) {
|
183
210
|
logger.error("Failed to send activity {activityId} to {inbox} (attempt " +
|
184
211
|
"#{attempt}); retry...:\n{error}", { ...logData, error });
|
185
|
-
this.
|
212
|
+
this.outboxQueue?.enqueue({
|
186
213
|
...message,
|
187
214
|
attempt: message.attempt + 1,
|
188
215
|
}, {
|
@@ -276,7 +303,7 @@ export class FederationImpl {
|
|
276
303
|
activity: message.activity,
|
277
304
|
recipient: message.identifier,
|
278
305
|
});
|
279
|
-
this.
|
306
|
+
this.inboxQueue?.enqueue({
|
280
307
|
...message,
|
281
308
|
attempt: message.attempt + 1,
|
282
309
|
}, {
|
@@ -308,7 +335,7 @@ export class FederationImpl {
|
|
308
335
|
});
|
309
336
|
}
|
310
337
|
startQueue(contextData, options = {}) {
|
311
|
-
return this.#startQueue(contextData, options.signal);
|
338
|
+
return this.#startQueue(contextData, options.signal, options.queue);
|
312
339
|
}
|
313
340
|
createContext(urlOrRequest, contextData) {
|
314
341
|
return urlOrRequest instanceof Request
|
@@ -928,7 +955,7 @@ export class FederationImpl {
|
|
928
955
|
})),
|
929
956
|
});
|
930
957
|
}
|
931
|
-
if (immediate || this.
|
958
|
+
if (immediate || this.outboxQueue == null) {
|
932
959
|
if (immediate) {
|
933
960
|
logger.debug("Sending activity immediately without queue since immediate option " +
|
934
961
|
"is set.", { activityId: activity.id.href, activity: jsonLd });
|
@@ -973,7 +1000,7 @@ export class FederationImpl {
|
|
973
1000
|
"Collection-Synchronization": await buildCollectionSynchronizationHeader(collectionSync, inboxes[inbox]),
|
974
1001
|
},
|
975
1002
|
};
|
976
|
-
this.
|
1003
|
+
this.outboxQueue.enqueue(message);
|
977
1004
|
}
|
978
1005
|
}
|
979
1006
|
fetch(request, options) {
|
@@ -1107,7 +1134,7 @@ export class FederationImpl {
|
|
1107
1134
|
inboxContextFactory: context.toInboxContext.bind(context),
|
1108
1135
|
kv: this.kv,
|
1109
1136
|
kvPrefixes: this.kvPrefixes,
|
1110
|
-
queue: this.
|
1137
|
+
queue: this.inboxQueue,
|
1111
1138
|
actorDispatcher: this.actorCallbacks?.dispatcher,
|
1112
1139
|
inboxListeners: this.inboxListeners,
|
1113
1140
|
inboxErrorHandler: this.inboxErrorHandler,
|
@@ -1838,7 +1865,7 @@ export class InboxContextImpl extends ContextImpl {
|
|
1838
1865
|
activityId,
|
1839
1866
|
activity: this.activity,
|
1840
1867
|
});
|
1841
|
-
if (options?.immediate || this.federation.
|
1868
|
+
if (options?.immediate || this.federation.outboxQueue == null) {
|
1842
1869
|
if (options?.immediate) {
|
1843
1870
|
logger.debug("Forwarding activity immediately without queue since immediate " +
|
1844
1871
|
"option is set.");
|
@@ -1877,7 +1904,7 @@ export class InboxContextImpl extends ContextImpl {
|
|
1877
1904
|
attempt: 0,
|
1878
1905
|
headers: {},
|
1879
1906
|
};
|
1880
|
-
this.federation.
|
1907
|
+
this.federation.outboxQueue.enqueue(message);
|
1881
1908
|
}
|
1882
1909
|
}
|
1883
1910
|
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"@context": "https://www.w3.org/ns/activitystreams",
|
3
|
+
"id": "https://example.com/orderedcollectionpage",
|
4
|
+
"type": "OrderedCollectionPage",
|
5
|
+
"partOf": "https://example.com/orderedcollectionpage",
|
6
|
+
"totalItems": 1,
|
7
|
+
"orderedItems": [
|
8
|
+
{
|
9
|
+
"id": "https://example.com/activities/1",
|
10
|
+
"type": "Create",
|
11
|
+
"published": "2024-11-19T15:24:56Z",
|
12
|
+
"actor": "https://example.com/users/1",
|
13
|
+
"to": "https://www.w3.org/ns/activitystreams#Public",
|
14
|
+
"object": {
|
15
|
+
"id": "https://example.com/notes/1",
|
16
|
+
"type": "Note",
|
17
|
+
"content": "This is a simple note",
|
18
|
+
"attributedTo": "https://example.com/users/1",
|
19
|
+
"to": "https://www.w3.org/ns/activitystreams#Public",
|
20
|
+
"published": "2024-11-19T15:24:56Z"
|
21
|
+
}
|
22
|
+
}
|
23
|
+
]
|
24
|
+
}
|
@@ -106,6 +106,7 @@ properties:
|
|
106
106
|
and dropping any activities already seen.
|
107
107
|
range:
|
108
108
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
109
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
109
110
|
|
110
111
|
- singularName: outbox
|
111
112
|
functional: true
|
@@ -124,6 +125,7 @@ properties:
|
|
124
125
|
implementing and deploying the server.
|
125
126
|
range:
|
126
127
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
128
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
127
129
|
|
128
130
|
- singularName: following
|
129
131
|
functional: true
|
package/esm/vocab/group.yaml
CHANGED
@@ -106,6 +106,7 @@ properties:
|
|
106
106
|
and dropping any activities already seen.
|
107
107
|
range:
|
108
108
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
109
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
109
110
|
|
110
111
|
- singularName: outbox
|
111
112
|
functional: true
|
@@ -124,6 +125,7 @@ properties:
|
|
124
125
|
implementing and deploying the server.
|
125
126
|
range:
|
126
127
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
128
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
127
129
|
|
128
130
|
- singularName: following
|
129
131
|
functional: true
|
@@ -106,6 +106,7 @@ properties:
|
|
106
106
|
and dropping any activities already seen.
|
107
107
|
range:
|
108
108
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
109
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
109
110
|
|
110
111
|
- singularName: outbox
|
111
112
|
functional: true
|
@@ -124,6 +125,7 @@ properties:
|
|
124
125
|
implementing and deploying the server.
|
125
126
|
range:
|
126
127
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
128
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
127
129
|
|
128
130
|
- singularName: following
|
129
131
|
functional: true
|
package/esm/vocab/person.yaml
CHANGED
@@ -106,6 +106,7 @@ properties:
|
|
106
106
|
and dropping any activities already seen.
|
107
107
|
range:
|
108
108
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
109
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
109
110
|
|
110
111
|
- singularName: outbox
|
111
112
|
functional: true
|
@@ -124,6 +125,7 @@ properties:
|
|
124
125
|
implementing and deploying the server.
|
125
126
|
range:
|
126
127
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
128
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
127
129
|
|
128
130
|
- singularName: following
|
129
131
|
functional: true
|
package/esm/vocab/service.yaml
CHANGED
@@ -106,6 +106,7 @@ properties:
|
|
106
106
|
and dropping any activities already seen.
|
107
107
|
range:
|
108
108
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
109
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
109
110
|
|
110
111
|
- singularName: outbox
|
111
112
|
functional: true
|
@@ -124,6 +125,7 @@ properties:
|
|
124
125
|
implementing and deploying the server.
|
125
126
|
range:
|
126
127
|
- "https://www.w3.org/ns/activitystreams#OrderedCollection"
|
128
|
+
- "https://www.w3.org/ns/activitystreams#OrderedCollectionPage"
|
127
129
|
|
128
130
|
- singularName: following
|
129
131
|
functional: true
|