@fedify/fedify 1.3.0-dev.502 → 1.3.0-dev.508
Sign up to get free protection for your applications and to get access to all the features.
- 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
|