@commonpub/server 2.72.0 → 2.74.0
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/content/content.d.ts.map +1 -1
- package/dist/content/content.js +7 -2
- package/dist/content/content.js.map +1 -1
- package/dist/contest/contest.d.ts +2 -0
- package/dist/contest/contest.d.ts.map +1 -1
- package/dist/contest/contest.js +22 -9
- package/dist/contest/contest.js.map +1 -1
- package/dist/federation/backfill.d.ts +9 -1
- package/dist/federation/backfill.d.ts.map +1 -1
- package/dist/federation/backfill.js +33 -2
- package/dist/federation/backfill.js.map +1 -1
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +3 -2
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +14 -5
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/hubMirroring.d.ts.map +1 -1
- package/dist/federation/hubMirroring.js +8 -0
- package/dist/federation/hubMirroring.js.map +1 -1
- package/dist/federation/inboxHandlers.d.ts.map +1 -1
- package/dist/federation/inboxHandlers.js +86 -1
- package/dist/federation/inboxHandlers.js.map +1 -1
- package/dist/federation/index.d.ts +2 -1
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +2 -1
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/mirroring.d.ts +56 -2
- package/dist/federation/mirroring.d.ts.map +1 -1
- package/dist/federation/mirroring.js +281 -32
- package/dist/federation/mirroring.js.map +1 -1
- package/dist/federation/outboxQueries.d.ts +9 -11
- package/dist/federation/outboxQueries.d.ts.map +1 -1
- package/dist/federation/outboxQueries.js +102 -41
- package/dist/federation/outboxQueries.js.map +1 -1
- package/dist/federation/registry.d.ts +79 -0
- package/dist/federation/registry.d.ts.map +1 -0
- package/dist/federation/registry.js +205 -0
- package/dist/federation/registry.js.map +1 -0
- package/dist/hub/members.d.ts.map +1 -1
- package/dist/hub/members.js +11 -7
- package/dist/hub/members.js.map +1 -1
- package/dist/hub/posts.d.ts.map +1 -1
- package/dist/hub/posts.js +3 -1
- package/dist/hub/posts.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/social/social.d.ts.map +1 -1
- package/dist/social/social.js +9 -0
- package/dist/social/social.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/federation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,sBAAsB,GAEvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAA4B,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAA6C,MAAM,eAAe,CAAC;AAChI,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EAEtB,2BAA2B,GAE5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/federation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,13 +14,67 @@ export interface MirrorConfig {
|
|
|
14
14
|
createdAt: string;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
* Create a new instance mirror subscription
|
|
18
|
-
*
|
|
17
|
+
* Create a new PULL instance mirror subscription — the instance actor follows the remote instance
|
|
18
|
+
* actor to receive its public content. (Push is a consent-based request — see `requestMirror`.)
|
|
19
19
|
*/
|
|
20
20
|
export declare function createMirror(db: DB, remoteDomain: string, remoteActorUri: string, direction: 'pull' | 'push', localDomain: string, filters?: {
|
|
21
21
|
contentTypes?: string[];
|
|
22
22
|
tags?: string[];
|
|
23
23
|
}): Promise<MirrorConfig>;
|
|
24
|
+
export interface MirrorRequestConfig {
|
|
25
|
+
id: string;
|
|
26
|
+
direction: 'incoming' | 'outgoing';
|
|
27
|
+
remoteDomain: string;
|
|
28
|
+
remoteActorUri: string;
|
|
29
|
+
status: 'pending' | 'approved' | 'rejected';
|
|
30
|
+
offerActivityUri: string | null;
|
|
31
|
+
resultingMirrorId: string | null;
|
|
32
|
+
lastError: string | null;
|
|
33
|
+
decidedAt: string | null;
|
|
34
|
+
createdAt: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Send a consent-based mirror request (createMirror direction:'push') — ask a remote CommonPub
|
|
38
|
+
* instance to pull-mirror US. Stores an 'outgoing' request row and queues a signed `Offer(Follow)`
|
|
39
|
+
* to the target's inbox. Re-requesting the same domain resets the row to pending (idempotent).
|
|
40
|
+
*/
|
|
41
|
+
export declare function requestMirror(db: DB, remoteDomain: string, remoteActorUri: string, localDomain: string): Promise<MirrorRequestConfig>;
|
|
42
|
+
/** List mirror requests, optionally filtered by direction. */
|
|
43
|
+
export declare function listMirrorRequests(db: DB, direction?: 'incoming' | 'outgoing'): Promise<MirrorRequestConfig[]>;
|
|
44
|
+
/** Get a single mirror request by id. */
|
|
45
|
+
export declare function getMirrorRequest(db: DB, requestId: string): Promise<MirrorRequestConfig | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Approve an INCOMING mirror request: create a pull mirror of the requester (using the approver's
|
|
48
|
+
* own depth + filters), optionally backfill bounded history, queue an `Accept(Offer)` back to the
|
|
49
|
+
* requester, and mark the request approved. Idempotent if a pull mirror already exists for the
|
|
50
|
+
* requester's domain (reuses it — respects the unique(remote_domain) constraint).
|
|
51
|
+
*/
|
|
52
|
+
export declare function approveMirrorRequest(db: DB, requestId: string, localDomain: string, opts?: {
|
|
53
|
+
sinceDays?: number;
|
|
54
|
+
maxItems?: number;
|
|
55
|
+
filterContentTypes?: string[] | null;
|
|
56
|
+
filterTags?: string[] | null;
|
|
57
|
+
}): Promise<MirrorRequestConfig>;
|
|
58
|
+
/**
|
|
59
|
+
* Reject an INCOMING mirror request: queue a `Reject(Offer)` back to the requester and mark it
|
|
60
|
+
* rejected. No mirror is created.
|
|
61
|
+
*/
|
|
62
|
+
export declare function rejectMirrorRequest(db: DB, requestId: string, localDomain: string): Promise<MirrorRequestConfig>;
|
|
63
|
+
/** A remote instance that follows our instance Service actor — i.e. is mirroring us. */
|
|
64
|
+
export interface InstanceFollower {
|
|
65
|
+
actorUri: string;
|
|
66
|
+
domain: string;
|
|
67
|
+
followedAt: string | null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* List the instances mirroring US — remote actors that follow our instance Service actor
|
|
71
|
+
* (`https://{domain}/actor`) with an accepted follow. Each such follower is an instance
|
|
72
|
+
* pulling our public content. This is the read side of "who is mirroring me".
|
|
73
|
+
*
|
|
74
|
+
* Note: this is INSTANCE-level only (followers of `/actor`), not per-user followers — a
|
|
75
|
+
* remote user following a local user is not mirroring the instance.
|
|
76
|
+
*/
|
|
77
|
+
export declare function listInstanceFollowers(db: DB, domain: string): Promise<InstanceFollower[]>;
|
|
24
78
|
/**
|
|
25
79
|
* Activate a pending mirror (called after the Follow is accepted).
|
|
26
80
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mirroring.d.ts","sourceRoot":"","sources":["../../src/federation/mirroring.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mirroring.d.ts","sourceRoot":"","sources":["../../src/federation/mirroring.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,53 +3,302 @@
|
|
|
3
3
|
* Uses standard AP semantics: instance B's Service actor follows instance A's Service actor.
|
|
4
4
|
* Content arrives via normal inbox Create activities, filtered by mirror config.
|
|
5
5
|
*/
|
|
6
|
-
import { eq, and, sql } from 'drizzle-orm';
|
|
7
|
-
import { instanceMirrors, federatedContent, activities, followRelationships, } from '@commonpub/schema';
|
|
8
|
-
import { buildFollowActivity } from '@commonpub/protocol';
|
|
6
|
+
import { eq, and, sql, desc } from 'drizzle-orm';
|
|
7
|
+
import { instanceMirrors, mirrorRequests, federatedContent, activities, followRelationships, } from '@commonpub/schema';
|
|
8
|
+
import { buildFollowActivity, buildMirrorRequestActivity, buildAcceptActivity, buildRejectActivity, } from '@commonpub/protocol';
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* Resolve+cache the remote instance actor, then store a pending follow relationship and queue a
|
|
11
|
+
* signed Follow from our instance actor to it — so the remote delivers its content to us. Shared by
|
|
12
|
+
* `createMirror` and `approveMirrorRequest`'s reuse-an-existing-mirror path. `onConflictDoNothing`
|
|
13
|
+
* keeps it idempotent if a relationship row already exists.
|
|
14
|
+
*/
|
|
15
|
+
async function queueInstanceFollow(db, remoteActorUri, localDomain) {
|
|
16
|
+
// CRITICAL: resolve and cache the remote actor FIRST so the delivery worker can find their inbox.
|
|
17
|
+
const { resolveRemoteActor } = await import('./federation.js');
|
|
18
|
+
const resolved = await resolveRemoteActor(db, remoteActorUri).catch(() => null);
|
|
19
|
+
if (!resolved) {
|
|
20
|
+
console.warn(`[mirroring] Could not resolve remote actor ${remoteActorUri} — Follow delivery may fail`);
|
|
21
|
+
}
|
|
22
|
+
const localActorUri = `https://${localDomain}/actor`;
|
|
23
|
+
await db
|
|
24
|
+
.insert(followRelationships)
|
|
25
|
+
.values({ followerActorUri: localActorUri, followingActorUri: remoteActorUri, status: 'pending' })
|
|
26
|
+
.onConflictDoNothing();
|
|
27
|
+
await db.insert(activities).values({
|
|
28
|
+
type: 'Follow',
|
|
29
|
+
actorUri: localActorUri,
|
|
30
|
+
objectUri: remoteActorUri,
|
|
31
|
+
payload: buildFollowActivity(localDomain, localActorUri, remoteActorUri),
|
|
32
|
+
direction: 'outbound',
|
|
33
|
+
status: 'pending',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a new PULL instance mirror subscription — the instance actor follows the remote instance
|
|
38
|
+
* actor to receive its public content. (Push is a consent-based request — see `requestMirror`.)
|
|
12
39
|
*/
|
|
13
40
|
export async function createMirror(db, remoteDomain, remoteActorUri, direction, localDomain, filters) {
|
|
41
|
+
if (direction === 'push') {
|
|
42
|
+
// Push is no longer a mirror row — it's a consent-based request to the remote instance.
|
|
43
|
+
throw new Error('createMirror only handles pull mirrors; use requestMirror() for push (consent-based) requests');
|
|
44
|
+
}
|
|
14
45
|
const [row] = await db
|
|
15
46
|
.insert(instanceMirrors)
|
|
16
47
|
.values({
|
|
17
48
|
remoteDomain,
|
|
18
49
|
remoteActorUri,
|
|
19
|
-
direction,
|
|
50
|
+
direction: 'pull',
|
|
20
51
|
status: 'active', // Start as active immediately
|
|
21
52
|
filterContentTypes: filters?.contentTypes ?? null,
|
|
22
53
|
filterTags: filters?.tags ?? null,
|
|
23
54
|
})
|
|
24
55
|
.returning();
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
56
|
+
// Pull mirror: Follow the remote instance actor so they deliver content to us.
|
|
57
|
+
await queueInstanceFollow(db, remoteActorUri, localDomain);
|
|
58
|
+
return mirrorRowToConfig(row);
|
|
59
|
+
}
|
|
60
|
+
function mirrorRequestRowToConfig(row) {
|
|
61
|
+
return {
|
|
62
|
+
id: row.id,
|
|
63
|
+
direction: row.direction,
|
|
64
|
+
remoteDomain: row.remoteDomain,
|
|
65
|
+
remoteActorUri: row.remoteActorUri,
|
|
66
|
+
status: row.status,
|
|
67
|
+
offerActivityUri: row.offerActivityUri,
|
|
68
|
+
resultingMirrorId: row.resultingMirrorId,
|
|
69
|
+
lastError: row.lastError,
|
|
70
|
+
decidedAt: row.decidedAt?.toISOString() ?? null,
|
|
71
|
+
createdAt: row.createdAt.toISOString(),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Send a consent-based mirror request (createMirror direction:'push') — ask a remote CommonPub
|
|
76
|
+
* instance to pull-mirror US. Stores an 'outgoing' request row and queues a signed `Offer(Follow)`
|
|
77
|
+
* to the target's inbox. Re-requesting the same domain resets the row to pending (idempotent).
|
|
78
|
+
*/
|
|
79
|
+
export async function requestMirror(db, remoteDomain, remoteActorUri, localDomain) {
|
|
80
|
+
// Resolve + cache the remote actor first so the delivery worker can find its inbox.
|
|
81
|
+
const { resolveRemoteActor } = await import('./federation.js');
|
|
82
|
+
const resolved = await resolveRemoteActor(db, remoteActorUri).catch(() => null);
|
|
83
|
+
if (!resolved) {
|
|
84
|
+
console.warn(`[mirroring] Could not resolve ${remoteActorUri} — request created but Offer delivery may fail`);
|
|
85
|
+
}
|
|
86
|
+
const localActorUri = `https://${localDomain}/actor`;
|
|
87
|
+
const offer = buildMirrorRequestActivity(localDomain, localActorUri, remoteActorUri);
|
|
88
|
+
const [row] = await db
|
|
89
|
+
.insert(mirrorRequests)
|
|
90
|
+
.values({
|
|
91
|
+
direction: 'outgoing',
|
|
92
|
+
remoteDomain,
|
|
93
|
+
remoteActorUri,
|
|
94
|
+
status: 'pending',
|
|
95
|
+
offerActivityUri: offer.id,
|
|
96
|
+
})
|
|
97
|
+
.onConflictDoUpdate({
|
|
98
|
+
target: [mirrorRequests.direction, mirrorRequests.remoteDomain],
|
|
99
|
+
set: {
|
|
100
|
+
remoteActorUri,
|
|
49
101
|
status: 'pending',
|
|
50
|
-
|
|
102
|
+
offerActivityUri: offer.id,
|
|
103
|
+
lastError: null,
|
|
104
|
+
decidedAt: null,
|
|
105
|
+
updatedAt: new Date(),
|
|
106
|
+
},
|
|
107
|
+
})
|
|
108
|
+
.returning();
|
|
109
|
+
// Queue the Offer for delivery to the target instance's inbox.
|
|
110
|
+
await db.insert(activities).values({
|
|
111
|
+
type: 'Offer',
|
|
112
|
+
actorUri: localActorUri,
|
|
113
|
+
objectUri: remoteActorUri,
|
|
114
|
+
payload: offer,
|
|
115
|
+
direction: 'outbound',
|
|
116
|
+
status: 'pending',
|
|
117
|
+
});
|
|
118
|
+
return mirrorRequestRowToConfig(row);
|
|
119
|
+
}
|
|
120
|
+
/** List mirror requests, optionally filtered by direction. */
|
|
121
|
+
export async function listMirrorRequests(db, direction) {
|
|
122
|
+
const rows = await db
|
|
123
|
+
.select()
|
|
124
|
+
.from(mirrorRequests)
|
|
125
|
+
.where(direction ? eq(mirrorRequests.direction, direction) : undefined)
|
|
126
|
+
.orderBy(desc(mirrorRequests.createdAt));
|
|
127
|
+
return rows.map(mirrorRequestRowToConfig);
|
|
128
|
+
}
|
|
129
|
+
/** Get a single mirror request by id. */
|
|
130
|
+
export async function getMirrorRequest(db, requestId) {
|
|
131
|
+
const [row] = await db
|
|
132
|
+
.select()
|
|
133
|
+
.from(mirrorRequests)
|
|
134
|
+
.where(eq(mirrorRequests.id, requestId))
|
|
135
|
+
.limit(1);
|
|
136
|
+
return row ? mirrorRequestRowToConfig(row) : null;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Approve an INCOMING mirror request: create a pull mirror of the requester (using the approver's
|
|
140
|
+
* own depth + filters), optionally backfill bounded history, queue an `Accept(Offer)` back to the
|
|
141
|
+
* requester, and mark the request approved. Idempotent if a pull mirror already exists for the
|
|
142
|
+
* requester's domain (reuses it — respects the unique(remote_domain) constraint).
|
|
143
|
+
*/
|
|
144
|
+
export async function approveMirrorRequest(db, requestId, localDomain, opts) {
|
|
145
|
+
const [req] = await db.select().from(mirrorRequests).where(eq(mirrorRequests.id, requestId)).limit(1);
|
|
146
|
+
if (!req)
|
|
147
|
+
throw new Error('Mirror request not found');
|
|
148
|
+
if (req.direction !== 'incoming')
|
|
149
|
+
throw new Error('Can only approve incoming mirror requests');
|
|
150
|
+
// Create (or reuse) a pull mirror of the requester with the approver's chosen filters.
|
|
151
|
+
const [existing] = await db
|
|
152
|
+
.select()
|
|
153
|
+
.from(instanceMirrors)
|
|
154
|
+
.where(eq(instanceMirrors.remoteDomain, req.remoteDomain))
|
|
155
|
+
.limit(1);
|
|
156
|
+
let mirrorId;
|
|
157
|
+
if (existing) {
|
|
158
|
+
// Reuse the row, but make it actually usable: re-activate if it was paused/failed and apply
|
|
159
|
+
// the approver's chosen filters (matchMirrorForContent only accepts 'active' pull mirrors).
|
|
160
|
+
// The approve's filters are authoritative — same semantics as the fresh-create path below
|
|
161
|
+
// (absent/null = all types/tags), so re-approving with no filters means "mirror everything".
|
|
162
|
+
mirrorId = existing.id;
|
|
163
|
+
await db
|
|
164
|
+
.update(instanceMirrors)
|
|
165
|
+
.set({
|
|
166
|
+
status: 'active',
|
|
167
|
+
direction: 'pull',
|
|
168
|
+
pausedAt: null,
|
|
169
|
+
filterContentTypes: opts?.filterContentTypes ?? null,
|
|
170
|
+
filterTags: opts?.filterTags ?? null,
|
|
171
|
+
updatedAt: new Date(),
|
|
172
|
+
})
|
|
173
|
+
.where(eq(instanceMirrors.id, existing.id));
|
|
174
|
+
// (Re)queue a Follow only if there's no live subscription — a 'pending' follow already has a
|
|
175
|
+
// Follow in flight (the activities table has no dedup), so don't append a duplicate.
|
|
176
|
+
const [rel] = await db
|
|
177
|
+
.select({ status: followRelationships.status })
|
|
178
|
+
.from(followRelationships)
|
|
179
|
+
.where(and(eq(followRelationships.followerActorUri, `https://${localDomain}/actor`), eq(followRelationships.followingActorUri, req.remoteActorUri)))
|
|
180
|
+
.limit(1);
|
|
181
|
+
if (!rel || rel.status === 'rejected') {
|
|
182
|
+
await queueInstanceFollow(db, req.remoteActorUri, localDomain);
|
|
183
|
+
}
|
|
51
184
|
}
|
|
52
|
-
|
|
185
|
+
else {
|
|
186
|
+
try {
|
|
187
|
+
const mirror = await createMirror(db, req.remoteDomain, req.remoteActorUri, 'pull', localDomain, {
|
|
188
|
+
contentTypes: opts?.filterContentTypes ?? undefined,
|
|
189
|
+
tags: opts?.filterTags ?? undefined,
|
|
190
|
+
});
|
|
191
|
+
mirrorId = mirror.id;
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
// ONLY swallow a unique(remote_domain) race (concurrent approval / a directory "Mirror" click
|
|
195
|
+
// landing between our SELECT and createMirror's INSERT). Any other failure is real — rethrow
|
|
196
|
+
// rather than returning a Follow-less mirror as if approval succeeded.
|
|
197
|
+
const code = err.code;
|
|
198
|
+
const isUniqueViolation = code === '23505' || /duplicate key|unique constraint/i.test(String(err?.message));
|
|
199
|
+
if (!isUniqueViolation)
|
|
200
|
+
throw err;
|
|
201
|
+
const [raced] = await db
|
|
202
|
+
.select({ id: instanceMirrors.id })
|
|
203
|
+
.from(instanceMirrors)
|
|
204
|
+
.where(eq(instanceMirrors.remoteDomain, req.remoteDomain))
|
|
205
|
+
.limit(1);
|
|
206
|
+
if (!raced)
|
|
207
|
+
throw err;
|
|
208
|
+
mirrorId = raced.id;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Optional bounded history import (forward-only if no depth chosen).
|
|
212
|
+
if (opts && (opts.sinceDays || opts.maxItems)) {
|
|
213
|
+
try {
|
|
214
|
+
const { backfillFromOutbox } = await import('./backfill.js');
|
|
215
|
+
const since = opts.sinceDays
|
|
216
|
+
? new Date(Date.now() - opts.sinceDays * 24 * 60 * 60 * 1000)
|
|
217
|
+
: undefined;
|
|
218
|
+
await backfillFromOutbox(db, req.remoteActorUri, localDomain, {
|
|
219
|
+
maxItems: opts.maxItems,
|
|
220
|
+
since,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
console.error('[mirroring] approve backfill failed:', err instanceof Error ? err.message : err);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Tell the requester we approved — Accept(Offer). objectUri = requester actor so delivery routes there.
|
|
228
|
+
const localActorUri = `https://${localDomain}/actor`;
|
|
229
|
+
const accept = buildAcceptActivity(localDomain, localActorUri, req.offerActivityUri ?? req.remoteActorUri);
|
|
230
|
+
await db.insert(activities).values({
|
|
231
|
+
type: 'Accept',
|
|
232
|
+
actorUri: localActorUri,
|
|
233
|
+
objectUri: req.remoteActorUri,
|
|
234
|
+
payload: accept,
|
|
235
|
+
direction: 'outbound',
|
|
236
|
+
status: 'pending',
|
|
237
|
+
});
|
|
238
|
+
const [updated] = await db
|
|
239
|
+
.update(mirrorRequests)
|
|
240
|
+
.set({ status: 'approved', resultingMirrorId: mirrorId, decidedAt: new Date(), updatedAt: new Date() })
|
|
241
|
+
.where(eq(mirrorRequests.id, requestId))
|
|
242
|
+
.returning();
|
|
243
|
+
return mirrorRequestRowToConfig(updated);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Reject an INCOMING mirror request: queue a `Reject(Offer)` back to the requester and mark it
|
|
247
|
+
* rejected. No mirror is created.
|
|
248
|
+
*/
|
|
249
|
+
export async function rejectMirrorRequest(db, requestId, localDomain) {
|
|
250
|
+
const [req] = await db.select().from(mirrorRequests).where(eq(mirrorRequests.id, requestId)).limit(1);
|
|
251
|
+
if (!req)
|
|
252
|
+
throw new Error('Mirror request not found');
|
|
253
|
+
if (req.direction !== 'incoming')
|
|
254
|
+
throw new Error('Can only reject incoming mirror requests');
|
|
255
|
+
const localActorUri = `https://${localDomain}/actor`;
|
|
256
|
+
const reject = buildRejectActivity(localDomain, localActorUri, req.offerActivityUri ?? req.remoteActorUri);
|
|
257
|
+
await db.insert(activities).values({
|
|
258
|
+
type: 'Reject',
|
|
259
|
+
actorUri: localActorUri,
|
|
260
|
+
objectUri: req.remoteActorUri,
|
|
261
|
+
payload: reject,
|
|
262
|
+
direction: 'outbound',
|
|
263
|
+
status: 'pending',
|
|
264
|
+
});
|
|
265
|
+
const [updated] = await db
|
|
266
|
+
.update(mirrorRequests)
|
|
267
|
+
.set({ status: 'rejected', decidedAt: new Date(), updatedAt: new Date() })
|
|
268
|
+
.where(eq(mirrorRequests.id, requestId))
|
|
269
|
+
.returning();
|
|
270
|
+
return mirrorRequestRowToConfig(updated);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* List the instances mirroring US — remote actors that follow our instance Service actor
|
|
274
|
+
* (`https://{domain}/actor`) with an accepted follow. Each such follower is an instance
|
|
275
|
+
* pulling our public content. This is the read side of "who is mirroring me".
|
|
276
|
+
*
|
|
277
|
+
* Note: this is INSTANCE-level only (followers of `/actor`), not per-user followers — a
|
|
278
|
+
* remote user following a local user is not mirroring the instance.
|
|
279
|
+
*/
|
|
280
|
+
export async function listInstanceFollowers(db, domain) {
|
|
281
|
+
const instanceActorUri = `https://${domain}/actor`;
|
|
282
|
+
const rows = await db
|
|
283
|
+
.select({
|
|
284
|
+
followerActorUri: followRelationships.followerActorUri,
|
|
285
|
+
createdAt: followRelationships.createdAt,
|
|
286
|
+
})
|
|
287
|
+
.from(followRelationships)
|
|
288
|
+
.where(and(eq(followRelationships.followingActorUri, instanceActorUri), eq(followRelationships.status, 'accepted')))
|
|
289
|
+
.orderBy(desc(followRelationships.createdAt));
|
|
290
|
+
return rows.map((r) => {
|
|
291
|
+
let host = r.followerActorUri;
|
|
292
|
+
try {
|
|
293
|
+
host = new URL(r.followerActorUri).hostname;
|
|
294
|
+
}
|
|
295
|
+
catch { /* keep raw uri */ }
|
|
296
|
+
return {
|
|
297
|
+
actorUri: r.followerActorUri,
|
|
298
|
+
domain: host,
|
|
299
|
+
followedAt: r.createdAt ? r.createdAt.toISOString() : null,
|
|
300
|
+
};
|
|
301
|
+
});
|
|
53
302
|
}
|
|
54
303
|
/**
|
|
55
304
|
* Activate a pending mirror (called after the Follow is accepted).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mirroring.js","sourceRoot":"","sources":["../../src/federation/mirroring.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mirroring.js","sourceRoot":"","sources":["../../src/federation/mirroring.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAkB7B;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAAC,EAAM,EAAE,cAAsB,EAAE,WAAmB;IACpF,kGAAkG;IAClG,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,8CAA8C,cAAc,6BAA6B,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,aAAa,GAAG,WAAW,WAAW,QAAQ,CAAC;IACrD,MAAM,EAAE;SACL,MAAM,CAAC,mBAAmB,CAAC;SAC3B,MAAM,CAAC,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SACjG,mBAAmB,EAAE,CAAC;IACzB,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC;QACxE,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAM,EACN,YAAoB,EACpB,cAAsB,EACtB,SAA0B,EAC1B,WAAmB,EACnB,OAAsD;IAEtD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,wFAAwF;QACxF,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC;QACN,YAAY;QACZ,cAAc;QACd,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,QAAQ,EAAE,8BAA8B;QAChD,kBAAkB,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI;QACjD,UAAU,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI;KAClC,CAAC;SACD,SAAS,EAAE,CAAC;IAEf,+EAA+E;IAC/E,MAAM,mBAAmB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAE3D,OAAO,iBAAiB,CAAC,GAAI,CAAC,CAAC;AACjC,CAAC;AAiBD,SAAS,wBAAwB,CAAC,GAAuC;IACvE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,SAAoC;QACnD,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,MAAM,EAAE,GAAG,CAAC,MAA6C;QACzD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;QAC/C,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAM,EACN,YAAoB,EACpB,cAAsB,EACtB,WAAmB;IAEnB,oFAAoF;IACpF,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,iCAAiC,cAAc,gDAAgD,CAAC,CAAC;IAChH,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,WAAW,QAAQ,CAAC;IACrD,MAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAErF,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,cAAc,CAAC;SACtB,MAAM,CAAC;QACN,SAAS,EAAE,UAAU;QACrB,YAAY;QACZ,cAAc;QACd,MAAM,EAAE,SAAS;QACjB,gBAAgB,EAAE,KAAK,CAAC,EAAE;KAC3B,CAAC;SACD,kBAAkB,CAAC;QAClB,MAAM,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,YAAY,CAAC;QAC/D,GAAG,EAAE;YACH,cAAc;YACd,MAAM,EAAE,SAAS;YACjB,gBAAgB,EAAE,KAAK,CAAC,EAAE;YAC1B,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB;KACF,CAAC;SACD,SAAS,EAAE,CAAC;IAEf,+DAA+D;IAC/D,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO,wBAAwB,CAAC,GAAI,CAAC,CAAC;AACxC,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAM,EACN,SAAmC;IAEnC,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,EAAE;SACR,IAAI,CAAC,cAAc,CAAC;SACpB,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACtE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAM,EAAE,SAAiB;IAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,EAAE;SACR,IAAI,CAAC,cAAc,CAAC;SACpB,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACvC,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAM,EACN,SAAiB,EACjB,WAAmB,EACnB,IAKC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAE/F,uFAAuF;IACvF,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;SACxB,MAAM,EAAE;SACR,IAAI,CAAC,eAAe,CAAC;SACrB,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;SACzD,KAAK,CAAC,CAAC,CAAC,CAAC;IAEZ,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAQ,EAAE,CAAC;QACb,4FAA4F;QAC5F,4FAA4F;QAC5F,0FAA0F;QAC1F,6FAA6F;QAC7F,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE;aACL,MAAM,CAAC,eAAe,CAAC;aACvB,GAAG,CAAC;YACH,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,MAAM;YACjB,QAAQ,EAAE,IAAI;YACd,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,IAAI;YACpD,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI;YACpC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;aACD,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,6FAA6F;QAC7F,qFAAqF;QACrF,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC;aAC9C,IAAI,CAAC,mBAAmB,CAAC;aACzB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,WAAW,WAAW,QAAQ,CAAC,EACxE,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,CAAC,cAAc,CAAC,CAC9D,CACF;aACA,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE;gBAC/F,YAAY,EAAE,IAAI,EAAE,kBAAkB,IAAI,SAAS;gBACnD,IAAI,EAAE,IAAI,EAAE,UAAU,IAAI,SAAS;aACpC,CAAC,CAAC;YACH,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,8FAA8F;YAC9F,6FAA6F;YAC7F,uEAAuE;YACvE,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAC;YAC7C,MAAM,iBAAiB,GAAG,IAAI,KAAK,OAAO,IAAI,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAE,GAAa,EAAE,OAAO,CAAC,CAAC,CAAC;YACvH,IAAI,CAAC,iBAAiB;gBAAE,MAAM,GAAG,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE;iBACrB,MAAM,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC,eAAe,CAAC;iBACrB,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;iBACzD,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,KAAK;gBAAE,MAAM,GAAG,CAAC;YACtB,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS;gBAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC7D,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,kBAAkB,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE;gBAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,wGAAwG;IACxG,MAAM,aAAa,GAAG,WAAW,WAAW,QAAQ,CAAC;IACrD,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3G,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,GAAG,CAAC,cAAc;QAC7B,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,cAAc,CAAC;SACtB,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SACtG,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACvC,SAAS,EAAE,CAAC;IAEf,OAAO,wBAAwB,CAAC,OAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAM,EACN,SAAiB,EACjB,WAAmB;IAEnB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAE9F,MAAM,aAAa,GAAG,WAAW,WAAW,QAAQ,CAAC;IACrD,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3G,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,GAAG,CAAC,cAAc;QAC7B,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,cAAc,CAAC;SACtB,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SACzE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACvC,SAAS,EAAE,CAAC;IAEf,OAAO,wBAAwB,CAAC,OAAQ,CAAC,CAAC;AAC5C,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAM,EAAE,MAAc;IAChE,MAAM,gBAAgB,GAAG,WAAW,MAAM,QAAQ,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC;QACN,gBAAgB,EAAE,mBAAmB,CAAC,gBAAgB;QACtD,SAAS,EAAE,mBAAmB,CAAC,SAAS;KACzC,CAAC;SACD,IAAI,CAAC,mBAAmB,CAAC;SACzB,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAC3D,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAC3C,CAAC;SACD,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,IAAI,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC;QAC9B,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACjF,OAAO;YACL,QAAQ,EAAE,CAAC,CAAC,gBAAgB;YAC5B,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;SAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAM,EAAE,QAAgB;IAC3D,MAAM,EAAE;SACL,MAAM,CAAC,eAAe,CAAC;SACvB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SAChD,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,QAAgB;IACxD,MAAM,EAAE;SACL,MAAM,CAAC,eAAe,CAAC;SACvB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SACtE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,QAAgB;IACzD,MAAM,EAAE;SACL,MAAM,CAAC,eAAe,CAAC;SACvB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SAChE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,QAAgB;IACzD,yCAAyC;IACzC,MAAM,EAAE;SACL,MAAM,CAAC,gBAAgB,CAAC;SACxB,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACvB,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAElD,2BAA2B;IAC3B,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM;IACtC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAM,EAAE,QAAgB;IACtD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,EAAE;SACR,IAAI,CAAC,eAAe,CAAC;SACrB,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SACvC,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,YAAoB,EACpB,MAAc,EACd,QAAuB,EACvB,IAA6B;AAC7B,iGAAiG;AACjG,YAAqB;IAErB,4CAA4C;IAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;SACpB,MAAM,EAAE;SACR,IAAI,CAAC,eAAe,CAAC;SACrB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,EAC9C,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CACtC,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAC;IAEZ,+EAA+E;IAC/E,IAAI,CAAC,MAAM,IAAI,YAAY,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;QAC7D,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;aAChB,MAAM,EAAE;aACR,IAAI,CAAC,eAAe,CAAC;aACrB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,EAC9C,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CACtC,CACF;aACA,KAAK,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,4BAA4B;IAC5B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,kBAA8B,CAAC;QAC3D,MAAM,WAAW,GAAG,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;IACvD,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,CAAC,UAAsB,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAC9C,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CACzD,CAAC;QACF,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IAED,kEAAkE;IAClE,0EAA0E;IAC1E,iFAAiF;IACjF,iFAAiF;IAEjF,sBAAsB;IACtB,MAAM,EAAE;SACL,MAAM,CAAC,eAAe,CAAC;SACvB,GAAG,CAAC;QACH,YAAY,EAAE,GAAG,CAAA,GAAG,eAAe,CAAC,YAAY,MAAM;QACtD,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAM,EACN,QAAgB,EAChB,KAAa;IAEb,MAAM,EAAE;SACL,MAAM,CAAC,eAAe,CAAC;SACvB,GAAG,CAAC;QACH,UAAU,EAAE,GAAG,CAAA,GAAG,eAAe,CAAC,UAAU,MAAM;QAClD,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAwC;IACjE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,kBAAkB,EAAE,GAAG,CAAC,kBAAqC;QAC7D,UAAU,EAAE,GAAG,CAAC,UAA6B;QAC7C,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;QACjD,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import type { DB } from '../types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Count
|
|
4
|
-
* Only counts delivered outbound Create/Update/Delete activities.
|
|
3
|
+
* Count outbox items for a specific user actor (published+public content by that author).
|
|
5
4
|
*/
|
|
6
5
|
export declare function countOutboxItems(db: DB, actorUri: string): Promise<number>;
|
|
7
6
|
/**
|
|
8
|
-
* Count
|
|
7
|
+
* Count outbox items for the instance actor (all users' published+public content).
|
|
9
8
|
*/
|
|
10
|
-
export declare function countInstanceOutboxItems(db: DB,
|
|
9
|
+
export declare function countInstanceOutboxItems(db: DB, _domain: string): Promise<number>;
|
|
11
10
|
/**
|
|
12
|
-
*
|
|
13
|
-
* Returns the full activity payload (AP JSON-LD) for each item.
|
|
11
|
+
* Page of a specific user actor's outbox (projected from their published+public content).
|
|
14
12
|
*/
|
|
15
13
|
export declare function getOutboxPage(db: DB, actorUri: string, page: number, pageSize?: number): Promise<Record<string, unknown>[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Page of the instance actor's outbox (all users' published+public content as Create activities).
|
|
16
|
+
* This is what mirror backfill crawls.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getInstanceOutboxPage(db: DB, domain: string, page: number, pageSize?: number): Promise<Record<string, unknown>[]>;
|
|
16
19
|
/**
|
|
17
20
|
* Count total outbox items for a hub Group actor.
|
|
18
21
|
* Counts delivered outbound Announce activities from the hub actor.
|
|
@@ -23,9 +26,4 @@ export declare function countHubOutboxItems(db: DB, hubActorUri: string): Promis
|
|
|
23
26
|
* Returns Announce activity payloads.
|
|
24
27
|
*/
|
|
25
28
|
export declare function getHubOutboxPage(db: DB, hubActorUri: string, page: number, pageSize?: number): Promise<Record<string, unknown>[]>;
|
|
26
|
-
/**
|
|
27
|
-
* Get a page of instance-level outbox activities (all users' Create activities).
|
|
28
|
-
* Used by the instance actor outbox for backfill.
|
|
29
|
-
*/
|
|
30
|
-
export declare function getInstanceOutboxPage(db: DB, domain: string, page: number, pageSize?: number): Promise<Record<string, unknown>[]>;
|
|
31
29
|
//# sourceMappingURL=outboxQueries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outboxQueries.d.ts","sourceRoot":"","sources":["../../src/federation/outboxQueries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"outboxQueries.d.ts","sourceRoot":"","sources":["../../src/federation/outboxQueries.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AA8EtC;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAOpC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAEpC;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAatF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAkBpC"}
|