@atproto/bsky 0.0.241 → 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.
Files changed (328) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/api/age-assurance/const.d.ts +1 -1
  3. package/dist/api/age-assurance/index.d.ts.map +1 -1
  4. package/dist/api/age-assurance/kws/age-verified.d.ts +13 -13
  5. package/dist/api/age-assurance/kws/age-verified.d.ts.map +1 -1
  6. package/dist/api/age-assurance/kws/external-payload.d.ts +4 -4
  7. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts.map +1 -1
  8. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts.map +1 -1
  9. package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
  10. package/dist/api/app/bsky/actor/searchActors.js +7 -3
  11. package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
  12. package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
  13. package/dist/api/app/bsky/actor/searchActorsTypeahead.js +7 -3
  14. package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
  15. package/dist/api/app/bsky/bookmark/util.d.ts.map +1 -1
  16. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
  17. package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
  18. package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
  19. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  20. package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
  21. package/dist/api/app/bsky/feed/searchPosts.js +8 -3
  22. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  23. package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
  24. package/dist/api/app/bsky/graph/searchStarterPacks.js +7 -3
  25. package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
  26. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  27. package/dist/api/app/bsky/notification/util.d.ts.map +1 -1
  28. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
  29. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js +3 -2
  30. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
  31. package/dist/api/external.d.ts.map +1 -1
  32. package/dist/api/health.d.ts.map +1 -1
  33. package/dist/api/kws/api.d.ts.map +1 -1
  34. package/dist/api/kws/index.d.ts.map +1 -1
  35. package/dist/api/kws/types.d.ts +6 -6
  36. package/dist/api/kws/util.d.ts +1 -1
  37. package/dist/api/kws/util.d.ts.map +1 -1
  38. package/dist/api/kws/webhook.d.ts.map +1 -1
  39. package/dist/api/sitemap.d.ts.map +1 -1
  40. package/dist/api/util.d.ts +5 -0
  41. package/dist/api/util.d.ts.map +1 -1
  42. package/dist/api/util.js +11 -0
  43. package/dist/api/util.js.map +1 -1
  44. package/dist/api/well-known.d.ts.map +1 -1
  45. package/dist/auth-verifier.d.ts +2 -2
  46. package/dist/auth-verifier.d.ts.map +1 -1
  47. package/dist/bsync.d.ts.map +1 -1
  48. package/dist/cache/read-through.d.ts.map +1 -1
  49. package/dist/cache/read-through.js.map +1 -1
  50. package/dist/config.d.ts +6 -4
  51. package/dist/config.d.ts.map +1 -1
  52. package/dist/config.js +5 -0
  53. package/dist/config.js.map +1 -1
  54. package/dist/context.d.ts.map +1 -1
  55. package/dist/context.js.map +1 -1
  56. package/dist/courier.d.ts.map +1 -1
  57. package/dist/data-plane/bsync/index.d.ts.map +1 -1
  58. package/dist/data-plane/bsync/index.js.map +1 -1
  59. package/dist/data-plane/client/hosts.d.ts.map +1 -1
  60. package/dist/data-plane/client/index.d.ts.map +1 -1
  61. package/dist/data-plane/client/util.d.ts.map +1 -1
  62. package/dist/data-plane/server/background.d.ts.map +1 -1
  63. package/dist/data-plane/server/db/db.d.ts +4 -5
  64. package/dist/data-plane/server/db/db.d.ts.map +1 -1
  65. package/dist/data-plane/server/db/db.js +2 -1
  66. package/dist/data-plane/server/db/db.js.map +1 -1
  67. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.d.ts.map +1 -1
  68. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.js +2 -4
  69. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.js.map +1 -1
  70. package/dist/data-plane/server/db/migrations/provider.d.ts +2 -1
  71. package/dist/data-plane/server/db/migrations/provider.d.ts.map +1 -1
  72. package/dist/data-plane/server/db/migrations/provider.js.map +1 -1
  73. package/dist/data-plane/server/db/pagination.d.ts +4 -3
  74. package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
  75. package/dist/data-plane/server/db/pagination.js +8 -8
  76. package/dist/data-plane/server/db/pagination.js.map +1 -1
  77. package/dist/data-plane/server/db/util.d.ts +5 -5
  78. package/dist/data-plane/server/db/util.d.ts.map +1 -1
  79. package/dist/data-plane/server/db/util.js.map +1 -1
  80. package/dist/data-plane/server/index.d.ts.map +1 -1
  81. package/dist/data-plane/server/index.js.map +1 -1
  82. package/dist/data-plane/server/indexing/index.d.ts +78 -78
  83. package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
  84. package/dist/data-plane/server/indexing/index.js.map +1 -1
  85. package/dist/data-plane/server/indexing/plugins/block.d.ts +9 -4
  86. package/dist/data-plane/server/indexing/plugins/block.d.ts.map +1 -1
  87. package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts.map +1 -1
  88. package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts +13 -4
  89. package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts.map +1 -1
  90. package/dist/data-plane/server/indexing/plugins/follow.d.ts +9 -4
  91. package/dist/data-plane/server/indexing/plugins/follow.d.ts.map +1 -1
  92. package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts.map +1 -1
  93. package/dist/data-plane/server/indexing/plugins/labeler.d.ts +8 -4
  94. package/dist/data-plane/server/indexing/plugins/labeler.d.ts.map +1 -1
  95. package/dist/data-plane/server/indexing/plugins/like.d.ts +12 -4
  96. package/dist/data-plane/server/indexing/plugins/like.d.ts.map +1 -1
  97. package/dist/data-plane/server/indexing/plugins/list-block.d.ts +9 -4
  98. package/dist/data-plane/server/indexing/plugins/list-block.d.ts.map +1 -1
  99. package/dist/data-plane/server/indexing/plugins/list-item.d.ts +10 -4
  100. package/dist/data-plane/server/indexing/plugins/list-item.d.ts.map +1 -1
  101. package/dist/data-plane/server/indexing/plugins/list.d.ts +13 -4
  102. package/dist/data-plane/server/indexing/plugins/list.d.ts.map +1 -1
  103. package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts.map +1 -1
  104. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -1
  105. package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
  106. package/dist/data-plane/server/indexing/plugins/post.js +4 -3
  107. package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
  108. package/dist/data-plane/server/indexing/plugins/profile.d.ts.map +1 -1
  109. package/dist/data-plane/server/indexing/plugins/repost.d.ts +12 -4
  110. package/dist/data-plane/server/indexing/plugins/repost.d.ts.map +1 -1
  111. package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts +9 -4
  112. package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts.map +1 -1
  113. package/dist/data-plane/server/indexing/plugins/status.d.ts.map +1 -1
  114. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
  115. package/dist/data-plane/server/indexing/plugins/verification.d.ts +12 -4
  116. package/dist/data-plane/server/indexing/plugins/verification.d.ts.map +1 -1
  117. package/dist/data-plane/server/indexing/processor.d.ts.map +1 -1
  118. package/dist/data-plane/server/indexing/processor.js.map +1 -1
  119. package/dist/data-plane/server/routes/activity-subscription.d.ts.map +1 -1
  120. package/dist/data-plane/server/routes/blocks.d.ts.map +1 -1
  121. package/dist/data-plane/server/routes/blocks.js +22 -14
  122. package/dist/data-plane/server/routes/blocks.js.map +1 -1
  123. package/dist/data-plane/server/routes/bookmarks.d.ts.map +1 -1
  124. package/dist/data-plane/server/routes/drafts.d.ts.map +1 -1
  125. package/dist/data-plane/server/routes/feed-gens.d.ts.map +1 -1
  126. package/dist/data-plane/server/routes/feed-gens.js +2 -2
  127. package/dist/data-plane/server/routes/feed-gens.js.map +1 -1
  128. package/dist/data-plane/server/routes/feeds.d.ts.map +1 -1
  129. package/dist/data-plane/server/routes/feeds.js +18 -16
  130. package/dist/data-plane/server/routes/feeds.js.map +1 -1
  131. package/dist/data-plane/server/routes/follows.d.ts.map +1 -1
  132. package/dist/data-plane/server/routes/identity.d.ts.map +1 -1
  133. package/dist/data-plane/server/routes/index.d.ts.map +1 -1
  134. package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
  135. package/dist/data-plane/server/routes/labels.d.ts.map +1 -1
  136. package/dist/data-plane/server/routes/labels.js +1 -1
  137. package/dist/data-plane/server/routes/labels.js.map +1 -1
  138. package/dist/data-plane/server/routes/likes.d.ts.map +1 -1
  139. package/dist/data-plane/server/routes/lists.d.ts.map +1 -1
  140. package/dist/data-plane/server/routes/moderation.d.ts.map +1 -1
  141. package/dist/data-plane/server/routes/mutes.d.ts.map +1 -1
  142. package/dist/data-plane/server/routes/mutes.js +2 -2
  143. package/dist/data-plane/server/routes/mutes.js.map +1 -1
  144. package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
  145. package/dist/data-plane/server/routes/notifs.js +10 -9
  146. package/dist/data-plane/server/routes/notifs.js.map +1 -1
  147. package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
  148. package/dist/data-plane/server/routes/quotes.d.ts.map +1 -1
  149. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  150. package/dist/data-plane/server/routes/relationships.d.ts.map +1 -1
  151. package/dist/data-plane/server/routes/relationships.js.map +1 -1
  152. package/dist/data-plane/server/routes/reposts.d.ts.map +1 -1
  153. package/dist/data-plane/server/routes/search.d.ts.map +1 -1
  154. package/dist/data-plane/server/routes/site-standard.d.ts.map +1 -1
  155. package/dist/data-plane/server/routes/sitemap.d.ts.map +1 -1
  156. package/dist/data-plane/server/routes/starter-packs.d.ts.map +1 -1
  157. package/dist/data-plane/server/routes/suggestions.d.ts.map +1 -1
  158. package/dist/data-plane/server/routes/suggestions.js +2 -2
  159. package/dist/data-plane/server/routes/suggestions.js.map +1 -1
  160. package/dist/data-plane/server/routes/sync.d.ts.map +1 -1
  161. package/dist/data-plane/server/routes/threads.d.ts.map +1 -1
  162. package/dist/data-plane/server/subscription.d.ts.map +1 -1
  163. package/dist/data-plane/server/subscription.js.map +1 -1
  164. package/dist/data-plane/server/util.d.ts +31 -23
  165. package/dist/data-plane/server/util.d.ts.map +1 -1
  166. package/dist/etcd.d.ts.map +1 -1
  167. package/dist/etcd.js.map +1 -1
  168. package/dist/feature-gates/index.d.ts.map +1 -1
  169. package/dist/feature-gates/metrics.d.ts.map +1 -1
  170. package/dist/feature-gates/metrics.js.map +1 -1
  171. package/dist/hydration/actor.d.ts.map +1 -1
  172. package/dist/hydration/actor.js.map +1 -1
  173. package/dist/hydration/external.d.ts.map +1 -1
  174. package/dist/hydration/external.js.map +1 -1
  175. package/dist/hydration/feed.d.ts.map +1 -1
  176. package/dist/hydration/feed.js.map +1 -1
  177. package/dist/hydration/graph.d.ts.map +1 -1
  178. package/dist/hydration/graph.js.map +1 -1
  179. package/dist/hydration/hydrator.d.ts +1 -1
  180. package/dist/hydration/hydrator.d.ts.map +1 -1
  181. package/dist/hydration/hydrator.js.map +1 -1
  182. package/dist/hydration/label.d.ts.map +1 -1
  183. package/dist/hydration/label.js.map +1 -1
  184. package/dist/hydration/util.d.ts.map +1 -1
  185. package/dist/image/invalidator.d.ts.map +1 -1
  186. package/dist/image/invalidator.js.map +1 -1
  187. package/dist/image/logger.d.ts.map +1 -1
  188. package/dist/image/server.d.ts.map +1 -1
  189. package/dist/image/server.js.map +1 -1
  190. package/dist/image/sharp.d.ts +1 -1
  191. package/dist/image/uri.d.ts.map +1 -1
  192. package/dist/image/uri.js.map +1 -1
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/kws.d.ts.map +1 -1
  195. package/dist/kws.js.map +1 -1
  196. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +75 -155
  197. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
  198. package/dist/lexicons/app/bsky/actor/profile.defs.d.ts +100 -300
  199. package/dist/lexicons/app/bsky/actor/profile.defs.d.ts.map +1 -1
  200. package/dist/lexicons/app/bsky/actor/status.defs.d.ts +40 -40
  201. package/dist/lexicons/app/bsky/actor/status.defs.d.ts.map +1 -1
  202. package/dist/lexicons/app/bsky/draft/defs.defs.d.ts +4 -4
  203. package/dist/lexicons/app/bsky/draft/defs.defs.d.ts.map +1 -1
  204. package/dist/lexicons/app/bsky/embed/external.defs.d.ts +10 -10
  205. package/dist/lexicons/app/bsky/embed/gallery.defs.d.ts +10 -42
  206. package/dist/lexicons/app/bsky/embed/gallery.defs.d.ts.map +1 -1
  207. package/dist/lexicons/app/bsky/embed/images.defs.d.ts +10 -10
  208. package/dist/lexicons/app/bsky/embed/record.defs.d.ts +10 -10
  209. package/dist/lexicons/app/bsky/embed/recordWithMedia.defs.d.ts +10 -10
  210. package/dist/lexicons/app/bsky/embed/video.defs.d.ts +50 -162
  211. package/dist/lexicons/app/bsky/embed/video.defs.d.ts.map +1 -1
  212. package/dist/lexicons/app/bsky/feed/generator.defs.d.ts +80 -160
  213. package/dist/lexicons/app/bsky/feed/generator.defs.d.ts.map +1 -1
  214. package/dist/lexicons/app/bsky/feed/like.defs.d.ts +30 -30
  215. package/dist/lexicons/app/bsky/feed/like.defs.d.ts.map +1 -1
  216. package/dist/lexicons/app/bsky/feed/post.defs.d.ts +80 -200
  217. package/dist/lexicons/app/bsky/feed/post.defs.d.ts.map +1 -1
  218. package/dist/lexicons/app/bsky/feed/postgate.defs.d.ts +40 -80
  219. package/dist/lexicons/app/bsky/feed/postgate.defs.d.ts.map +1 -1
  220. package/dist/lexicons/app/bsky/feed/repost.defs.d.ts +30 -30
  221. package/dist/lexicons/app/bsky/feed/repost.defs.d.ts.map +1 -1
  222. package/dist/lexicons/app/bsky/feed/threadgate.defs.d.ts +30 -30
  223. package/dist/lexicons/app/bsky/feed/threadgate.defs.d.ts.map +1 -1
  224. package/dist/lexicons/app/bsky/graph/block.defs.d.ts +20 -20
  225. package/dist/lexicons/app/bsky/graph/block.defs.d.ts.map +1 -1
  226. package/dist/lexicons/app/bsky/graph/follow.defs.d.ts +30 -30
  227. package/dist/lexicons/app/bsky/graph/follow.defs.d.ts.map +1 -1
  228. package/dist/lexicons/app/bsky/graph/list.defs.d.ts +70 -70
  229. package/dist/lexicons/app/bsky/graph/list.defs.d.ts.map +1 -1
  230. package/dist/lexicons/app/bsky/graph/listblock.defs.d.ts +20 -20
  231. package/dist/lexicons/app/bsky/graph/listblock.defs.d.ts.map +1 -1
  232. package/dist/lexicons/app/bsky/graph/listitem.defs.d.ts +20 -20
  233. package/dist/lexicons/app/bsky/graph/listitem.defs.d.ts.map +1 -1
  234. package/dist/lexicons/app/bsky/graph/starterpack.defs.d.ts +50 -90
  235. package/dist/lexicons/app/bsky/graph/starterpack.defs.d.ts.map +1 -1
  236. package/dist/lexicons/app/bsky/graph/verification.defs.d.ts +30 -30
  237. package/dist/lexicons/app/bsky/graph/verification.defs.d.ts.map +1 -1
  238. package/dist/lexicons/app/bsky/labeler/service.defs.d.ts +60 -140
  239. package/dist/lexicons/app/bsky/labeler/service.defs.d.ts.map +1 -1
  240. package/dist/lexicons/app/bsky/notification/declaration.defs.d.ts +10 -10
  241. package/dist/lexicons/app/bsky/notification/declaration.defs.d.ts.map +1 -1
  242. package/dist/lexicons/app/bsky/richtext/facet.defs.d.ts +10 -10
  243. package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts +20 -20
  244. package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts.map +1 -1
  245. package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts +17 -0
  246. package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts.map +1 -1
  247. package/dist/lexicons/chat/bsky/convo/defs.defs.js +11 -0
  248. package/dist/lexicons/chat/bsky/convo/defs.defs.js.map +1 -1
  249. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts +7 -3
  250. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts.map +1 -1
  251. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js +5 -2
  252. package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js.map +1 -1
  253. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.d.ts +1 -1
  254. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.d.ts.map +1 -1
  255. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.js +1 -0
  256. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.js.map +1 -1
  257. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.d.ts +1 -1
  258. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.d.ts.map +1 -1
  259. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.js +1 -0
  260. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.js.map +1 -1
  261. package/dist/lexicons/chat/bsky/embed/joinLink.defs.d.ts +10 -42
  262. package/dist/lexicons/chat/bsky/embed/joinLink.defs.d.ts.map +1 -1
  263. package/dist/lexicons/com/atproto/lexicon/schema.defs.d.ts +10 -10
  264. package/dist/lexicons/com/atproto/lexicon/schema.defs.d.ts.map +1 -1
  265. package/dist/lexicons/com/atproto/repo/strongRef.defs.d.ts +10 -10
  266. package/dist/lexicons/com/germnetwork/declaration.defs.d.ts +40 -120
  267. package/dist/lexicons/com/germnetwork/declaration.defs.d.ts.map +1 -1
  268. package/dist/lexicons/site/standard/document.defs.d.ts +140 -460
  269. package/dist/lexicons/site/standard/document.defs.d.ts.map +1 -1
  270. package/dist/lexicons/site/standard/graph/recommend.defs.d.ts +10 -10
  271. package/dist/lexicons/site/standard/graph/recommend.defs.d.ts.map +1 -1
  272. package/dist/lexicons/site/standard/graph/subscription.defs.d.ts +20 -60
  273. package/dist/lexicons/site/standard/graph/subscription.defs.d.ts.map +1 -1
  274. package/dist/lexicons/site/standard/publication.defs.d.ts +60 -220
  275. package/dist/lexicons/site/standard/publication.defs.d.ts.map +1 -1
  276. package/dist/lexicons/site/standard/theme/basic.defs.d.ts +10 -10
  277. package/dist/lexicons/site/standard/theme/basic.defs.d.ts.map +1 -1
  278. package/dist/lexicons/tools/ozone/moderation/queryStatuses.defs.d.ts +2 -2
  279. package/dist/lexicons/tools/ozone/set/querySets.defs.d.ts +2 -2
  280. package/dist/pipeline.d.ts.map +1 -1
  281. package/dist/proto/bsky_connect.d.ts.map +1 -1
  282. package/dist/proto/bsky_pb.d.ts.map +1 -1
  283. package/dist/proto/bsky_pb.js.map +1 -1
  284. package/dist/proto/bsync_connect.d.ts.map +1 -1
  285. package/dist/proto/bsync_pb.d.ts.map +1 -1
  286. package/dist/proto/bsync_pb.js.map +1 -1
  287. package/dist/proto/courier_connect.d.ts.map +1 -1
  288. package/dist/proto/courier_pb.d.ts.map +1 -1
  289. package/dist/proto/courier_pb.js.map +1 -1
  290. package/dist/proto/rolodex_connect.d.ts.map +1 -1
  291. package/dist/proto/rolodex_pb.d.ts.map +1 -1
  292. package/dist/proto/rolodex_pb.js.map +1 -1
  293. package/dist/redis.d.ts.map +1 -1
  294. package/dist/rolodex.d.ts.map +1 -1
  295. package/dist/stash.d.ts.map +1 -1
  296. package/dist/stash.js.map +1 -1
  297. package/dist/util/debug.d.ts.map +1 -1
  298. package/dist/util/standard-site.d.ts.map +1 -1
  299. package/dist/util.d.ts.map +1 -1
  300. package/dist/views/index.d.ts.map +1 -1
  301. package/dist/views/types.d.ts +1 -1
  302. package/dist/views/types.d.ts.map +1 -1
  303. package/dist/views/util.d.ts.map +1 -1
  304. package/dist/views/util.js.map +1 -1
  305. package/package.json +17 -18
  306. package/src/api/app/bsky/actor/searchActors.ts +17 -6
  307. package/src/api/app/bsky/actor/searchActorsTypeahead.ts +11 -5
  308. package/src/api/app/bsky/feed/searchPosts.ts +12 -5
  309. package/src/api/app/bsky/graph/searchStarterPacks.ts +14 -5
  310. package/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +9 -2
  311. package/src/api/util.ts +17 -0
  312. package/src/config.ts +9 -0
  313. package/src/data-plane/server/db/db.ts +1 -1
  314. package/src/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.ts +2 -4
  315. package/src/data-plane/server/db/migrations/provider.ts +2 -1
  316. package/src/data-plane/server/db/pagination.ts +15 -15
  317. package/src/data-plane/server/db/util.ts +8 -5
  318. package/src/data-plane/server/indexing/plugins/post.ts +5 -4
  319. package/src/data-plane/server/routes/blocks.ts +30 -24
  320. package/src/data-plane/server/routes/feed-gens.ts +2 -2
  321. package/src/data-plane/server/routes/feeds.ts +23 -19
  322. package/src/data-plane/server/routes/labels.ts +2 -2
  323. package/src/data-plane/server/routes/mutes.ts +8 -6
  324. package/src/data-plane/server/routes/notifs.ts +15 -12
  325. package/src/data-plane/server/routes/relationships.ts +4 -2
  326. package/src/data-plane/server/routes/suggestions.ts +2 -2
  327. package/tests/data-plane/subscription.test.ts +18 -16
  328. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/db/pagination.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/db/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,QAAQ,CAAA;AAGrC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAExC,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAC1D,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,8BAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,SAAS,mBAAmB;IAE1D,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,KAAK;IAFzB,YACS,OAAO,EAAE,KAAK,EACd,SAAS,EAAE,KAAK,EACrB;IACJ,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAA;IACnC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,GAAG,YAAY,CAAA;IACzD,QAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,EAAE,CAAA;IACxD,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAInD;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,SAAS,CAIrC;IACD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,CAIzC;IACD,UAAU,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAGpD;IACD,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAWzD;IACD,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,oDAiBlE;IACD,QAAQ,CAAC,EAAE,SAAS,KAAK,EACvB,EAAE,EAAE,EAAE,EACN,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;QAElB,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB,GACA,EAAE,CAsBJ;CACF;AAED,KAAK,eAAe,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AACtD,KAAK,oBAAoB,GAAG,YAAY,CAAA;AAExC,qBAAa,aAAa,CACxB,aAAa,GAAG,eAAe,CAC/B,SAAQ,aAAa,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC1D,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB,CAAA;IAIxD,qBAAqB,CAAC,OAAO,EAAE,oBAAoB;QAE/C,OAAO;QACP,SAAS;MAEZ;IACD,qBAAqB,CAAC,MAAM,EAAE,YAAY;QAMtC,OAAO;QACP,SAAS;MAEZ;CACF;AAED,qBAAa,kBAAmB,SAAQ,aAAa,CAAC;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAC;IACA,WAAW,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;QAC3C,OAAO;QAAoB,SAAS;MAC9C;CACF;AAED,qBAAa,kBAAmB,SAAQ,aAAa,CAAC;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAC;IACA,WAAW,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;QAC3C,OAAO;QAAoB,SAAS;MAC9C;CACF;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,EAAE,SAAS,KAAK,EAChB,CAAC,SAAS,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,MAEjC,EAAE,QACA;IACJ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAC1B,MAAM,EAAE,CAAC,CAAA;IACT,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,KACA,EAEF,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,CAAC,EAAE,EAAE,SAAS,sBAAsB;IACtD,OAAO,EAAE,KAAK;IAAjC,YAAmB,OAAO,EAAE,KAAK,EAAI;IACrC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAA;IACnC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,GAAG,eAAe,CAAA;IAC5D,QAAQ,CAAC,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,EAAE,CAAA;IAC3D,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAInD;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,SAAS,CAIrC;IACD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,CAIzC;IACD,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAGvD;IACD,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAU5D;IACD,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,oDAM9C;IACD,QAAQ,CAAC,EAAE,SAAS,KAAK,EACvB,EAAE,EAAE,EAAE,EACN,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;QAE1B,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB,GACA,EAAE,CAcJ;CACF;AAED,KAAK,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AACtC,KAAK,iBAAiB,GAAG,eAAe,CAAA;AAExC,qBAAa,UAAU,CAAC,UAAU,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CACzE,UAAU,EACV,iBAAiB,CAClB;IACC,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,CAAA;IAIlD,qBAAqB,CAAC,OAAO,EAAE,iBAAiB;QAE5C,OAAO;MAEV;IACD,qBAAqB,CAAC,MAAM,EAAE,eAAe;QAMzC,OAAO;MAEV;CACF;AAED,qBAAa,YAAa,SAAQ,UAAU,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAA;CACf,CAAC;IACA,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;QAC3B,OAAO;MACjB;CACF;AAED,qBAAa,eAAgB,SAAQ,UAAU,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAA;CAClB,CAAC;IACA,WAAW,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;QAC9B,OAAO;MACjB;CACF;AAED,KAAK,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAChC,KAAK,iBAAiB,GAAG,eAAe,CAAA;AAExC,qBAAa,OAAO,CAAC,UAAU,GAAG,SAAS,CAAE,SAAQ,gBAAgB,CACnE,UAAU,EACV,iBAAiB,CAClB;IACC,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,CAAA;IAIlD,qBAAqB,CAAC,OAAO,EAAE,iBAAiB;QAE5C,OAAO;MAEV;IACD,qBAAqB,CAAC,MAAM,EAAE,eAAe;;MAS5C;CACF;AAED,qBAAa,WAAY,SAAQ,OAAO,CAAC;IACvC,GAAG,EAAE,MAAM,CAAA;CACZ,CAAC;IACA,WAAW,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;QACxB,OAAO;MACjB;CACF"}
