@atproto/bsky 0.0.253 → 0.0.255

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 (899) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/api/age-assurance/index.d.ts +1 -1
  3. package/dist/api/age-assurance/index.d.ts.map +1 -1
  4. package/dist/api/age-assurance/index.js.map +1 -1
  5. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts +2 -2
  6. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts.map +1 -1
  7. package/dist/api/age-assurance/redirects/kws-age-verified.js.map +1 -1
  8. package/dist/api/age-assurance/stash.d.ts +2 -2
  9. package/dist/api/age-assurance/stash.d.ts.map +1 -1
  10. package/dist/api/age-assurance/stash.js.map +1 -1
  11. package/dist/api/age-assurance/types.d.ts +3 -3
  12. package/dist/api/age-assurance/types.d.ts.map +1 -1
  13. package/dist/api/age-assurance/types.js.map +1 -1
  14. package/dist/api/age-assurance/util.d.ts +2 -2
  15. package/dist/api/age-assurance/util.d.ts.map +1 -1
  16. package/dist/api/age-assurance/util.js.map +1 -1
  17. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts +2 -2
  18. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts.map +1 -1
  19. package/dist/api/age-assurance/webhooks/kws-age-verified.js.map +1 -1
  20. package/dist/api/app/bsky/actor/getProfile.d.ts +2 -2
  21. package/dist/api/app/bsky/actor/getProfile.d.ts.map +1 -1
  22. package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
  23. package/dist/api/app/bsky/actor/getProfiles.d.ts +2 -2
  24. package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
  25. package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
  26. package/dist/api/app/bsky/actor/getSuggestions.d.ts +2 -2
  27. package/dist/api/app/bsky/actor/getSuggestions.d.ts.map +1 -1
  28. package/dist/api/app/bsky/actor/getSuggestions.js.map +1 -1
  29. package/dist/api/app/bsky/actor/searchActors.d.ts +2 -2
  30. package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
  31. package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
  32. package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts +2 -2
  33. package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
  34. package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
  35. package/dist/api/app/bsky/ageassurance/begin.d.ts +2 -2
  36. package/dist/api/app/bsky/ageassurance/begin.d.ts.map +1 -1
  37. package/dist/api/app/bsky/ageassurance/begin.js.map +1 -1
  38. package/dist/api/app/bsky/ageassurance/getConfig.d.ts +2 -2
  39. package/dist/api/app/bsky/ageassurance/getConfig.d.ts.map +1 -1
  40. package/dist/api/app/bsky/ageassurance/getConfig.js.map +1 -1
  41. package/dist/api/app/bsky/ageassurance/getState.d.ts +2 -2
  42. package/dist/api/app/bsky/ageassurance/getState.d.ts.map +1 -1
  43. package/dist/api/app/bsky/ageassurance/getState.js.map +1 -1
  44. package/dist/api/app/bsky/bookmark/createBookmark.d.ts +2 -2
  45. package/dist/api/app/bsky/bookmark/createBookmark.d.ts.map +1 -1
  46. package/dist/api/app/bsky/bookmark/createBookmark.js.map +1 -1
  47. package/dist/api/app/bsky/bookmark/deleteBookmark.d.ts +2 -2
  48. package/dist/api/app/bsky/bookmark/deleteBookmark.d.ts.map +1 -1
  49. package/dist/api/app/bsky/bookmark/deleteBookmark.js.map +1 -1
  50. package/dist/api/app/bsky/bookmark/getBookmarks.d.ts +2 -2
  51. package/dist/api/app/bsky/bookmark/getBookmarks.d.ts.map +1 -1
  52. package/dist/api/app/bsky/bookmark/getBookmarks.js.map +1 -1
  53. package/dist/api/app/bsky/contact/dismissMatch.d.ts +2 -2
  54. package/dist/api/app/bsky/contact/dismissMatch.d.ts.map +1 -1
  55. package/dist/api/app/bsky/contact/dismissMatch.js.map +1 -1
  56. package/dist/api/app/bsky/contact/getMatches.d.ts +2 -2
  57. package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -1
  58. package/dist/api/app/bsky/contact/getMatches.js.map +1 -1
  59. package/dist/api/app/bsky/contact/getSyncStatus.d.ts +2 -2
  60. package/dist/api/app/bsky/contact/getSyncStatus.d.ts.map +1 -1
  61. package/dist/api/app/bsky/contact/getSyncStatus.js.map +1 -1
  62. package/dist/api/app/bsky/contact/importContacts.d.ts +2 -2
  63. package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -1
  64. package/dist/api/app/bsky/contact/importContacts.js.map +1 -1
  65. package/dist/api/app/bsky/contact/removeData.d.ts +2 -2
  66. package/dist/api/app/bsky/contact/removeData.d.ts.map +1 -1
  67. package/dist/api/app/bsky/contact/removeData.js.map +1 -1
  68. package/dist/api/app/bsky/contact/sendNotification.d.ts +2 -2
  69. package/dist/api/app/bsky/contact/sendNotification.d.ts.map +1 -1
  70. package/dist/api/app/bsky/contact/sendNotification.js.map +1 -1
  71. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts +2 -2
  72. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts.map +1 -1
  73. package/dist/api/app/bsky/contact/startPhoneVerification.js.map +1 -1
  74. package/dist/api/app/bsky/contact/util.d.ts +2 -2
  75. package/dist/api/app/bsky/contact/util.d.ts.map +1 -1
  76. package/dist/api/app/bsky/contact/util.js.map +1 -1
  77. package/dist/api/app/bsky/contact/verifyPhone.d.ts +2 -2
  78. package/dist/api/app/bsky/contact/verifyPhone.d.ts.map +1 -1
  79. package/dist/api/app/bsky/contact/verifyPhone.js.map +1 -1
  80. package/dist/api/app/bsky/draft/createDraft.d.ts +2 -2
  81. package/dist/api/app/bsky/draft/createDraft.d.ts.map +1 -1
  82. package/dist/api/app/bsky/draft/createDraft.js.map +1 -1
  83. package/dist/api/app/bsky/draft/deleteDraft.d.ts +2 -2
  84. package/dist/api/app/bsky/draft/deleteDraft.d.ts.map +1 -1
  85. package/dist/api/app/bsky/draft/deleteDraft.js.map +1 -1
  86. package/dist/api/app/bsky/draft/getDrafts.d.ts +2 -2
  87. package/dist/api/app/bsky/draft/getDrafts.d.ts.map +1 -1
  88. package/dist/api/app/bsky/draft/getDrafts.js.map +1 -1
  89. package/dist/api/app/bsky/draft/updateDraft.d.ts +2 -2
  90. package/dist/api/app/bsky/draft/updateDraft.d.ts.map +1 -1
  91. package/dist/api/app/bsky/draft/updateDraft.js.map +1 -1
  92. package/dist/api/app/bsky/embed/getEmbedExternalView.d.ts +2 -2
  93. package/dist/api/app/bsky/embed/getEmbedExternalView.d.ts.map +1 -1
  94. package/dist/api/app/bsky/embed/getEmbedExternalView.js.map +1 -1
  95. package/dist/api/app/bsky/feed/getActorFeeds.d.ts +2 -2
  96. package/dist/api/app/bsky/feed/getActorFeeds.d.ts.map +1 -1
  97. package/dist/api/app/bsky/feed/getActorFeeds.js.map +1 -1
  98. package/dist/api/app/bsky/feed/getActorLikes.d.ts +2 -2
  99. package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
  100. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  101. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts +7 -7
  102. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
  103. package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
  104. package/dist/api/app/bsky/feed/getFeed.d.ts +3 -3
  105. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  106. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  107. package/dist/api/app/bsky/feed/getFeedGenerator.d.ts +2 -2
  108. package/dist/api/app/bsky/feed/getFeedGenerator.d.ts.map +1 -1
  109. package/dist/api/app/bsky/feed/getFeedGenerator.js.map +1 -1
  110. package/dist/api/app/bsky/feed/getFeedGenerators.d.ts +2 -2
  111. package/dist/api/app/bsky/feed/getFeedGenerators.d.ts.map +1 -1
  112. package/dist/api/app/bsky/feed/getFeedGenerators.js.map +1 -1
  113. package/dist/api/app/bsky/feed/getLikes.d.ts +2 -2
  114. package/dist/api/app/bsky/feed/getLikes.d.ts.map +1 -1
  115. package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
  116. package/dist/api/app/bsky/feed/getListFeed.d.ts +6 -6
  117. package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
  118. package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
  119. package/dist/api/app/bsky/feed/getPostThread.d.ts +2 -2
  120. package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
  121. package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
  122. package/dist/api/app/bsky/feed/getPosts.d.ts +2 -2
  123. package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
  124. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  125. package/dist/api/app/bsky/feed/getQuotes.d.ts +2 -2
  126. package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -1
  127. package/dist/api/app/bsky/feed/getQuotes.js.map +1 -1
  128. package/dist/api/app/bsky/feed/getRepostedBy.d.ts +2 -2
  129. package/dist/api/app/bsky/feed/getRepostedBy.d.ts.map +1 -1
  130. package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
  131. package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts +2 -2
  132. package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts.map +1 -1
  133. package/dist/api/app/bsky/feed/getSuggestedFeeds.js.map +1 -1
  134. package/dist/api/app/bsky/feed/getTimeline.d.ts +6 -6
  135. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  136. package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
  137. package/dist/api/app/bsky/feed/searchPosts.d.ts +2 -2
  138. package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
  139. package/dist/api/app/bsky/feed/searchPosts.js +11 -3
  140. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  141. package/dist/api/app/bsky/feed/searchPostsV2.d.ts +2 -2
  142. package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -1
  143. package/dist/api/app/bsky/feed/searchPostsV2.js +10 -2
  144. package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -1
  145. package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts +2 -2
  146. package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts.map +1 -1
  147. package/dist/api/app/bsky/graph/getActorStarterPacks.js.map +1 -1
  148. package/dist/api/app/bsky/graph/getBlocks.d.ts +2 -2
  149. package/dist/api/app/bsky/graph/getBlocks.d.ts.map +1 -1
  150. package/dist/api/app/bsky/graph/getBlocks.js.map +1 -1
  151. package/dist/api/app/bsky/graph/getFollowers.d.ts +2 -2
  152. package/dist/api/app/bsky/graph/getFollowers.d.ts.map +1 -1
  153. package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
  154. package/dist/api/app/bsky/graph/getFollows.d.ts +2 -2
  155. package/dist/api/app/bsky/graph/getFollows.d.ts.map +1 -1
  156. package/dist/api/app/bsky/graph/getFollows.js.map +1 -1
  157. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts +2 -2
  158. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -1
  159. package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -1
  160. package/dist/api/app/bsky/graph/getList.d.ts +2 -2
  161. package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
  162. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  163. package/dist/api/app/bsky/graph/getListBlocks.d.ts +2 -2
  164. package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +1 -1
  165. package/dist/api/app/bsky/graph/getListBlocks.js.map +1 -1
  166. package/dist/api/app/bsky/graph/getListMutes.d.ts +2 -2
  167. package/dist/api/app/bsky/graph/getListMutes.d.ts.map +1 -1
  168. package/dist/api/app/bsky/graph/getListMutes.js.map +1 -1
  169. package/dist/api/app/bsky/graph/getLists.d.ts +2 -2
  170. package/dist/api/app/bsky/graph/getLists.d.ts.map +1 -1
  171. package/dist/api/app/bsky/graph/getLists.js.map +1 -1
  172. package/dist/api/app/bsky/graph/getListsWithMembership.d.ts +2 -2
  173. package/dist/api/app/bsky/graph/getListsWithMembership.d.ts.map +1 -1
  174. package/dist/api/app/bsky/graph/getListsWithMembership.js.map +1 -1
  175. package/dist/api/app/bsky/graph/getMutes.d.ts +2 -2
  176. package/dist/api/app/bsky/graph/getMutes.d.ts.map +1 -1
  177. package/dist/api/app/bsky/graph/getMutes.js.map +1 -1
  178. package/dist/api/app/bsky/graph/getRelationships.d.ts +2 -2
  179. package/dist/api/app/bsky/graph/getRelationships.d.ts.map +1 -1
  180. package/dist/api/app/bsky/graph/getRelationships.js.map +1 -1
  181. package/dist/api/app/bsky/graph/getStarterPack.d.ts +2 -2
  182. package/dist/api/app/bsky/graph/getStarterPack.d.ts.map +1 -1
  183. package/dist/api/app/bsky/graph/getStarterPack.js.map +1 -1
  184. package/dist/api/app/bsky/graph/getStarterPacks.d.ts +2 -2
  185. package/dist/api/app/bsky/graph/getStarterPacks.d.ts.map +1 -1
  186. package/dist/api/app/bsky/graph/getStarterPacks.js.map +1 -1
  187. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts +2 -2
  188. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts.map +1 -1
  189. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js.map +1 -1
  190. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts +2 -2
  191. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts.map +1 -1
  192. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
  193. package/dist/api/app/bsky/graph/muteActor.d.ts +2 -2
  194. package/dist/api/app/bsky/graph/muteActor.d.ts.map +1 -1
  195. package/dist/api/app/bsky/graph/muteActor.js.map +1 -1
  196. package/dist/api/app/bsky/graph/muteActorList.d.ts +2 -2
  197. package/dist/api/app/bsky/graph/muteActorList.d.ts.map +1 -1
  198. package/dist/api/app/bsky/graph/muteActorList.js.map +1 -1
  199. package/dist/api/app/bsky/graph/muteThread.d.ts +2 -2
  200. package/dist/api/app/bsky/graph/muteThread.d.ts.map +1 -1
  201. package/dist/api/app/bsky/graph/muteThread.js.map +1 -1
  202. package/dist/api/app/bsky/graph/searchStarterPacks.d.ts +2 -2
  203. package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
  204. package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
  205. package/dist/api/app/bsky/graph/unmuteActor.d.ts +2 -2
  206. package/dist/api/app/bsky/graph/unmuteActor.d.ts.map +1 -1
  207. package/dist/api/app/bsky/graph/unmuteActor.js.map +1 -1
  208. package/dist/api/app/bsky/graph/unmuteActorList.d.ts +2 -2
  209. package/dist/api/app/bsky/graph/unmuteActorList.d.ts.map +1 -1
  210. package/dist/api/app/bsky/graph/unmuteActorList.js.map +1 -1
  211. package/dist/api/app/bsky/graph/unmuteThread.d.ts +2 -2
  212. package/dist/api/app/bsky/graph/unmuteThread.d.ts.map +1 -1
  213. package/dist/api/app/bsky/graph/unmuteThread.js.map +1 -1
  214. package/dist/api/app/bsky/labeler/getServices.d.ts +2 -2
  215. package/dist/api/app/bsky/labeler/getServices.d.ts.map +1 -1
  216. package/dist/api/app/bsky/labeler/getServices.js.map +1 -1
  217. package/dist/api/app/bsky/notification/getPreferences.d.ts +2 -2
  218. package/dist/api/app/bsky/notification/getPreferences.d.ts.map +1 -1
  219. package/dist/api/app/bsky/notification/getPreferences.js.map +1 -1
  220. package/dist/api/app/bsky/notification/getUnreadCount.d.ts +2 -2
  221. package/dist/api/app/bsky/notification/getUnreadCount.d.ts.map +1 -1
  222. package/dist/api/app/bsky/notification/getUnreadCount.js.map +1 -1
  223. package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts +2 -2
  224. package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts.map +1 -1
  225. package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
  226. package/dist/api/app/bsky/notification/listNotifications.d.ts +2 -2
  227. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  228. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  229. package/dist/api/app/bsky/notification/putActivitySubscription.d.ts +2 -2
  230. package/dist/api/app/bsky/notification/putActivitySubscription.d.ts.map +1 -1
  231. package/dist/api/app/bsky/notification/putActivitySubscription.js.map +1 -1
  232. package/dist/api/app/bsky/notification/putPreferences.d.ts +2 -2
  233. package/dist/api/app/bsky/notification/putPreferences.d.ts.map +1 -1
  234. package/dist/api/app/bsky/notification/putPreferences.js.map +1 -1
  235. package/dist/api/app/bsky/notification/putPreferencesV2.d.ts +2 -2
  236. package/dist/api/app/bsky/notification/putPreferencesV2.d.ts.map +1 -1
  237. package/dist/api/app/bsky/notification/putPreferencesV2.js.map +1 -1
  238. package/dist/api/app/bsky/notification/registerPush.d.ts +2 -2
  239. package/dist/api/app/bsky/notification/registerPush.d.ts.map +1 -1
  240. package/dist/api/app/bsky/notification/registerPush.js.map +1 -1
  241. package/dist/api/app/bsky/notification/unregisterPush.d.ts +2 -2
  242. package/dist/api/app/bsky/notification/unregisterPush.d.ts.map +1 -1
  243. package/dist/api/app/bsky/notification/unregisterPush.js.map +1 -1
  244. package/dist/api/app/bsky/notification/updateSeen.d.ts +2 -2
  245. package/dist/api/app/bsky/notification/updateSeen.d.ts.map +1 -1
  246. package/dist/api/app/bsky/notification/updateSeen.js.map +1 -1
  247. package/dist/api/app/bsky/notification/util.d.ts +2 -2
  248. package/dist/api/app/bsky/notification/util.d.ts.map +1 -1
  249. package/dist/api/app/bsky/notification/util.js.map +1 -1
  250. package/dist/api/app/bsky/unspecced/getAgeAssuranceState.d.ts +2 -2
  251. package/dist/api/app/bsky/unspecced/getAgeAssuranceState.d.ts.map +1 -1
  252. package/dist/api/app/bsky/unspecced/getAgeAssuranceState.js.map +1 -1
  253. package/dist/api/app/bsky/unspecced/getConfig.d.ts +2 -2
  254. package/dist/api/app/bsky/unspecced/getConfig.d.ts.map +1 -1
  255. package/dist/api/app/bsky/unspecced/getConfig.js.map +1 -1
  256. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts +2 -2
  257. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts.map +1 -1
  258. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js.map +1 -1
  259. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts +2 -2
  260. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
  261. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
  262. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts +2 -2
  263. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts.map +1 -1
  264. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js.map +1 -1
  265. package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts +2 -2
  266. package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
  267. package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
  268. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts +2 -2
  269. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts.map +1 -1
  270. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js.map +1 -1
  271. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts +2 -2
  272. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
  273. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
  274. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts +2 -2
  275. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts.map +1 -1
  276. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js.map +1 -1
  277. package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts +2 -2
  278. package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
  279. package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
  280. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts +2 -2
  281. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts.map +1 -1
  282. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js.map +1 -1
  283. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts +2 -2
  284. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts.map +1 -1
  285. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js.map +1 -1
  286. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts +2 -2
  287. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts.map +1 -1
  288. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js.map +1 -1
  289. package/dist/api/app/bsky/unspecced/getTaggedSuggestions.d.ts +2 -2
  290. package/dist/api/app/bsky/unspecced/getTaggedSuggestions.d.ts.map +1 -1
  291. package/dist/api/app/bsky/unspecced/getTaggedSuggestions.js.map +1 -1
  292. package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts +2 -2
  293. package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts.map +1 -1
  294. package/dist/api/app/bsky/unspecced/getTrendingTopics.js.map +1 -1
  295. package/dist/api/app/bsky/unspecced/getTrends.d.ts +2 -2
  296. package/dist/api/app/bsky/unspecced/getTrends.d.ts.map +1 -1
  297. package/dist/api/app/bsky/unspecced/getTrends.js.map +1 -1
  298. package/dist/api/app/bsky/unspecced/initAgeAssurance.d.ts +2 -2
  299. package/dist/api/app/bsky/unspecced/initAgeAssurance.d.ts.map +1 -1
  300. package/dist/api/app/bsky/unspecced/initAgeAssurance.js.map +1 -1
  301. package/dist/api/blob-dispatcher.d.ts +2 -2
  302. package/dist/api/blob-dispatcher.d.ts.map +1 -1
  303. package/dist/api/blob-dispatcher.js.map +1 -1
  304. package/dist/api/blob-resolver.d.ts +6 -6
  305. package/dist/api/blob-resolver.d.ts.map +1 -1
  306. package/dist/api/blob-resolver.js.map +1 -1
  307. package/dist/api/com/atproto/admin/getAccountInfos.d.ts +2 -2
  308. package/dist/api/com/atproto/admin/getAccountInfos.d.ts.map +1 -1
  309. package/dist/api/com/atproto/admin/getAccountInfos.js.map +1 -1
  310. package/dist/api/com/atproto/admin/getSubjectStatus.d.ts +2 -2
  311. package/dist/api/com/atproto/admin/getSubjectStatus.d.ts.map +1 -1
  312. package/dist/api/com/atproto/admin/getSubjectStatus.js.map +1 -1
  313. package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts +2 -2
  314. package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts.map +1 -1
  315. package/dist/api/com/atproto/admin/updateSubjectStatus.js.map +1 -1
  316. package/dist/api/com/atproto/identity/resolveHandle.d.ts +2 -2
  317. package/dist/api/com/atproto/identity/resolveHandle.d.ts.map +1 -1
  318. package/dist/api/com/atproto/identity/resolveHandle.js.map +1 -1
  319. package/dist/api/com/atproto/label/queryLabels.d.ts +2 -2
  320. package/dist/api/com/atproto/label/queryLabels.d.ts.map +1 -1
  321. package/dist/api/com/atproto/label/queryLabels.js.map +1 -1
  322. package/dist/api/com/atproto/repo/getRecord.d.ts +2 -2
  323. package/dist/api/com/atproto/repo/getRecord.d.ts.map +1 -1
  324. package/dist/api/com/atproto/repo/getRecord.js.map +1 -1
  325. package/dist/api/com/atproto/temp/fetchLabels.d.ts +2 -2
  326. package/dist/api/com/atproto/temp/fetchLabels.d.ts.map +1 -1
  327. package/dist/api/com/atproto/temp/fetchLabels.js.map +1 -1
  328. package/dist/api/external.d.ts +1 -1
  329. package/dist/api/external.d.ts.map +1 -1
  330. package/dist/api/external.js.map +1 -1
  331. package/dist/api/health.d.ts +1 -1
  332. package/dist/api/health.d.ts.map +1 -1
  333. package/dist/api/health.js.map +1 -1
  334. package/dist/api/index.d.ts +2 -2
  335. package/dist/api/index.d.ts.map +1 -1
  336. package/dist/api/index.js.map +1 -1
  337. package/dist/api/internal/bsky/actor/getProfiles.d.ts +2 -2
  338. package/dist/api/internal/bsky/actor/getProfiles.d.ts.map +1 -1
  339. package/dist/api/internal/bsky/actor/getProfiles.js.map +1 -1
  340. package/dist/api/kws/api.d.ts +2 -2
  341. package/dist/api/kws/api.d.ts.map +1 -1
  342. package/dist/api/kws/api.js.map +1 -1
  343. package/dist/api/kws/index.d.ts +1 -1
  344. package/dist/api/kws/index.d.ts.map +1 -1
  345. package/dist/api/kws/index.js.map +1 -1
  346. package/dist/api/kws/types.d.ts +3 -3
  347. package/dist/api/kws/types.d.ts.map +1 -1
  348. package/dist/api/kws/types.js.map +1 -1
  349. package/dist/api/kws/util.d.ts +4 -4
  350. package/dist/api/kws/util.d.ts.map +1 -1
  351. package/dist/api/kws/util.js.map +1 -1
  352. package/dist/api/kws/webhook.d.ts +2 -2
  353. package/dist/api/kws/webhook.d.ts.map +1 -1
  354. package/dist/api/kws/webhook.js.map +1 -1
  355. package/dist/api/sitemap.d.ts +1 -1
  356. package/dist/api/sitemap.d.ts.map +1 -1
  357. package/dist/api/sitemap.js.map +1 -1
  358. package/dist/api/util.d.ts +3 -3
  359. package/dist/api/util.d.ts.map +1 -1
  360. package/dist/api/util.js.map +1 -1
  361. package/dist/api/well-known.d.ts +1 -1
  362. package/dist/api/well-known.d.ts.map +1 -1
  363. package/dist/api/well-known.js.map +1 -1
  364. package/dist/auth-verifier.d.ts +5 -5
  365. package/dist/auth-verifier.d.ts.map +1 -1
  366. package/dist/auth-verifier.js +1 -1
  367. package/dist/auth-verifier.js.map +1 -1
  368. package/dist/bsync.d.ts +2 -2
  369. package/dist/bsync.d.ts.map +1 -1
  370. package/dist/bsync.js.map +1 -1
  371. package/dist/cache/read-through.d.ts +1 -1
  372. package/dist/cache/read-through.d.ts.map +1 -1
  373. package/dist/cache/read-through.js.map +1 -1
  374. package/dist/config.d.ts +1 -1
  375. package/dist/config.d.ts.map +1 -1
  376. package/dist/config.js.map +1 -1
  377. package/dist/context.d.ts +18 -18
  378. package/dist/context.d.ts.map +1 -1
  379. package/dist/context.js.map +1 -1
  380. package/dist/courier.d.ts +2 -2
  381. package/dist/courier.d.ts.map +1 -1
  382. package/dist/courier.js.map +1 -1
  383. package/dist/data-plane/client/hosts.d.ts +1 -1
  384. package/dist/data-plane/client/hosts.d.ts.map +1 -1
  385. package/dist/data-plane/client/hosts.js.map +1 -1
  386. package/dist/data-plane/client/index.d.ts +2 -2
  387. package/dist/data-plane/client/index.d.ts.map +1 -1
  388. package/dist/data-plane/client/index.js.map +1 -1
  389. package/dist/data-plane/client/util.d.ts +1 -1
  390. package/dist/data-plane/client/util.d.ts.map +1 -1
  391. package/dist/data-plane/client/util.js.map +1 -1
  392. package/dist/data-plane/server/bsync-subscription.d.ts +2 -2
  393. package/dist/data-plane/server/bsync-subscription.d.ts.map +1 -1
  394. package/dist/data-plane/server/bsync-subscription.js +1 -1
  395. package/dist/data-plane/server/bsync-subscription.js.map +1 -1
  396. package/dist/data-plane/server/db/database-schema.d.ts +44 -44
  397. package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
  398. package/dist/data-plane/server/db/database-schema.js.map +1 -1
  399. package/dist/data-plane/server/db/db.d.ts +2 -2
  400. package/dist/data-plane/server/db/db.d.ts.map +1 -1
  401. package/dist/data-plane/server/db/db.js.map +1 -1
  402. package/dist/data-plane/server/db/migrations/20230309T045948368Z-init.d.ts +1 -1
  403. package/dist/data-plane/server/db/migrations/20230309T045948368Z-init.d.ts.map +1 -1
  404. package/dist/data-plane/server/db/migrations/20230309T045948368Z-init.js.map +1 -1
  405. package/dist/data-plane/server/db/migrations/20230408T152211201Z-notification-init.d.ts +1 -1
  406. package/dist/data-plane/server/db/migrations/20230408T152211201Z-notification-init.d.ts.map +1 -1
  407. package/dist/data-plane/server/db/migrations/20230408T152211201Z-notification-init.js.map +1 -1
  408. package/dist/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.d.ts +1 -1
  409. package/dist/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.d.ts.map +1 -1
  410. package/dist/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.js.map +1 -1
  411. package/dist/data-plane/server/db/migrations/20230420T211446071Z-did-cache.d.ts +1 -1
  412. package/dist/data-plane/server/db/migrations/20230420T211446071Z-did-cache.d.ts.map +1 -1
  413. package/dist/data-plane/server/db/migrations/20230420T211446071Z-did-cache.js.map +1 -1
  414. package/dist/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.d.ts +1 -1
  415. package/dist/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.d.ts.map +1 -1
  416. package/dist/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.js.map +1 -1
  417. package/dist/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.d.ts +1 -1
  418. package/dist/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.d.ts.map +1 -1
  419. package/dist/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.js.map +1 -1
  420. package/dist/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.d.ts +1 -1
  421. package/dist/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.d.ts.map +1 -1
  422. package/dist/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.js.map +1 -1
  423. package/dist/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.d.ts +1 -1
  424. package/dist/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.d.ts.map +1 -1
  425. package/dist/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.js.map +1 -1
  426. package/dist/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.d.ts +1 -1
  427. package/dist/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.d.ts.map +1 -1
  428. package/dist/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.js.map +1 -1
  429. package/dist/data-plane/server/db/migrations/20230608T205147239Z-mutes.d.ts +1 -1
  430. package/dist/data-plane/server/db/migrations/20230608T205147239Z-mutes.d.ts.map +1 -1
  431. package/dist/data-plane/server/db/migrations/20230608T205147239Z-mutes.js.map +1 -1
  432. package/dist/data-plane/server/db/migrations/20230609T153623961Z-blocks.d.ts +1 -1
  433. package/dist/data-plane/server/db/migrations/20230609T153623961Z-blocks.d.ts.map +1 -1
  434. package/dist/data-plane/server/db/migrations/20230609T153623961Z-blocks.js.map +1 -1
  435. package/dist/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.d.ts +1 -1
  436. package/dist/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.d.ts.map +1 -1
  437. package/dist/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.js.map +1 -1
  438. package/dist/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.d.ts +1 -1
  439. package/dist/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.d.ts.map +1 -1
  440. package/dist/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.js.map +1 -1
  441. package/dist/data-plane/server/db/migrations/20230611T215300060Z-actor-state.d.ts +1 -1
  442. package/dist/data-plane/server/db/migrations/20230611T215300060Z-actor-state.d.ts.map +1 -1
  443. package/dist/data-plane/server/db/migrations/20230611T215300060Z-actor-state.js.map +1 -1
  444. package/dist/data-plane/server/db/migrations/20230620T161134972Z-post-langs.d.ts +1 -1
  445. package/dist/data-plane/server/db/migrations/20230620T161134972Z-post-langs.d.ts.map +1 -1
  446. package/dist/data-plane/server/db/migrations/20230620T161134972Z-post-langs.js.map +1 -1
  447. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.d.ts +1 -1
  448. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.d.ts.map +1 -1
  449. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.js.map +1 -1
  450. package/dist/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.d.ts +1 -1
  451. package/dist/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.d.ts.map +1 -1
  452. package/dist/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.js.map +1 -1
  453. package/dist/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.d.ts +1 -1
  454. package/dist/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.d.ts.map +1 -1
  455. package/dist/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.js.map +1 -1
  456. package/dist/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.d.ts +1 -1
  457. package/dist/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.d.ts.map +1 -1
  458. package/dist/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.js.map +1 -1
  459. package/dist/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.d.ts +1 -1
  460. package/dist/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.d.ts.map +1 -1
  461. package/dist/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.js.map +1 -1
  462. package/dist/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.d.ts +1 -1
  463. package/dist/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.d.ts.map +1 -1
  464. package/dist/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.js.map +1 -1
  465. package/dist/data-plane/server/db/migrations/20230810T203349843Z-action-duration.d.ts +1 -1
  466. package/dist/data-plane/server/db/migrations/20230810T203349843Z-action-duration.d.ts.map +1 -1
  467. package/dist/data-plane/server/db/migrations/20230810T203349843Z-action-duration.js.map +1 -1
  468. package/dist/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.d.ts +1 -1
  469. package/dist/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.d.ts.map +1 -1
  470. package/dist/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.js.map +1 -1
  471. package/dist/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.d.ts +1 -1
  472. package/dist/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.d.ts.map +1 -1
  473. package/dist/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.js.map +1 -1
  474. package/dist/data-plane/server/db/migrations/20230904T211011773Z-block-lists.d.ts +1 -1
  475. package/dist/data-plane/server/db/migrations/20230904T211011773Z-block-lists.d.ts.map +1 -1
  476. package/dist/data-plane/server/db/migrations/20230904T211011773Z-block-lists.js.map +1 -1
  477. package/dist/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.d.ts +1 -1
  478. package/dist/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.d.ts.map +1 -1
  479. package/dist/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.js.map +1 -1
  480. package/dist/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.d.ts +1 -1
  481. package/dist/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.d.ts.map +1 -1
  482. package/dist/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.js.map +1 -1
  483. package/dist/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.d.ts +1 -1
  484. package/dist/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.d.ts.map +1 -1
  485. package/dist/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.js.map +1 -1
  486. package/dist/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.d.ts +1 -1
  487. package/dist/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.d.ts.map +1 -1
  488. package/dist/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.js.map +1 -1
  489. package/dist/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.d.ts +1 -1
  490. package/dist/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.d.ts.map +1 -1
  491. package/dist/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.js.map +1 -1
  492. package/dist/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.d.ts +1 -1
  493. package/dist/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.d.ts.map +1 -1
  494. package/dist/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.js.map +1 -1
  495. package/dist/data-plane/server/db/migrations/20240226T225725627Z-labelers.d.ts +1 -1
  496. package/dist/data-plane/server/db/migrations/20240226T225725627Z-labelers.d.ts.map +1 -1
  497. package/dist/data-plane/server/db/migrations/20240226T225725627Z-labelers.js.map +1 -1
  498. package/dist/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.d.ts +1 -1
  499. package/dist/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.d.ts.map +1 -1
  500. package/dist/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.js.map +1 -1
  501. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.d.ts +1 -1
  502. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.d.ts.map +1 -1
  503. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.js.map +1 -1
  504. package/dist/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.d.ts +1 -1
  505. package/dist/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.d.ts.map +1 -1
  506. package/dist/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.js.map +1 -1
  507. package/dist/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.d.ts +1 -1
  508. package/dist/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.d.ts.map +1 -1
  509. package/dist/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.js.map +1 -1
  510. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts +1 -1
  511. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts.map +1 -1
  512. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js.map +1 -1
  513. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts +1 -1
  514. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts.map +1 -1
  515. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js.map +1 -1
  516. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts +1 -1
  517. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts.map +1 -1
  518. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js.map +1 -1
  519. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts +1 -1
  520. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts.map +1 -1
  521. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js.map +1 -1
  522. package/dist/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.d.ts +1 -1
  523. package/dist/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.d.ts.map +1 -1
  524. package/dist/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.js.map +1 -1
  525. package/dist/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.d.ts +1 -1
  526. package/dist/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.d.ts.map +1 -1
  527. package/dist/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.js.map +1 -1
  528. package/dist/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.d.ts +1 -1
  529. package/dist/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.d.ts.map +1 -1
  530. package/dist/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.js.map +1 -1
  531. package/dist/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.d.ts +1 -1
  532. package/dist/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.d.ts.map +1 -1
  533. package/dist/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.js.map +1 -1
  534. package/dist/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.d.ts +1 -1
  535. package/dist/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.d.ts.map +1 -1
  536. package/dist/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.js.map +1 -1
  537. package/dist/data-plane/server/db/migrations/20250404T163421487Z-verifications.d.ts +1 -1
  538. package/dist/data-plane/server/db/migrations/20250404T163421487Z-verifications.d.ts.map +1 -1
  539. package/dist/data-plane/server/db/migrations/20250404T163421487Z-verifications.js.map +1 -1
  540. package/dist/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.d.ts +1 -1
  541. package/dist/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.d.ts.map +1 -1
  542. package/dist/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.js.map +1 -1
  543. package/dist/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.d.ts +1 -1
  544. package/dist/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.d.ts.map +1 -1
  545. package/dist/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.js.map +1 -1
  546. package/dist/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.d.ts +1 -1
  547. package/dist/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.d.ts.map +1 -1
  548. package/dist/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.js.map +1 -1
  549. package/dist/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.d.ts +1 -1
  550. package/dist/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.d.ts.map +1 -1
  551. package/dist/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.js.map +1 -1
  552. package/dist/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.d.ts +1 -1
  553. package/dist/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.d.ts.map +1 -1
  554. package/dist/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.js.map +1 -1
  555. package/dist/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.d.ts +1 -1
  556. package/dist/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.d.ts.map +1 -1
  557. package/dist/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.js.map +1 -1
  558. package/dist/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.d.ts +1 -1
  559. package/dist/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.d.ts.map +1 -1
  560. package/dist/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.js.map +1 -1
  561. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts +1 -1
  562. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts.map +1 -1
  563. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.js.map +1 -1
  564. package/dist/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.d.ts +1 -1
  565. package/dist/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.d.ts.map +1 -1
  566. package/dist/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.js.map +1 -1
  567. package/dist/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.d.ts +1 -1
  568. package/dist/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.d.ts.map +1 -1
  569. package/dist/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.js.map +1 -1
  570. package/dist/data-plane/server/db/migrations/provider.d.ts +2 -2
  571. package/dist/data-plane/server/db/migrations/provider.d.ts.map +1 -1
  572. package/dist/data-plane/server/db/migrations/provider.js.map +1 -1
  573. package/dist/data-plane/server/db/pagination.d.ts +2 -2
  574. package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
  575. package/dist/data-plane/server/db/pagination.js.map +1 -1
  576. package/dist/data-plane/server/db/tables/actor-block.d.ts +1 -1
  577. package/dist/data-plane/server/db/tables/actor-block.d.ts.map +1 -1
  578. package/dist/data-plane/server/db/tables/actor-block.js.map +1 -1
  579. package/dist/data-plane/server/db/tables/actor.d.ts +1 -1
  580. package/dist/data-plane/server/db/tables/actor.d.ts.map +1 -1
  581. package/dist/data-plane/server/db/tables/actor.js.map +1 -1
  582. package/dist/data-plane/server/db/tables/did-cache.d.ts +1 -1
  583. package/dist/data-plane/server/db/tables/did-cache.d.ts.map +1 -1
  584. package/dist/data-plane/server/db/tables/did-cache.js.map +1 -1
  585. package/dist/data-plane/server/db/tables/feed-generator.d.ts +1 -1
  586. package/dist/data-plane/server/db/tables/feed-generator.d.ts.map +1 -1
  587. package/dist/data-plane/server/db/tables/feed-generator.js.map +1 -1
  588. package/dist/data-plane/server/db/tables/follow.d.ts +1 -1
  589. package/dist/data-plane/server/db/tables/follow.d.ts.map +1 -1
  590. package/dist/data-plane/server/db/tables/follow.js.map +1 -1
  591. package/dist/data-plane/server/db/tables/labeler.d.ts +1 -1
  592. package/dist/data-plane/server/db/tables/labeler.d.ts.map +1 -1
  593. package/dist/data-plane/server/db/tables/labeler.js.map +1 -1
  594. package/dist/data-plane/server/db/tables/like.d.ts +1 -1
  595. package/dist/data-plane/server/db/tables/like.d.ts.map +1 -1
  596. package/dist/data-plane/server/db/tables/like.js.map +1 -1
  597. package/dist/data-plane/server/db/tables/list-block.d.ts +1 -1
  598. package/dist/data-plane/server/db/tables/list-block.d.ts.map +1 -1
  599. package/dist/data-plane/server/db/tables/list-block.js.map +1 -1
  600. package/dist/data-plane/server/db/tables/list-item.d.ts +1 -1
  601. package/dist/data-plane/server/db/tables/list-item.d.ts.map +1 -1
  602. package/dist/data-plane/server/db/tables/list-item.js.map +1 -1
  603. package/dist/data-plane/server/db/tables/list.d.ts +1 -1
  604. package/dist/data-plane/server/db/tables/list.d.ts.map +1 -1
  605. package/dist/data-plane/server/db/tables/list.js.map +1 -1
  606. package/dist/data-plane/server/db/tables/notification.d.ts +1 -1
  607. package/dist/data-plane/server/db/tables/notification.d.ts.map +1 -1
  608. package/dist/data-plane/server/db/tables/notification.js.map +1 -1
  609. package/dist/data-plane/server/db/tables/post-agg.d.ts +1 -1
  610. package/dist/data-plane/server/db/tables/post-agg.d.ts.map +1 -1
  611. package/dist/data-plane/server/db/tables/post-agg.js.map +1 -1
  612. package/dist/data-plane/server/db/tables/post.d.ts +1 -1
  613. package/dist/data-plane/server/db/tables/post.d.ts.map +1 -1
  614. package/dist/data-plane/server/db/tables/post.js.map +1 -1
  615. package/dist/data-plane/server/db/tables/profile-agg.d.ts +1 -1
  616. package/dist/data-plane/server/db/tables/profile-agg.d.ts.map +1 -1
  617. package/dist/data-plane/server/db/tables/profile-agg.js.map +1 -1
  618. package/dist/data-plane/server/db/tables/quote.d.ts +1 -1
  619. package/dist/data-plane/server/db/tables/quote.d.ts.map +1 -1
  620. package/dist/data-plane/server/db/tables/quote.js.map +1 -1
  621. package/dist/data-plane/server/db/tables/record.d.ts +1 -1
  622. package/dist/data-plane/server/db/tables/record.d.ts.map +1 -1
  623. package/dist/data-plane/server/db/tables/record.js.map +1 -1
  624. package/dist/data-plane/server/db/tables/repost.d.ts +1 -1
  625. package/dist/data-plane/server/db/tables/repost.d.ts.map +1 -1
  626. package/dist/data-plane/server/db/tables/repost.js.map +1 -1
  627. package/dist/data-plane/server/db/tables/starter-pack.d.ts +1 -1
  628. package/dist/data-plane/server/db/tables/starter-pack.d.ts.map +1 -1
  629. package/dist/data-plane/server/db/tables/starter-pack.js.map +1 -1
  630. package/dist/data-plane/server/db/tables/verification.d.ts +1 -1
  631. package/dist/data-plane/server/db/tables/verification.d.ts.map +1 -1
  632. package/dist/data-plane/server/db/tables/verification.js.map +1 -1
  633. package/dist/data-plane/server/db/types.d.ts +1 -1
  634. package/dist/data-plane/server/db/types.d.ts.map +1 -1
  635. package/dist/data-plane/server/db/types.js.map +1 -1
  636. package/dist/data-plane/server/db/util.d.ts +2 -2
  637. package/dist/data-plane/server/db/util.d.ts.map +1 -1
  638. package/dist/data-plane/server/db/util.js.map +1 -1
  639. package/dist/data-plane/server/index.d.ts +2 -2
  640. package/dist/data-plane/server/index.d.ts.map +1 -1
  641. package/dist/data-plane/server/index.js.map +1 -1
  642. package/dist/data-plane/server/indexing/index.d.ts +5 -5
  643. package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
  644. package/dist/data-plane/server/indexing/index.js.map +1 -1
  645. package/dist/data-plane/server/indexing/plugins/block.d.ts +2 -2
  646. package/dist/data-plane/server/indexing/plugins/block.d.ts.map +1 -1
  647. package/dist/data-plane/server/indexing/plugins/block.js.map +1 -1
  648. package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts +2 -2
  649. package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts.map +1 -1
  650. package/dist/data-plane/server/indexing/plugins/chat-declaration.js.map +1 -1
  651. package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts +2 -2
  652. package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts.map +1 -1
  653. package/dist/data-plane/server/indexing/plugins/feed-generator.js.map +1 -1
  654. package/dist/data-plane/server/indexing/plugins/follow.d.ts +2 -2
  655. package/dist/data-plane/server/indexing/plugins/follow.d.ts.map +1 -1
  656. package/dist/data-plane/server/indexing/plugins/follow.js.map +1 -1
  657. package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts +2 -2
  658. package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts.map +1 -1
  659. package/dist/data-plane/server/indexing/plugins/germ-declaration.js.map +1 -1
  660. package/dist/data-plane/server/indexing/plugins/labeler.d.ts +2 -2
  661. package/dist/data-plane/server/indexing/plugins/labeler.d.ts.map +1 -1
  662. package/dist/data-plane/server/indexing/plugins/labeler.js.map +1 -1
  663. package/dist/data-plane/server/indexing/plugins/like.d.ts +2 -2
  664. package/dist/data-plane/server/indexing/plugins/like.d.ts.map +1 -1
  665. package/dist/data-plane/server/indexing/plugins/like.js.map +1 -1
  666. package/dist/data-plane/server/indexing/plugins/list-block.d.ts +2 -2
  667. package/dist/data-plane/server/indexing/plugins/list-block.d.ts.map +1 -1
  668. package/dist/data-plane/server/indexing/plugins/list-block.js.map +1 -1
  669. package/dist/data-plane/server/indexing/plugins/list-item.d.ts +2 -2
  670. package/dist/data-plane/server/indexing/plugins/list-item.d.ts.map +1 -1
  671. package/dist/data-plane/server/indexing/plugins/list-item.js.map +1 -1
  672. package/dist/data-plane/server/indexing/plugins/list.d.ts +2 -2
  673. package/dist/data-plane/server/indexing/plugins/list.d.ts.map +1 -1
  674. package/dist/data-plane/server/indexing/plugins/list.js.map +1 -1
  675. package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts +2 -2
  676. package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts.map +1 -1
  677. package/dist/data-plane/server/indexing/plugins/notif-declaration.js.map +1 -1
  678. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +2 -2
  679. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -1
  680. package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -1
  681. package/dist/data-plane/server/indexing/plugins/post.d.ts +4 -4
  682. package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
  683. package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
  684. package/dist/data-plane/server/indexing/plugins/profile.d.ts +2 -2
  685. package/dist/data-plane/server/indexing/plugins/profile.d.ts.map +1 -1
  686. package/dist/data-plane/server/indexing/plugins/profile.js.map +1 -1
  687. package/dist/data-plane/server/indexing/plugins/repost.d.ts +2 -2
  688. package/dist/data-plane/server/indexing/plugins/repost.d.ts.map +1 -1
  689. package/dist/data-plane/server/indexing/plugins/repost.js.map +1 -1
  690. package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts +2 -2
  691. package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts.map +1 -1
  692. package/dist/data-plane/server/indexing/plugins/starter-pack.js.map +1 -1
  693. package/dist/data-plane/server/indexing/plugins/status.d.ts +2 -2
  694. package/dist/data-plane/server/indexing/plugins/status.d.ts.map +1 -1
  695. package/dist/data-plane/server/indexing/plugins/status.js.map +1 -1
  696. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts +2 -2
  697. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
  698. package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
  699. package/dist/data-plane/server/indexing/plugins/verification.d.ts +2 -2
  700. package/dist/data-plane/server/indexing/plugins/verification.d.ts.map +1 -1
  701. package/dist/data-plane/server/indexing/plugins/verification.js.map +1 -1
  702. package/dist/data-plane/server/indexing/processor.d.ts +6 -6
  703. package/dist/data-plane/server/indexing/processor.d.ts.map +1 -1
  704. package/dist/data-plane/server/indexing/processor.js +1 -1
  705. package/dist/data-plane/server/indexing/processor.js.map +1 -1
  706. package/dist/data-plane/server/routes/activity-subscription.d.ts +3 -3
  707. package/dist/data-plane/server/routes/activity-subscription.d.ts.map +1 -1
  708. package/dist/data-plane/server/routes/activity-subscription.js.map +1 -1
  709. package/dist/data-plane/server/routes/blocks.d.ts +3 -3
  710. package/dist/data-plane/server/routes/blocks.d.ts.map +1 -1
  711. package/dist/data-plane/server/routes/blocks.js.map +1 -1
  712. package/dist/data-plane/server/routes/bookmarks.d.ts +3 -3
  713. package/dist/data-plane/server/routes/bookmarks.d.ts.map +1 -1
  714. package/dist/data-plane/server/routes/bookmarks.js.map +1 -1
  715. package/dist/data-plane/server/routes/drafts.d.ts +3 -3
  716. package/dist/data-plane/server/routes/drafts.d.ts.map +1 -1
  717. package/dist/data-plane/server/routes/drafts.js.map +1 -1
  718. package/dist/data-plane/server/routes/feed-gens.d.ts +3 -3
  719. package/dist/data-plane/server/routes/feed-gens.d.ts.map +1 -1
  720. package/dist/data-plane/server/routes/feed-gens.js.map +1 -1
  721. package/dist/data-plane/server/routes/feeds.d.ts +3 -3
  722. package/dist/data-plane/server/routes/feeds.d.ts.map +1 -1
  723. package/dist/data-plane/server/routes/feeds.js.map +1 -1
  724. package/dist/data-plane/server/routes/follows.d.ts +3 -3
  725. package/dist/data-plane/server/routes/follows.d.ts.map +1 -1
  726. package/dist/data-plane/server/routes/follows.js.map +1 -1
  727. package/dist/data-plane/server/routes/identity.d.ts +4 -4
  728. package/dist/data-plane/server/routes/identity.d.ts.map +1 -1
  729. package/dist/data-plane/server/routes/identity.js +1 -1
  730. package/dist/data-plane/server/routes/identity.js.map +1 -1
  731. package/dist/data-plane/server/routes/index.d.ts +3 -3
  732. package/dist/data-plane/server/routes/index.d.ts.map +1 -1
  733. package/dist/data-plane/server/routes/index.js.map +1 -1
  734. package/dist/data-plane/server/routes/interactions.d.ts +3 -3
  735. package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
  736. package/dist/data-plane/server/routes/interactions.js.map +1 -1
  737. package/dist/data-plane/server/routes/labels.d.ts +3 -3
  738. package/dist/data-plane/server/routes/labels.d.ts.map +1 -1
  739. package/dist/data-plane/server/routes/labels.js.map +1 -1
  740. package/dist/data-plane/server/routes/likes.d.ts +3 -3
  741. package/dist/data-plane/server/routes/likes.d.ts.map +1 -1
  742. package/dist/data-plane/server/routes/likes.js.map +1 -1
  743. package/dist/data-plane/server/routes/lists.d.ts +3 -3
  744. package/dist/data-plane/server/routes/lists.d.ts.map +1 -1
  745. package/dist/data-plane/server/routes/lists.js.map +1 -1
  746. package/dist/data-plane/server/routes/moderation.d.ts +3 -3
  747. package/dist/data-plane/server/routes/moderation.d.ts.map +1 -1
  748. package/dist/data-plane/server/routes/moderation.js.map +1 -1
  749. package/dist/data-plane/server/routes/mutes.d.ts +3 -3
  750. package/dist/data-plane/server/routes/mutes.d.ts.map +1 -1
  751. package/dist/data-plane/server/routes/mutes.js.map +1 -1
  752. package/dist/data-plane/server/routes/notifs.d.ts +4 -4
  753. package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
  754. package/dist/data-plane/server/routes/notifs.js.map +1 -1
  755. package/dist/data-plane/server/routes/profile.d.ts +3 -3
  756. package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
  757. package/dist/data-plane/server/routes/profile.js +1 -1
  758. package/dist/data-plane/server/routes/profile.js.map +1 -1
  759. package/dist/data-plane/server/routes/quotes.d.ts +3 -3
  760. package/dist/data-plane/server/routes/quotes.d.ts.map +1 -1
  761. package/dist/data-plane/server/routes/quotes.js.map +1 -1
  762. package/dist/data-plane/server/routes/records.d.ts +3 -3
  763. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  764. package/dist/data-plane/server/routes/records.js.map +1 -1
  765. package/dist/data-plane/server/routes/relationships.d.ts +3 -3
  766. package/dist/data-plane/server/routes/relationships.d.ts.map +1 -1
  767. package/dist/data-plane/server/routes/relationships.js.map +1 -1
  768. package/dist/data-plane/server/routes/reposts.d.ts +3 -3
  769. package/dist/data-plane/server/routes/reposts.d.ts.map +1 -1
  770. package/dist/data-plane/server/routes/reposts.js.map +1 -1
  771. package/dist/data-plane/server/routes/search.d.ts +3 -3
  772. package/dist/data-plane/server/routes/search.d.ts.map +1 -1
  773. package/dist/data-plane/server/routes/search.js.map +1 -1
  774. package/dist/data-plane/server/routes/site-standard.d.ts +3 -3
  775. package/dist/data-plane/server/routes/site-standard.d.ts.map +1 -1
  776. package/dist/data-plane/server/routes/site-standard.js.map +1 -1
  777. package/dist/data-plane/server/routes/sitemap.d.ts +2 -2
  778. package/dist/data-plane/server/routes/sitemap.d.ts.map +1 -1
  779. package/dist/data-plane/server/routes/sitemap.js.map +1 -1
  780. package/dist/data-plane/server/routes/starter-packs.d.ts +3 -3
  781. package/dist/data-plane/server/routes/starter-packs.d.ts.map +1 -1
  782. package/dist/data-plane/server/routes/starter-packs.js.map +1 -1
  783. package/dist/data-plane/server/routes/suggestions.d.ts +3 -3
  784. package/dist/data-plane/server/routes/suggestions.d.ts.map +1 -1
  785. package/dist/data-plane/server/routes/suggestions.js.map +1 -1
  786. package/dist/data-plane/server/routes/sync.d.ts +3 -3
  787. package/dist/data-plane/server/routes/sync.d.ts.map +1 -1
  788. package/dist/data-plane/server/routes/sync.js.map +1 -1
  789. package/dist/data-plane/server/routes/threads.d.ts +3 -3
  790. package/dist/data-plane/server/routes/threads.d.ts.map +1 -1
  791. package/dist/data-plane/server/routes/threads.js.map +1 -1
  792. package/dist/data-plane/server/subscription.d.ts +2 -2
  793. package/dist/data-plane/server/subscription.d.ts.map +1 -1
  794. package/dist/data-plane/server/subscription.js +1 -1
  795. package/dist/data-plane/server/subscription.js.map +1 -1
  796. package/dist/data-plane/server/util.d.ts +2 -2
  797. package/dist/data-plane/server/util.d.ts.map +1 -1
  798. package/dist/data-plane/server/util.js.map +1 -1
  799. package/dist/error.d.ts +1 -1
  800. package/dist/error.d.ts.map +1 -1
  801. package/dist/error.js.map +1 -1
  802. package/dist/etcd.d.ts +1 -1
  803. package/dist/etcd.d.ts.map +1 -1
  804. package/dist/etcd.js.map +1 -1
  805. package/dist/feature-gates/index.d.ts +1 -1
  806. package/dist/feature-gates/index.d.ts.map +1 -1
  807. package/dist/feature-gates/index.js +1 -0
  808. package/dist/feature-gates/index.js.map +1 -1
  809. package/dist/feature-gates/types.d.ts +1 -1
  810. package/dist/feature-gates/types.d.ts.map +1 -1
  811. package/dist/feature-gates/types.js.map +1 -1
  812. package/dist/feature-gates/utils.d.ts +2 -2
  813. package/dist/feature-gates/utils.d.ts.map +1 -1
  814. package/dist/feature-gates/utils.js.map +1 -1
  815. package/dist/hydration/actor.d.ts +7 -5
  816. package/dist/hydration/actor.d.ts.map +1 -1
  817. package/dist/hydration/actor.js +2 -0
  818. package/dist/hydration/actor.js.map +1 -1
  819. package/dist/hydration/external.d.ts +4 -4
  820. package/dist/hydration/external.d.ts.map +1 -1
  821. package/dist/hydration/external.js +1 -1
  822. package/dist/hydration/external.js.map +1 -1
  823. package/dist/hydration/feed.d.ts +4 -4
  824. package/dist/hydration/feed.d.ts.map +1 -1
  825. package/dist/hydration/feed.js.map +1 -1
  826. package/dist/hydration/graph.d.ts +5 -5
  827. package/dist/hydration/graph.d.ts.map +1 -1
  828. package/dist/hydration/graph.js +1 -1
  829. package/dist/hydration/graph.js.map +1 -1
  830. package/dist/hydration/hydrator.d.ts +11 -11
  831. package/dist/hydration/hydrator.d.ts.map +1 -1
  832. package/dist/hydration/hydrator.js +1 -1
  833. package/dist/hydration/hydrator.js.map +1 -1
  834. package/dist/hydration/label.d.ts +5 -5
  835. package/dist/hydration/label.d.ts.map +1 -1
  836. package/dist/hydration/label.js +1 -1
  837. package/dist/hydration/label.js.map +1 -1
  838. package/dist/hydration/util.d.ts +3 -3
  839. package/dist/hydration/util.d.ts.map +1 -1
  840. package/dist/hydration/util.js.map +1 -1
  841. package/dist/image/invalidator.d.ts +1 -1
  842. package/dist/image/invalidator.d.ts.map +1 -1
  843. package/dist/image/invalidator.js.map +1 -1
  844. package/dist/image/server.d.ts +3 -3
  845. package/dist/image/server.d.ts.map +1 -1
  846. package/dist/image/server.js.map +1 -1
  847. package/dist/image/sharp.d.ts +2 -2
  848. package/dist/image/sharp.d.ts.map +1 -1
  849. package/dist/image/sharp.js.map +1 -1
  850. package/dist/image/uri.d.ts +2 -2
  851. package/dist/image/uri.d.ts.map +1 -1
  852. package/dist/image/uri.js.map +1 -1
  853. package/dist/index.d.ts +3 -3
  854. package/dist/index.d.ts.map +1 -1
  855. package/dist/index.js.map +1 -1
  856. package/dist/kws.d.ts +2 -2
  857. package/dist/kws.d.ts.map +1 -1
  858. package/dist/kws.js.map +1 -1
  859. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +6 -0
  860. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
  861. package/dist/lexicons/app/bsky/actor/defs.defs.js +1 -0
  862. package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
  863. package/dist/logger.d.ts +1 -1
  864. package/dist/logger.d.ts.map +1 -1
  865. package/dist/logger.js.map +1 -1
  866. package/dist/pipeline.d.ts +1 -1
  867. package/dist/pipeline.d.ts.map +1 -1
  868. package/dist/pipeline.js.map +1 -1
  869. package/dist/rolodex.d.ts +2 -2
  870. package/dist/rolodex.d.ts.map +1 -1
  871. package/dist/rolodex.js.map +1 -1
  872. package/dist/stash.d.ts +2 -2
  873. package/dist/stash.d.ts.map +1 -1
  874. package/dist/stash.js.map +1 -1
  875. package/dist/util/http.d.ts +1 -1
  876. package/dist/util/http.d.ts.map +1 -1
  877. package/dist/util/http.js.map +1 -1
  878. package/dist/util/standard-site.d.ts +1 -1
  879. package/dist/util/standard-site.d.ts.map +1 -1
  880. package/dist/util/standard-site.js.map +1 -1
  881. package/dist/util/uris.d.ts +2 -2
  882. package/dist/util/uris.d.ts.map +1 -1
  883. package/dist/util/uris.js.map +1 -1
  884. package/dist/util.d.ts +1 -1
  885. package/dist/util.d.ts.map +1 -1
  886. package/dist/util.js.map +1 -1
  887. package/dist/views/index.d.ts +11 -11
  888. package/dist/views/index.d.ts.map +1 -1
  889. package/dist/views/index.js.map +1 -1
  890. package/dist/views/threads-v2.d.ts +3 -3
  891. package/dist/views/threads-v2.d.ts.map +1 -1
  892. package/dist/views/threads-v2.js.map +1 -1
  893. package/dist/views/types.d.ts +1 -1
  894. package/dist/views/types.d.ts.map +1 -1
  895. package/dist/views/types.js.map +1 -1
  896. package/dist/views/util.d.ts +2 -2
  897. package/dist/views/util.d.ts.map +1 -1
  898. package/dist/views/util.js.map +1 -1
  899. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/suggestions.ts"],"names":[],"mappings":"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","sourcesContent":["import { ServiceImpl } from '@connectrpc/connect'\nimport { sql } from 'kysely'\nimport { Service } from '../../../proto/bsky_connect.js'\nimport { Database } from '../db/index.js'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getFollowSuggestions(req) {\n const { actorDid, relativeToDid, cursor, limit } = req\n if (relativeToDid) {\n return getFollowSuggestionsRelativeTo(db, {\n actorDid,\n relativeToDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n } else {\n return getFollowSuggestionsGlobal(db, {\n actorDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n }\n },\n\n async getSuggestedEntities() {\n const entities = await db.db\n .selectFrom('tagged_suggestion')\n .selectAll()\n .execute()\n return {\n entities,\n }\n },\n})\n\nconst getFollowSuggestionsGlobal = async (\n db: Database,\n input: { actorDid: string; cursor?: string; limit?: number },\n) => {\n const alreadyIncluded = parseCursor(input.cursor)\n const suggestions = await db.db\n .selectFrom('suggested_follow')\n .innerJoin('actor', 'actor.did', 'suggested_follow.did')\n .$if(alreadyIncluded.length > 0, (qb) =>\n qb.where('suggested_follow.order', 'not in', alreadyIncluded),\n )\n .selectAll()\n .orderBy('suggested_follow.order', 'asc')\n .execute()\n\n // always include first two\n const firstTwo = suggestions.filter(\n (row) => row.order === 1 || row.order === 2,\n )\n const rest = suggestions.filter((row) => row.order !== 1 && row.order !== 2)\n const limited = firstTwo.concat(shuffle(rest)).slice(0, input.limit)\n\n // if the result set ends up getting larger, consider using a seed included in the cursor for the randomized shuffle\n const cursor =\n limited.length > 0\n ? limited\n .map((row) => row.order.toString())\n .concat(alreadyIncluded.map((id) => id.toString()))\n .join(':')\n : undefined\n\n return {\n dids: limited.map((s) => s.did),\n cursor,\n }\n}\n\nconst getFollowSuggestionsRelativeTo = async (\n db: Database,\n input: {\n actorDid: string\n relativeToDid: string\n cursor?: string\n limit?: number\n },\n) => {\n if (input.cursor) return { dids: [] }\n const limit = input.limit ? Math.min(10, input.limit) : 10\n const actorsViewerFollows = db.db\n .selectFrom('follow')\n .where('creator', '=', input.actorDid)\n .select('subjectDid')\n const mostLikedAccounts = await db.db\n .selectFrom(\n db.db\n .selectFrom('like')\n .where('creator', '=', input.relativeToDid)\n .select(sql`split_part(subject, '/', 3)`.as('subjectDid'))\n .orderBy('sortAt', 'desc')\n .limit(1000) // limit to 1000\n .as('likes'),\n )\n .select('likes.subjectDid as did')\n .select((qb) => qb.fn.count('likes.subjectDid').as('count'))\n .where('likes.subjectDid', 'not in', actorsViewerFollows)\n .where('likes.subjectDid', 'not in', [input.actorDid, input.relativeToDid])\n .groupBy('likes.subjectDid')\n .orderBy('count', 'desc')\n .limit(limit)\n .execute()\n const resultDids = mostLikedAccounts.map((a) => ({ did: a.did })) as {\n did: string\n }[]\n\n if (resultDids.length < limit) {\n // backfill with popular accounts followed by actor\n const mostPopularAccountsActorFollows = await db.db\n .selectFrom('follow')\n .innerJoin('profile_agg', 'follow.subjectDid', 'profile_agg.did')\n .select('follow.subjectDid as did')\n .where('follow.creator', '=', input.actorDid)\n .where('follow.subjectDid', '!=', input.relativeToDid)\n .where('follow.subjectDid', 'not in', actorsViewerFollows)\n .$if(resultDids.length > 0, (qb) =>\n qb.where(\n 'subjectDid',\n 'not in',\n resultDids.map((a) => a.did),\n ),\n )\n .orderBy('profile_agg.followersCount', 'desc')\n .limit(limit)\n .execute()\n\n resultDids.push(...mostPopularAccountsActorFollows)\n }\n\n if (resultDids.length < limit) {\n // backfill with suggested_follow table\n const additional = await db.db\n .selectFrom('suggested_follow')\n .where(\n 'did',\n 'not in',\n // exclude any we already have\n resultDids\n .map((a) => a.did)\n .concat([input.actorDid, input.relativeToDid]),\n )\n // and aren't already followed by viewer\n .where('did', 'not in', actorsViewerFollows)\n .selectAll()\n .execute()\n\n resultDids.push(...additional)\n }\n\n return { dids: resultDids.map((x) => x.did) }\n}\n\nconst parseCursor = (cursor?: string): number[] => {\n if (!cursor) {\n return []\n }\n try {\n return cursor\n .split(':')\n .map((id) => parseInt(id, 10))\n .filter((id) => !isNaN(id))\n } catch {\n return []\n }\n}\n\nconst shuffle = <T>(arr: T[]): T[] => {\n return arr\n .map((value) => ({ value, sort: Math.random() }))\n .sort((a, b) => a.sort - b.sort)\n .map(({ value }) => value)\n}\n"]}
1
+ {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/suggestions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ServiceImpl } from '@connectrpc/connect'\nimport { sql } from 'kysely'\nimport type { Service } from '../../../proto/bsky_connect.js'\nimport type { Database } from '../db/index.js'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getFollowSuggestions(req) {\n const { actorDid, relativeToDid, cursor, limit } = req\n if (relativeToDid) {\n return getFollowSuggestionsRelativeTo(db, {\n actorDid,\n relativeToDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n } else {\n return getFollowSuggestionsGlobal(db, {\n actorDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n }\n },\n\n async getSuggestedEntities() {\n const entities = await db.db\n .selectFrom('tagged_suggestion')\n .selectAll()\n .execute()\n return {\n entities,\n }\n },\n})\n\nconst getFollowSuggestionsGlobal = async (\n db: Database,\n input: { actorDid: string; cursor?: string; limit?: number },\n) => {\n const alreadyIncluded = parseCursor(input.cursor)\n const suggestions = await db.db\n .selectFrom('suggested_follow')\n .innerJoin('actor', 'actor.did', 'suggested_follow.did')\n .$if(alreadyIncluded.length > 0, (qb) =>\n qb.where('suggested_follow.order', 'not in', alreadyIncluded),\n )\n .selectAll()\n .orderBy('suggested_follow.order', 'asc')\n .execute()\n\n // always include first two\n const firstTwo = suggestions.filter(\n (row) => row.order === 1 || row.order === 2,\n )\n const rest = suggestions.filter((row) => row.order !== 1 && row.order !== 2)\n const limited = firstTwo.concat(shuffle(rest)).slice(0, input.limit)\n\n // if the result set ends up getting larger, consider using a seed included in the cursor for the randomized shuffle\n const cursor =\n limited.length > 0\n ? limited\n .map((row) => row.order.toString())\n .concat(alreadyIncluded.map((id) => id.toString()))\n .join(':')\n : undefined\n\n return {\n dids: limited.map((s) => s.did),\n cursor,\n }\n}\n\nconst getFollowSuggestionsRelativeTo = async (\n db: Database,\n input: {\n actorDid: string\n relativeToDid: string\n cursor?: string\n limit?: number\n },\n) => {\n if (input.cursor) return { dids: [] }\n const limit = input.limit ? Math.min(10, input.limit) : 10\n const actorsViewerFollows = db.db\n .selectFrom('follow')\n .where('creator', '=', input.actorDid)\n .select('subjectDid')\n const mostLikedAccounts = await db.db\n .selectFrom(\n db.db\n .selectFrom('like')\n .where('creator', '=', input.relativeToDid)\n .select(sql`split_part(subject, '/', 3)`.as('subjectDid'))\n .orderBy('sortAt', 'desc')\n .limit(1000) // limit to 1000\n .as('likes'),\n )\n .select('likes.subjectDid as did')\n .select((qb) => qb.fn.count('likes.subjectDid').as('count'))\n .where('likes.subjectDid', 'not in', actorsViewerFollows)\n .where('likes.subjectDid', 'not in', [input.actorDid, input.relativeToDid])\n .groupBy('likes.subjectDid')\n .orderBy('count', 'desc')\n .limit(limit)\n .execute()\n const resultDids = mostLikedAccounts.map((a) => ({ did: a.did })) as {\n did: string\n }[]\n\n if (resultDids.length < limit) {\n // backfill with popular accounts followed by actor\n const mostPopularAccountsActorFollows = await db.db\n .selectFrom('follow')\n .innerJoin('profile_agg', 'follow.subjectDid', 'profile_agg.did')\n .select('follow.subjectDid as did')\n .where('follow.creator', '=', input.actorDid)\n .where('follow.subjectDid', '!=', input.relativeToDid)\n .where('follow.subjectDid', 'not in', actorsViewerFollows)\n .$if(resultDids.length > 0, (qb) =>\n qb.where(\n 'subjectDid',\n 'not in',\n resultDids.map((a) => a.did),\n ),\n )\n .orderBy('profile_agg.followersCount', 'desc')\n .limit(limit)\n .execute()\n\n resultDids.push(...mostPopularAccountsActorFollows)\n }\n\n if (resultDids.length < limit) {\n // backfill with suggested_follow table\n const additional = await db.db\n .selectFrom('suggested_follow')\n .where(\n 'did',\n 'not in',\n // exclude any we already have\n resultDids\n .map((a) => a.did)\n .concat([input.actorDid, input.relativeToDid]),\n )\n // and aren't already followed by viewer\n .where('did', 'not in', actorsViewerFollows)\n .selectAll()\n .execute()\n\n resultDids.push(...additional)\n }\n\n return { dids: resultDids.map((x) => x.did) }\n}\n\nconst parseCursor = (cursor?: string): number[] => {\n if (!cursor) {\n return []\n }\n try {\n return cursor\n .split(':')\n .map((id) => parseInt(id, 10))\n .filter((id) => !isNaN(id))\n } catch {\n return []\n }\n}\n\nconst shuffle = <T>(arr: T[]): T[] => {\n return arr\n .map((value) => ({ value, sort: Math.random() }))\n .sort((a, b) => a.sort - b.sort)\n .map(({ value }) => value)\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { ServiceImpl } from '@connectrpc/connect';
2
- import { Service } from '../../../proto/bsky_connect.js';
3
- import { Database } from '../db/index.js';
1
+ import type { ServiceImpl } from '@connectrpc/connect';
2
+ import type { Service } from '../../../proto/bsky_connect.js';
3
+ import type { Database } from '../db/index.js';
4
4
  declare const _default: (db: Database) => Partial<ServiceImpl<typeof Service>>;
5
5
  export default _default;
6
6
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;6BAErB,QAAQ,KAAG,OAAO,CAAC,WAAW,CAAC,OAAO,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;6BAE1B,QAAQ,KAAG,OAAO,CAAC,WAAW,CAAC,OAAO,OAAO,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/sync.ts"],"names":[],"mappings":"AAIA,eAAe,CAAC,EAAY,EAAwC,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,YAAY,CAAC,GAAG;QACpB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,EAAE;aACpB,UAAU,CAAC,YAAY,CAAC;aACxB,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;aAC/B,MAAM,CAAC,SAAS,CAAC;aACjB,gBAAgB,EAAE,CAAA;QACrB,OAAO;YACL,GAAG,EAAE,GAAG,EAAE,OAAO,IAAI,SAAS;SAC/B,CAAA;IACH,CAAC;CACF,CAAC,CAAA","sourcesContent":["import { ServiceImpl } from '@connectrpc/connect'\nimport { Service } from '../../../proto/bsky_connect.js'\nimport { Database } from '../db/index.js'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getLatestRev(req) {\n const res = await db.db\n .selectFrom('actor_sync')\n .where('did', '=', req.actorDid)\n .select('repoRev')\n .executeTakeFirst()\n return {\n rev: res?.repoRev ?? undefined,\n }\n },\n})\n"]}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/sync.ts"],"names":[],"mappings":"AAIA,eAAe,CAAC,EAAY,EAAwC,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,YAAY,CAAC,GAAG;QACpB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,EAAE;aACpB,UAAU,CAAC,YAAY,CAAC;aACxB,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC;aAC/B,MAAM,CAAC,SAAS,CAAC;aACjB,gBAAgB,EAAE,CAAA;QACrB,OAAO;YACL,GAAG,EAAE,GAAG,EAAE,OAAO,IAAI,SAAS;SAC/B,CAAA;IACH,CAAC;CACF,CAAC,CAAA","sourcesContent":["import type { ServiceImpl } from '@connectrpc/connect'\nimport type { Service } from '../../../proto/bsky_connect.js'\nimport type { Database } from '../db/index.js'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getLatestRev(req) {\n const res = await db.db\n .selectFrom('actor_sync')\n .where('did', '=', req.actorDid)\n .select('repoRev')\n .executeTakeFirst()\n return {\n rev: res?.repoRev ?? undefined,\n }\n },\n})\n"]}
@@ -1,6 +1,6 @@
1
- import { ServiceImpl } from '@connectrpc/connect';
2
- import { Service } from '../../../proto/bsky_connect.js';
3
- import { Database } from '../db/index.js';
1
+ import type { ServiceImpl } from '@connectrpc/connect';
2
+ import type { Service } from '../../../proto/bsky_connect.js';
3
+ import type { Database } from '../db/index.js';
4
4
  declare const _default: (db: Database) => Partial<ServiceImpl<typeof Service>>;
5
5
  export default _default;
6
6
  //# sourceMappingURL=threads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;6BAGrB,QAAQ,KAAG,OAAO,CAAC,WAAW,CAAC,OAAO,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;6BAG1B,QAAQ,KAAG,OAAO,CAAC,WAAW,CAAC,OAAO,OAAO,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/threads.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEpE,eAAe,CAAC,EAAY,EAAwC,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,SAAS,CAAC,GAAG;QACjB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;QACrC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3B,GAAG,EAAE,OAAO;gBACZ,YAAY,EAAE,KAAK;aACpB,CAAC;iBACC,UAAU,CAAC,UAAU,CAAC;iBACtB,SAAS,EAAE;iBACX,OAAO,EAAE;YACZ,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,KAAK;aACb,CAAC;iBACC,UAAU,CAAC,YAAY,CAAC;iBACxB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC;iBAC/C,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;iBAC9B,SAAS,EAAE;iBACX,OAAO,EAAE;SACb,CAAC,CAAA;QACF,MAAM,IAAI,GAAG;YACX,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9B,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;SACjC,CAAA;QACD,OAAO,EAAE,IAAI,EAAE,CAAA;IACjB,CAAC;CACF,CAAC,CAAA","sourcesContent":["import { ServiceImpl } from '@connectrpc/connect'\nimport { Service } from '../../../proto/bsky_connect.js'\nimport { Database } from '../db/index.js'\nimport { getAncestorsAndSelfQb, getDescendentsQb } from '../util.js'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getThread(req) {\n const { postUri, above, below } = req\n const [ancestors, descendents] = await Promise.all([\n getAncestorsAndSelfQb(db.db, {\n uri: postUri,\n parentHeight: above,\n })\n .selectFrom('ancestor')\n .selectAll()\n .execute(),\n getDescendentsQb(db.db, {\n uri: postUri,\n depth: below,\n })\n .selectFrom('descendent')\n .innerJoin('post', 'post.uri', 'descendent.uri')\n .orderBy('post.sortAt', 'desc')\n .selectAll()\n .execute(),\n ])\n const uris = [\n ...ancestors.map((p) => p.uri),\n ...descendents.map((p) => p.uri),\n ]\n return { uris }\n },\n})\n"]}
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/threads.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEpE,eAAe,CAAC,EAAY,EAAwC,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,SAAS,CAAC,GAAG;QACjB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;QACrC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3B,GAAG,EAAE,OAAO;gBACZ,YAAY,EAAE,KAAK;aACpB,CAAC;iBACC,UAAU,CAAC,UAAU,CAAC;iBACtB,SAAS,EAAE;iBACX,OAAO,EAAE;YACZ,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE;gBACtB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,KAAK;aACb,CAAC;iBACC,UAAU,CAAC,YAAY,CAAC;iBACxB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC;iBAC/C,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;iBAC9B,SAAS,EAAE;iBACX,OAAO,EAAE;SACb,CAAC,CAAA;QACF,MAAM,IAAI,GAAG;YACX,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9B,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;SACjC,CAAA;QACD,OAAO,EAAE,IAAI,EAAE,CAAA;IACjB,CAAC;CACF,CAAC,CAAA","sourcesContent":["import type { ServiceImpl } from '@connectrpc/connect'\nimport type { Service } from '../../../proto/bsky_connect.js'\nimport type { Database } from '../db/index.js'\nimport { getAncestorsAndSelfQb, getDescendentsQb } from '../util.js'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getThread(req) {\n const { postUri, above, below } = req\n const [ancestors, descendents] = await Promise.all([\n getAncestorsAndSelfQb(db.db, {\n uri: postUri,\n parentHeight: above,\n })\n .selectFrom('ancestor')\n .selectAll()\n .execute(),\n getDescendentsQb(db.db, {\n uri: postUri,\n depth: below,\n })\n .selectFrom('descendent')\n .innerJoin('post', 'post.uri', 'descendent.uri')\n .orderBy('post.sortAt', 'desc')\n .selectAll()\n .execute(),\n ])\n const uris = [\n ...ancestors.map((p) => p.uri),\n ...descendents.map((p) => p.uri),\n ]\n return { uris }\n },\n})\n"]}
@@ -1,6 +1,6 @@
1
- import { IdResolver } from '@atproto/identity';
1
+ import type { IdResolver } from '@atproto/identity';
2
2
  import { BackgroundQueue } from './background.js';
