@atproto/bsky 0.0.242 → 0.0.243
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/CHANGELOG.md +8 -0
- package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/searchActors.js +7 -3
- package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js +7 -3
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.js +8 -3
- package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacks.js +7 -3
- package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js +3 -2
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
- package/dist/api/util.d.ts +5 -0
- package/dist/api/util.d.ts.map +1 -1
- package/dist/api/util.js +11 -0
- package/dist/api/util.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/data-plane/server/db/db.d.ts +4 -5
- package/dist/data-plane/server/db/db.d.ts.map +1 -1
- package/dist/data-plane/server/db/db.js +2 -1
- package/dist/data-plane/server/db/db.js.map +1 -1
- package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.d.ts.map +1 -1
- package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.js +2 -4
- package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.js.map +1 -1
- package/dist/data-plane/server/db/migrations/provider.d.ts +2 -1
- package/dist/data-plane/server/db/migrations/provider.d.ts.map +1 -1
- package/dist/data-plane/server/db/migrations/provider.js.map +1 -1
- package/dist/data-plane/server/db/pagination.d.ts +3 -2
- package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
- package/dist/data-plane/server/db/pagination.js +8 -8
- package/dist/data-plane/server/db/pagination.js.map +1 -1
- package/dist/data-plane/server/db/util.d.ts +5 -5
- package/dist/data-plane/server/db/util.d.ts.map +1 -1
- package/dist/data-plane/server/db/util.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/block.d.ts +9 -4
- package/dist/data-plane/server/indexing/plugins/block.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts +13 -4
- package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/follow.d.ts +9 -4
- package/dist/data-plane/server/indexing/plugins/follow.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/labeler.d.ts +8 -4
- package/dist/data-plane/server/indexing/plugins/labeler.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/like.d.ts +12 -4
- package/dist/data-plane/server/indexing/plugins/like.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list-block.d.ts +9 -4
- package/dist/data-plane/server/indexing/plugins/list-block.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list-item.d.ts +10 -4
- package/dist/data-plane/server/indexing/plugins/list-item.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list.d.ts +13 -4
- package/dist/data-plane/server/indexing/plugins/list.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post.js +4 -3
- package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/repost.d.ts +12 -4
- package/dist/data-plane/server/indexing/plugins/repost.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts +9 -4
- package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/verification.d.ts +12 -4
- package/dist/data-plane/server/indexing/plugins/verification.d.ts.map +1 -1
- package/dist/data-plane/server/routes/blocks.js +22 -14
- package/dist/data-plane/server/routes/blocks.js.map +1 -1
- package/dist/data-plane/server/routes/feed-gens.js +2 -2
- package/dist/data-plane/server/routes/feed-gens.js.map +1 -1
- package/dist/data-plane/server/routes/feeds.js +18 -16
- package/dist/data-plane/server/routes/feeds.js.map +1 -1
- package/dist/data-plane/server/routes/labels.js +1 -1
- package/dist/data-plane/server/routes/labels.js.map +1 -1
- package/dist/data-plane/server/routes/mutes.js +2 -2
- package/dist/data-plane/server/routes/mutes.js.map +1 -1
- package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
- package/dist/data-plane/server/routes/notifs.js +10 -9
- package/dist/data-plane/server/routes/notifs.js.map +1 -1
- package/dist/data-plane/server/routes/relationships.js.map +1 -1
- package/dist/data-plane/server/routes/suggestions.js +2 -2
- package/dist/data-plane/server/routes/suggestions.js.map +1 -1
- package/dist/data-plane/server/util.d.ts +31 -23
- package/dist/data-plane/server/util.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/api/app/bsky/actor/searchActors.ts +17 -6
- package/src/api/app/bsky/actor/searchActorsTypeahead.ts +11 -5
- package/src/api/app/bsky/feed/searchPosts.ts +12 -5
- package/src/api/app/bsky/graph/searchStarterPacks.ts +14 -5
- package/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +9 -2
- package/src/api/util.ts +17 -0
- package/src/config.ts +9 -0
- package/src/data-plane/server/db/db.ts +1 -1
- package/src/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.ts +2 -4
- package/src/data-plane/server/db/migrations/provider.ts +2 -1
- package/src/data-plane/server/db/pagination.ts +15 -15
- package/src/data-plane/server/db/util.ts +8 -5
- package/src/data-plane/server/indexing/plugins/post.ts +5 -4
- package/src/data-plane/server/routes/blocks.ts +30 -24
- package/src/data-plane/server/routes/feed-gens.ts +2 -2
- package/src/data-plane/server/routes/feeds.ts +23 -19
- package/src/data-plane/server/routes/labels.ts +2 -2
- package/src/data-plane/server/routes/mutes.ts +8 -6
- package/src/data-plane/server/routes/notifs.ts +15 -12
- package/src/data-plane/server/routes/relationships.ts +4 -2
- package/src/data-plane/server/routes/suggestions.ts +2 -2
- package/tests/data-plane/subscription.test.ts +2 -2
|
@@ -505,10 +505,11 @@ const updateAggregates = async (db: DatabaseSchema, postIdx: IndexedPost) => {
|
|
|
505
505
|
replyCount: db
|
|
506
506
|
.selectFrom('post')
|
|
507
507
|
.where('post.replyParent', '=', postIdx.post.replyParent)
|
|
508
|
-
.where((
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
508
|
+
.where((eb) =>
|
|
509
|
+
eb.or([
|
|
510
|
+
eb('post.violatesThreadGate', 'is', null),
|
|
511
|
+
eb('post.violatesThreadGate', '=', false),
|
|
512
|
+
]),
|
|
512
513
|
)
|
|
513
514
|
.select(countAll.as('count')),
|
|
514
515
|
})
|
|
@@ -8,15 +8,17 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
8
8
|
const { actorDid, targetDid } = req
|
|
9
9
|
const res = await db.db
|
|
10
10
|
.selectFrom('actor_block')
|
|
11
|
-
.where((
|
|
12
|
-
|
|
13
|
-
.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
.where((eb) =>
|
|
12
|
+
eb.or([
|
|
13
|
+
eb.and([
|
|
14
|
+
eb('actor_block.creator', '=', actorDid),
|
|
15
|
+
eb('actor_block.subjectDid', '=', targetDid),
|
|
16
|
+
]),
|
|
17
|
+
eb.and([
|
|
18
|
+
eb('actor_block.creator', '=', targetDid),
|
|
19
|
+
eb('actor_block.subjectDid', '=', actorDid),
|
|
20
|
+
]),
|
|
21
|
+
]),
|
|
20
22
|
)
|
|
21
23
|
.limit(1)
|
|
22
24
|
.selectAll()
|
|
@@ -58,15 +60,17 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
58
60
|
const res = await db.db
|
|
59
61
|
.selectFrom('list_block')
|
|
60
62
|
.innerJoin('list_item', 'list_item.listUri', 'list_block.subjectUri')
|
|
61
|
-
.where((
|
|
62
|
-
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
.where((eb) =>
|
|
64
|
+
eb.or([
|
|
65
|
+
eb.and([
|
|
66
|
+
eb('list_block.creator', '=', actorDid),
|
|
67
|
+
eb('list_item.subjectDid', '=', targetDid),
|
|
68
|
+
]),
|
|
69
|
+
eb.and([
|
|
70
|
+
eb('list_block.creator', '=', targetDid),
|
|
71
|
+
eb('list_item.subjectDid', '=', actorDid),
|
|
72
|
+
]),
|
|
73
|
+
]),
|
|
70
74
|
)
|
|
71
75
|
.limit(1)
|
|
72
76
|
.selectAll('list_block')
|
|
@@ -96,12 +100,14 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
96
100
|
const { ref } = db.db.dynamic
|
|
97
101
|
let builder = db.db
|
|
98
102
|
.selectFrom('list')
|
|
99
|
-
.
|
|
100
|
-
|
|
101
|
-
.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
.where(({ exists }) =>
|
|
104
|
+
exists(
|
|
105
|
+
db.db
|
|
106
|
+
.selectFrom('list_block')
|
|
107
|
+
.where('list_block.creator', '=', actorDid)
|
|
108
|
+
.whereRef('list_block.subjectUri', '=', ref('list.uri'))
|
|
109
|
+
.selectAll(),
|
|
110
|
+
),
|
|
105
111
|
)
|
|
106
112
|
.selectAll('list')
|
|
107
113
|
|
|
@@ -34,7 +34,7 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
34
34
|
const feeds = await db.db
|
|
35
35
|
.selectFrom('suggested_feed')
|
|
36
36
|
.orderBy('suggested_feed.order', 'asc')
|
|
37
|
-
|
|
37
|
+
.$if(!!req.cursor, (q) => q.where('order', '>', parseInt(req.cursor, 10)))
|
|
38
38
|
.limit(req.limit || 50)
|
|
39
39
|
.selectAll()
|
|
40
40
|
.execute()
|
|
@@ -74,7 +74,7 @@ const searchFeedGeneratorsImpl = async (
|
|
|
74
74
|
const trimmed = query.trim()
|
|
75
75
|
let builder = db.db
|
|
76
76
|
.selectFrom('feed_generator')
|
|
77
|
-
|
|
77
|
+
.$if(!!trimmed, (q) => q.where('displayName', 'ilike', `%${trimmed}%`))
|
|
78
78
|
.selectAll()
|
|
79
79
|
const keyset = new TimeCidKeyset(
|
|
80
80
|
ref('feed_generator.createdAt'),
|
|
@@ -21,16 +21,16 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
21
21
|
// only your own posts
|
|
22
22
|
.where('type', '=', 'post')
|
|
23
23
|
// only posts with media
|
|
24
|
-
.where((
|
|
25
|
-
|
|
26
|
-
.
|
|
27
|
-
|
|
24
|
+
.where((eb) =>
|
|
25
|
+
eb.or([
|
|
26
|
+
eb.exists(
|
|
27
|
+
eb
|
|
28
28
|
.selectFrom('post_embed_image')
|
|
29
29
|
.select('post_embed_image.postUri')
|
|
30
30
|
.whereRef('post_embed_image.postUri', '=', 'feed_item.postUri'),
|
|
31
|
-
)
|
|
32
|
-
.
|
|
33
|
-
|
|
31
|
+
),
|
|
32
|
+
eb.exists(
|
|
33
|
+
eb
|
|
34
34
|
.selectFrom('post_embed_gallery_image')
|
|
35
35
|
.select('post_embed_gallery_image.postUri')
|
|
36
36
|
.whereRef(
|
|
@@ -39,28 +39,32 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
39
39
|
'feed_item.postUri',
|
|
40
40
|
),
|
|
41
41
|
),
|
|
42
|
+
]),
|
|
42
43
|
)
|
|
43
44
|
} else if (feedType === FeedType.POSTS_WITH_VIDEO) {
|
|
44
45
|
builder = builder
|
|
45
46
|
// only your own posts
|
|
46
47
|
.where('type', '=', 'post')
|
|
47
48
|
// only posts with video
|
|
48
|
-
.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
.where(({ eb, exists }) =>
|
|
50
|
+
exists(
|
|
51
|
+
eb
|
|
52
|
+
.selectFrom('post_embed_video')
|
|
53
|
+
.select('post_embed_video.postUri')
|
|
54
|
+
.whereRef('post_embed_video.postUri', '=', 'feed_item.postUri'),
|
|
55
|
+
),
|
|
53
56
|
)
|
|
54
57
|
} else if (feedType === FeedType.POSTS_NO_REPLIES) {
|
|
55
|
-
builder = builder.where((
|
|
56
|
-
|
|
58
|
+
builder = builder.where((eb) =>
|
|
59
|
+
eb.or([eb('post.replyParent', 'is', null), eb('type', '=', 'repost')]),
|
|
57
60
|
)
|
|
58
61
|
} else if (feedType === FeedType.POSTS_AND_AUTHOR_THREADS) {
|
|
59
|
-
builder = builder.where((
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
builder = builder.where((eb) =>
|
|
63
|
+
eb.or([
|
|
64
|
+
eb('type', '=', 'repost'),
|
|
65
|
+
eb('post.replyParent', 'is', null),
|
|
66
|
+
eb('post.replyRoot', 'like', `at://${actorDid}/%`),
|
|
67
|
+
]),
|
|
64
68
|
)
|
|
65
69
|
}
|
|
66
70
|
|
|
@@ -19,8 +19,8 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
19
19
|
.selectFrom('label')
|
|
20
20
|
.where('uri', 'in', subjects)
|
|
21
21
|
.where('src', 'in', issuers)
|
|
22
|
-
.where((
|
|
23
|
-
|
|
22
|
+
.where((eb) =>
|
|
23
|
+
eb.or([eb('exp', 'is', null), sql<boolean>`exp::timestamp > now()`]),
|
|
24
24
|
)
|
|
25
25
|
.selectAll()
|
|
26
26
|
.execute()
|
|
@@ -88,12 +88,14 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
88
88
|
const { ref } = db.db.dynamic
|
|
89
89
|
let builder = db.db
|
|
90
90
|
.selectFrom('list')
|
|
91
|
-
.
|
|
92
|
-
|
|
93
|
-
.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
.where(({ exists }) =>
|
|
92
|
+
exists(
|
|
93
|
+
db.db
|
|
94
|
+
.selectFrom('list_mute')
|
|
95
|
+
.where('list_mute.mutedByDid', '=', actorDid)
|
|
96
|
+
.whereRef('list_mute.listUri', '=', ref('list.uri'))
|
|
97
|
+
.selectAll(),
|
|
98
|
+
),
|
|
97
99
|
)
|
|
98
100
|
.selectAll('list')
|
|
99
101
|
|
|
@@ -32,17 +32,18 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
32
32
|
let builder = db.db
|
|
33
33
|
.selectFrom('notification as notif')
|
|
34
34
|
.where('notif.did', '=', actorDid)
|
|
35
|
-
.where((
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.
|
|
35
|
+
.where((eb) =>
|
|
36
|
+
eb.or([
|
|
37
|
+
eb('reasonSubject', 'is', null),
|
|
38
|
+
eb.exists(
|
|
39
39
|
db.db
|
|
40
40
|
.selectFrom('record as subject')
|
|
41
41
|
.selectAll()
|
|
42
42
|
.whereRef('subject.uri', '=', ref('notif.reasonSubject')),
|
|
43
43
|
),
|
|
44
|
+
]),
|
|
44
45
|
)
|
|
45
|
-
|
|
46
|
+
.$if(priority, (qb) => qb.where(({ exists }) => exists(priorityFollowQb)))
|
|
46
47
|
.select([
|
|
47
48
|
'notif.author as authorDid',
|
|
48
49
|
'notif.recordUri as uri',
|
|
@@ -117,13 +118,15 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
117
118
|
// Ensure to hit notification_did_sortat_idx, handling case where lastSeenNotifs is null.
|
|
118
119
|
.where('notification.did', '=', actorDid)
|
|
119
120
|
.where('notification.sortAt', '>', lastSeen ?? '')
|
|
120
|
-
|
|
121
|
-
qb.
|
|
122
|
-
|
|
123
|
-
.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
.$if(priority, (qb) =>
|
|
122
|
+
qb.where(({ exists }) =>
|
|
123
|
+
exists(
|
|
124
|
+
db.db
|
|
125
|
+
.selectFrom('follow')
|
|
126
|
+
.select(sql<boolean>`${true}`.as('val'))
|
|
127
|
+
.where('creator', '=', actorDid)
|
|
128
|
+
.whereRef('subjectDid', '=', ref('notification.author')),
|
|
129
|
+
),
|
|
127
130
|
),
|
|
128
131
|
)
|
|
129
132
|
.executeTakeFirst()
|
|
@@ -95,9 +95,11 @@ export default (db: Database): Partial<ServiceImpl<typeof Service>> => ({
|
|
|
95
95
|
const { ref } = db.db.dynamic
|
|
96
96
|
const sourceRef = ref('pair.source')
|
|
97
97
|
const targetRef = ref('pair.target')
|
|
98
|
-
const values = valuesList
|
|
98
|
+
const values = valuesList<{ source: string; target: string }>(
|
|
99
|
+
pairs.map((p) => sql`${p.a}, ${p.b}`),
|
|
100
|
+
)
|
|
99
101
|
const res = await db.db
|
|
100
|
-
.selectFrom(values.as(sql`pair (source, target)`))
|
|
102
|
+
.selectFrom(values.as<'pair'>(sql`pair (source, target)`))
|
|
101
103
|
.select([
|
|
102
104
|
sql<string>`${sourceRef}`.as('source'),
|
|
103
105
|
sql<string>`${targetRef}`.as('target'),
|
|
@@ -41,7 +41,7 @@ const getFollowSuggestionsGlobal = async (
|
|
|
41
41
|
const suggestions = await db.db
|
|
42
42
|
.selectFrom('suggested_follow')
|
|
43
43
|
.innerJoin('actor', 'actor.did', 'suggested_follow.did')
|
|
44
|
-
|
|
44
|
+
.$if(alreadyIncluded.length > 0, (qb) =>
|
|
45
45
|
qb.where('suggested_follow.order', 'not in', alreadyIncluded),
|
|
46
46
|
)
|
|
47
47
|
.selectAll()
|
|
@@ -116,7 +116,7 @@ const getFollowSuggestionsRelativeTo = async (
|
|
|
116
116
|
.where('follow.creator', '=', input.actorDid)
|
|
117
117
|
.where('follow.subjectDid', '!=', input.relativeToDid)
|
|
118
118
|
.where('follow.subjectDid', 'not in', actorsViewerFollows)
|
|
119
|
-
|
|
119
|
+
.$if(resultDids.length > 0, (qb) =>
|
|
120
120
|
qb.where(
|
|
121
121
|
'subjectDid',
|
|
122
122
|
'not in',
|
|
@@ -118,8 +118,8 @@ async function dumpTable<T extends keyof DatabaseSchemaType>(
|
|
|
118
118
|
tableName: T,
|
|
119
119
|
pkeys: (keyof DatabaseSchemaType[T] & string)[],
|
|
120
120
|
) {
|
|
121
|
-
const { ref } = db.db.dynamic
|
|
122
|
-
let builder = db.db.selectFrom(tableName).selectAll()
|
|
121
|
+
const { ref, table } = db.db.dynamic
|
|
122
|
+
let builder = db.db.selectFrom(table(tableName).as('t')).selectAll()
|
|
123
123
|
pkeys.forEach((key) => {
|
|
124
124
|
builder = builder.orderBy(ref(key))
|
|
125
125
|
})
|