@@ -82,16 +82,16 @@ export class GenericKeyset {
82
82
  const { limit, cursor, direction = 'desc', tryIndex, nullsLast } = opts;
83
83
  const keysetSql = this.getSql(this.unpack(cursor), direction, tryIndex);
84
84
  return qb
85
- .if(!!limit, (q) => q.limit(limit))
86
- .if(!nullsLast, (q) => q.orderBy(this.primary, direction).orderBy(this.secondary, direction))
87
- .if(!!nullsLast, (q) => q
85
+ .$if(!!limit, (q) => q.limit(limit))
86
+ .$if(!nullsLast, (q) => q.orderBy(this.primary, direction).orderBy(this.secondary, direction))
87
+ .$if(!!nullsLast, (q) => q
88
88
  .orderBy(direction === 'asc'
89
89
  ? sql `${this.primary} asc nulls last`
90
90
  : sql `${this.primary} desc nulls last`)
91
91
  .orderBy(direction === 'asc'
92
92
  ? sql `${this.secondary} asc nulls last`
93
93
  : sql `${this.secondary} desc nulls last`))
94
- .if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb));
94
+ .$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb));
95
95
  }
96
96
  }
97
97
  export class TimeCidKeyset extends GenericKeyset {
@@ -185,12 +185,12 @@ export class GenericSingleKey {
185
185
  const { limit, cursor, direction = 'desc', nullsLast } = opts;
186
186
  const keySql = this.getSql(this.unpack(cursor), direction);
187
187
  return qb
188
- .if(!!limit, (q) => q.limit(limit))
189
- .if(!nullsLast, (q) => q.orderBy(this.primary, direction))
190
- .if(!!nullsLast, (q) => q.orderBy(direction === 'asc'
188
+ .$if(!!limit, (q) => q.limit(limit))
189
+ .$if(!nullsLast, (q) => q.orderBy(this.primary, direction))
190
+ .$if(!!nullsLast, (q) => q.orderBy(direction === 'asc'
191
191
  ? sql `${this.primary} asc nulls last`
192
192
  : sql `${this.primary} desc nulls last`))
193
- .if(!!keySql, (qb) => (keySql ? qb.where(keySql) : qb));
193
+ .$if(!!keySql, (qb) => (keySql ? qb.where(keySql) : qb));
194
194
  }
195
195
  }
196
196
  export class IsoTimeKey extends GenericSingleKey {
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../../src/data-plane/server/db/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { sql } from 'kysely'\nimport { ensureValidRecordKey } from '@atproto/syntax'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { AnyQb, DbRef } from './util.js'\n\ntype KeysetCursor = { primary: string; secondary: string }\ntype KeysetLabeledResult = {\n primary: string | number\n secondary: string | number\n}\n\n/**\n * The GenericKeyset is an abstract class that sets-up the interface and partial implementation\n * of a keyset-paginated cursor with two parts. There are three types involved:\n * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.\n * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }\n * - LabeledResult: a Result processed such that the \"primary\" and \"secondary\" parts of the cursor are labeled.\n * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }\n * - Cursor: the two string parts that make-up the packed/string cursor.\n * - E.g. packed cursor '1641038400000__bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }\n *\n * These types relate as such. Implementers define the relations marked with a *:\n * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor\n * ↳ SQL Condition\n */\nexport abstract class GenericKeyset<R, LR extends KeysetLabeledResult> {\n constructor(\n public primary: DbRef,\n public secondary: DbRef,\n ) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): KeysetCursor\n abstract cursorToLabeledResult(cursor: KeysetCursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: KeysetCursor): string | undefined {\n if (!cursor) return\n return `${cursor.primary}__${cursor.secondary}`\n }\n unpackCursor(cursorStr?: string): KeysetCursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('__')\n const [primary, secondary, ...others] = result\n if (!primary || !secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n if (tryIndex) {\n // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.\n if (direction === 'asc') {\n return sql`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the \"or\" usage.\n if (direction === 'asc') {\n return sql`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n paginate<QB extends AnyQb>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n tryIndex?: boolean\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n ): QB {\n const { limit, cursor, direction = 'desc', tryIndex, nullsLast } = opts\n const keysetSql = this.getSql(this.unpack(cursor), direction, tryIndex)\n return qb\n .if(!!limit, (q) => q.limit(limit as number))\n .if(!nullsLast, (q) =>\n q.orderBy(this.primary, direction).orderBy(this.secondary, direction),\n )\n .if(!!nullsLast, (q) =>\n q\n .orderBy(\n direction === 'asc'\n ? sql`${this.primary} asc nulls last`\n : sql`${this.primary} desc nulls last`,\n )\n .orderBy(\n direction === 'asc'\n ? sql`${this.secondary} asc nulls last`\n : sql`${this.secondary} desc nulls last`,\n ),\n )\n .if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB\n }\n}\n\ntype SortAtCidResult = { sortAt: string; cid: string }\ntype TimeCidLabeledResult = KeysetCursor\n\nexport class TimeCidKeyset<\n TimeCidResult = SortAtCidResult,\n> extends GenericKeyset<TimeCidResult, TimeCidLabeledResult> {\n labelResult(result: TimeCidResult): TimeCidLabeledResult\n labelResult<TimeCidResult extends SortAtCidResult>(result: TimeCidResult) {\n return { primary: result.sortAt, secondary: result.cid }\n }\n labeledResultToCursor(labeled: TimeCidLabeledResult) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: KeysetCursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\nexport class CreatedAtDidKeyset extends TimeCidKeyset<{\n createdAt: string\n did: string // dids are treated identically to cids in TimeCidKeyset\n}> {\n labelResult(result: { createdAt: string; did: string }) {\n return { primary: result.createdAt, secondary: result.did }\n }\n}\n\nexport class IndexedAtDidKeyset extends TimeCidKeyset<{\n indexedAt: string\n did: string // dids are treated identically to cids in TimeCidKeyset\n}> {\n labelResult(result: { indexedAt: string; did: string }) {\n return { primary: result.indexedAt, secondary: result.did }\n }\n}\n\n/**\n * This is being deprecated. Use {@link GenericKeyset#paginate} instead.\n */\nexport const paginate = <\n QB extends AnyQb,\n K extends GenericKeyset<unknown, any>,\n>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n keyset: K\n tryIndex?: boolean\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n): QB => {\n return opts.keyset.paginate(qb, opts)\n}\n\ntype SingleKeyCursor = {\n primary: string\n}\n\ntype SingleKeyLabeledResult = {\n primary: string | number\n}\n\n/**\n * GenericSingleKey is similar to {@link GenericKeyset} but for a single key cursor.\n */\nexport abstract class GenericSingleKey<R, LR extends SingleKeyLabeledResult> {\n constructor(public primary: DbRef) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): SingleKeyCursor\n abstract cursorToLabeledResult(cursor: SingleKeyCursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: SingleKeyCursor): string | undefined {\n if (!cursor) return\n return cursor.primary\n }\n unpackCursor(cursorStr?: string): SingleKeyCursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('__')\n const [primary, ...others] = result\n if (!primary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc') {\n if (labeled === undefined) return\n if (direction === 'asc') {\n return sql`${this.primary} > ${labeled.primary}`\n }\n return sql`${this.primary} < ${labeled.primary}`\n }\n paginate<QB extends AnyQb>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n ): QB {\n const { limit, cursor, direction = 'desc', nullsLast } = opts\n const keySql = this.getSql(this.unpack(cursor), direction)\n return qb\n .if(!!limit, (q) => q.limit(limit as number))\n .if(!nullsLast, (q) => q.orderBy(this.primary, direction))\n .if(!!nullsLast, (q) =>\n q.orderBy(\n direction === 'asc'\n ? sql`${this.primary} asc nulls last`\n : sql`${this.primary} desc nulls last`,\n ),\n )\n .if(!!keySql, (qb) => (keySql ? qb.where(keySql) : qb)) as QB\n }\n}\n\ntype SortAtResult = { sortAt: string }\ntype TimeLabeledResult = SingleKeyCursor\n\nexport class IsoTimeKey<TimeResult = SortAtResult> extends GenericSingleKey<\n TimeResult,\n TimeLabeledResult\n> {\n labelResult(result: TimeResult): TimeLabeledResult\n labelResult<TimeResult extends SortAtResult>(result: TimeResult) {\n return { primary: result.sortAt }\n }\n labeledResultToCursor(labeled: TimeLabeledResult) {\n return {\n primary: new Date(labeled.primary).toISOString(),\n }\n }\n cursorToLabeledResult(cursor: SingleKeyCursor) {\n const primaryDate = new Date(cursor.primary)\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n }\n }\n}\n\nexport class IsoSortAtKey extends IsoTimeKey<{\n sortAt: string\n}> {\n labelResult(result: { sortAt: string }) {\n return { primary: result.sortAt }\n }\n}\n\nexport class IsoUpdatedAtKey extends IsoTimeKey<{\n updatedAt: string\n}> {\n labelResult(result: { updatedAt: string }) {\n return { primary: result.updatedAt }\n }\n}\n\ntype KeyResult = { key: string }\ntype RkeyLabeledResult = SingleKeyCursor\n\nexport class RkeyKey<RkeyResult = KeyResult> extends GenericSingleKey<\n RkeyResult,\n RkeyLabeledResult\n> {\n labelResult(result: RkeyResult): RkeyLabeledResult\n labelResult<RkeyResult extends KeyResult>(result: RkeyResult) {\n return { primary: result }\n }\n labeledResultToCursor(labeled: RkeyLabeledResult) {\n return {\n primary: labeled.primary,\n }\n }\n cursorToLabeledResult(cursor: SingleKeyCursor) {\n try {\n ensureValidRecordKey(cursor.primary)\n return {\n primary: cursor.primary,\n }\n } catch {\n throw new InvalidRequestError('Malformed cursor')\n }\n }\n}\n\nexport class StashKeyKey extends RkeyKey<{\n key: string\n}> {\n labelResult(result: { key: string }) {\n return { primary: result.key }\n }\n}\n"]}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../../src/data-plane/server/db/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { SqlBool, sql } from 'kysely'\nimport { ensureValidRecordKey } from '@atproto/syntax'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { AnyQb, DbRef } from './util.js'\n\ntype KeysetCursor = { primary: string; secondary: string }\ntype KeysetLabeledResult = {\n primary: string | number\n secondary: string | number\n}\n\n/**\n * The GenericKeyset is an abstract class that sets-up the interface and partial implementation\n * of a keyset-paginated cursor with two parts. There are three types involved:\n * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.\n * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }\n * - LabeledResult: a Result processed such that the \"primary\" and \"secondary\" parts of the cursor are labeled.\n * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }\n * - Cursor: the two string parts that make-up the packed/string cursor.\n * - E.g. packed cursor '1641038400000__bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }\n *\n * These types relate as such. Implementers define the relations marked with a *:\n * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor\n * ↳ SQL Condition\n */\nexport abstract class GenericKeyset<R, LR extends KeysetLabeledResult> {\n constructor(\n public primary: DbRef,\n public secondary: DbRef,\n ) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): KeysetCursor\n abstract cursorToLabeledResult(cursor: KeysetCursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: KeysetCursor): string | undefined {\n if (!cursor) return\n return `${cursor.primary}__${cursor.secondary}`\n }\n unpackCursor(cursorStr?: string): KeysetCursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('__')\n const [primary, secondary, ...others] = result\n if (!primary || !secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n if (tryIndex) {\n // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the \"or\" usage.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n paginate<QB extends AnyQb>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n tryIndex?: boolean\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n ): QB {\n const { limit, cursor, direction = 'desc', tryIndex, nullsLast } = opts\n const keysetSql = this.getSql(this.unpack(cursor), direction, tryIndex)\n return qb\n .$if(!!limit, (q) => q.limit(limit as number))\n .$if(!nullsLast, (q) =>\n q.orderBy(this.primary, direction).orderBy(this.secondary, direction),\n )\n .$if(!!nullsLast, (q) =>\n q\n .orderBy(\n direction === 'asc'\n ? sql`${this.primary} asc nulls last`\n : sql`${this.primary} desc nulls last`,\n )\n .orderBy(\n direction === 'asc'\n ? sql`${this.secondary} asc nulls last`\n : sql`${this.secondary} desc nulls last`,\n ),\n )\n .$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB\n }\n}\n\ntype SortAtCidResult = { sortAt: string; cid: string }\ntype TimeCidLabeledResult = KeysetCursor\n\nexport class TimeCidKeyset<\n TimeCidResult = SortAtCidResult,\n> extends GenericKeyset<TimeCidResult, TimeCidLabeledResult> {\n labelResult(result: TimeCidResult): TimeCidLabeledResult\n labelResult<TimeCidResult extends SortAtCidResult>(result: TimeCidResult) {\n return { primary: result.sortAt, secondary: result.cid }\n }\n labeledResultToCursor(labeled: TimeCidLabeledResult) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: KeysetCursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\nexport class CreatedAtDidKeyset extends TimeCidKeyset<{\n createdAt: string\n did: string // dids are treated identically to cids in TimeCidKeyset\n}> {\n labelResult(result: { createdAt: string; did: string }) {\n return { primary: result.createdAt, secondary: result.did }\n }\n}\n\nexport class IndexedAtDidKeyset extends TimeCidKeyset<{\n indexedAt: string\n did: string // dids are treated identically to cids in TimeCidKeyset\n}> {\n labelResult(result: { indexedAt: string; did: string }) {\n return { primary: result.indexedAt, secondary: result.did }\n }\n}\n\n/**\n * This is being deprecated. Use {@link GenericKeyset#paginate} instead.\n */\nexport const paginate = <\n QB extends AnyQb,\n K extends GenericKeyset<unknown, any>,\n>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n keyset: K\n tryIndex?: boolean\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n): QB => {\n return opts.keyset.paginate(qb, opts)\n}\n\ntype SingleKeyCursor = {\n primary: string\n}\n\ntype SingleKeyLabeledResult = {\n primary: string | number\n}\n\n/**\n * GenericSingleKey is similar to {@link GenericKeyset} but for a single key cursor.\n */\nexport abstract class GenericSingleKey<R, LR extends SingleKeyLabeledResult> {\n constructor(public primary: DbRef) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): SingleKeyCursor\n abstract cursorToLabeledResult(cursor: SingleKeyCursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: SingleKeyCursor): string | undefined {\n if (!cursor) return\n return cursor.primary\n }\n unpackCursor(cursorStr?: string): SingleKeyCursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('__')\n const [primary, ...others] = result\n if (!primary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc') {\n if (labeled === undefined) return\n if (direction === 'asc') {\n return sql<SqlBool>`${this.primary} > ${labeled.primary}`\n }\n return sql<SqlBool>`${this.primary} < ${labeled.primary}`\n }\n paginate<QB extends AnyQb>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n ): QB {\n const { limit, cursor, direction = 'desc', nullsLast } = opts\n const keySql = this.getSql(this.unpack(cursor), direction)\n return qb\n .$if(!!limit, (q) => q.limit(limit as number))\n .$if(!nullsLast, (q) => q.orderBy(this.primary, direction))\n .$if(!!nullsLast, (q) =>\n q.orderBy(\n direction === 'asc'\n ? sql`${this.primary} asc nulls last`\n : sql`${this.primary} desc nulls last`,\n ),\n )\n .$if(!!keySql, (qb) => (keySql ? qb.where(keySql) : qb)) as QB\n }\n}\n\ntype SortAtResult = { sortAt: string }\ntype TimeLabeledResult = SingleKeyCursor\n\nexport class IsoTimeKey<TimeResult = SortAtResult> extends GenericSingleKey<\n TimeResult,\n TimeLabeledResult\n> {\n labelResult(result: TimeResult): TimeLabeledResult\n labelResult<TimeResult extends SortAtResult>(result: TimeResult) {\n return { primary: result.sortAt }\n }\n labeledResultToCursor(labeled: TimeLabeledResult) {\n return {\n primary: new Date(labeled.primary).toISOString(),\n }\n }\n cursorToLabeledResult(cursor: SingleKeyCursor) {\n const primaryDate = new Date(cursor.primary)\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n }\n }\n}\n\nexport class IsoSortAtKey extends IsoTimeKey<{\n sortAt: string\n}> {\n labelResult(result: { sortAt: string }) {\n return { primary: result.sortAt }\n }\n}\n\nexport class IsoUpdatedAtKey extends IsoTimeKey<{\n updatedAt: string\n}> {\n labelResult(result: { updatedAt: string }) {\n return { primary: result.updatedAt }\n }\n}\n\ntype KeyResult = { key: string }\ntype RkeyLabeledResult = SingleKeyCursor\n\nexport class RkeyKey<RkeyResult = KeyResult> extends GenericSingleKey<\n RkeyResult,\n RkeyLabeledResult\n> {\n labelResult(result: RkeyResult): RkeyLabeledResult\n labelResult<RkeyResult extends KeyResult>(result: RkeyResult) {\n return { primary: result }\n }\n labeledResultToCursor(labeled: RkeyLabeledResult) {\n return {\n primary: labeled.primary,\n }\n }\n cursorToLabeledResult(cursor: SingleKeyCursor) {\n try {\n ensureValidRecordKey(cursor.primary)\n return {\n primary: cursor.primary,\n }\n } catch {\n throw new InvalidRequestError('Malformed cursor')\n }\n }\n}\n\nexport class StashKeyKey extends RkeyKey<{\n key: string\n}> {\n labelResult(result: { key: string }) {\n return { primary: result.key }\n }\n}\n"]}
@@ -1,21 +1,21 @@
1
- import { DummyDriver, DynamicModule, ExpressionBuilder, RawBuilder, SelectQueryBuilder, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'kysely';
1
+ import { DummyDriver, DynamicModule, ExpressionBuilder, RawBuilder, SelectQueryBuilder, SqlBool, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'kysely';
2
2
  import { DatabaseSchema, DatabaseSchemaType } from './database-schema.js';
3
3
  export declare const actorWhereClause: (actor: string) => RawBuilder<0 | 1>;
4
- export declare const notSoftDeletedClause: (alias: DbRef) => RawBuilder<unknown>;
4
+ export declare const notSoftDeletedClause: (alias: DbRef) => RawBuilder<SqlBool>;
5
5
  export declare const softDeleted: (actorOrRecord: {
6
6
  takedownRef: string | null;
7
7
  }) => boolean;
8
8
  export declare const countAll: RawBuilder<number>;
9
9
  export declare const excluded: <T>(db: DatabaseSchema, col: any) => RawBuilder<T>;
10
- export declare const noMatch: RawBuilder<unknown>;
11
- export declare const valuesList: (vals: unknown[]) => RawBuilder<unknown>;
10
+ export declare const noMatch: RawBuilder<SqlBool>;
11
+ export declare const valuesList: <T = unknown>(vals: unknown[]) => RawBuilder<T>;
12
12
  export declare const dummyDialect: {
13
13
  createAdapter(): SqliteAdapter;
14
14
  createDriver(): DummyDriver;
15
15
  createIntrospector(db: any): SqliteIntrospector;
16
16
  createQueryCompiler(): SqliteQueryCompiler;
17
17
  };
18
- export type DbRef = RawBuilder | ReturnType<DynamicModule['ref']>;
18
+ export type DbRef = RawBuilder<unknown> | ReturnType<DynamicModule<unknown>['ref']>;
19
19
  export type Subquery = ExpressionBuilder<DatabaseSchemaType, any>;
20
20
  export type AnyQb = SelectQueryBuilder<any, any, any>;
21
21
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/db/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzE,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,sBAM7C,CAAA;AAGD,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,wBAEhD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,eAAe;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,YAExE,CAAA;AAED,eAAO,MAAM,QAAQ,oBAAwB,CAAA;AAG7C,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,IAAI,cAAc,EAAE,QAAG,kBAElD,CAAA;AAED,eAAO,MAAM,OAAO,qBAAa,CAAA;AAGjC,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,EAAE,wBAEzC,CAAA;AAED,eAAO,MAAM,YAAY;;;;;CAaxB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AAEjE,MAAM,MAAM,QAAQ,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAEjE,MAAM,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/db/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzE,eAAO,MAAM,gBAAgB,UAAW,MAAM,sBAM7C,CAAA;AAGD,eAAO,MAAM,oBAAoB,UAAW,KAAK,wBAEhD,CAAA;AAED,eAAO,MAAM,WAAW,kBAAmB;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,YAExE,CAAA;AAED,eAAO,MAAM,QAAQ,oBAAwB,CAAA;AAG7C,eAAO,MAAM,QAAQ,GAAI,CAAC,MAAM,cAAc,4BAE7C,CAAA;AAED,eAAO,MAAM,OAAO,qBAAsB,CAAA;AAG1C,eAAO,MAAM,UAAU,GAAI,CAAC,GAAG,OAAO,QAAQ,OAAO,EAAE,kBAEtD,CAAA;AAED,eAAO,MAAM,YAAY;;;;;CAaxB,CAAA;AAED,MAAM,MAAM,KAAK,GACb,UAAU,CAAC,OAAO,CAAC,GACnB,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,QAAQ,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAEjE,MAAM,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/data-plane/server/db/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAKX,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,GAAG,GACJ,MAAM,QAAQ,CAAA;AAGf,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;IAChD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAO,mBAAmB,KAAK,EAAE,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAO,sBAAsB,KAAK,EAAE,CAAA;IAChD,CAAC;AACH,CAAC,CAAA;AAED,mCAAmC;AACnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAE,EAAE;IACnD,OAAO,GAAG,CAAA,GAAG,KAAK,wBAAwB,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,aAA6C,EAAE,EAAE;IAC3E,OAAO,aAAa,CAAC,WAAW,KAAK,IAAI,CAAA;AAC3C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAQ,UAAU,CAAA;AAE7C,6BAA6B;AAC7B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,EAAkB,EAAE,GAAG,EAAE,EAAE;IACrD,OAAO,GAAG,CAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAA,OAAO,CAAA;AAEjC,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAe,EAAE,EAAE;IAC5C,OAAO,GAAG,CAAA,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAA,MAAM,CAAC,IAAI,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa;QACX,OAAO,IAAI,aAAa,EAAE,CAAA;IAC5B,CAAC;IACD,YAAY;QACV,OAAO,IAAI,WAAW,EAAE,CAAA;IAC1B,CAAC;IACD,kBAAkB,CAAC,EAAE;QACnB,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,mBAAmB;QACjB,OAAO,IAAI,mBAAmB,EAAE,CAAA;IAClC,CAAC;CACF,CAAA","sourcesContent":["import {\n DummyDriver,\n DynamicModule,\n ExpressionBuilder,\n RawBuilder,\n SelectQueryBuilder,\n SqliteAdapter,\n SqliteIntrospector,\n SqliteQueryCompiler,\n sql,\n} from 'kysely'\nimport { DatabaseSchema, DatabaseSchemaType } from './database-schema.js'\n\nexport const actorWhereClause = (actor: string) => {\n if (actor.startsWith('did:')) {\n return sql<0 | 1>`\"actor\".\"did\" = ${actor}`\n } else {\n return sql<0 | 1>`\"actor\".\"handle\" = ${actor}`\n }\n}\n\n// Applies to actor or record table\nexport const notSoftDeletedClause = (alias: DbRef) => {\n return sql`${alias}.\"takedownRef\" is null`\n}\n\nexport const softDeleted = (actorOrRecord: { takedownRef: string | null }) => {\n return actorOrRecord.takedownRef !== null\n}\n\nexport const countAll = sql<number>`count(*)`\n\n// For use with doUpdateSet()\nexport const excluded = <T>(db: DatabaseSchema, col) => {\n return sql<T>`${db.dynamic.ref(`excluded.${col}`)}`\n}\n\nexport const noMatch = sql`1 = 0`\n\n// Can be useful for large where-in clauses, to get the db to use a hash lookup on the list\nexport const valuesList = (vals: unknown[]) => {\n return sql`(values (${sql.join(vals, sql`), (`)}))`\n}\n\nexport const dummyDialect = {\n createAdapter() {\n return new SqliteAdapter()\n },\n createDriver() {\n return new DummyDriver()\n },\n createIntrospector(db) {\n return new SqliteIntrospector(db)\n },\n createQueryCompiler() {\n return new SqliteQueryCompiler()\n },\n}\n\nexport type DbRef = RawBuilder | ReturnType<DynamicModule['ref']>\n\nexport type Subquery = ExpressionBuilder<DatabaseSchemaType, any>\n\nexport type AnyQb = SelectQueryBuilder<any, any, any>\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/data-plane/server/db/util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAMX,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,GAAG,GACJ,MAAM,QAAQ,CAAA;AAGf,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;IAChD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAO,mBAAmB,KAAK,EAAE,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAO,sBAAsB,KAAK,EAAE,CAAA;IAChD,CAAC;AACH,CAAC,CAAA;AAED,mCAAmC;AACnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAE,EAAE;IACnD,OAAO,GAAG,CAAS,GAAG,KAAK,wBAAwB,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,aAA6C,EAAE,EAAE;IAC3E,OAAO,aAAa,CAAC,WAAW,KAAK,IAAI,CAAA;AAC3C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAQ,UAAU,CAAA;AAE7C,6BAA6B;AAC7B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,EAAkB,EAAE,GAAG,EAAE,EAAE;IACrD,OAAO,GAAG,CAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAS,OAAO,CAAA;AAE1C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAc,IAAe,EAAE,EAAE;IACzD,OAAO,GAAG,CAAG,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAA,MAAM,CAAC,IAAI,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa;QACX,OAAO,IAAI,aAAa,EAAE,CAAA;IAC5B,CAAC;IACD,YAAY;QACV,OAAO,IAAI,WAAW,EAAE,CAAA;IAC1B,CAAC;IACD,kBAAkB,CAAC,EAAE;QACnB,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,mBAAmB;QACjB,OAAO,IAAI,mBAAmB,EAAE,CAAA;IAClC,CAAC;CACF,CAAA","sourcesContent":["import {\n DummyDriver,\n DynamicModule,\n ExpressionBuilder,\n RawBuilder,\n SelectQueryBuilder,\n SqlBool,\n SqliteAdapter,\n SqliteIntrospector,\n SqliteQueryCompiler,\n sql,\n} from 'kysely'\nimport { DatabaseSchema, DatabaseSchemaType } from './database-schema.js'\n\nexport const actorWhereClause = (actor: string) => {\n if (actor.startsWith('did:')) {\n return sql<0 | 1>`\"actor\".\"did\" = ${actor}`\n } else {\n return sql<0 | 1>`\"actor\".\"handle\" = ${actor}`\n }\n}\n\n// Applies to actor or record table\nexport const notSoftDeletedClause = (alias: DbRef) => {\n return sql<SqlBool>`${alias}.\"takedownRef\" is null`\n}\n\nexport const softDeleted = (actorOrRecord: { takedownRef: string | null }) => {\n return actorOrRecord.takedownRef !== null\n}\n\nexport const countAll = sql<number>`count(*)`\n\n// For use with doUpdateSet()\nexport const excluded = <T>(db: DatabaseSchema, col) => {\n return sql<T>`${db.dynamic.ref(`excluded.${col}`)}`\n}\n\nexport const noMatch = sql<SqlBool>`1 = 0`\n\n// Can be useful for large where-in clauses, to get the db to use a hash lookup on the list\nexport const valuesList = <T = unknown>(vals: unknown[]) => {\n return sql<T>`(values (${sql.join(vals, sql`), (`)}))`\n}\n\nexport const dummyDialect = {\n createAdapter() {\n return new SqliteAdapter()\n },\n createDriver() {\n return new DummyDriver()\n },\n createIntrospector(db) {\n return new SqliteIntrospector(db)\n },\n createQueryCompiler() {\n return new SqliteQueryCompiler()\n },\n}\n\nexport type DbRef =\n | RawBuilder<unknown>\n | ReturnType<DynamicModule<unknown>['ref']>\n\nexport type Subquery = ExpressionBuilder<DatabaseSchemaType, any>\n\nexport type AnyQb = SelectQueryBuilder<any, any, any>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data-plane/server/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAGxD,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,qBAAa,eAAe;IAEjB,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,UAAU,EAAE,UAAU;gBADtB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,UAAU,EAAE,UAAU;WAGlB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAWzD,OAAO;CAWd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data-plane/server/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAGxD,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,qBAAa,eAAe;IAEjB,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,UAAU,EAAE,UAAU;IAF/B,YACS,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,UAAU,EAAE,UAAU,EAC3B;IAEJ,OAAa,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,4BAS9D;IAEK,OAAO,kBAUZ;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-plane/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,OAAO,eAAe;IAC1B,YACS,MAAmB,EACnB,UAAsB;QADtB,WAAM,GAAN,MAAM,CAAa;QACnB,eAAU,GAAV,UAAU,CAAY;IAC5B,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAY,EAAE,IAAY,EAAE,MAAe;QAC7D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;QACrB,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAClC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAC3C,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACtC,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAA;gBACX,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF","sourcesContent":["import events from 'node:events'\nimport http from 'node:http'\nimport { expressConnectMiddleware } from '@connectrpc/connect-express'\nimport express from 'express'\nimport { IdResolver, MemoryCache } from '@atproto/identity'\nimport { Database, DatabaseSchema } from './db/index.js'\nimport createRoutes from './routes/index.js'\n\nexport type { DatabaseSchema }\n\nexport { RepoSubscription } from './subscription.js'\n\nexport class DataPlaneServer {\n constructor(\n public server: http.Server,\n public idResolver: IdResolver,\n ) {}\n\n static async create(db: Database, port: number, plcUrl?: string) {\n const app = express()\n const didCache = new MemoryCache()\n const idResolver = new IdResolver({ plcUrl, didCache })\n const routes = createRoutes(db, idResolver)\n app.use(expressConnectMiddleware({ routes }))\n const server = app.listen(port)\n await events.once(server, 'listening')\n return new DataPlaneServer(server, idResolver)\n }\n\n async destroy() {\n return new Promise<void>((resolve, reject) => {\n this.server.close((err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data-plane/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,OAAO,eAAe;IAC1B,YACS,MAAmB,EACnB,UAAsB;sBADtB,MAAM;0BACN,UAAU;IAChB,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAY,EAAE,IAAY,EAAE,MAAe;QAC7D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;QACrB,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAClC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAC3C,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACtC,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAA;gBACX,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF","sourcesContent":["import events from 'node:events'\nimport http from 'node:http'\nimport { expressConnectMiddleware } from '@connectrpc/connect-express'\nimport express from 'express'\nimport { IdResolver, MemoryCache } from '@atproto/identity'\nimport { Database, DatabaseSchema } from './db/index.js'\nimport createRoutes from './routes/index.js'\n\nexport type { DatabaseSchema }\n\nexport { RepoSubscription } from './subscription.js'\n\nexport class DataPlaneServer {\n constructor(\n public server: http.Server,\n public idResolver: IdResolver,\n ) {}\n\n static async create(db: Database, port: number, plcUrl?: string) {\n const app = express()\n const didCache = new MemoryCache()\n const idResolver = new IdResolver({ plcUrl, didCache })\n const routes = createRoutes(db, idResolver)\n app.use(expressConnectMiddleware({ routes }))\n const server = app.listen(port)\n await events.once(server, 'listening')\n return new DataPlaneServer(server, idResolver)\n }\n\n async destroy() {\n return new Promise<void>((resolve, reject) => {\n this.server.close((err) => {\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n }\n}\n"]}
@@ -63,104 +63,59 @@ export declare class IndexingService {
63
63
  cid: Cid;
64
64
  }>>;
65
65
  setCommitLastSeen(did: string, commit: Cid, rev: string): Promise<void>;
66
- findIndexerForCollection(collection: string): import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.block", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/block.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/block.defs.js").Main, "$type">>>, {
67
- uri: string;
66
+ findIndexerForCollection(collection: string): import("./processor.js").RecordProcessor<l.RecordSchema<"any", "app.bsky.feed.generator", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/generator.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/generator.defs.js").Main, "$type">>>, {
67
+ avatarCid: string | null;
68
68
  cid: string;
69
- indexedAt: string;
70
- creator: string;
71
69
  createdAt: string;
72
- sortAt: string;
73
- subjectDid: string;
74
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "chat.bsky.actor.declaration", l.Validator<Omit<import("../../../lexicons/chat/bsky/actor/declaration.defs.js").Main, "$type">, Omit<import("../../../lexicons/chat/bsky/actor/declaration.defs.js").Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"any", "app.bsky.feed.generator", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/generator.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/generator.defs.js").Main, "$type">>>, {
75
- uri: string;
76
- cid: string;
77
- indexedAt: string;
78
70
  creator: string;
79
- displayName: string;
80
71
  description: string | null;
81
- avatarCid: string | null;
82
- createdAt: string;
83
- sortAt: string;
84
- feedDid: string;
85
72
  descriptionFacets: string | null;
86
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.follow", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/follow.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/follow.defs.js").Main, "$type">>>, {
87
- uri: string;
88
- cid: string;
73
+ displayName: string;
74
+ feedDid: string;
89
75
  indexedAt: string;
90
- creator: string;
91
- createdAt: string;
92
76
  sortAt: string;
93
- subjectDid: string;
94
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "com.germnetwork.declaration", l.Validator<Omit<com.germnetwork.declaration.Main, "$type">, Omit<com.germnetwork.declaration.Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.labeler.service", l.Validator<Omit<import("../../../lexicons/app/bsky/labeler/service.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/labeler/service.defs.js").Main, "$type">>>, {
95
77
  uri: string;
78
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.actor.profile", l.Validator<Omit<import("../../../lexicons/app/bsky/actor/profile.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/actor/profile.defs.js").Main, "$type">>>, import("../db/tables/profile.js").Profile> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.actor.status", l.Validator<Omit<import("../../../lexicons/app/bsky/actor/status.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/actor/status.defs.js").Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.labeler.service", l.Validator<Omit<import("../../../lexicons/app/bsky/labeler/service.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/labeler/service.defs.js").Main, "$type">>>, {
96
79
  cid: string;
97
- indexedAt: string;
98
- creator: string;
99
80
  createdAt: string;
81
+ creator: string;
82
+ indexedAt: string;
100
83
  sortAt: string;
101
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.like", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/like.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/like.defs.js").Main, "$type">>>, {
102
84
  uri: string;
85
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.notification.declaration", l.Validator<Omit<import("../../../lexicons/app/bsky/notification/declaration.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/notification/declaration.defs.js").Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "chat.bsky.actor.declaration", l.Validator<Omit<import("../../../lexicons/chat/bsky/actor/declaration.defs.js").Main, "$type">, Omit<import("../../../lexicons/chat/bsky/actor/declaration.defs.js").Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "com.germnetwork.declaration", l.Validator<Omit<com.germnetwork.declaration.Main, "$type">, Omit<com.germnetwork.declaration.Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.like", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/like.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/like.defs.js").Main, "$type">>>, {
103
86
  cid: string;
104
- indexedAt: string;
105
- creator: string;
106
87
  createdAt: string;
88
+ creator: string;
89
+ indexedAt: string;
107
90
  sortAt: string;
108
91
  subject: string;
109
92
  subjectCid: string;
93
+ uri: string;
110
94
  via: string | null;
111
95
  viaCid: string | null;
112
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.listblock", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/listblock.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/listblock.defs.js").Main, "$type">>>, {
113
- uri: string;
114
- cid: string;
115
- indexedAt: string;
116
- creator: string;
117
- createdAt: string;
118
- sortAt: string;
119
- subjectUri: string;
120
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.listitem", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/listitem.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/listitem.defs.js").Main, "$type">>>, {
121
- uri: string;
122
- cid: string;
123
- indexedAt: string;
124
- creator: string;
125
- createdAt: string;
126
- sortAt: string;
127
- subjectDid: string;
128
- listUri: string;
129
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.list", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/list.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/list.defs.js").Main, "$type">>>, {
130
- uri: string;
131
- cid: string;
132
- indexedAt: string;
133
- creator: string;
134
- description: string | null;
135
- avatarCid: string | null;
136
- createdAt: string;
137
- sortAt: string;
138
- descriptionFacets: string | null;
139
- name: string;
140
- purpose: string;
141
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.notification.declaration", l.Validator<Omit<import("../../../lexicons/app/bsky/notification/declaration.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/notification/declaration.defs.js").Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.postgate", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/postgate.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/postgate.defs.js").Main, "$type">>>, import("../db/tables/post-gate.js").Postgate> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.post", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/post.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/post.defs.js").Main, "$type">>>, {
96
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.post", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/post.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/post.defs.js").Main, "$type">>>, {
142
97
  post: {
143
- text: string;
144
- uri: string;
145
98
  cid: string;
146
- indexedAt: string;
99
+ createdAt: string;
147
100
  creator: string;
148
- replyRoot: string | null;
149
- replyRootCid: string | null;
101
+ hasPostGate: boolean | null;
102
+ hasThreadGate: boolean | null;
103
+ indexedAt: string;
104
+ invalidReplyRoot: boolean | null;
105
+ langs: string[] | null;
150
106
  replyParent: string | null;
151
107
  replyParentCid: string | null;
152
- createdAt: string;
108
+ replyRoot: string | null;
109
+ replyRootCid: string | null;
153
110
  sortAt: string;
154
- langs: string[] | null;
155
- invalidReplyRoot: boolean | null;
156
- violatesThreadGate: boolean | null;
157
111
  tags: string[] | null;
112
+ text: string;
113
+ uri: string;
158
114
  violatesEmbeddingRules: boolean | null;
159
- hasThreadGate: boolean | null;
160
- hasPostGate: boolean | null;
115
+ violatesThreadGate: boolean | null;
161
116
  };
162
117
  facets?: {
163
- type: "mention" | "link";
118
+ type: 'mention' | 'link';
164
119
  value: string;
165
120
  }[];
166
121
  embeds?: (import("../db/tables/post-embed.js").PostEmbedImage[] | import("../db/tables/post-embed.js").PostEmbedExternal | import("../db/tables/post-embed.js").PostEmbedRecord | import("../db/tables/post-embed.js").PostEmbedVideo | import("../db/tables/post-embed.js").PostEmbedGalleryImage[])[];
@@ -176,36 +131,81 @@ export declare class IndexingService {
176
131
  sortAt: string;
177
132
  }[];
178
133
  threadgate?: import("../../../lexicons/app/bsky/feed/threadgate.defs.js").Main;
179
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.actor.profile", l.Validator<Omit<import("../../../lexicons/app/bsky/actor/profile.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/actor/profile.defs.js").Main, "$type">>>, import("../db/tables/profile.js").Profile> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.repost", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/repost.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/repost.defs.js").Main, "$type">>>, {
180
- uri: string;
134
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.postgate", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/postgate.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/postgate.defs.js").Main, "$type">>>, import("../db/tables/post-gate.js").Postgate> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.repost", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/repost.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/repost.defs.js").Main, "$type">>>, {
181
135
  cid: string;
182
- indexedAt: string;
183
- creator: string;
184
136
  createdAt: string;
137
+ creator: string;
138
+ indexedAt: string;
185
139
  sortAt: string;
186
140
  subject: string;
187
141
  subjectCid: string;
142
+ uri: string;
188
143
  via: string | null;
189
144
  viaCid: string | null;
190
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.starterpack", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/starterpack.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/starterpack.defs.js").Main, "$type">>>, {
145
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.threadgate", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/threadgate.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/threadgate.defs.js").Main, "$type">>>, import("../db/tables/thread-gate.js").ThreadGate> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.block", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/block.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/block.defs.js").Main, "$type">>>, {
146
+ cid: string;
147
+ createdAt: string;
148
+ creator: string;
149
+ indexedAt: string;
150
+ sortAt: string;
151
+ subjectDid: string;
191
152
  uri: string;
153
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.follow", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/follow.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/follow.defs.js").Main, "$type">>>, {
154
+ cid: string;
155
+ createdAt: string;
156
+ creator: string;
157
+ indexedAt: string;
158
+ sortAt: string;
159
+ subjectDid: string;
160
+ uri: string;
161
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.list", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/list.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/list.defs.js").Main, "$type">>>, {
162
+ avatarCid: string | null;
192
163
  cid: string;
164
+ createdAt: string;
165
+ creator: string;
166
+ description: string | null;
167
+ descriptionFacets: string | null;
193
168
  indexedAt: string;
169
+ name: string;
170
+ purpose: string;
171
+ sortAt: string;
172
+ uri: string;
173
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.listblock", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/listblock.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/listblock.defs.js").Main, "$type">>>, {
174
+ cid: string;
175
+ createdAt: string;
194
176
  creator: string;
177
+ indexedAt: string;
178
+ sortAt: string;
179
+ subjectUri: string;
180
+ uri: string;
181
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.listitem", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/listitem.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/listitem.defs.js").Main, "$type">>>, {
182
+ cid: string;
195
183
  createdAt: string;
184
+ creator: string;
185
+ indexedAt: string;
186
+ listUri: string;
196
187
  sortAt: string;
197
- name: string;
198
- }> | import("./processor.js").RecordProcessor<l.RecordSchema<"literal:self", "app.bsky.actor.status", l.Validator<Omit<import("../../../lexicons/app/bsky/actor/status.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/actor/status.defs.js").Main, "$type">>>, unknown> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.feed.threadgate", l.Validator<Omit<import("../../../lexicons/app/bsky/feed/threadgate.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/feed/threadgate.defs.js").Main, "$type">>>, import("../db/tables/thread-gate.js").ThreadGate> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.verification", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/verification.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/verification.defs.js").Main, "$type">>>, {
188
+ subjectDid: string;
199
189
  uri: string;
190
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.starterpack", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/starterpack.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/starterpack.defs.js").Main, "$type">>>, {
200
191
  cid: string;
192
+ createdAt: string;
193
+ creator: string;
201
194
  indexedAt: string;
195
+ name: string;
196
+ sortAt: string;
197
+ uri: string;
198
+ }> | import("./processor.js").RecordProcessor<l.RecordSchema<"tid", "app.bsky.graph.verification", l.Validator<Omit<import("../../../lexicons/app/bsky/graph/verification.defs.js").Main, "$type">, Omit<import("../../../lexicons/app/bsky/graph/verification.defs.js").Main, "$type">>>, {
199
+ cid: string;
200
+ createdAt: string;
202
201
  creator: string;
203
202
  displayName: string;
204
- createdAt: string;
205
- subject: string;
206
203
  handle: string;
204
+ indexedAt: string;
207
205
  rkey: string;
208
206
  sortedAt: string;
207
+ subject: string;
208
+ uri: string;
209
209
  }> | undefined;
210
210
  updateActorStatus(did: DidString, active: boolean, status?: string): Promise<void>;
211
211
  deleteActor(did: DidString): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/indexing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/indexing/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAU,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,GAAG,EAAE,CAAC,EAA4B,MAAM,cAAc,CAAA;AAC/D,OAAO,EAEL,aAAa,EAId,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAA;AAGhD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,eAAe,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,eAAe,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAA;AACpD,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AACzC,OAAO,KAAK,gBAAgB,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,UAAU,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAA;AAEzD,qBAAa,eAAe;IAwBjB,EAAE,EAAE,QAAQ;IACZ,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,eAAe;IAzBpC,OAAO,EAAE;QACP,IAAI,EAAE,IAAI,CAAC,UAAU,CAAA;QACrB,UAAU,EAAE,UAAU,CAAC,UAAU,CAAA;QACjC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAA;QAC7B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAA;QACrB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAA;QACzB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAA;QACzB,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;QAC3B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAA;QACrB,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAA;QAC7B,SAAS,EAAE,SAAS,CAAC,UAAU,CAAA;QAC/B,KAAK,EAAE,KAAK,CAAC,UAAU,CAAA;QACvB,aAAa,EAAE,aAAa,CAAC,UAAU,CAAA;QACvC,WAAW,EAAE,WAAW,CAAC,UAAU,CAAA;QACnC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAA;QAC3B,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,CAAA;QAC7C,eAAe,EAAE,eAAe,CAAC,UAAU,CAAA;QAC3C,eAAe,EAAE,eAAe,CAAC,UAAU,CAAA;QAC3C,YAAY,EAAE,YAAY,CAAC,UAAU,CAAA;QACrC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAA;KAC1B,CAAA;IAED,YACS,EAAE,EAAE,QAAQ,EACZ,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,eAAe,EAuBnC;IAED,QAAQ,CAAC,GAAG,EAAE,QAAQ,mBAGrB;IAEK,WAAW,CACf,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,EACnD,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,iBAa5D;IAEK,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,UAAQ,iBAQ/C;IAEK,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,UAAQ,iBAyC9D;IAEK,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,iBAiD9C;IAEK,iBAAiB,CAAC,GAAG,EAAE,MAAM;aAcH,KAAK;aAAO,GAAG;QAE9C;IAEK,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,iBAiB5D;IAED,wBAAwB,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAM1C;IAEK,iBAAiB,CACrB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,OAAO,EACf,MAAM,GAAE,MAAW,iBAepB;IAEK,WAAW,CAAC,GAAG,EAAE,SAAS,iBAW/B;YAEa,gBAAgB;IAexB,YAAY,CAAC,GAAG,EAAE,SAAS,iBA8EhC;CACF"}