3
- import { Database } from './db/index.js';
3
+ import type { Database } from './db/index.js';
4
4
  import { IndexingService } from './indexing/index.js';
5
5
  export declare class RepoSubscription {
6
6
  private readonly abortController;
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../../src/data-plane/server/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,OAAO,CAAC,CAAmC;IACnD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC,YAAY,EACV,OAAO,EACP,EAAE,EACF,UAAU,GACX,EAAE;QACD,OAAO,EAAE,MAAM,CAAA;QACf,EAAE,EAAE,QAAQ,CAAA;QACZ,UAAU,EAAE,UAAU,CAAA;KACvB,EAUA;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,OAAO,YAEV;IAED,SAAS,uBAER;IAEK,KAAK,kBAWV;IAEK,IAAI,kBAcT;IAEK,OAAO,kBAGZ;IAEK,UAAU,kBAGf;IAEK,OAAO,kBAOZ;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF"}
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../../src/data-plane/server/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAQnD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,OAAO,CAAC,CAAmC;IACnD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IAEvC,YAAY,EACV,OAAO,EACP,EAAE,EACF,UAAU,GACX,EAAE;QACD,OAAO,EAAE,MAAM,CAAA;QACf,EAAE,EAAE,QAAQ,CAAA;QACZ,UAAU,EAAE,UAAU,CAAA;KACvB,EAUA;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,OAAO,YAEV;IAED,SAAS,uBAER;IAEK,KAAK,kBAWV;IAEK,IAAI,kBAcT;IAEK,OAAO,kBAGZ;IAEK,UAAU,kBAGf;IAEK,OAAO,kBAOZ;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { WriteOpAction } from '@atproto/repo';
2
- import { Firehose, MemoryRunner } from '@atproto/sync';
2
+ import { Firehose, MemoryRunner, } from '@atproto/sync';
3
3
  import { subLogger as log } from '../../logger.js';
4
4
  import { BackgroundQueue } from './background.js';
5
5
  import { IndexingService } from './indexing/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../../src/data-plane/server/subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { IdResolver } from '@atproto/identity'\nimport { WriteOpAction } from '@atproto/repo'\nimport { Event as FirehoseEvent, Firehose, MemoryRunner } from '@atproto/sync'\nimport { subLogger as log } from '../../logger.js'\nimport { BackgroundQueue } from './background.js'\nimport { Database } from './db/index.js'\nimport { IndexingService } from './indexing/index.js'\n\nexport class RepoSubscription {\n private readonly abortController = new AbortController()\n private current?: ReturnType<typeof createFirehose>\n readonly background: BackgroundQueue<Database>\n readonly indexingSvc: IndexingService\n private readonly service: string\n private readonly idResolver: IdResolver\n\n constructor({\n service,\n db,\n idResolver,\n }: {\n service: string\n db: Database\n idResolver: IdResolver\n }) {\n this.service = service\n this.idResolver = idResolver\n this.background = new BackgroundQueue(db, {\n // @TODO This has historically been using the default concurrency\n // (Infinity) but we may want to limit this in the future to avoid\n // overloading the database with indexing tasks.\n concurrency: Number.POSITIVE_INFINITY,\n })\n this.indexingSvc = new IndexingService(db, idResolver, this.background)\n }\n\n get destroyed() {\n return this.abortController.signal.aborted\n }\n\n get running() {\n return this.current != null\n }\n\n getCursor() {\n return this.current?.runner.getCursor()\n }\n\n async start() {\n this.abortController.signal.throwIfAborted()\n\n if (!this.current) {\n this.current = createFirehose({\n idResolver: this.idResolver,\n service: this.service,\n indexingSvc: this.indexingSvc,\n })\n void this.current.firehose.start()\n }\n }\n\n async stop() {\n try {\n if (this.current) {\n const { firehose, runner } = this.current\n this.current = undefined\n try {\n await firehose.destroy()\n } finally {\n await runner.destroy()\n }\n }\n } finally {\n await this.background.processAll()\n }\n }\n\n async restart() {\n await this.stop()\n void this.start()\n }\n\n async processAll() {\n await this.current?.runner.processAll()\n await this.background.processAll()\n }\n\n async destroy() {\n this.abortController.abort()\n try {\n await this.stop()\n } finally {\n await this.background.destroy()\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nconst createFirehose = (opts: {\n idResolver: IdResolver\n service: string\n indexingSvc: IndexingService\n}) => {\n const { idResolver, service, indexingSvc } = opts\n const runner = new MemoryRunner({ startCursor: 0 })\n const firehose = new Firehose({\n idResolver,\n runner,\n service,\n unauthenticatedHandles: true, // indexing service handles these\n unauthenticatedCommits: true, // @TODO there seems to be a very rare issue where the authenticator thinks a block is missing in deletion ops\n onError: (err) => log.error({ err }, 'error in subscription'),\n handleEvent: async (evt: FirehoseEvent) => {\n if (evt.event === 'identity') {\n await indexingSvc.indexHandle(evt.did, evt.time, true)\n } else if (evt.event === 'account') {\n if (evt.active === false && evt.status === 'deleted') {\n await indexingSvc.deleteActor(evt.did)\n } else {\n await indexingSvc.updateActorStatus(evt.did, evt.active, evt.status)\n }\n } else if (evt.event === 'sync') {\n await Promise.all([\n indexingSvc.setCommitLastSeen(evt.did, evt.cid, evt.rev),\n indexingSvc.indexHandle(evt.did, evt.time),\n ])\n } else {\n const indexFn =\n evt.event === 'delete'\n ? indexingSvc.deleteRecord(evt.uri)\n : indexingSvc.indexRecord(\n evt.uri,\n evt.cid,\n evt.record,\n evt.event === 'create'\n ? WriteOpAction.Create\n : WriteOpAction.Update,\n evt.time,\n )\n await Promise.all([\n indexFn,\n indexingSvc.setCommitLastSeen(evt.did, evt.commit, evt.rev),\n indexingSvc.indexHandle(evt.did, evt.time),\n ])\n }\n },\n })\n return { firehose, runner }\n}\n"]}
1
+ {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../../src/data-plane/server/subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IdResolver } from '@atproto/identity'\nimport { WriteOpAction } from '@atproto/repo'\nimport {\n type Event as FirehoseEvent,\n Firehose,\n MemoryRunner,\n} from '@atproto/sync'\nimport { subLogger as log } from '../../logger.js'\nimport { BackgroundQueue } from './background.js'\nimport type { Database } from './db/index.js'\nimport { IndexingService } from './indexing/index.js'\n\nexport class RepoSubscription {\n private readonly abortController = new AbortController()\n private current?: ReturnType<typeof createFirehose>\n readonly background: BackgroundQueue<Database>\n readonly indexingSvc: IndexingService\n private readonly service: string\n private readonly idResolver: IdResolver\n\n constructor({\n service,\n db,\n idResolver,\n }: {\n service: string\n db: Database\n idResolver: IdResolver\n }) {\n this.service = service\n this.idResolver = idResolver\n this.background = new BackgroundQueue(db, {\n // @TODO This has historically been using the default concurrency\n // (Infinity) but we may want to limit this in the future to avoid\n // overloading the database with indexing tasks.\n concurrency: Number.POSITIVE_INFINITY,\n })\n this.indexingSvc = new IndexingService(db, idResolver, this.background)\n }\n\n get destroyed() {\n return this.abortController.signal.aborted\n }\n\n get running() {\n return this.current != null\n }\n\n getCursor() {\n return this.current?.runner.getCursor()\n }\n\n async start() {\n this.abortController.signal.throwIfAborted()\n\n if (!this.current) {\n this.current = createFirehose({\n idResolver: this.idResolver,\n service: this.service,\n indexingSvc: this.indexingSvc,\n })\n void this.current.firehose.start()\n }\n }\n\n async stop() {\n try {\n if (this.current) {\n const { firehose, runner } = this.current\n this.current = undefined\n try {\n await firehose.destroy()\n } finally {\n await runner.destroy()\n }\n }\n } finally {\n await this.background.processAll()\n }\n }\n\n async restart() {\n await this.stop()\n void this.start()\n }\n\n async processAll() {\n await this.current?.runner.processAll()\n await this.background.processAll()\n }\n\n async destroy() {\n this.abortController.abort()\n try {\n await this.stop()\n } finally {\n await this.background.destroy()\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nconst createFirehose = (opts: {\n idResolver: IdResolver\n service: string\n indexingSvc: IndexingService\n}) => {\n const { idResolver, service, indexingSvc } = opts\n const runner = new MemoryRunner({ startCursor: 0 })\n const firehose = new Firehose({\n idResolver,\n runner,\n service,\n unauthenticatedHandles: true, // indexing service handles these\n unauthenticatedCommits: true, // @TODO there seems to be a very rare issue where the authenticator thinks a block is missing in deletion ops\n onError: (err) => log.error({ err }, 'error in subscription'),\n handleEvent: async (evt: FirehoseEvent) => {\n if (evt.event === 'identity') {\n await indexingSvc.indexHandle(evt.did, evt.time, true)\n } else if (evt.event === 'account') {\n if (evt.active === false && evt.status === 'deleted') {\n await indexingSvc.deleteActor(evt.did)\n } else {\n await indexingSvc.updateActorStatus(evt.did, evt.active, evt.status)\n }\n } else if (evt.event === 'sync') {\n await Promise.all([\n indexingSvc.setCommitLastSeen(evt.did, evt.cid, evt.rev),\n indexingSvc.indexHandle(evt.did, evt.time),\n ])\n } else {\n const indexFn =\n evt.event === 'delete'\n ? indexingSvc.deleteRecord(evt.uri)\n : indexingSvc.indexRecord(\n evt.uri,\n evt.cid,\n evt.record,\n evt.event === 'create'\n ? WriteOpAction.Create\n : WriteOpAction.Update,\n evt.time,\n )\n await Promise.all([\n indexFn,\n indexingSvc.setCommitLastSeen(evt.did, evt.commit, evt.rev),\n indexingSvc.indexHandle(evt.did, evt.time),\n ])\n }\n },\n })\n return { firehose, runner }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { GateRecord, PostRecord, PostReplyRef } from '../../views/types.js';
2
- import { DatabaseSchema } from './db/database-schema.js';
1
+ import type { GateRecord, PostRecord, PostReplyRef } from '../../views/types.js';
2
+ import type { DatabaseSchema } from './db/database-schema.js';
3
3
  export declare const getDescendentsQb: (db: DatabaseSchema, opts: {
4
4
  uri: string;
5
5
  depth: number;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/data-plane/server/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,eAAO,MAAM,gBAAgB,OACvB,cAAc,QACZ;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;;;;;;;;;;;;;GAqBF,CAAA;AAED,eAAO,MAAM,qBAAqB,OAC5B,cAAc,QACZ;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;CACrB;;;;;;;;;;;;;;;;GA4BF,CAAA;AAED,eAAO,MAAM,gBAAgB,UACpB,YAAY,UACX;IACN,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAA;CACjC,YAcF,CAAA;AACD,eAAO,MAAM,kBAAkB,OACzB,cAAc,cACN,MAAM,YACR,MAAM,YACN,UAAU,GAAG,IAAI,QACrB,UAAU,GAAG,IAAI,qBAwDxB,CAAA;AAID,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,oBAAoB,WACvB,MAAM,WACL;IACP,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KACA,eAqCF,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/data-plane/server/util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG7D,eAAO,MAAM,gBAAgB,OACvB,cAAc,QACZ;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;;;;;;;;;;;;;GAqBF,CAAA;AAED,eAAO,MAAM,qBAAqB,OAC5B,cAAc,QACZ;IACJ,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;CACrB;;;;;;;;;;;;;;;;GA4BF,CAAA;AAED,eAAO,MAAM,gBAAgB,UACpB,YAAY,UACX;IACN,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAA;CACjC,YAcF,CAAA;AACD,eAAO,MAAM,kBAAkB,OACzB,cAAc,cACN,MAAM,YACR,MAAM,YACN,UAAU,GAAG,IAAI,QACrB,UAAU,GAAG,IAAI,qBAwDxB,CAAA;AAID,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,oBAAoB,WACvB,MAAM,WACL;IACP,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KACA,eAqCF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/data-plane/server/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { sql } from 'kysely'\nimport { GateRecord, PostRecord, PostReplyRef } from '../../views/types.js'\nimport { parseThreadGate } from '../../views/util.js'\nimport { DatabaseSchema } from './db/database-schema.js'\nimport { valuesList } from './db/util.js'\n\nexport const getDescendentsQb = (\n db: DatabaseSchema,\n opts: {\n uri: string\n depth: number // required, protects against cycles\n },\n) => {\n const { uri, depth } = opts\n const query = db.withRecursive('descendent(uri, depth)', (cte) => {\n return cte\n .selectFrom('post')\n .select(['post.uri as uri', sql<number>`1`.as('depth')])\n .where(sql`1`, '<=', depth)\n .where('replyParent', '=', uri)\n .unionAll(\n cte\n .selectFrom('post')\n .innerJoin('descendent', 'descendent.uri', 'post.replyParent')\n .where('descendent.depth', '<', depth)\n .select([\n 'post.uri as uri',\n sql<number>`descendent.depth + 1`.as('depth'),\n ]),\n )\n })\n return query\n}\n\nexport const getAncestorsAndSelfQb = (\n db: DatabaseSchema,\n opts: {\n uri: string\n parentHeight: number // required, protects against cycles\n },\n) => {\n const { uri, parentHeight } = opts\n const query = db.withRecursive(\n 'ancestor(uri, ancestorUri, height)',\n (cte) => {\n return cte\n .selectFrom('post')\n .select([\n 'post.uri as uri',\n 'post.replyParent as ancestorUri',\n sql<number>`0`.as('height'),\n ])\n .where('uri', '=', uri)\n .unionAll(\n cte\n .selectFrom('post')\n .innerJoin('ancestor', 'ancestor.ancestorUri', 'post.uri')\n .where('ancestor.height', '<', parentHeight)\n .select([\n 'post.uri as uri',\n 'post.replyParent as ancestorUri',\n sql<number>`ancestor.height + 1`.as('height'),\n ]),\n )\n },\n )\n return query\n}\n\nexport const invalidReplyRoot = (\n reply: PostReplyRef,\n parent: {\n record: PostRecord\n invalidReplyRoot: boolean | null\n },\n) => {\n const replyRoot = reply.root.uri\n const replyParent = reply.parent.uri\n // if parent is not a valid reply, transitively this is not a valid one either\n if (parent.invalidReplyRoot) {\n return true\n }\n // replying to root post: ensure the root looks correct\n if (replyParent === replyRoot) {\n return !!parent.record.reply\n }\n // replying to a reply: ensure the parent is a reply for the same root post\n return parent.record.reply?.root.uri !== replyRoot\n}\nexport const violatesThreadGate = async (\n db: DatabaseSchema,\n replierDid: string,\n ownerDid: string,\n rootPost: PostRecord | null,\n gate: GateRecord | null,\n) => {\n const {\n canReply,\n allowFollower,\n allowFollowing,\n allowListUris = [],\n } = parseThreadGate(replierDid, ownerDid, rootPost, gate)\n if (canReply) {\n return false\n }\n if (!allowFollower && !allowFollowing && !allowListUris?.length) {\n return true\n }\n const { ref } = db.dynamic\n const nullResult = sql<null>`${null}`\n const check = await db\n .selectFrom(valuesList([replierDid]).as(sql`subject (did)`))\n .select([\n allowFollower\n ? db\n .selectFrom('follow')\n .where('subjectDid', '=', ownerDid)\n .whereRef('creator', '=', ref('subject.did'))\n .select('subjectDid')\n .as('isFollower')\n : nullResult.as('isFollower'),\n allowFollowing\n ? db\n .selectFrom('follow')\n .where('creator', '=', ownerDid)\n .whereRef('subjectDid', '=', ref('subject.did'))\n .select('creator')\n .as('isFollowed')\n : nullResult.as('isFollowed'),\n allowListUris.length\n ? db\n .selectFrom('list_item')\n .where('list_item.listUri', 'in', allowListUris)\n .whereRef('list_item.subjectDid', '=', ref('subject.did'))\n .limit(1)\n .select('listUri')\n .as('isInList')\n : nullResult.as('isInList'),\n ])\n .executeTakeFirst()\n\n if (allowFollowing && check?.isFollowed) {\n return false\n } else if (allowFollower && check?.isFollower) {\n return false\n } else if (allowListUris.length && check?.isInList) {\n return false\n }\n\n return true\n}\n\n// @NOTE: This type is not complete with all supported options.\n// Only the ones that we needed to apply custom logic on are currently present.\nexport type PostSearchQuery = {\n q: string\n author: string | undefined\n}\n\nexport const parsePostSearchQuery = (\n qParam: string,\n params?: {\n author?: string\n },\n): PostSearchQuery => {\n // Accept individual params, but give preference to options embedded in `q`.\n let author = params?.author\n\n const parts: string[] = []\n let curr = ''\n let quoted = false\n for (const c of qParam) {\n if (c === ' ' && !quoted) {\n if (curr.trim()) parts.push(curr)\n curr = ''\n continue\n }\n\n if (c === '\"') {\n quoted = !quoted\n }\n curr += c\n }\n if (curr.trim()) parts.push(curr)\n\n const qParts: string[] = []\n for (const p of parts) {\n const tokens = p.split(':')\n if (tokens[0] === 'did') {\n author = p\n } else if (tokens[0] === 'author' || tokens[0] === 'from') {\n author = tokens[1]\n } else {\n qParts.push(p)\n }\n }\n\n return {\n q: qParts.join(' '),\n author,\n }\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/data-plane/server/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { sql } from 'kysely'\nimport type { GateRecord, PostRecord, PostReplyRef } from '../../views/types.js'\nimport { parseThreadGate } from '../../views/util.js'\nimport type { DatabaseSchema } from './db/database-schema.js'\nimport { valuesList } from './db/util.js'\n\nexport const getDescendentsQb = (\n db: DatabaseSchema,\n opts: {\n uri: string\n depth: number // required, protects against cycles\n },\n) => {\n const { uri, depth } = opts\n const query = db.withRecursive('descendent(uri, depth)', (cte) => {\n return cte\n .selectFrom('post')\n .select(['post.uri as uri', sql<number>`1`.as('depth')])\n .where(sql`1`, '<=', depth)\n .where('replyParent', '=', uri)\n .unionAll(\n cte\n .selectFrom('post')\n .innerJoin('descendent', 'descendent.uri', 'post.replyParent')\n .where('descendent.depth', '<', depth)\n .select([\n 'post.uri as uri',\n sql<number>`descendent.depth + 1`.as('depth'),\n ]),\n )\n })\n return query\n}\n\nexport const getAncestorsAndSelfQb = (\n db: DatabaseSchema,\n opts: {\n uri: string\n parentHeight: number // required, protects against cycles\n },\n) => {\n const { uri, parentHeight } = opts\n const query = db.withRecursive(\n 'ancestor(uri, ancestorUri, height)',\n (cte) => {\n return cte\n .selectFrom('post')\n .select([\n 'post.uri as uri',\n 'post.replyParent as ancestorUri',\n sql<number>`0`.as('height'),\n ])\n .where('uri', '=', uri)\n .unionAll(\n cte\n .selectFrom('post')\n .innerJoin('ancestor', 'ancestor.ancestorUri', 'post.uri')\n .where('ancestor.height', '<', parentHeight)\n .select([\n 'post.uri as uri',\n 'post.replyParent as ancestorUri',\n sql<number>`ancestor.height + 1`.as('height'),\n ]),\n )\n },\n )\n return query\n}\n\nexport const invalidReplyRoot = (\n reply: PostReplyRef,\n parent: {\n record: PostRecord\n invalidReplyRoot: boolean | null\n },\n) => {\n const replyRoot = reply.root.uri\n const replyParent = reply.parent.uri\n // if parent is not a valid reply, transitively this is not a valid one either\n if (parent.invalidReplyRoot) {\n return true\n }\n // replying to root post: ensure the root looks correct\n if (replyParent === replyRoot) {\n return !!parent.record.reply\n }\n // replying to a reply: ensure the parent is a reply for the same root post\n return parent.record.reply?.root.uri !== replyRoot\n}\nexport const violatesThreadGate = async (\n db: DatabaseSchema,\n replierDid: string,\n ownerDid: string,\n rootPost: PostRecord | null,\n gate: GateRecord | null,\n) => {\n const {\n canReply,\n allowFollower,\n allowFollowing,\n allowListUris = [],\n } = parseThreadGate(replierDid, ownerDid, rootPost, gate)\n if (canReply) {\n return false\n }\n if (!allowFollower && !allowFollowing && !allowListUris?.length) {\n return true\n }\n const { ref } = db.dynamic\n const nullResult = sql<null>`${null}`\n const check = await db\n .selectFrom(valuesList([replierDid]).as(sql`subject (did)`))\n .select([\n allowFollower\n ? db\n .selectFrom('follow')\n .where('subjectDid', '=', ownerDid)\n .whereRef('creator', '=', ref('subject.did'))\n .select('subjectDid')\n .as('isFollower')\n : nullResult.as('isFollower'),\n allowFollowing\n ? db\n .selectFrom('follow')\n .where('creator', '=', ownerDid)\n .whereRef('subjectDid', '=', ref('subject.did'))\n .select('creator')\n .as('isFollowed')\n : nullResult.as('isFollowed'),\n allowListUris.length\n ? db\n .selectFrom('list_item')\n .where('list_item.listUri', 'in', allowListUris)\n .whereRef('list_item.subjectDid', '=', ref('subject.did'))\n .limit(1)\n .select('listUri')\n .as('isInList')\n : nullResult.as('isInList'),\n ])\n .executeTakeFirst()\n\n if (allowFollowing && check?.isFollowed) {\n return false\n } else if (allowFollower && check?.isFollower) {\n return false\n } else if (allowListUris.length && check?.isInList) {\n return false\n }\n\n return true\n}\n\n// @NOTE: This type is not complete with all supported options.\n// Only the ones that we needed to apply custom logic on are currently present.\nexport type PostSearchQuery = {\n q: string\n author: string | undefined\n}\n\nexport const parsePostSearchQuery = (\n qParam: string,\n params?: {\n author?: string\n },\n): PostSearchQuery => {\n // Accept individual params, but give preference to options embedded in `q`.\n let author = params?.author\n\n const parts: string[] = []\n let curr = ''\n let quoted = false\n for (const c of qParam) {\n if (c === ' ' && !quoted) {\n if (curr.trim()) parts.push(curr)\n curr = ''\n continue\n }\n\n if (c === '\"') {\n quoted = !quoted\n }\n curr += c\n }\n if (curr.trim()) parts.push(curr)\n\n const qParts: string[] = []\n for (const p of parts) {\n const tokens = p.split(':')\n if (tokens[0] === 'did') {\n author = p\n } else if (tokens[0] === 'author' || tokens[0] === 'from') {\n author = tokens[1]\n } else {\n qParts.push(p)\n }\n }\n\n return {\n q: qParts.join(' '),\n author,\n }\n}\n"]}
package/dist/error.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { ErrorRequestHandler } from 'express';
1
+ import type { ErrorRequestHandler } from 'express';
2
2
  export declare const handler: ErrorRequestHandler;
3
3
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAI7C,eAAO,MAAM,OAAO,EAAE,mBAOrB,CAAA"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAIlD,eAAO,MAAM,OAAO,EAAE,mBAOrB,CAAA"}
package/dist/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACnE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAA;IACtD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5C,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AACxD,CAAC,CAAA","sourcesContent":["import { ErrorRequestHandler } from 'express'\nimport { XRPCError } from '@atproto/xrpc-server'\nimport { httpLogger as log } from './logger.js'\n\nexport const handler: ErrorRequestHandler = (err, _req, res, next) => {\n log.error({ err }, 'unexpected internal server error')\n if (res.headersSent) {\n return next(err)\n }\n const serverError = XRPCError.fromError(err)\n res.status(serverError.type).json(serverError.payload)\n}\n"]}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACnE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAA;IACtD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5C,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AACxD,CAAC,CAAA","sourcesContent":["import type { ErrorRequestHandler } from 'express'\nimport { XRPCError } from '@atproto/xrpc-server'\nimport { httpLogger as log } from './logger.js'\n\nexport const handler: ErrorRequestHandler = (err, _req, res, next) => {\n log.error({ err }, 'unexpected internal server error')\n if (res.headersSent) {\n return next(err)\n }\n const serverError = XRPCError.fromError(err)\n res.status(serverError.type).json(serverError.payload)\n}\n"]}
package/dist/etcd.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Etcd3, Watcher } from 'etcd3';
1
+ import type { Etcd3, Watcher } from 'etcd3';
2
2
  /**
3
3
  * A reactive map based on the keys and values stored within etcd under a given prefix.
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"etcd.d.ts","sourceRoot":"","sources":["../src/etcd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEtC;;GAEG;AACH,qBAAa,OAAO;IAOhB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAPhB,KAAK,8BAAoC;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IACrC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,EAAE,CAAK;IAE1C,YACU,IAAI,EAAE,KAAK,EACX,MAAM,SAAK,EAIpB;IAEK,OAAO,kBAuBZ;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,iBAEd;IAEA,MAAM,qCAMN;IAED,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,QAExC;IAED,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;CAMd;AAaD,KAAK,cAAc,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA"}
1
+ {"version":3,"file":"etcd.d.ts","sourceRoot":"","sources":["../src/etcd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE3C;;GAEG;AACH,qBAAa,OAAO;IAOhB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAPhB,KAAK,8BAAoC;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IACrC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,EAAE,CAAK;IAE1C,YACU,IAAI,EAAE,KAAK,EACX,MAAM,SAAK,EAIpB;IAEK,OAAO,kBAuBZ;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,iBAEd;IAEA,MAAM,qCAMN;IAED,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,QAExC;IAED,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;CAMd;AAaD,KAAK,cAAc,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA"}
package/dist/etcd.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"etcd.js","sourceRoot":"","sources":["../src/etcd.ts"],"names":[],"mappings":"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","sourcesContent":["import { once } from 'node:events'\nimport { Etcd3, Watcher } from 'etcd3'\n\n/**\n * A reactive map based on the keys and values stored within etcd under a given prefix.\n */\nexport class EtcdMap {\n inner = new Map<string, VersionedValue>()\n watcher: Watcher\n connecting: Promise<void> | undefined\n handlers: ((self: EtcdMap) => void)[] = []\n\n constructor(\n private etcd: Etcd3,\n private prefix = '',\n ) {\n this.watcher = etcd.watch().prefix(prefix).watcher()\n this.connecting = connectWatcher(this.watcher)\n }\n\n async connect() {\n this.watcher.on('put', (kv) => {\n const key = kv.key.toString()\n const value = kv.value.toString()\n const rev = revToInt(kv.mod_revision)\n this.apply(key, { value, rev })\n })\n this.watcher.on('delete', (kv) => {\n const key = kv.key.toString()\n const value = null\n const rev = revToInt(kv.mod_revision)\n this.apply(key, { value, rev })\n })\n await this.connecting?.finally(() => {\n this.connecting = undefined\n })\n const { kvs } = await this.etcd.getAll().prefix(this.prefix).exec()\n for (const kv of kvs) {\n const key = kv.key.toString()\n const value = kv.value.toString()\n const rev = revToInt(kv.mod_revision)\n this.apply(key, { value, rev })\n }\n }\n\n get(key: string) {\n return this.inner.get(key)?.value ?? null\n }\n\n *values() {\n for (const { value } of this.inner.values()) {\n if (value !== null) {\n yield value\n }\n }\n }\n\n onUpdate(handler: (self: EtcdMap) => void) {\n this.handlers.push(handler)\n }\n\n private update() {\n for (const handler of this.handlers) {\n handler(this)\n }\n }\n\n private apply(key, vv: VersionedValue) {\n const curr = this.inner.get(key)\n if (curr && curr.rev > vv.rev) return\n this.inner.set(key, vv)\n this.update()\n }\n}\n\nfunction revToInt(rev: string) {\n return parseInt(rev, 10)\n}\n\nasync function connectWatcher(watcher: Watcher) {\n await Promise.race([\n once(watcher, 'connected'),\n once(watcher, 'error').then((err) => Promise.reject(err)),\n ])\n}\n\ntype VersionedValue = {\n rev: number\n value: string | null\n}\n"]}
1
+ {"version":3,"file":"etcd.js","sourceRoot":"","sources":["../src/etcd.ts"],"names":[],"mappings":"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","sourcesContent":["import { once } from 'node:events'\nimport type { Etcd3, Watcher } from 'etcd3'\n\n/**\n * A reactive map based on the keys and values stored within etcd under a given prefix.\n */\nexport class EtcdMap {\n inner = new Map<string, VersionedValue>()\n watcher: Watcher\n connecting: Promise<void> | undefined\n handlers: ((self: EtcdMap) => void)[] = []\n\n constructor(\n private etcd: Etcd3,\n private prefix = '',\n ) {\n this.watcher = etcd.watch().prefix(prefix).watcher()\n this.connecting = connectWatcher(this.watcher)\n }\n\n async connect() {\n this.watcher.on('put', (kv) => {\n const key = kv.key.toString()\n const value = kv.value.toString()\n const rev = revToInt(kv.mod_revision)\n this.apply(key, { value, rev })\n })\n this.watcher.on('delete', (kv) => {\n const key = kv.key.toString()\n const value = null\n const rev = revToInt(kv.mod_revision)\n this.apply(key, { value, rev })\n })\n await this.connecting?.finally(() => {\n this.connecting = undefined\n })\n const { kvs } = await this.etcd.getAll().prefix(this.prefix).exec()\n for (const kv of kvs) {\n const key = kv.key.toString()\n const value = kv.value.toString()\n const rev = revToInt(kv.mod_revision)\n this.apply(key, { value, rev })\n }\n }\n\n get(key: string) {\n return this.inner.get(key)?.value ?? null\n }\n\n *values() {\n for (const { value } of this.inner.values()) {\n if (value !== null) {\n yield value\n }\n }\n }\n\n onUpdate(handler: (self: EtcdMap) => void) {\n this.handlers.push(handler)\n }\n\n private update() {\n for (const handler of this.handlers) {\n handler(this)\n }\n }\n\n private apply(key, vv: VersionedValue) {\n const curr = this.inner.get(key)\n if (curr && curr.rev > vv.rev) return\n this.inner.set(key, vv)\n this.update()\n }\n}\n\nfunction revToInt(rev: string) {\n return parseInt(rev, 10)\n}\n\nasync function connectWatcher(watcher: Watcher) {\n await Promise.race([\n once(watcher, 'connected'),\n once(watcher, 'error').then((err) => Promise.reject(err)),\n ])\n}\n\ntype VersionedValue = {\n rev: number\n value: string | null\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type express from 'express';
2
2
  import { Gate } from './gates.js';
3
- import { ScopedFeatureGatesClient, UserContext } from './types.js';
3
+ import type { ScopedFeatureGatesClient, UserContext } from './types.js';
4
4
  export { type ScopedFeatureGatesClient } from './types.js';
5
5
  export declare class FeatureGatesClient {
6
6
  private config;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feature-gates/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,IAAI,EAA4B,MAAM,YAAY,CAAA;AAE3D,OAAO,EAEL,wBAAwB,EACxB,WAAW,EACZ,MAAM,YAAY,CAAA;AA0BnB,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE1D,qBAAa,kBAAkB;IAa3B,OAAO,CAAC,MAAM;IAZhB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAe;IAE9B;;;OAGG;IACH,IAAI,cAAO;IAEX,YACU,MAAM,EAAE;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAA;KACpC,EAKF;IAEK,KAAK,kBA6FV;IAEK,OAAO,kBAQZ;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;IAED;;;OAGG;IACH,OAAO,CAAC,UAAU;IAUlB,KAAK,CAAC,iBAAiB,EAAE,WAAW,GAAG,wBAAwB,CAoB9D;IAED;;;;;OAKG;IACH,2BAA2B,CAAC,EAC1B,MAAM,EACN,GAAG,GACJ,EAAE;QACD;;WAEG;QACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QACrB;;WAEG;QACH,GAAG,EAAE,OAAO,CAAC,OAAO,CAAA;KACrB,GAAG,WAAW,CASd;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feature-gates/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,IAAI,EAA4B,MAAM,YAAY,CAAA;AAE3D,OAAO,KAAK,EAEV,wBAAwB,EACxB,WAAW,EACZ,MAAM,YAAY,CAAA;AA0BnB,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE1D,qBAAa,kBAAkB;IAa3B,OAAO,CAAC,MAAM;IAZhB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAe;IAE9B;;;OAGG;IACH,IAAI,cAAO;IAEX,YACU,MAAM,EAAE;QACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;QAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAA;KACpC,EAKF;IAEK,KAAK,kBA6FV;IAEK,OAAO,kBAQZ;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;IAED;;;OAGG;IACH,OAAO,CAAC,UAAU;IAUlB,KAAK,CAAC,iBAAiB,EAAE,WAAW,GAAG,wBAAwB,CAoB9D;IAED;;;;;OAKG;IACH,2BAA2B,CAAC,EAC1B,MAAM,EACN,GAAG,GACJ,EAAE;QACD;;WAEG;QACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QACrB;;WAEG;QACH,GAAG,EAAE,OAAO,CAAC,OAAO,CAAA;KACrB,GAAG,WAAW,CASd;CACF"}
@@ -18,6 +18,7 @@ const REFETCH_INTERVAL = 60e3; // 1 minute
18
18
  */
19
19
  const ANALYTICS_HEADER_DEVICE_ID = 'X-Bsky-Device-Id';
20
20
  const ANALYTICS_HEADER_SESSION_ID = 'X-Bsky-Session-Id';
21
+ export {} from './types.js';
21
22
  export class FeatureGatesClient {
22
23
  constructor(config) {
23
24
  this.config = config;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feature-gates/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { GrowthBookClient } from '@growthbook/growthbook'\nimport type express from 'express'\nimport { featureGatesLogger } from '../logger.js'\nimport { Gate, IGNORE_METRICS_FOR_GATES } from './gates.js'\nimport { MetricsClient } from './metrics.js'\nimport {\n CheckedFeatureGatesMap,\n ScopedFeatureGatesClient,\n UserContext,\n} from './types.js'\nimport {\n extractUserContextFromGrowthbookUserContext,\n mergeUserContexts,\n normalizeUserContext,\n parsedUserContextToTrackingMetadata,\n} from './utils.js'\n\n/**\n * We want this to be sufficiently high that we don't time out under\n * normal conditions, but not so high that it takes too long to boot\n * the server.\n */\nconst FETCH_TIMEOUT = 3e3 // 3 seconds\n\n/**\n * StatSig used to default to every 10s, but I think 1m is fine\n */\nconst REFETCH_INTERVAL = 60e3 // 1 minute\n\n/**\n * These need to match what the client sends\n */\nconst ANALYTICS_HEADER_DEVICE_ID = 'X-Bsky-Device-Id'\nconst ANALYTICS_HEADER_SESSION_ID = 'X-Bsky-Session-Id'\n\nexport { type ScopedFeatureGatesClient } from './types.js'\n\nexport class FeatureGatesClient {\n private ready = false\n private client: GrowthBookClient | undefined = undefined\n private refreshInterval: NodeJS.Timeout | undefined = undefined\n private metrics: MetricsClient\n\n /**\n * Easy access to the `Gate` enum for consumers of this class, so they don't\n * need to import it separately.\n */\n Gate = Gate\n\n constructor(\n private config: {\n growthBookApiHost?: string\n growthBookClientKey?: string\n eventProxyTrackingEndpoint?: string\n },\n ) {\n this.metrics = new MetricsClient({\n trackingEndpoint: config.eventProxyTrackingEndpoint,\n })\n }\n\n async start() {\n if (!this.config.growthBookApiHost || !this.config.growthBookClientKey) {\n featureGatesLogger.info(\n {},\n 'feature gates not configured, skipping initialization',\n )\n return\n }\n\n try {\n this.client = new GrowthBookClient({\n apiHost: this.config.growthBookApiHost,\n clientKey: this.config.growthBookClientKey,\n onFeatureUsage: async (feature, result, userContext) => {\n if (IGNORE_METRICS_FOR_GATES.has(feature as Gate)) return\n\n await this.metrics.track(\n 'feature:viewed',\n {\n featureId: feature,\n featureResultValue: result.value,\n experimentId: result.experiment?.key,\n variationId: result.experimentResult?.key,\n },\n parsedUserContextToTrackingMetadata(\n extractUserContextFromGrowthbookUserContext(userContext),\n ),\n )\n },\n trackingCallback: async (experiment, result, userContext) => {\n /**\n * Experiments are only fired in a feature gate has an Experiment\n * attached in Growthbook. Howerver, we want to be extra sure that a\n * misconfigured experiment doesn't result in a huge increase in events, so we\n * protect this here.\n */\n if (\n result.featureId &&\n IGNORE_METRICS_FOR_GATES.has(result.featureId as Gate)\n )\n return\n\n await this.metrics.track(\n 'experiment:viewed',\n {\n experimentId: experiment.key,\n variationId: result.key,\n },\n parsedUserContextToTrackingMetadata(\n extractUserContextFromGrowthbookUserContext(userContext),\n ),\n )\n },\n })\n\n const { source, error } = await this.client.init({\n timeout: FETCH_TIMEOUT,\n })\n\n /**\n * This does not necessarily mean that the client completely failed,\n * since it could just be that the request timed out. It may succeed\n * after the timeout, or later during refreshes.\n *\n * @see https://docs.growthbook.io/lib/node#error-handling\n */\n if (error) {\n featureGatesLogger.error(\n { err: error, source },\n 'Client failed to initialize normally',\n )\n }\n\n /**\n * Set up periodic refresh of feature definitions\n *\n * @see https://docs.growthbook.io/lib/node#refreshing-features\n */\n this.refreshInterval = setInterval(async () => {\n try {\n await this.client?.refreshFeatures({\n timeout: FETCH_TIMEOUT,\n })\n } catch (err) {\n featureGatesLogger.error({ err }, 'Failed to refresh features')\n }\n }, REFETCH_INTERVAL)\n\n /* Ready or not, here we come */\n this.ready = true\n } catch (err) {\n featureGatesLogger.error({ err }, 'Client initialization failed')\n }\n }\n\n async destroy() {\n if (this.ready) {\n this.ready = false\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval)\n }\n }\n await this.metrics.stop()\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n\n /**\n * Evaluate multiple feature gates for a given user, returning a map of gate\n * ID to boolean result.\n */\n private checkGates(\n gates: Gate[],\n userContext: UserContext,\n ): CheckedFeatureGatesMap {\n const gb = this.client\n const attributes = normalizeUserContext(userContext)\n if (!gb || !this.ready) return new Map(gates.map((g) => [g, false]))\n return new Map(gates.map((g) => [g, gb.isOn(g, { attributes })]))\n }\n\n scope(scopedUserContext: UserContext): ScopedFeatureGatesClient {\n /*\n * Create initial deviceId and sessionId values for the scoped client, to\n * be used throughout this request lifecycle.\n */\n const base = normalizeUserContext(scopedUserContext)\n return {\n Gate: this.Gate,\n checkGates: (\n gates: Gate[],\n userContextOverrides?: Pick<UserContext, 'did'>,\n ) => {\n const userContext = mergeUserContexts(base, userContextOverrides)\n return this.checkGates(gates, userContext)\n },\n checkGate: (gate: Gate, userContextOverrides?: UserContext) => {\n const userContext = mergeUserContexts(base, userContextOverrides)\n return this.checkGates([gate], userContext).get(gate) || false\n },\n }\n }\n\n /**\n * Parse properties available in XRPC handlers to `UserContext`. The returned\n * proeprties are used as GrowthBook `attributes` as well as the metadata\n * payload for our analytics events. This ensures that the same user properties\n * are used for both feature gate targeting and analytics.\n */\n parseUserContextFromHandler({\n viewer,\n req,\n }: {\n /**\n * The user's DID\n */\n viewer: string | null\n /**\n * The express request object, used to extract analytics headers for the user context\n */\n req: express.Request\n }): UserContext {\n const deviceId = req.header(ANALYTICS_HEADER_DEVICE_ID)\n const sessionId = req.header(ANALYTICS_HEADER_SESSION_ID)\n\n return normalizeUserContext({\n did: viewer,\n deviceId,\n sessionId,\n })\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/feature-gates/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { GrowthBookClient } from '@growthbook/growthbook'\nimport type express from 'express'\nimport { featureGatesLogger } from '../logger.js'\nimport { Gate, IGNORE_METRICS_FOR_GATES } from './gates.js'\nimport { MetricsClient } from './metrics.js'\nimport type {\n CheckedFeatureGatesMap,\n ScopedFeatureGatesClient,\n UserContext,\n} from './types.js'\nimport {\n extractUserContextFromGrowthbookUserContext,\n mergeUserContexts,\n normalizeUserContext,\n parsedUserContextToTrackingMetadata,\n} from './utils.js'\n\n/**\n * We want this to be sufficiently high that we don't time out under\n * normal conditions, but not so high that it takes too long to boot\n * the server.\n */\nconst FETCH_TIMEOUT = 3e3 // 3 seconds\n\n/**\n * StatSig used to default to every 10s, but I think 1m is fine\n */\nconst REFETCH_INTERVAL = 60e3 // 1 minute\n\n/**\n * These need to match what the client sends\n */\nconst ANALYTICS_HEADER_DEVICE_ID = 'X-Bsky-Device-Id'\nconst ANALYTICS_HEADER_SESSION_ID = 'X-Bsky-Session-Id'\n\nexport { type ScopedFeatureGatesClient } from './types.js'\n\nexport class FeatureGatesClient {\n private ready = false\n private client: GrowthBookClient | undefined = undefined\n private refreshInterval: NodeJS.Timeout | undefined = undefined\n private metrics: MetricsClient\n\n /**\n * Easy access to the `Gate` enum for consumers of this class, so they don't\n * need to import it separately.\n */\n Gate = Gate\n\n constructor(\n private config: {\n growthBookApiHost?: string\n growthBookClientKey?: string\n eventProxyTrackingEndpoint?: string\n },\n ) {\n this.metrics = new MetricsClient({\n trackingEndpoint: config.eventProxyTrackingEndpoint,\n })\n }\n\n async start() {\n if (!this.config.growthBookApiHost || !this.config.growthBookClientKey) {\n featureGatesLogger.info(\n {},\n 'feature gates not configured, skipping initialization',\n )\n return\n }\n\n try {\n this.client = new GrowthBookClient({\n apiHost: this.config.growthBookApiHost,\n clientKey: this.config.growthBookClientKey,\n onFeatureUsage: async (feature, result, userContext) => {\n if (IGNORE_METRICS_FOR_GATES.has(feature as Gate)) return\n\n await this.metrics.track(\n 'feature:viewed',\n {\n featureId: feature,\n featureResultValue: result.value,\n experimentId: result.experiment?.key,\n variationId: result.experimentResult?.key,\n },\n parsedUserContextToTrackingMetadata(\n extractUserContextFromGrowthbookUserContext(userContext),\n ),\n )\n },\n trackingCallback: async (experiment, result, userContext) => {\n /**\n * Experiments are only fired in a feature gate has an Experiment\n * attached in Growthbook. Howerver, we want to be extra sure that a\n * misconfigured experiment doesn't result in a huge increase in events, so we\n * protect this here.\n */\n if (\n result.featureId &&\n IGNORE_METRICS_FOR_GATES.has(result.featureId as Gate)\n )\n return\n\n await this.metrics.track(\n 'experiment:viewed',\n {\n experimentId: experiment.key,\n variationId: result.key,\n },\n parsedUserContextToTrackingMetadata(\n extractUserContextFromGrowthbookUserContext(userContext),\n ),\n )\n },\n })\n\n const { source, error } = await this.client.init({\n timeout: FETCH_TIMEOUT,\n })\n\n /**\n * This does not necessarily mean that the client completely failed,\n * since it could just be that the request timed out. It may succeed\n * after the timeout, or later during refreshes.\n *\n * @see https://docs.growthbook.io/lib/node#error-handling\n */\n if (error) {\n featureGatesLogger.error(\n { err: error, source },\n 'Client failed to initialize normally',\n )\n }\n\n /**\n * Set up periodic refresh of feature definitions\n *\n * @see https://docs.growthbook.io/lib/node#refreshing-features\n */\n this.refreshInterval = setInterval(async () => {\n try {\n await this.client?.refreshFeatures({\n timeout: FETCH_TIMEOUT,\n })\n } catch (err) {\n featureGatesLogger.error({ err }, 'Failed to refresh features')\n }\n }, REFETCH_INTERVAL)\n\n /* Ready or not, here we come */\n this.ready = true\n } catch (err) {\n featureGatesLogger.error({ err }, 'Client initialization failed')\n }\n }\n\n async destroy() {\n if (this.ready) {\n this.ready = false\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval)\n }\n }\n await this.metrics.stop()\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n\n /**\n * Evaluate multiple feature gates for a given user, returning a map of gate\n * ID to boolean result.\n */\n private checkGates(\n gates: Gate[],\n userContext: UserContext,\n ): CheckedFeatureGatesMap {\n const gb = this.client\n const attributes = normalizeUserContext(userContext)\n if (!gb || !this.ready) return new Map(gates.map((g) => [g, false]))\n return new Map(gates.map((g) => [g, gb.isOn(g, { attributes })]))\n }\n\n scope(scopedUserContext: UserContext): ScopedFeatureGatesClient {\n /*\n * Create initial deviceId and sessionId values for the scoped client, to\n * be used throughout this request lifecycle.\n */\n const base = normalizeUserContext(scopedUserContext)\n return {\n Gate: this.Gate,\n checkGates: (\n gates: Gate[],\n userContextOverrides?: Pick<UserContext, 'did'>,\n ) => {\n const userContext = mergeUserContexts(base, userContextOverrides)\n return this.checkGates(gates, userContext)\n },\n checkGate: (gate: Gate, userContextOverrides?: UserContext) => {\n const userContext = mergeUserContexts(base, userContextOverrides)\n return this.checkGates([gate], userContext).get(gate) || false\n },\n }\n }\n\n /**\n * Parse properties available in XRPC handlers to `UserContext`. The returned\n * proeprties are used as GrowthBook `attributes` as well as the metadata\n * payload for our analytics events. This ensures that the same user properties\n * are used for both feature gate targeting and analytics.\n */\n parseUserContextFromHandler({\n viewer,\n req,\n }: {\n /**\n * The user's DID\n */\n viewer: string | null\n /**\n * The express request object, used to extract analytics headers for the user context\n */\n req: express.Request\n }): UserContext {\n const deviceId = req.header(ANALYTICS_HEADER_DEVICE_ID)\n const sessionId = req.header(ANALYTICS_HEADER_SESSION_ID)\n\n return normalizeUserContext({\n did: viewer,\n deviceId,\n sessionId,\n })\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Gate } from './gates.js';
1
+ import type { Gate } from './gates.js';
2
2
  /**
3
3
  * The user context passed to the feature gates client for evaluation and
4
4
  * tracking purposes.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/feature-gates/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KACxB,CAAA;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,IAAI,CAAA;IACjB,UAAU,CACR,KAAK,EAAE,IAAI,EAAE,EACb,oBAAoB,CAAC,EAAE,WAAW,GACjC,sBAAsB,CAAA;IACzB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;CACnE,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/feature-gates/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KACxB,CAAA;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,IAAI,CAAA;IACjB,UAAU,CACR,KAAK,EAAE,IAAI,EAAE,EACb,oBAAoB,CAAC,EAAE,WAAW,GACjC,sBAAsB,CAAA;IACzB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;CACnE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/feature-gates/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Gate } from './gates.js'\n\n/**\n * The user context passed to the feature gates client for evaluation and\n * tracking purposes.\n */\nexport type UserContext = {\n did?: string | null\n deviceId?: string | null\n sessionId?: string | null\n}\n\n/**\n * User context that has been normalized to ensure all required properties are\n * present and have fallback values. This is the format that we expect to use\n * for all feature gate evaluations and analytics tracking.\n */\nexport type NormalizedUserContext = {\n did?: string\n deviceId: string\n sessionId: string\n}\n\n/**\n * This loosely matches the metadata we send from the client for analytics\n * events. We want to make sure we have the same properties in both places so\n * that we can correlate feature gate evaluations with analytics events.\n *\n * @see https://github.com/bluesky-social/social-app/blob/76109a58dc7aafccdfbd07a81cbd9925e065d1c0/src/analytics/metadata.ts\n */\nexport type TrackingMetadata = {\n base: {\n deviceId: string\n sessionId: string\n }\n session: {\n did: string | undefined\n }\n}\n\n/**\n * Pre-evaluated feature gates map, the result of\n * `ctx.FeatureGatesClient.checkGates()`\n */\nexport type CheckedFeatureGatesMap = Map<Gate, boolean>\n\n/**\n * The primary interface for interacting with feature gates in the system. This\n * client is designed to be used in the context of an XRPC handler, where we\n * can parse the user context from the request and then create a scoped client\n * for that request lifecycle. The client provides methods for checking multiple\n * gates at once, as well as checking individual gates with optional user\n * context overrides.\n */\nexport type ScopedFeatureGatesClient = {\n Gate: typeof Gate\n checkGates(\n gates: Gate[],\n userContextOverrides?: UserContext,\n ): CheckedFeatureGatesMap\n checkGate(gate: Gate, userContextOverrides?: UserContext): boolean\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/feature-gates/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Gate } from './gates.js'\n\n/**\n * The user context passed to the feature gates client for evaluation and\n * tracking purposes.\n */\nexport type UserContext = {\n did?: string | null\n deviceId?: string | null\n sessionId?: string | null\n}\n\n/**\n * User context that has been normalized to ensure all required properties are\n * present and have fallback values. This is the format that we expect to use\n * for all feature gate evaluations and analytics tracking.\n */\nexport type NormalizedUserContext = {\n did?: string\n deviceId: string\n sessionId: string\n}\n\n/**\n * This loosely matches the metadata we send from the client for analytics\n * events. We want to make sure we have the same properties in both places so\n * that we can correlate feature gate evaluations with analytics events.\n *\n * @see https://github.com/bluesky-social/social-app/blob/76109a58dc7aafccdfbd07a81cbd9925e065d1c0/src/analytics/metadata.ts\n */\nexport type TrackingMetadata = {\n base: {\n deviceId: string\n sessionId: string\n }\n session: {\n did: string | undefined\n }\n}\n\n/**\n * Pre-evaluated feature gates map, the result of\n * `ctx.FeatureGatesClient.checkGates()`\n */\nexport type CheckedFeatureGatesMap = Map<Gate, boolean>\n\n/**\n * The primary interface for interacting with feature gates in the system. This\n * client is designed to be used in the context of an XRPC handler, where we\n * can parse the user context from the request and then create a scoped client\n * for that request lifecycle. The client provides methods for checking multiple\n * gates at once, as well as checking individual gates with optional user\n * context overrides.\n */\nexport type ScopedFeatureGatesClient = {\n Gate: typeof Gate\n checkGates(\n gates: Gate[],\n userContextOverrides?: UserContext,\n ): CheckedFeatureGatesMap\n checkGate(gate: Gate, userContextOverrides?: UserContext): boolean\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { type UserContext as GrowthBookUserContext } from '@growthbook/growthbook';
2
- import { NormalizedUserContext, TrackingMetadata, UserContext } from './types.js';
1
+ import type { UserContext as GrowthBookUserContext } from '@growthbook/growthbook';
2
+ import type { NormalizedUserContext, TrackingMetadata, UserContext } from './types.js';
3
3
  export declare function normalizeUserContext(userContext: UserContext): NormalizedUserContext;
4
4
  /**
5
5
  * Merge the base user context with any overrides provided at check time. This
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/feature-gates/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,IAAI,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,WAAW,GACvB,qBAAqB,CA+BvB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,EAC3B,SAAS,CAAC,EAAE,WAAW,GACtB,qBAAqB,CA4CvB;AAED;;;GAGG;AACH,wBAAgB,2CAA2C,CACzD,WAAW,EAAE,qBAAqB,GACjC,qBAAqB,CAYvB;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,qBAAqB,GACjC,gBAAgB,CAUlB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/feature-gates/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,IAAI,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,WAAW,GACvB,qBAAqB,CA+BvB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,EAC3B,SAAS,CAAC,EAAE,WAAW,GACtB,qBAAqB,CA4CvB;AAED;;;GAGG;AACH,wBAAgB,2CAA2C,CACzD,WAAW,EAAE,qBAAqB,GACjC,qBAAqB,CAYvB;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,qBAAqB,GACjC,gBAAgB,CAUlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/feature-gates/utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAQhC,MAAM,UAAU,oBAAoB,CAClC,WAAwB;IAExB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,SAAS,CAAA;IACxC,IAAI,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;IACnC,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS,CAAA;IAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd;;;;;;;;WAQG;QACH,QAAQ,GAAG,GAAG,IAAI,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IACjD,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf;;;WAGG;QACH,SAAS,GAAG,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,GAAG;QACH,QAAQ;QACR,SAAS;KACV,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAA2B,EAC3B,SAAuB;IAEvB,MAAM,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,SAAS,CAAA;IACnD,IAAI,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAA;IACnD,IAAI,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAA;IAEtD,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,IAAI,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC;;;;;WAKG;QACH,QAAQ,GAAG,GAAG,CAAA;IAChB,CAAC;SAAM,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACnC;;;;;;;;;WASG;QACH,QAAQ,GAAG,GAAG,CAAA;QACd,cAAc,GAAG,IAAI,CAAA;IACvB,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB;;;;WAIG;QACH,SAAS,GAAG,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,GAAG;QACH,QAAQ;QACR,SAAS;KACV,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2CAA2C,CACzD,WAAkC;IAElC;;;;;OAKG;IACH,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,WAAW,CAAC,UAAU,EAAE,GAAG;QAChC,QAAQ,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ;QAC1C,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS;KAC7C,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CACjD,WAAkC;IAElC,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC;QACD,OAAO,EAAE;YACP,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,SAAS;SAClC;KACF,CAAA;AACH,CAAC","sourcesContent":["import crypto from 'node:crypto'\nimport { type UserContext as GrowthBookUserContext } from '@growthbook/growthbook'\nimport {\n NormalizedUserContext,\n TrackingMetadata,\n UserContext,\n} from './types.js'\n\nexport function normalizeUserContext(\n userContext: UserContext,\n): NormalizedUserContext {\n const did = userContext.did ?? undefined\n let deviceId = userContext.deviceId\n let sessionId = userContext.sessionId\n\n if (!deviceId) {\n /*\n * If we don't have a deviceId by other means, such as a request header,\n * fall back to the DID. Our event proxy ensures ordering based on this\n * deviceId (also called a stableId in the proxy), so if we have a DID, we\n * want to use it to ensure client and server events are properly ordered.\n *\n * Without any better option for identifying the user, we generate a\n * random deviceId.\n */\n deviceId = did ?? `anon-${crypto.randomUUID()}`\n }\n\n if (!sessionId) {\n /*\n * If we don't have a sessionId by other means, such as a request header,\n * generate a random sessionId.\n */\n sessionId = `anon-${crypto.randomUUID()}`\n }\n\n return {\n did,\n deviceId,\n sessionId,\n }\n}\n\n/**\n * Merge the base user context with any overrides provided at check time. This\n * allows us to set a base context for the request, but also override or add\n * properties for specific gate checks if needed.\n */\nexport function mergeUserContexts(\n base: NormalizedUserContext,\n overrides?: UserContext,\n): NormalizedUserContext {\n const did = overrides?.did ?? base.did ?? undefined\n let deviceId = overrides?.deviceId ?? base.deviceId\n let sessionId = overrides?.sessionId ?? base.sessionId\n\n let isDifferentDid = false\n\n if (did && deviceId.startsWith('anon-')) {\n /*\n * If we have a DID, but the existing deviceId is anonymous, use the DID as\n * the deviceId to ensure proper ordering of events in our event proxy.\n * This matches the logic in `normalizeUserContext` where we fall back to\n * the DID for the deviceId if we don't have a deviceId from other means.\n */\n deviceId = did\n } else if (did && deviceId !== did) {\n /*\n * If we have both a DID and a deviceId, but they don't match, we may be\n * overriding context to check a feature that is independent of a single\n * request handler lifecycle.\n *\n * Example: a ScopedFeatureGatesClient was created in the root request\n * handler with a user context that has a DID, but later on in the request\n * lifecycle we may check a gate using the DID of the author of the image\n * we're returning as part of the response.\n */\n deviceId = did\n isDifferentDid = true\n }\n\n if (isDifferentDid) {\n /*\n * If we're merging in a different DID, we should also generate a new\n * sessionId to avoid mixing events from different users under the same\n * session.\n */\n sessionId = `anon-${crypto.randomUUID()}`\n }\n\n return {\n did,\n deviceId,\n sessionId,\n }\n}\n\n/**\n * Extract the `UserContext` from GrowthBook's own `UserContext`, which we\n * passed into `isOn` as `attributes`.\n */\nexport function extractUserContextFromGrowthbookUserContext(\n userContext: GrowthBookUserContext,\n): NormalizedUserContext {\n /*\n * The values passed to Growthbook already should have been\n * `NormalizedUserContext`, but for type safety we run them through the\n * normalizer again to ensure we have all the required properties and\n * fallbacks in place.\n */\n return normalizeUserContext({\n did: userContext.attributes?.did,\n deviceId: userContext.attributes?.deviceId,\n sessionId: userContext.attributes?.sessionId,\n })\n}\n\n/**\n * Convert the `UserContext` into the `TrackingMetadata` format that we\n * use for our analytics events. This ensures that we have the same user\n * properties as we do for events from our client app.\n */\nexport function parsedUserContextToTrackingMetadata(\n userContext: NormalizedUserContext,\n): TrackingMetadata {\n return {\n base: {\n deviceId: userContext.deviceId,\n sessionId: userContext.sessionId,\n },\n session: {\n did: userContext.did ?? undefined,\n },\n }\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/feature-gates/utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAQhC,MAAM,UAAU,oBAAoB,CAClC,WAAwB;IAExB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,SAAS,CAAA;IACxC,IAAI,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;IACnC,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS,CAAA;IAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd;;;;;;;;WAQG;QACH,QAAQ,GAAG,GAAG,IAAI,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IACjD,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf;;;WAGG;QACH,SAAS,GAAG,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,GAAG;QACH,QAAQ;QACR,SAAS;KACV,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAA2B,EAC3B,SAAuB;IAEvB,MAAM,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,SAAS,CAAA;IACnD,IAAI,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAA;IACnD,IAAI,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAA;IAEtD,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,IAAI,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC;;;;;WAKG;QACH,QAAQ,GAAG,GAAG,CAAA;IAChB,CAAC;SAAM,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACnC;;;;;;;;;WASG;QACH,QAAQ,GAAG,GAAG,CAAA;QACd,cAAc,GAAG,IAAI,CAAA;IACvB,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB;;;;WAIG;QACH,SAAS,GAAG,QAAQ,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,GAAG;QACH,QAAQ;QACR,SAAS;KACV,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2CAA2C,CACzD,WAAkC;IAElC;;;;;OAKG;IACH,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,WAAW,CAAC,UAAU,EAAE,GAAG;QAChC,QAAQ,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ;QAC1C,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS;KAC7C,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CACjD,WAAkC;IAElC,OAAO;QACL,IAAI,EAAE;YACJ,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC;QACD,OAAO,EAAE;YACP,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,SAAS;SAClC;KACF,CAAA;AACH,CAAC","sourcesContent":["import crypto from 'node:crypto'\nimport type { UserContext as GrowthBookUserContext } from '@growthbook/growthbook'\nimport type {\n NormalizedUserContext,\n TrackingMetadata,\n UserContext,\n} from './types.js'\n\nexport function normalizeUserContext(\n userContext: UserContext,\n): NormalizedUserContext {\n const did = userContext.did ?? undefined\n let deviceId = userContext.deviceId\n let sessionId = userContext.sessionId\n\n if (!deviceId) {\n /*\n * If we don't have a deviceId by other means, such as a request header,\n * fall back to the DID. Our event proxy ensures ordering based on this\n * deviceId (also called a stableId in the proxy), so if we have a DID, we\n * want to use it to ensure client and server events are properly ordered.\n *\n * Without any better option for identifying the user, we generate a\n * random deviceId.\n */\n deviceId = did ?? `anon-${crypto.randomUUID()}`\n }\n\n if (!sessionId) {\n /*\n * If we don't have a sessionId by other means, such as a request header,\n * generate a random sessionId.\n */\n sessionId = `anon-${crypto.randomUUID()}`\n }\n\n return {\n did,\n deviceId,\n sessionId,\n }\n}\n\n/**\n * Merge the base user context with any overrides provided at check time. This\n * allows us to set a base context for the request, but also override or add\n * properties for specific gate checks if needed.\n */\nexport function mergeUserContexts(\n base: NormalizedUserContext,\n overrides?: UserContext,\n): NormalizedUserContext {\n const did = overrides?.did ?? base.did ?? undefined\n let deviceId = overrides?.deviceId ?? base.deviceId\n let sessionId = overrides?.sessionId ?? base.sessionId\n\n let isDifferentDid = false\n\n if (did && deviceId.startsWith('anon-')) {\n /*\n * If we have a DID, but the existing deviceId is anonymous, use the DID as\n * the deviceId to ensure proper ordering of events in our event proxy.\n * This matches the logic in `normalizeUserContext` where we fall back to\n * the DID for the deviceId if we don't have a deviceId from other means.\n */\n deviceId = did\n } else if (did && deviceId !== did) {\n /*\n * If we have both a DID and a deviceId, but they don't match, we may be\n * overriding context to check a feature that is independent of a single\n * request handler lifecycle.\n *\n * Example: a ScopedFeatureGatesClient was created in the root request\n * handler with a user context that has a DID, but later on in the request\n * lifecycle we may check a gate using the DID of the author of the image\n * we're returning as part of the response.\n */\n deviceId = did\n isDifferentDid = true\n }\n\n if (isDifferentDid) {\n /*\n * If we're merging in a different DID, we should also generate a new\n * sessionId to avoid mixing events from different users under the same\n * session.\n */\n sessionId = `anon-${crypto.randomUUID()}`\n }\n\n return {\n did,\n deviceId,\n sessionId,\n }\n}\n\n/**\n * Extract the `UserContext` from GrowthBook's own `UserContext`, which we\n * passed into `isOn` as `attributes`.\n */\nexport function extractUserContextFromGrowthbookUserContext(\n userContext: GrowthBookUserContext,\n): NormalizedUserContext {\n /*\n * The values passed to Growthbook already should have been\n * `NormalizedUserContext`, but for type safety we run them through the\n * normalizer again to ensure we have all the required properties and\n * fallbacks in place.\n */\n return normalizeUserContext({\n did: userContext.attributes?.did,\n deviceId: userContext.attributes?.deviceId,\n sessionId: userContext.attributes?.sessionId,\n })\n}\n\n/**\n * Convert the `UserContext` into the `TrackingMetadata` format that we\n * use for our analytics events. This ensures that we have the same user\n * properties as we do for events from our client app.\n */\nexport function parsedUserContextToTrackingMetadata(\n userContext: NormalizedUserContext,\n): TrackingMetadata {\n return {\n base: {\n deviceId: userContext.deviceId,\n sessionId: userContext.sessionId,\n },\n session: {\n did: userContext.did ?? undefined,\n },\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
- import { AtIdentifierString, AtUriString, DatetimeString, DidString, HandleString } from '@atproto/syntax';
2
- import { DataPlaneClient } from '../data-plane/client/index.js';
1
+ import { type AtIdentifierString, type AtUriString, type DatetimeString, type DidString, type HandleString } from '@atproto/syntax';
2
+ import type { DataPlaneClient } from '../data-plane/client/index.js';
3
3
  import { app } from '../lexicons/index.js';
4
- import { VerificationMeta } from '../proto/bsky_pb.js';
5
- import { ChatDeclarationRecord, GermDeclarationRecord, NotificationDeclarationRecord, ProfileRecord, StatusRecord } from '../views/types.js';
6
- import { HydrationMap, RecordInfo } from './util.js';
4
+ import type { VerificationMeta } from '../proto/bsky_pb.js';
5
+ import type { ChatDeclarationRecord, GermDeclarationRecord, NotificationDeclarationRecord, ProfileRecord, StatusRecord } from '../views/types.js';
6
+ import { HydrationMap, type RecordInfo } from './util.js';
7
7
  type AllowActivitySubscriptions = Extract<app.bsky.notification.declaration.Main['allowSubscriptions'], 'followers' | 'mutuals' | 'none'>;
8
8
  export type Actor = {
9
9
  did: DidString;
@@ -25,6 +25,8 @@ export type Actor = {
25
25
  status?: RecordInfo<StatusRecord>;
26
26
  germ?: RecordInfo<GermDeclarationRecord>;
27
27
  allowActivitySubscriptionsFrom: AllowActivitySubscriptions;
28
+ accountModerationTags: Set<string>;
29
+ profileModerationTags: Set<string>;
28
30
  /**
29
31
  * Debug information for internal development
30
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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"}
@@ -122,6 +122,8 @@ export class ActorHydrator {
122
122
  status: status,
123
123
  germ: germ,
124
124
  allowActivitySubscriptionsFrom: allowActivitySubscriptionsFrom(actor.allowActivitySubscriptionsFrom),
125
+ accountModerationTags: new Set(actor.tags),
126
+ profileModerationTags: new Set(actor.profileTags),
125
127
  debug,
126
128
  });
127
129
  }