@atproto/bsky 0.3.13 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/api/app/bsky/actor/getProfile.d.ts.map +1 -1
  3. package/dist/api/app/bsky/actor/getProfile.js +1 -0
  4. package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
  5. package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
  6. package/dist/api/app/bsky/actor/getProfiles.js +1 -0
  7. package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
  8. package/dist/api/app/bsky/actor/getSuggestions.d.ts.map +1 -1
  9. package/dist/api/app/bsky/actor/getSuggestions.js +1 -0
  10. package/dist/api/app/bsky/actor/getSuggestions.js.map +1 -1
  11. package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
  12. package/dist/api/app/bsky/actor/searchActors.js +1 -0
  13. package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
  14. package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
  15. package/dist/api/app/bsky/actor/searchActorsTypeahead.js +1 -0
  16. package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
  17. package/dist/api/app/bsky/bookmark/getBookmarks.d.ts.map +1 -1
  18. package/dist/api/app/bsky/bookmark/getBookmarks.js +1 -0
  19. package/dist/api/app/bsky/bookmark/getBookmarks.js.map +1 -1
  20. package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -1
  21. package/dist/api/app/bsky/contact/getMatches.js +1 -0
  22. package/dist/api/app/bsky/contact/getMatches.js.map +1 -1
  23. package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -1
  24. package/dist/api/app/bsky/contact/importContacts.js +1 -0
  25. package/dist/api/app/bsky/contact/importContacts.js.map +1 -1
  26. package/dist/api/app/bsky/feed/getActorFeeds.d.ts.map +1 -1
  27. package/dist/api/app/bsky/feed/getActorFeeds.js +5 -1
  28. package/dist/api/app/bsky/feed/getActorFeeds.js.map +1 -1
  29. package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
  30. package/dist/api/app/bsky/feed/getActorLikes.js +1 -0
  31. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  32. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
  33. package/dist/api/app/bsky/feed/getAuthorFeed.js +1 -0
  34. package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
  35. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  36. package/dist/api/app/bsky/feed/getFeed.js +1 -0
  37. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  38. package/dist/api/app/bsky/feed/getFeedGenerator.d.ts.map +1 -1
  39. package/dist/api/app/bsky/feed/getFeedGenerator.js +5 -1
  40. package/dist/api/app/bsky/feed/getFeedGenerator.js.map +1 -1
  41. package/dist/api/app/bsky/feed/getFeedGenerators.d.ts.map +1 -1
  42. package/dist/api/app/bsky/feed/getFeedGenerators.js +5 -1
  43. package/dist/api/app/bsky/feed/getFeedGenerators.js.map +1 -1
  44. package/dist/api/app/bsky/feed/getLikes.d.ts.map +1 -1
  45. package/dist/api/app/bsky/feed/getLikes.js +1 -0
  46. package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
  47. package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
  48. package/dist/api/app/bsky/feed/getListFeed.js +1 -0
  49. package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
  50. package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
  51. package/dist/api/app/bsky/feed/getPostThread.js +1 -0
  52. package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
  53. package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
  54. package/dist/api/app/bsky/feed/getPosts.js +5 -1
  55. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  56. package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -1
  57. package/dist/api/app/bsky/feed/getQuotes.js +1 -0
  58. package/dist/api/app/bsky/feed/getQuotes.js.map +1 -1
  59. package/dist/api/app/bsky/feed/getRepostedBy.d.ts.map +1 -1
  60. package/dist/api/app/bsky/feed/getRepostedBy.js +1 -0
  61. package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
  62. package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts.map +1 -1
  63. package/dist/api/app/bsky/feed/getSuggestedFeeds.js +5 -1
  64. package/dist/api/app/bsky/feed/getSuggestedFeeds.js.map +1 -1
  65. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  66. package/dist/api/app/bsky/feed/getTimeline.js +1 -0
  67. package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
  68. package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
  69. package/dist/api/app/bsky/feed/searchPosts.js +1 -0
  70. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  71. package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -1
  72. package/dist/api/app/bsky/feed/searchPostsV2.js +1 -0
  73. package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -1
  74. package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts.map +1 -1
  75. package/dist/api/app/bsky/graph/getActorStarterPacks.js +1 -0
  76. package/dist/api/app/bsky/graph/getActorStarterPacks.js.map +1 -1
  77. package/dist/api/app/bsky/graph/getBlocks.d.ts.map +1 -1
  78. package/dist/api/app/bsky/graph/getBlocks.js +5 -1
  79. package/dist/api/app/bsky/graph/getBlocks.js.map +1 -1
  80. package/dist/api/app/bsky/graph/getFollowers.d.ts.map +1 -1
  81. package/dist/api/app/bsky/graph/getFollowers.js +1 -0
  82. package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
  83. package/dist/api/app/bsky/graph/getFollows.d.ts.map +1 -1
  84. package/dist/api/app/bsky/graph/getFollows.js +1 -0
  85. package/dist/api/app/bsky/graph/getFollows.js.map +1 -1
  86. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -1
  87. package/dist/api/app/bsky/graph/getKnownFollowers.js +1 -0
  88. package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -1
  89. package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
  90. package/dist/api/app/bsky/graph/getList.js +1 -0
  91. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  92. package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +1 -1
  93. package/dist/api/app/bsky/graph/getListBlocks.js +5 -1
  94. package/dist/api/app/bsky/graph/getListBlocks.js.map +1 -1
  95. package/dist/api/app/bsky/graph/getListMutes.d.ts.map +1 -1
  96. package/dist/api/app/bsky/graph/getListMutes.js +5 -1
  97. package/dist/api/app/bsky/graph/getListMutes.js.map +1 -1
  98. package/dist/api/app/bsky/graph/getLists.d.ts.map +1 -1
  99. package/dist/api/app/bsky/graph/getLists.js +1 -0
  100. package/dist/api/app/bsky/graph/getLists.js.map +1 -1
  101. package/dist/api/app/bsky/graph/getListsWithMembership.d.ts.map +1 -1
  102. package/dist/api/app/bsky/graph/getListsWithMembership.js +1 -0
  103. package/dist/api/app/bsky/graph/getListsWithMembership.js.map +1 -1
  104. package/dist/api/app/bsky/graph/getMutes.d.ts.map +1 -1
  105. package/dist/api/app/bsky/graph/getMutes.js +5 -1
  106. package/dist/api/app/bsky/graph/getMutes.js.map +1 -1
  107. package/dist/api/app/bsky/graph/getStarterPack.d.ts.map +1 -1
  108. package/dist/api/app/bsky/graph/getStarterPack.js +1 -0
  109. package/dist/api/app/bsky/graph/getStarterPack.js.map +1 -1
  110. package/dist/api/app/bsky/graph/getStarterPacks.d.ts.map +1 -1
  111. package/dist/api/app/bsky/graph/getStarterPacks.js +1 -0
  112. package/dist/api/app/bsky/graph/getStarterPacks.js.map +1 -1
  113. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts.map +1 -1
  114. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js +1 -0
  115. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js.map +1 -1
  116. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts.map +1 -1
  117. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js +1 -0
  118. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
  119. package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
  120. package/dist/api/app/bsky/graph/searchStarterPacks.js +1 -0
  121. package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
  122. package/dist/api/app/bsky/graph/searchStarterPacksV2.d.ts.map +1 -1
  123. package/dist/api/app/bsky/graph/searchStarterPacksV2.js +1 -0
  124. package/dist/api/app/bsky/graph/searchStarterPacksV2.js.map +1 -1
  125. package/dist/api/app/bsky/labeler/getServices.d.ts.map +1 -1
  126. package/dist/api/app/bsky/labeler/getServices.js +1 -0
  127. package/dist/api/app/bsky/labeler/getServices.js.map +1 -1
  128. package/dist/api/app/bsky/notification/getGroupedNotifications.d.ts.map +1 -1
  129. package/dist/api/app/bsky/notification/getGroupedNotifications.js +41 -20
  130. package/dist/api/app/bsky/notification/getGroupedNotifications.js.map +1 -1
  131. package/dist/api/app/bsky/notification/grouping/algoGravity.d.ts +4 -3
  132. package/dist/api/app/bsky/notification/grouping/algoGravity.d.ts.map +1 -1
  133. package/dist/api/app/bsky/notification/grouping/algoGravity.js +53 -42
  134. package/dist/api/app/bsky/notification/grouping/algoGravity.js.map +1 -1
  135. package/dist/api/app/bsky/notification/grouping/algoLookback.d.ts +4 -3
  136. package/dist/api/app/bsky/notification/grouping/algoLookback.d.ts.map +1 -1
  137. package/dist/api/app/bsky/notification/grouping/algoLookback.js +56 -42
  138. package/dist/api/app/bsky/notification/grouping/algoLookback.js.map +1 -1
  139. package/dist/api/app/bsky/notification/grouping/grouping.d.ts +12 -2
  140. package/dist/api/app/bsky/notification/grouping/grouping.d.ts.map +1 -1
  141. package/dist/api/app/bsky/notification/grouping/grouping.js +20 -6
  142. package/dist/api/app/bsky/notification/grouping/grouping.js.map +1 -1
  143. package/dist/api/app/bsky/notification/grouping/spotlight.d.ts +2 -2
  144. package/dist/api/app/bsky/notification/grouping/spotlight.d.ts.map +1 -1
  145. package/dist/api/app/bsky/notification/grouping/spotlight.js +35 -22
  146. package/dist/api/app/bsky/notification/grouping/spotlight.js.map +1 -1
  147. package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts.map +1 -1
  148. package/dist/api/app/bsky/notification/listActivitySubscriptions.js +1 -0
  149. package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
  150. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  151. package/dist/api/app/bsky/notification/listNotifications.js +5 -1
  152. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  153. package/dist/api/app/bsky/unspecced/atmosphere-grouping.d.ts +16 -0
  154. package/dist/api/app/bsky/unspecced/atmosphere-grouping.d.ts.map +1 -0
  155. package/dist/api/app/bsky/unspecced/atmosphere-grouping.js +124 -0
  156. package/dist/api/app/bsky/unspecced/atmosphere-grouping.js.map +1 -0
  157. package/dist/api/app/bsky/unspecced/atmosphere-hydration.d.ts +32 -0
  158. package/dist/api/app/bsky/unspecced/atmosphere-hydration.d.ts.map +1 -0
  159. package/dist/api/app/bsky/unspecced/atmosphere-hydration.js +201 -0
  160. package/dist/api/app/bsky/unspecced/atmosphere-hydration.js.map +1 -0
  161. package/dist/api/app/bsky/unspecced/atmosphere-pagination.d.ts +6 -0
  162. package/dist/api/app/bsky/unspecced/atmosphere-pagination.d.ts.map +1 -0
  163. package/dist/api/app/bsky/unspecced/atmosphere-pagination.js +164 -0
  164. package/dist/api/app/bsky/unspecced/atmosphere-pagination.js.map +1 -0
  165. package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.d.ts.map +1 -1
  166. package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js +120 -55
  167. package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js.map +1 -1
  168. package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.d.ts +4 -0
  169. package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.d.ts.map +1 -0
  170. package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.js +30 -0
  171. package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.js.map +1 -0
  172. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts.map +1 -1
  173. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js +4 -7
  174. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js.map +1 -1
  175. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
  176. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js +1 -0
  177. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
  178. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts.map +1 -1
  179. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js +1 -0
  180. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js.map +1 -1
  181. package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
  182. package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -0
  183. package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
  184. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts.map +1 -1
  185. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js +4 -7
  186. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js.map +1 -1
  187. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
  188. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js +1 -0
  189. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
  190. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts.map +1 -1
  191. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js +4 -7
  192. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js.map +1 -1
  193. package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
  194. package/dist/api/app/bsky/unspecced/getSuggestedUsers.js +2 -19
  195. package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
  196. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts.map +1 -1
  197. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js +1 -0
  198. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js.map +1 -1
  199. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts.map +1 -1
  200. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js +1 -0
  201. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js.map +1 -1
  202. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts.map +1 -1
  203. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js +1 -0
  204. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js.map +1 -1
  205. package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts.map +1 -1
  206. package/dist/api/app/bsky/unspecced/getTrendingTopics.js +6 -2
  207. package/dist/api/app/bsky/unspecced/getTrendingTopics.js.map +1 -1
  208. package/dist/api/app/bsky/unspecced/getTrends.d.ts.map +1 -1
  209. package/dist/api/app/bsky/unspecced/getTrends.js +6 -2
  210. package/dist/api/app/bsky/unspecced/getTrends.js.map +1 -1
  211. package/dist/api/blob-resolver.d.ts.map +1 -1
  212. package/dist/api/blob-resolver.js +9 -8
  213. package/dist/api/blob-resolver.js.map +1 -1
  214. package/dist/api/index.d.ts.map +1 -1
  215. package/dist/api/index.js +2 -0
  216. package/dist/api/index.js.map +1 -1
  217. package/dist/api/internal/bsky/actor/getProfiles.d.ts.map +1 -1
  218. package/dist/api/internal/bsky/actor/getProfiles.js +1 -0
  219. package/dist/api/internal/bsky/actor/getProfiles.js.map +1 -1
  220. package/dist/config.d.ts +2 -6
  221. package/dist/config.d.ts.map +1 -1
  222. package/dist/config.js +7 -16
  223. package/dist/config.js.map +1 -1
  224. package/dist/context.d.ts +0 -2
  225. package/dist/context.d.ts.map +1 -1
  226. package/dist/context.js +0 -3
  227. package/dist/context.js.map +1 -1
  228. package/dist/feature-gates/gates.d.ts +0 -4
  229. package/dist/feature-gates/gates.d.ts.map +1 -1
  230. package/dist/feature-gates/gates.js +0 -4
  231. package/dist/feature-gates/gates.js.map +1 -1
  232. package/dist/hydration/external.d.ts +58 -45
  233. package/dist/hydration/external.d.ts.map +1 -1
  234. package/dist/hydration/external.js +134 -114
  235. package/dist/hydration/external.js.map +1 -1
  236. package/dist/hydration/hydrator.d.ts +15 -9
  237. package/dist/hydration/hydrator.d.ts.map +1 -1
  238. package/dist/hydration/hydrator.js +170 -210
  239. package/dist/hydration/hydrator.js.map +1 -1
  240. package/dist/image/server.d.ts.map +1 -1
  241. package/dist/image/server.js +12 -1
  242. package/dist/image/server.js.map +1 -1
  243. package/dist/index.d.ts.map +1 -1
  244. package/dist/index.js +4 -19
  245. package/dist/index.js.map +1 -1
  246. package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts +29 -0
  247. package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts.map +1 -1
  248. package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js +2 -1
  249. package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js.map +1 -1
  250. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.d.ts +3 -0
  251. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.d.ts.map +1 -0
  252. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.d.ts +85 -0
  253. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.d.ts.map +1 -0
  254. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.js +29 -0
  255. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.js.map +1 -0
  256. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.js +6 -0
  257. package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.js.map +1 -0
  258. package/dist/lexicons/app/bsky/unspecced.d.ts +1 -0
  259. package/dist/lexicons/app/bsky/unspecced.d.ts.map +1 -1
  260. package/dist/lexicons/app/bsky/unspecced.js +1 -0
  261. package/dist/lexicons/app/bsky/unspecced.js.map +1 -1
  262. package/dist/lexicons/tools/ozone/moderation/emitEvent.defs.d.ts +2 -2
  263. package/dist/lexicons/tools/ozone/moderation/emitEvent.defs.js.map +1 -1
  264. package/dist/lexicons/tools/ozone/report/closeReports.defs.d.ts +1 -1
  265. package/dist/lexicons/tools/ozone/report/closeReports.defs.d.ts.map +1 -1
  266. package/dist/lexicons/tools/ozone/report/closeReports.defs.js +1 -1
  267. package/dist/lexicons/tools/ozone/report/closeReports.defs.js.map +1 -1
  268. package/dist/telemetry/events.d.ts +14 -6
  269. package/dist/telemetry/events.d.ts.map +1 -1
  270. package/dist/telemetry/events.js +40 -5
  271. package/dist/telemetry/events.js.map +1 -1
  272. package/dist/util/external/standard-site.d.ts +2 -3
  273. package/dist/util/external/standard-site.d.ts.map +1 -1
  274. package/dist/util/external/standard-site.js +2 -3
  275. package/dist/util/external/standard-site.js.map +1 -1
  276. package/dist/util/uris.d.ts +5 -2
  277. package/dist/util/uris.d.ts.map +1 -1
  278. package/dist/util/uris.js +14 -1
  279. package/dist/util/uris.js.map +1 -1
  280. package/dist/views/external.d.ts +5 -0
  281. package/dist/views/external.d.ts.map +1 -1
  282. package/dist/views/external.js +38 -11
  283. package/dist/views/external.js.map +1 -1
  284. package/dist/views/index.d.ts +2 -2
  285. package/dist/views/index.d.ts.map +1 -1
  286. package/dist/views/index.js +17 -11
  287. package/dist/views/index.js.map +1 -1
  288. package/package.json +13 -14
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAa3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMjD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EACf,EAAE,MAAY,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACzC,UAAU,CAyIZ;AAsBD,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,QAAQ,CAAC,EAAE,MAAM,EAW5B;IAEK,GAAG,CAAC,MAAM,EAAE,MAAM;;OAcvB;IAEK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,iBAWzC;IAEK,KAAK,CAAC,MAAM,EAAE,MAAM,iBAGzB;IAEK,QAAQ,kBAEb;CACF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAa3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMjD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EACf,EAAE,MAAY,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACzC,UAAU,CAsJZ;AAsBD,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,QAAQ,CAAC,EAAE,MAAM,EAW5B;IAEK,GAAG,CAAC,MAAM,EAAE,MAAM;;OAcvB;IAEK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,iBAWzC;IAEK,KAAK,CAAC,MAAM,EAAE,MAAM,iBAGzB;IAEK,QAAQ,kBAEb;CACF"}
@@ -21,6 +21,8 @@ export function createMiddleware(ctx, { prefix = '/' } = {}) {
21
21
  return (req, res, next) => next();
22
22
  }
23
23
  const cache = new BlobDiskCache(ctx.cfg.blobCacheLocation);
24
+ // @TODO this should be from configuration
25
+ const imageMaxSize = 100 * 1024 * 1024; // 100 MB
24
26
  return async (req, res, next) => {
25
27
  if (res.destroyed)
26
28
  return;
@@ -72,9 +74,18 @@ export function createMiddleware(ctx, { prefix = '/' } = {}) {
72
74
  if (isImageMime(upstream.headers['content-type']) === false) {
73
75
  throw createError(400, 'Not an image');
74
76
  }
77
+ const contentLength = upstream.headers['content-length']
78
+ ? Number(upstream.headers['content-length'])
79
+ : undefined;
80
+ if (contentLength && contentLength > imageMaxSize) {
81
+ throw createError(400, 'Image too large');
82
+ }
75
83
  const streams = [
76
84
  // decompress
77
- ...createDecoders(upstream.headers['content-encoding']),
85
+ ...createDecoders(upstream.headers['content-encoding'], {
86
+ maxSize: imageMaxSize,
87
+ maxSizeError: () => createError(400, 'Image too large'),
88
+ }),
78
89
  // verify
79
90
  new VerifyCidTransform(cid),
80
91
  // upscale
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,WAAW,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAA0B,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAG5E,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAgB,cAAc,EAAE,MAAM,WAAW,CAAA;AAExD,MAAM,UAAU,gBAAgB,CAC9B,GAAe,EACf,EAAE,MAAM,GAAG,GAAG,EAAE,GAAwB,EAAE;IAE1C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;IAC/D,CAAC;IAED,mDAAmD;IACnD,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACnC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAE1D,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC9B,IAAI,GAAG,CAAC,SAAS;YAAE,OAAM;QACzB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,EAAE,CAAA;QAChE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,EAAE,CAAA;QAC/C,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,EAAE,CAAA;QAExD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAChD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAE1C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEtE,cAAc;YAEd,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAC7C,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC/B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;gBACzC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAA,CAAC,SAAS;gBACpE,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;gBACjD,MAAM,eAAe,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,CAAC,EAAE,CAAC;oBACxC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAA;gBAC9D,CAAC;gBAED,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;oBACrC,GAAG,CAAC,OAAO,EAAE,CAAA;oBACb,OAAM,CAAC,uBAAuB;gBAChC,CAAC;qBAAM,CAAC;oBACN,yCAAyC;oBACzC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;oBAC3B,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;oBAChC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;oBACjC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;gBACpC,CAAC;YACH,CAAC;YAED,kBAAkB;YAElB,MAAM,aAAa,GAAsB;gBACvC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAA;YAED,MAAM,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;gBACnE,mDAAmD;gBACnD,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC5D,MAAM,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;gBACxC,CAAC;gBAED,MAAM,OAAO,GAAG;oBACd,aAAa;oBACb,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;oBACvD,SAAS;oBACT,IAAI,kBAAkB,CAAC,GAAG,CAAC;oBAC3B,UAAU;oBACV,mBAAmB,CAAC,OAAO,CAAC;oBAC5B,qBAAqB;oBACrB,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;wBAClD,2DAA2D;wBAC3D,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;4BACvC,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC5C,CAAC;oBACH,CAAC,CAAC;oBACF,sEAAsE;oBACtE,uDAAuD;oBACvD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;wBACrB,KAAK,KAAK;6BACP,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;6BACrB,OAAO,CAAC,GAAG,EAAE;4BACZ,gEAAgE;4BAChE,2DAA2D;4BAC3D,iCAAiC;4BACjC,MAAM,CAAC,OAAO,EAAE,CAAA;wBAClB,CAAC,CAAC;6BACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;4BACtB,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAClD,iCAAiC,CAClC,CAAA;wBACH,CAAC,CAAC,CAAA;oBACN,CAAC,CAAC;iBACH,CAAA;gBAED,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;gBACzC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAA,CAAC,SAAS;gBACpE,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;gBAEhC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACxB,IAAI,GAAG,EAAE,CAAC;wBACR,GAAG,CAAC,IAAI,CACN,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAClD,4CAA4C,CAC7C,CAAA;oBACH,CAAC;gBACH,CAAC,CAAC,CAAA;gBAEF,OAAO,OAAO,CAAC,CAAC,CAAE,CAAA;YACpB,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACrC,GAAG,CAAC,OAAO,EAAE,CAAA;YACf,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;gBAChC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;gBAClC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;gBACjC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;gBAE3B,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;oBAChC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC7B,CAAC;qBAAM,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;oBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAA;gBAC/C,CAAC;qBAAM,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,CAAA;gBACX,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAClB,WAA0C;IAE1C,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,KAAK,0BAA0B,EAAE,CAAC;QACtE,OAAO,SAAS,CAAA,CAAC,QAAQ;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA,CAAC,sBAAsB;QACrE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QAChE,OAAO,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,CAAC,8BAA8B;IACtE,CAAC;IACD,OAAO,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,OAAO,CAAC,MAAyB;IACxC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC5C,OAAO,IAAI,CAAA;AACb,CAAC;AASD,MAAM,OAAO,aAAa;IAExB,YAAY,QAAiB;QAC3B,IAAI,CAAC,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAA;QAC3E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uCAAuC;YACvC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAM;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;YAClE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YACpC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,iBAAiB,EAAE,CAAA;YAC/B,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,IAAI,iBAAiB,EAAE,CAAA;YAC/B,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,MAAgB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wDAAwD;YACxD,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAM;YAC1D,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAChD,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7D,CAAC;CACF","sourcesContent":["import fsSync from 'node:fs'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream'\nimport { pipeline as pipelinePromise } from 'node:stream/promises'\nimport createError, { isHttpError } from 'http-errors'\nimport {\n VerifyCidError,\n VerifyCidTransform,\n createDecoders,\n fanOut,\n isErrnoException,\n} from '@atproto/common'\nimport { BlobNotFoundError } from '@atproto/repo'\nimport { type StreamBlobOptions, streamBlob } from '../api/blob-resolver.js'\nimport type { AppContext } from '../context.js'\nimport type { Middleware } from '../util/http.js'\nimport log from './logger.js'\nimport { createImageProcessor, createImageUpscaler } from './sharp.js'\nimport { BadPathError, ImageUriBuilder } from './uri.js'\nimport { type Options, formatsToMimes } from './util.js'\n\nexport function createMiddleware(\n ctx: AppContext,\n { prefix = '/' }: { prefix?: string } = {},\n): Middleware {\n if (!prefix.startsWith('/') || !prefix.endsWith('/')) {\n throw new TypeError('Prefix must start and end with a slash')\n }\n\n // If there is a CDN, we don't need to serve images\n if (ctx.cfg.cdnUrl) {\n return (req, res, next) => next()\n }\n\n const cache = new BlobDiskCache(ctx.cfg.blobCacheLocation)\n\n return async (req, res, next) => {\n if (res.destroyed) return\n if (req.method !== 'GET' && req.method !== 'HEAD') return next()\n if (!req.url?.startsWith(prefix)) return next()\n const { 0: path, 1: _search } = req.url.slice(prefix.length - 1).split('?')\n if (!path.startsWith('/') || path === '/') return next()\n\n try {\n const options = ImageUriBuilder.getOptions(path)\n const outputType = getMime(options.format)\n\n const cacheKey = [options.did, options.cid, options.preset].join('::')\n\n // Cached flow\n\n try {\n const cachedImage = await cache.get(cacheKey)\n res.statusCode = 200\n res.setHeader('x-cache', 'hit')\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('content-length', cachedImage.size)\n await pipelinePromise(cachedImage, res)\n return\n } catch (err) {\n if (!(err instanceof BlobNotFoundError)) {\n log.error({ cacheKey, err }, 'failed to serve cached image')\n }\n\n if (res.headersSent || res.destroyed) {\n res.destroy()\n return // nothing we can do...\n } else {\n // Ignore and move on to non-cached flow.\n res.removeHeader('x-cache')\n res.removeHeader('content-type')\n res.removeHeader('cache-control')\n res.removeHeader('content-length')\n }\n }\n\n // Non-cached flow\n\n const streamOptions: StreamBlobOptions = {\n did: options.did,\n cid: options.cid,\n }\n\n await streamBlob(ctx, streamOptions, (upstream, { did, cid, url }) => {\n // Definitely not an image ? Let's fail right away.\n if (isImageMime(upstream.headers['content-type']) === false) {\n throw createError(400, 'Not an image')\n }\n\n const streams = [\n // decompress\n ...createDecoders(upstream.headers['content-encoding']),\n // verify\n new VerifyCidTransform(cid),\n // upscale\n createImageUpscaler(options),\n // format (jpeg/webp)\n createImageProcessor(options).once('info', (info) => {\n // @NOTE sharp does emit this in time to be set as a header\n if (!res.destroyed && !res.headersSent) {\n res.setHeader('content-length', info.size)\n }\n }),\n // send downstream and save to cache in parallel. Applies backpressure\n // based on slowest consumer, avoiding memory pressure.\n fanOut(res, (branch) => {\n void cache\n .put(cacheKey, branch)\n .finally(() => {\n // Fail-safe: Make sure that the fanOut is no longer waiting for\n // this branch to drain (note that the cache implementation\n // should do this automatically).\n branch.destroy()\n })\n .catch((err: unknown) => {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'failed to cache processed image',\n )\n })\n }),\n ]\n\n res.statusCode = 200\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('x-cache', 'miss')\n\n pipeline(streams, (err) => {\n if (err) {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'blob resolution failed during transmission',\n )\n }\n })\n\n return streams[0]!\n })\n } catch (err) {\n if (res.headersSent || res.destroyed) {\n res.destroy()\n } else {\n res.removeHeader('content-type')\n res.removeHeader('content-length')\n res.removeHeader('cache-control')\n res.removeHeader('x-cache')\n\n if (err instanceof BadPathError) {\n next(createError(400, err))\n } else if (err instanceof VerifyCidError) {\n next(createError(404, 'Blob not found', err))\n } else if (isHttpError(err)) {\n next(err)\n } else {\n next(createError(502, 'Upstream Error', { cause: err }))\n }\n }\n }\n }\n}\n\nfunction isImageMime(\n contentType: string | string[] | undefined,\n): undefined | boolean {\n if (contentType == null || contentType === 'application/octet-stream') {\n return undefined // maybe\n }\n if (Array.isArray(contentType)) {\n if (contentType.length === 0) return undefined // should never happen\n if (contentType.length === 1) return isImageMime(contentType[0])\n return contentType.every(isImageMime) // Should we throw a 502 here?\n }\n return contentType.startsWith('image/')\n}\n\nfunction getMime(format: Options['format']) {\n const mime = formatsToMimes.get(format)\n if (!mime) throw new Error('Unknown format')\n return mime\n}\n\nexport interface BlobCache {\n get(fileId: string): Promise<Readable & { size: number }>\n put(fileId: string, stream: Readable): Promise<void>\n clear(fileId: string): Promise<void>\n clearAll(): Promise<void>\n}\n\nexport class BlobDiskCache implements BlobCache {\n tempDir: string\n constructor(basePath?: string) {\n this.tempDir = basePath || path.join(os.tmpdir(), 'bsky--processed-images')\n if (!path.isAbsolute(this.tempDir)) {\n throw new Error('Must provide an absolute path')\n }\n try {\n fsSync.mkdirSync(this.tempDir, { recursive: true })\n } catch (err) {\n // All good if cache dir already exists\n if (isErrnoException(err) && err.code === 'EEXIST') return\n }\n }\n\n async get(fileId: string) {\n try {\n const handle = await fs.open(path.join(this.tempDir, fileId), 'r')\n const { size } = await handle.stat()\n if (size === 0) {\n throw new BlobNotFoundError()\n }\n return Object.assign(handle.createReadStream(), { size })\n } catch (err) {\n if (isErrnoException(err) && err.code === 'ENOENT') {\n throw new BlobNotFoundError()\n }\n throw err\n }\n }\n\n async put(fileId: string, stream: Readable) {\n const filename = path.join(this.tempDir, fileId)\n try {\n await fs.writeFile(filename, stream, { flag: 'wx' })\n } catch (err) {\n // Do not overwrite existing file, just ignore the error\n if (isErrnoException(err) && err.code === 'EEXIST') return\n throw err\n } finally {\n stream.destroy()\n }\n }\n\n async clear(fileId: string) {\n const filename = path.join(this.tempDir, fileId)\n await fs.rm(filename, { force: true })\n }\n\n async clearAll() {\n await fs.rm(this.tempDir, { recursive: true, force: true })\n }\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"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","sourcesContent":["import fsSync from 'node:fs'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream'\nimport { pipeline as pipelinePromise } from 'node:stream/promises'\nimport createError, { isHttpError } from 'http-errors'\nimport {\n VerifyCidError,\n VerifyCidTransform,\n createDecoders,\n fanOut,\n isErrnoException,\n} from '@atproto/common'\nimport { BlobNotFoundError } from '@atproto/repo'\nimport { type StreamBlobOptions, streamBlob } from '../api/blob-resolver.js'\nimport type { AppContext } from '../context.js'\nimport type { Middleware } from '../util/http.js'\nimport log from './logger.js'\nimport { createImageProcessor, createImageUpscaler } from './sharp.js'\nimport { BadPathError, ImageUriBuilder } from './uri.js'\nimport { type Options, formatsToMimes } from './util.js'\n\nexport function createMiddleware(\n ctx: AppContext,\n { prefix = '/' }: { prefix?: string } = {},\n): Middleware {\n if (!prefix.startsWith('/') || !prefix.endsWith('/')) {\n throw new TypeError('Prefix must start and end with a slash')\n }\n\n // If there is a CDN, we don't need to serve images\n if (ctx.cfg.cdnUrl) {\n return (req, res, next) => next()\n }\n\n const cache = new BlobDiskCache(ctx.cfg.blobCacheLocation)\n\n // @TODO this should be from configuration\n const imageMaxSize = 100 * 1024 * 1024 // 100 MB\n\n return async (req, res, next) => {\n if (res.destroyed) return\n if (req.method !== 'GET' && req.method !== 'HEAD') return next()\n if (!req.url?.startsWith(prefix)) return next()\n const { 0: path, 1: _search } = req.url.slice(prefix.length - 1).split('?')\n if (!path.startsWith('/') || path === '/') return next()\n\n try {\n const options = ImageUriBuilder.getOptions(path)\n const outputType = getMime(options.format)\n\n const cacheKey = [options.did, options.cid, options.preset].join('::')\n\n // Cached flow\n\n try {\n const cachedImage = await cache.get(cacheKey)\n res.statusCode = 200\n res.setHeader('x-cache', 'hit')\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('content-length', cachedImage.size)\n await pipelinePromise(cachedImage, res)\n return\n } catch (err) {\n if (!(err instanceof BlobNotFoundError)) {\n log.error({ cacheKey, err }, 'failed to serve cached image')\n }\n\n if (res.headersSent || res.destroyed) {\n res.destroy()\n return // nothing we can do...\n } else {\n // Ignore and move on to non-cached flow.\n res.removeHeader('x-cache')\n res.removeHeader('content-type')\n res.removeHeader('cache-control')\n res.removeHeader('content-length')\n }\n }\n\n // Non-cached flow\n\n const streamOptions: StreamBlobOptions = {\n did: options.did,\n cid: options.cid,\n }\n\n await streamBlob(ctx, streamOptions, (upstream, { did, cid, url }) => {\n // Definitely not an image ? Let's fail right away.\n if (isImageMime(upstream.headers['content-type']) === false) {\n throw createError(400, 'Not an image')\n }\n\n const contentLength = upstream.headers['content-length']\n ? Number(upstream.headers['content-length'])\n : undefined\n if (contentLength && contentLength > imageMaxSize) {\n throw createError(400, 'Image too large')\n }\n\n const streams = [\n // decompress\n ...createDecoders(upstream.headers['content-encoding'], {\n maxSize: imageMaxSize,\n maxSizeError: () => createError(400, 'Image too large'),\n }),\n // verify\n new VerifyCidTransform(cid),\n // upscale\n createImageUpscaler(options),\n // format (jpeg/webp)\n createImageProcessor(options).once('info', (info) => {\n // @NOTE sharp does emit this in time to be set as a header\n if (!res.destroyed && !res.headersSent) {\n res.setHeader('content-length', info.size)\n }\n }),\n // send downstream and save to cache in parallel. Applies backpressure\n // based on slowest consumer, avoiding memory pressure.\n fanOut(res, (branch) => {\n void cache\n .put(cacheKey, branch)\n .finally(() => {\n // Fail-safe: Make sure that the fanOut is no longer waiting for\n // this branch to drain (note that the cache implementation\n // should do this automatically).\n branch.destroy()\n })\n .catch((err: unknown) => {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'failed to cache processed image',\n )\n })\n }),\n ]\n\n res.statusCode = 200\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('x-cache', 'miss')\n\n pipeline(streams, (err) => {\n if (err) {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'blob resolution failed during transmission',\n )\n }\n })\n\n return streams[0]!\n })\n } catch (err) {\n if (res.headersSent || res.destroyed) {\n res.destroy()\n } else {\n res.removeHeader('content-type')\n res.removeHeader('content-length')\n res.removeHeader('cache-control')\n res.removeHeader('x-cache')\n\n if (err instanceof BadPathError) {\n next(createError(400, err))\n } else if (err instanceof VerifyCidError) {\n next(createError(404, 'Blob not found', err))\n } else if (isHttpError(err)) {\n next(err)\n } else {\n next(createError(502, 'Upstream Error', { cause: err }))\n }\n }\n }\n }\n}\n\nfunction isImageMime(\n contentType: string | string[] | undefined,\n): undefined | boolean {\n if (contentType == null || contentType === 'application/octet-stream') {\n return undefined // maybe\n }\n if (Array.isArray(contentType)) {\n if (contentType.length === 0) return undefined // should never happen\n if (contentType.length === 1) return isImageMime(contentType[0])\n return contentType.every(isImageMime) // Should we throw a 502 here?\n }\n return contentType.startsWith('image/')\n}\n\nfunction getMime(format: Options['format']) {\n const mime = formatsToMimes.get(format)\n if (!mime) throw new Error('Unknown format')\n return mime\n}\n\nexport interface BlobCache {\n get(fileId: string): Promise<Readable & { size: number }>\n put(fileId: string, stream: Readable): Promise<void>\n clear(fileId: string): Promise<void>\n clearAll(): Promise<void>\n}\n\nexport class BlobDiskCache implements BlobCache {\n tempDir: string\n constructor(basePath?: string) {\n this.tempDir = basePath || path.join(os.tmpdir(), 'bsky--processed-images')\n if (!path.isAbsolute(this.tempDir)) {\n throw new Error('Must provide an absolute path')\n }\n try {\n fsSync.mkdirSync(this.tempDir, { recursive: true })\n } catch (err) {\n // All good if cache dir already exists\n if (isErrnoException(err) && err.code === 'EEXIST') return\n }\n }\n\n async get(fileId: string) {\n try {\n const handle = await fs.open(path.join(this.tempDir, fileId), 'r')\n const { size } = await handle.stat()\n if (size === 0) {\n throw new BlobNotFoundError()\n }\n return Object.assign(handle.createReadStream(), { size })\n } catch (err) {\n if (isErrnoException(err) && err.code === 'ENOENT') {\n throw new BlobNotFoundError()\n }\n throw err\n }\n }\n\n async put(fileId: string, stream: Readable) {\n const filename = path.join(this.tempDir, fileId)\n try {\n await fs.writeFile(filename, stream, { flag: 'wx' })\n } catch (err) {\n // Do not overwrite existing file, just ignore the error\n if (isErrnoException(err) && err.code === 'EEXIST') return\n throw err\n } finally {\n stream.destroy()\n }\n }\n\n async clear(fileId: string) {\n const filename = path.join(this.tempDir, fileId)\n await fs.rm(filename, { force: true })\n }\n\n async clearAll() {\n await fs.rm(this.tempDir, { recursive: true, force: true })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAe9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAsBzC,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAe;IAElC,YAAY,IAAI,EAAE;QAChB,GAAG,EAAE,UAAU,CAAA;QACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;QACxB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;KAC5B,EAIA;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW,CA+Pd;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAalC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAc7B;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF;eAEc,WAAW"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAe9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAsBzC,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAe;IAElC,YAAY,IAAI,EAAE;QAChB,GAAG,EAAE,UAAU,CAAA;QACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;QACxB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;KAC5B,EAIA;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW,CA4Od;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAalC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAc7B;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF;eAEc,WAAW"}
package/dist/index.js CHANGED
@@ -86,25 +86,11 @@ export class BskyAppView {
86
86
  validateResponse: config.debugMode,
87
87
  })
88
88
  : undefined;
89
- // @NOTE These bound the connection phase (TCP + TLS) only; once connected,
90
- // the request is not bounded here. They are kept for the lifetime of the
89
+ // @NOTE This bounds the connection phase (TCP + TLS) only; once connected,
90
+ // the request is not bounded here. It is kept for the lifetime of the
91
91
  // service (pooling connections), and closed on `destroy()`.
92
- // An unused agent holds no socket, so they can be built unconditionally.
93
- const topicsDispatcher = createUndiciAgent({ connectTimeout: SECOND });
92
+ // An unused agent holds no socket, so it can be built unconditionally.
94
93
  const irisDispatcher = createUndiciAgent({ connectTimeout: SECOND });
95
- const topicsClient = config.topicsUrl
96
- ? new Client({
97
- service: config.topicsUrl,
98
- headers: config.topicsApiKey
99
- ? { authorization: `Bearer ${config.topicsApiKey}` }
100
- : undefined,
101
- fetch: dispatcherFetch(topicsDispatcher),
102
- }, {
103
- // Trust internal services to send us well-formed responses
104
- strictResponseProcessing: false,
105
- validateResponse: config.debugMode,
106
- })
107
- : undefined;
108
94
  const irisClient = config.irisUrl
109
95
  ? new Client({
110
96
  service: config.irisUrl,
@@ -208,7 +194,6 @@ export class BskyAppView {
208
194
  dataplaneHostList,
209
195
  searchClient,
210
196
  suggestionsClient,
211
- topicsClient,
212
197
  irisClient,
213
198
  hydrator,
214
199
  views,
@@ -246,7 +231,7 @@ export class BskyAppView {
246
231
  return new BskyAppView({
247
232
  ctx,
248
233
  app,
249
- dispatchers: [topicsDispatcher, irisDispatcher],
234
+ dispatchers: [irisDispatcher],
250
235
  });
251
236
  }
252
237
  async start() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import events from 'node:events'\nimport type http from 'node:http'\nimport type { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { type HttpTerminator, createHttpTerminator } from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport type { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { Client } from '@atproto/lex'\nimport { createServer } from '@atproto/xrpc-server'\nimport { safeFetchWrap } from '@atproto-labs/fetch-node'\nimport { createBlobDispatcher } from './api/blob-dispatcher.js'\nimport API, {\n blobResolver,\n external,\n health,\n sitemap,\n wellKnown,\n} from './api/index.js'\nimport { AuthVerifier, createPublicKeyObject } from './auth-verifier.js'\nimport { authWithApiKey as bsyncAuth, createBsyncClient } from './bsync.js'\nimport type { ServerConfig } from './config.js'\nimport { AppContext } from './context.js'\nimport {\n authWithApiKey as courierAuth,\n createCourierClient,\n} from './courier.js'\nimport {\n BasicHostList,\n EtcdHostList,\n createDataPlaneClient,\n} from './data-plane/client/index.js'\nimport * as error from './error.js'\nimport { FeatureGatesClient } from './feature-gates/index.js'\nimport { Hydrator } from './hydration/hydrator.js'\nimport * as imageServer from './image/server.js'\nimport { ImageUriBuilder } from './image/uri.js'\nimport { createKwsClient } from './kws.js'\nimport { loggerMiddleware } from './logger.js'\nimport {\n authWithApiKey as rolodexAuth,\n createRolodexClient,\n} from './rolodex.js'\nimport { createStashClient } from './stash.js'\nimport {\n type UndiciAgent,\n createUndiciAgent,\n dispatcherFetch,\n} from './undici.js'\nimport { Views } from './views/index.js'\nimport { VideoUriBuilder } from './views/util.js'\n\nexport { ServerConfig } from './config.js'\nexport type { ServerConfigValues } from './config.js'\nexport { AppContext } from './context.js'\nexport * from './data-plane/index.js'\nexport { BackgroundQueue } from './data-plane/server/background.js'\nexport { Database } from './data-plane/server/db/index.js'\nexport { Redis } from './redis.js'\n\nexport class BskyAppView {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: HttpTerminator\n private dispatchers: UndiciAgent[]\n\n constructor(opts: {\n ctx: AppContext\n app: express.Application\n dispatchers?: UndiciAgent[]\n }) {\n this.ctx = opts.ctx\n this.app = opts.app\n this.dispatchers = opts.dispatchers ?? []\n }\n\n static create(opts: {\n config: ServerConfig\n signingKey: Keypair\n }): BskyAppView {\n const { config, signingKey } = opts\n const app = express()\n app.set('trust proxy', true)\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(loggerMiddleware)\n app.use(compression())\n\n // used solely for handle resolution: identity lookups occur on dataplane\n const idResolver = new IdResolver({\n plcUrl: config.didPlcUrl,\n backupNameservers: config.handleResolveNameservers,\n fetch: config.disableSsrfProtection ? globalThis.fetch : undefined,\n })\n\n const imgUriBuilderUrl =\n config.cdnUrl ||\n (config.publicUrl ? `${config.publicUrl}/img` : undefined)\n if (!imgUriBuilderUrl) {\n throw new Error('No image URI builder URL could be determined')\n }\n const imgUriBuilder = new ImageUriBuilder(imgUriBuilderUrl)\n const videoUriBuilder = new VideoUriBuilder({\n playlistUrlPattern:\n config.videoPlaylistUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/playlist.m3u8`,\n thumbnailUrlPattern:\n config.videoThumbnailUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/thumbnail.jpg`,\n })\n\n const searchClient = config.searchUrl\n ? new Client(\n {\n service: config.searchUrl,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const suggestionsClient = config.suggestionsUrl\n ? new Client(\n {\n service: config.suggestionsUrl,\n headers: config.suggestionsApiKey\n ? { authorization: `Bearer ${config.suggestionsApiKey}` }\n : undefined,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n // @NOTE These bound the connection phase (TCP + TLS) only; once connected,\n // the request is not bounded here. They are kept for the lifetime of the\n // service (pooling connections), and closed on `destroy()`.\n // An unused agent holds no socket, so they can be built unconditionally.\n const topicsDispatcher = createUndiciAgent({ connectTimeout: SECOND })\n const irisDispatcher = createUndiciAgent({ connectTimeout: SECOND })\n\n const topicsClient = config.topicsUrl\n ? new Client(\n {\n service: config.topicsUrl,\n headers: config.topicsApiKey\n ? { authorization: `Bearer ${config.topicsApiKey}` }\n : undefined,\n fetch: dispatcherFetch(topicsDispatcher),\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const irisClient = config.irisUrl\n ? new Client(\n {\n service: config.irisUrl,\n headers: config.irisApiKey\n ? { authorization: `Bearer ${config.irisApiKey}` }\n : undefined,\n fetch: dispatcherFetch(irisDispatcher),\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const etcd = config.etcdHosts.length\n ? new Etcd3({ hosts: config.etcdHosts })\n : undefined\n\n const dataplaneHostList =\n etcd && config.dataplaneUrlsEtcdKeyPrefix\n ? new EtcdHostList(\n etcd,\n config.dataplaneUrlsEtcdKeyPrefix,\n config.dataplaneUrls,\n )\n : new BasicHostList(config.dataplaneUrls)\n\n const featureGatesClient = new FeatureGatesClient({\n growthBookApiHost: config.growthBookApiHost,\n growthBookClientKey: config.growthBookClientKey,\n eventProxyTrackingEndpoint: config.eventProxyTrackingEndpoint,\n })\n\n const dataplane = createDataPlaneClient(dataplaneHostList, {\n httpVersion: config.dataplaneHttpVersion,\n rejectUnauthorized: !config.dataplaneIgnoreBadTls,\n })\n const hydrator = new Hydrator(dataplane, config.labelsFromIssuerDids, {\n debugFieldAllowedDids: config.debugFieldAllowedDids,\n featureGatesClient,\n needsReviewTagSources: [config.modServiceDid],\n })\n const views = new Views({\n imgUriBuilder: imgUriBuilder,\n videoUriBuilder: videoUriBuilder,\n indexedAtEpoch: config.indexedAtEpoch,\n threadTagsBumpDown: [...config.threadTagsBumpDown],\n threadTagsHide: [...config.threadTagsHide],\n visibilityTagHide: config.visibilityTagHide,\n visibilityTagRankPrefix: config.visibilityTagRankPrefix,\n })\n\n const bsyncClient = createBsyncClient({\n baseUrl: config.bsyncUrl,\n httpVersion: config.bsyncHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.bsyncIgnoreBadTls },\n interceptors: config.bsyncApiKey ? [bsyncAuth(config.bsyncApiKey)] : [],\n })\n\n const stashClient = createStashClient(bsyncClient)\n\n const courierClient = config.courierUrl\n ? createCourierClient({\n baseUrl: config.courierUrl,\n httpVersion: config.courierHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.courierIgnoreBadTls },\n interceptors: config.courierApiKey\n ? [courierAuth(config.courierApiKey)]\n : [],\n })\n : undefined\n\n const rolodexClient = config.rolodexUrl\n ? createRolodexClient({\n baseUrl: config.rolodexUrl,\n httpVersion: config.rolodexHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.rolodexIgnoreBadTls },\n interceptors: config.rolodexApiKey\n ? [rolodexAuth(config.rolodexApiKey)]\n : [],\n })\n : undefined\n\n const kwsClient = config.kws ? createKwsClient(config.kws) : undefined\n\n const entrywayJwtPublicKey = config.entrywayJwtPublicKeyHex\n ? createPublicKeyObject(config.entrywayJwtPublicKeyHex)\n : undefined\n const bffJwtSecret = config.bffJwtSecret\n ? Buffer.from(config.bffJwtSecret, 'utf8')\n : undefined\n const authVerifier = new AuthVerifier(dataplane, {\n ownDid: config.serverDid,\n alternateAudienceDids: config.alternateAudienceDids,\n modServiceDid: config.modServiceDid,\n adminPasses: config.adminPasswords,\n entrywayJwtPublicKey,\n bffJwtSecret,\n })\n\n const blobDispatcher = createBlobDispatcher(config)\n // Egress to hosts named in DID documents, where the destination is chosen by\n // the account being resolved. Same policy as blobDispatcher: https only,\n // unicast addresses only, re-checked per hop by the dispatcher. Redirects\n // stay enabled because xrpcRequestInit sets `redirect: 'follow'`.\n const federatedFetch = (\n config.disableSsrfProtection\n ? globalThis.fetch\n : safeFetchWrap({\n allowIpHost: false,\n allowImplicitRedirect: true,\n responseMaxSize: 5 * 1024 * 1024,\n })\n ) as typeof globalThis.fetch\n\n const ctx = new AppContext({\n cfg: config,\n etcd,\n dataplane,\n dataplaneHostList,\n searchClient,\n suggestionsClient,\n topicsClient,\n irisClient,\n hydrator,\n views,\n signingKey,\n idResolver,\n bsyncClient,\n stashClient,\n courierClient,\n rolodexClient,\n authVerifier,\n featureGatesClient,\n blobDispatcher,\n federatedFetch,\n kwsClient,\n })\n\n const server = createServer([], {\n validateResponse: config.debugMode,\n payload: {\n jsonLimit: 100 * 1024, // 100kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: 5 * 1024 * 1024, // 5mb\n },\n })\n\n API(server, ctx)\n\n app.use(health.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(blobResolver.createMiddleware(ctx))\n app.use(imageServer.createMiddleware(ctx, { prefix: '/img/' }))\n\n if (config.dataplaneUrls.length > 0 || config.dataplaneUrlsEtcdKeyPrefix) {\n app.use(sitemap.createRouter(ctx))\n }\n\n app.use(server.router)\n app.use(error.handler)\n app.use('/external', external.createRouter(ctx))\n\n return new BskyAppView({\n ctx,\n app,\n dispatchers: [topicsDispatcher, irisDispatcher],\n })\n }\n\n async start(): Promise<http.Server> {\n if (this.ctx.dataplaneHostList instanceof EtcdHostList) {\n await this.ctx.dataplaneHostList.connect()\n }\n this.ctx.featureGatesClient.start() // lazy, no await\n const server = this.app.listen(this.ctx.cfg.port)\n this.server = server\n server.keepAliveTimeout = 90000\n this.terminator = createHttpTerminator({ server })\n await events.once(server, 'listening')\n const { port } = server.address() as AddressInfo\n this.ctx.cfg.assignPort(port)\n return server\n }\n\n async destroy(): Promise<void> {\n try {\n await this.ctx.featureGatesClient.destroy()\n } finally {\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.etcd?.close()\n } finally {\n await Promise.all(this.dispatchers.map((d) => d.close()))\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nexport default BskyAppView\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import events from 'node:events'\nimport type http from 'node:http'\nimport type { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { type HttpTerminator, createHttpTerminator } from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport type { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { Client } from '@atproto/lex'\nimport { createServer } from '@atproto/xrpc-server'\nimport { safeFetchWrap } from '@atproto-labs/fetch-node'\nimport { createBlobDispatcher } from './api/blob-dispatcher.js'\nimport API, {\n blobResolver,\n external,\n health,\n sitemap,\n wellKnown,\n} from './api/index.js'\nimport { AuthVerifier, createPublicKeyObject } from './auth-verifier.js'\nimport { authWithApiKey as bsyncAuth, createBsyncClient } from './bsync.js'\nimport type { ServerConfig } from './config.js'\nimport { AppContext } from './context.js'\nimport {\n authWithApiKey as courierAuth,\n createCourierClient,\n} from './courier.js'\nimport {\n BasicHostList,\n EtcdHostList,\n createDataPlaneClient,\n} from './data-plane/client/index.js'\nimport * as error from './error.js'\nimport { FeatureGatesClient } from './feature-gates/index.js'\nimport { Hydrator } from './hydration/hydrator.js'\nimport * as imageServer from './image/server.js'\nimport { ImageUriBuilder } from './image/uri.js'\nimport { createKwsClient } from './kws.js'\nimport { loggerMiddleware } from './logger.js'\nimport {\n authWithApiKey as rolodexAuth,\n createRolodexClient,\n} from './rolodex.js'\nimport { createStashClient } from './stash.js'\nimport {\n type UndiciAgent,\n createUndiciAgent,\n dispatcherFetch,\n} from './undici.js'\nimport { Views } from './views/index.js'\nimport { VideoUriBuilder } from './views/util.js'\n\nexport { ServerConfig } from './config.js'\nexport type { ServerConfigValues } from './config.js'\nexport { AppContext } from './context.js'\nexport * from './data-plane/index.js'\nexport { BackgroundQueue } from './data-plane/server/background.js'\nexport { Database } from './data-plane/server/db/index.js'\nexport { Redis } from './redis.js'\n\nexport class BskyAppView {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: HttpTerminator\n private dispatchers: UndiciAgent[]\n\n constructor(opts: {\n ctx: AppContext\n app: express.Application\n dispatchers?: UndiciAgent[]\n }) {\n this.ctx = opts.ctx\n this.app = opts.app\n this.dispatchers = opts.dispatchers ?? []\n }\n\n static create(opts: {\n config: ServerConfig\n signingKey: Keypair\n }): BskyAppView {\n const { config, signingKey } = opts\n const app = express()\n app.set('trust proxy', true)\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(loggerMiddleware)\n app.use(compression())\n\n // used solely for handle resolution: identity lookups occur on dataplane\n const idResolver = new IdResolver({\n plcUrl: config.didPlcUrl,\n backupNameservers: config.handleResolveNameservers,\n fetch: config.disableSsrfProtection ? globalThis.fetch : undefined,\n })\n\n const imgUriBuilderUrl =\n config.cdnUrl ||\n (config.publicUrl ? `${config.publicUrl}/img` : undefined)\n if (!imgUriBuilderUrl) {\n throw new Error('No image URI builder URL could be determined')\n }\n const imgUriBuilder = new ImageUriBuilder(imgUriBuilderUrl)\n const videoUriBuilder = new VideoUriBuilder({\n playlistUrlPattern:\n config.videoPlaylistUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/playlist.m3u8`,\n thumbnailUrlPattern:\n config.videoThumbnailUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/thumbnail.jpg`,\n })\n\n const searchClient = config.searchUrl\n ? new Client(\n {\n service: config.searchUrl,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const suggestionsClient = config.suggestionsUrl\n ? new Client(\n {\n service: config.suggestionsUrl,\n headers: config.suggestionsApiKey\n ? { authorization: `Bearer ${config.suggestionsApiKey}` }\n : undefined,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n // @NOTE This bounds the connection phase (TCP + TLS) only; once connected,\n // the request is not bounded here. It is kept for the lifetime of the\n // service (pooling connections), and closed on `destroy()`.\n // An unused agent holds no socket, so it can be built unconditionally.\n const irisDispatcher = createUndiciAgent({ connectTimeout: SECOND })\n\n const irisClient = config.irisUrl\n ? new Client(\n {\n service: config.irisUrl,\n headers: config.irisApiKey\n ? { authorization: `Bearer ${config.irisApiKey}` }\n : undefined,\n fetch: dispatcherFetch(irisDispatcher),\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const etcd = config.etcdHosts.length\n ? new Etcd3({ hosts: config.etcdHosts })\n : undefined\n\n const dataplaneHostList =\n etcd && config.dataplaneUrlsEtcdKeyPrefix\n ? new EtcdHostList(\n etcd,\n config.dataplaneUrlsEtcdKeyPrefix,\n config.dataplaneUrls,\n )\n : new BasicHostList(config.dataplaneUrls)\n\n const featureGatesClient = new FeatureGatesClient({\n growthBookApiHost: config.growthBookApiHost,\n growthBookClientKey: config.growthBookClientKey,\n eventProxyTrackingEndpoint: config.eventProxyTrackingEndpoint,\n })\n\n const dataplane = createDataPlaneClient(dataplaneHostList, {\n httpVersion: config.dataplaneHttpVersion,\n rejectUnauthorized: !config.dataplaneIgnoreBadTls,\n })\n const hydrator = new Hydrator(dataplane, config.labelsFromIssuerDids, {\n debugFieldAllowedDids: config.debugFieldAllowedDids,\n featureGatesClient,\n needsReviewTagSources: [config.modServiceDid],\n })\n const views = new Views({\n imgUriBuilder: imgUriBuilder,\n videoUriBuilder: videoUriBuilder,\n indexedAtEpoch: config.indexedAtEpoch,\n threadTagsBumpDown: [...config.threadTagsBumpDown],\n threadTagsHide: [...config.threadTagsHide],\n visibilityTagHide: config.visibilityTagHide,\n visibilityTagRankPrefix: config.visibilityTagRankPrefix,\n })\n\n const bsyncClient = createBsyncClient({\n baseUrl: config.bsyncUrl,\n httpVersion: config.bsyncHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.bsyncIgnoreBadTls },\n interceptors: config.bsyncApiKey ? [bsyncAuth(config.bsyncApiKey)] : [],\n })\n\n const stashClient = createStashClient(bsyncClient)\n\n const courierClient = config.courierUrl\n ? createCourierClient({\n baseUrl: config.courierUrl,\n httpVersion: config.courierHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.courierIgnoreBadTls },\n interceptors: config.courierApiKey\n ? [courierAuth(config.courierApiKey)]\n : [],\n })\n : undefined\n\n const rolodexClient = config.rolodexUrl\n ? createRolodexClient({\n baseUrl: config.rolodexUrl,\n httpVersion: config.rolodexHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.rolodexIgnoreBadTls },\n interceptors: config.rolodexApiKey\n ? [rolodexAuth(config.rolodexApiKey)]\n : [],\n })\n : undefined\n\n const kwsClient = config.kws ? createKwsClient(config.kws) : undefined\n\n const entrywayJwtPublicKey = config.entrywayJwtPublicKeyHex\n ? createPublicKeyObject(config.entrywayJwtPublicKeyHex)\n : undefined\n const bffJwtSecret = config.bffJwtSecret\n ? Buffer.from(config.bffJwtSecret, 'utf8')\n : undefined\n const authVerifier = new AuthVerifier(dataplane, {\n ownDid: config.serverDid,\n alternateAudienceDids: config.alternateAudienceDids,\n modServiceDid: config.modServiceDid,\n adminPasses: config.adminPasswords,\n entrywayJwtPublicKey,\n bffJwtSecret,\n })\n\n const blobDispatcher = createBlobDispatcher(config)\n // Egress to hosts named in DID documents, where the destination is chosen by\n // the account being resolved. Same policy as blobDispatcher: https only,\n // unicast addresses only, re-checked per hop by the dispatcher. Redirects\n // stay enabled because xrpcRequestInit sets `redirect: 'follow'`.\n const federatedFetch = (\n config.disableSsrfProtection\n ? globalThis.fetch\n : safeFetchWrap({\n allowIpHost: false,\n allowImplicitRedirect: true,\n responseMaxSize: 5 * 1024 * 1024,\n })\n ) as typeof globalThis.fetch\n\n const ctx = new AppContext({\n cfg: config,\n etcd,\n dataplane,\n dataplaneHostList,\n searchClient,\n suggestionsClient,\n irisClient,\n hydrator,\n views,\n signingKey,\n idResolver,\n bsyncClient,\n stashClient,\n courierClient,\n rolodexClient,\n authVerifier,\n featureGatesClient,\n blobDispatcher,\n federatedFetch,\n kwsClient,\n })\n\n const server = createServer([], {\n validateResponse: config.debugMode,\n payload: {\n jsonLimit: 100 * 1024, // 100kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: 5 * 1024 * 1024, // 5mb\n },\n })\n\n API(server, ctx)\n\n app.use(health.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(blobResolver.createMiddleware(ctx))\n app.use(imageServer.createMiddleware(ctx, { prefix: '/img/' }))\n\n if (config.dataplaneUrls.length > 0 || config.dataplaneUrlsEtcdKeyPrefix) {\n app.use(sitemap.createRouter(ctx))\n }\n\n app.use(server.router)\n app.use(error.handler)\n app.use('/external', external.createRouter(ctx))\n\n return new BskyAppView({\n ctx,\n app,\n dispatchers: [irisDispatcher],\n })\n }\n\n async start(): Promise<http.Server> {\n if (this.ctx.dataplaneHostList instanceof EtcdHostList) {\n await this.ctx.dataplaneHostList.connect()\n }\n this.ctx.featureGatesClient.start() // lazy, no await\n const server = this.app.listen(this.ctx.cfg.port)\n this.server = server\n server.keepAliveTimeout = 90000\n this.terminator = createHttpTerminator({ server })\n await events.once(server, 'listening')\n const { port } = server.address() as AddressInfo\n this.ctx.cfg.assignPort(port)\n return server\n }\n\n async destroy(): Promise<void> {\n try {\n await this.ctx.featureGatesClient.destroy()\n } finally {\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.etcd?.close()\n } finally {\n await Promise.all(this.dispatchers.map((d) => d.close()))\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nexport default BskyAppView\n"]}
@@ -1,5 +1,6 @@
1
1
  import { l } from "@atproto/lex";
2
2
  import * as EmbedExternal from "../embed/external.defs.js";
3
+ import * as ActorDefs from "../actor/defs.defs.js";
3
4
  declare const $nsid = "app.bsky.unspecced.getAtmosphereExploreTab";
4
5
  type $nsid = typeof $nsid;
5
6
  export { $nsid };
@@ -86,6 +87,9 @@ declare const livestreamList: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosph
86
87
  export { livestreamList };
87
88
  type ArticleItem = {
88
89
  $type?: "app.bsky.unspecced.getAtmosphereExploreTab#articleItem";
90
+ /**
91
+ * @deprecated . Retained for compatibility; always false.
92
+ */
89
93
  "featured": boolean;
90
94
  "view": EmbedExternal.ViewArticle;
91
95
  };
@@ -94,6 +98,9 @@ declare const articleItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphere
94
98
  export { articleItem };
95
99
  type PublicationItem = {
96
100
  $type?: "app.bsky.unspecced.getAtmosphereExploreTab#publicationItem";
101
+ /**
102
+ * @deprecated . Retained for compatibility; always false.
103
+ */
97
104
  "featured": boolean;
98
105
  "view": EmbedExternal.ViewArticlePublication;
99
106
  };
@@ -102,6 +109,9 @@ declare const publicationItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosp
102
109
  export { publicationItem };
103
110
  type GalleryItem = {
104
111
  $type?: "app.bsky.unspecced.getAtmosphereExploreTab#galleryItem";
112
+ /**
113
+ * @deprecated . Retained for compatibility; always false.
114
+ */
105
115
  "featured": boolean;
106
116
  "view": EmbedExternal.ViewGallery;
107
117
  };
@@ -110,6 +120,9 @@ declare const galleryItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphere
110
120
  export { galleryItem };
111
121
  type LivestreamItem = {
112
122
  $type?: "app.bsky.unspecced.getAtmosphereExploreTab#livestreamItem";
123
+ /**
124
+ * @deprecated . Retained for compatibility; always false.
125
+ */
113
126
  "featured": boolean;
114
127
  "view": EmbedExternal.ViewLivestream;
115
128
  };
@@ -134,12 +147,28 @@ type AppCard = {
134
147
  "id"?: string;
135
148
  "title"?: string;
136
149
  "description"?: string;
150
+ /**
151
+ * Compatibility field. The profile avatar when available, otherwise the editorial logo.
152
+ */
137
153
  "logo"?: l.UriString;
154
+ /**
155
+ * Compatibility field. The profile banner when available, otherwise the editorial background image.
156
+ */
138
157
  "backgroundImage"?: l.UriString;
158
+ /**
159
+ * @deprecated . Retained for compatibility.
160
+ */
139
161
  "overlayColor"?: string;
162
+ /**
163
+ * @deprecated . Retained for compatibility.
164
+ */
140
165
  "textColor"?: string;
141
166
  "url"?: l.UriString;
142
167
  "category"?: string;
168
+ /**
169
+ * The app's account profile, when available.
170
+ */
171
+ "profile"?: ActorDefs.ProfileViewDetailed;
143
172
  };
144
173
  export type { AppCard };
145
174
  declare const appCard: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereExploreTab#appCard", l.Validator<AppCard, AppCard>>;
@@ -1 +1 @@
1
- {"version":3,"file":"getAtmosphereExploreTab.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getAtmosphereExploreTab.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { l } from "@atproto/lex";
5
5
  import * as EmbedExternal from "../embed/external.defs.js";
6
+ import * as ActorDefs from "../actor/defs.defs.js";
6
7
  const $nsid = "app.bsky.unspecced.getAtmosphereExploreTab";
7
8
  export { $nsid };
8
9
  export const $params = /*#__PURE__*/ l.params({ "langs": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({ "format": "language" }))), "countryCode": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()), "regionCode": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()) });
@@ -30,6 +31,6 @@ const livestreamItem = /*#__PURE__*/ l.typedObject($nsid, "livestreamItem", /*#_
30
31
  export { livestreamItem };
31
32
  const announcementBanner = /*#__PURE__*/ l.typedObject($nsid, "announcementBanner", /*#__PURE__*/ l.object({ "id": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "title": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "description": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "url": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "image": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "overlayColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "textColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })) }));
32
33
  export { announcementBanner };
33
- const appCard = /*#__PURE__*/ l.typedObject($nsid, "appCard", /*#__PURE__*/ l.object({ "id": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "title": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "description": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "logo": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "backgroundImage": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "overlayColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "textColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "url": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "category": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })) }));
34
+ const appCard = /*#__PURE__*/ l.typedObject($nsid, "appCard", /*#__PURE__*/ l.object({ "id": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "title": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "description": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "logo": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "backgroundImage": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "overlayColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "textColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "url": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "category": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "profile": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref((() => ActorDefs.profileViewDetailed))) }));
34
35
  export { appCard };
35
36
  //# sourceMappingURL=getAtmosphereExploreTab.defs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAtmosphereExploreTab.defs.js","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * THIS FILE WAS GENERATED BY \"@atproto/lex\". DO NOT EDIT.\n */\n\nimport { l } from \"@atproto/lex\";\nimport * as EmbedExternal from \"../embed/external.defs.js\";\n\nconst $nsid = \"app.bsky.unspecced.getAtmosphereExploreTab\";\n\ntype $nsid = typeof $nsid;\n\nexport { $nsid };\n\nexport const $params = /*#__PURE__*/ l.params({\"langs\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({\"format\":\"language\"}), )),\"countryCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),\"regionCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())});\n\nexport type $Params = l.InferOutput<typeof $params>;\n\nexport const $output = /*#__PURE__*/ l.jsonPayload({\"announcementBanner\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref<AnnouncementBanner>((() => announcementBanner) as any)),\"articles\":/*#__PURE__*/ l.ref<ArticleList>((() => articleList) as any),\"publications\":/*#__PURE__*/ l.ref<PublicationList>((() => publicationList) as any),\"photos\":/*#__PURE__*/ l.ref<GalleryList>((() => galleryList) as any),\"livestreams\":/*#__PURE__*/ l.ref<LivestreamList>((() => livestreamList) as any),\"apps\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<AppCard>((() => appCard) as any), {\"maxLength\":100})});\n\nexport type $Output<B = l.BinaryData> = l.InferPayload<typeof $output, B>;\nexport type $OutputBody<B = l.BinaryData> = l.InferPayloadBody<typeof $output, B>;\n\n/** Get Atmosphere Explore content. Articles are recommended when algorithmic recommendations are enabled for the request, and curated otherwise; other sections are curated. Authentication is optional; authenticated requests include viewer-specific profile state. */\nconst main = /*#__PURE__*/ l.query($nsid, $params, $output);\n\nexport { main };\n\nconst $lxm = $nsid;\n\ntype $lxm = typeof $lxm;\n\nexport { $lxm };\n\ntype ArticleList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleList\";\"items\":(ArticleItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { ArticleList };\n\nconst articleList = /*#__PURE__*/ l.typedObject<ArticleList>($nsid, \"articleList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<ArticleItem>((() => articleItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { articleList };\n\ntype PublicationList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationList\";\"items\":(PublicationItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { PublicationList };\n\nconst publicationList = /*#__PURE__*/ l.typedObject<PublicationList>($nsid, \"publicationList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<PublicationItem>((() => publicationItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { publicationList };\n\ntype GalleryList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryList\";\"items\":(GalleryItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { GalleryList };\n\nconst galleryList = /*#__PURE__*/ l.typedObject<GalleryList>($nsid, \"galleryList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<GalleryItem>((() => galleryItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { galleryList };\n\ntype LivestreamList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamList\";\"items\":(LivestreamItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { LivestreamList };\n\nconst livestreamList = /*#__PURE__*/ l.typedObject<LivestreamList>($nsid, \"livestreamList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<LivestreamItem>((() => livestreamItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { livestreamList };\n\ntype ArticleItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewArticle };\n\nexport type { ArticleItem };\n\nconst articleItem = /*#__PURE__*/ l.typedObject<ArticleItem>($nsid, \"articleItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticle>((() => EmbedExternal.viewArticle) as any)}));\n\nexport { articleItem };\n\ntype PublicationItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewArticlePublication };\n\nexport type { PublicationItem };\n\nconst publicationItem = /*#__PURE__*/ l.typedObject<PublicationItem>($nsid, \"publicationItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticlePublication>((() => EmbedExternal.viewArticlePublication) as any)}));\n\nexport { publicationItem };\n\ntype GalleryItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewGallery };\n\nexport type { GalleryItem };\n\nconst galleryItem = /*#__PURE__*/ l.typedObject<GalleryItem>($nsid, \"galleryItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewGallery>((() => EmbedExternal.viewGallery) as any)}));\n\nexport { galleryItem };\n\ntype LivestreamItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewLivestream };\n\nexport type { LivestreamItem };\n\nconst livestreamItem = /*#__PURE__*/ l.typedObject<LivestreamItem>($nsid, \"livestreamItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewLivestream>((() => EmbedExternal.viewLivestream) as any)}));\n\nexport { livestreamItem };\n\ntype AnnouncementBanner = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#announcementBanner\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\"url\"?:l.UriString;\"image\"?:l.UriString;\"overlayColor\"?:string;\"textColor\"?:string };\n\nexport type { AnnouncementBanner };\n\nconst announcementBanner = /*#__PURE__*/ l.typedObject<AnnouncementBanner>($nsid, \"announcementBanner\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"image\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096}))}));\n\nexport { announcementBanner };\n\ntype AppCard = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#appCard\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\"logo\"?:l.UriString;\"backgroundImage\"?:l.UriString;\"overlayColor\"?:string;\"textColor\"?:string;\"url\"?:l.UriString;\"category\"?:string };\n\nexport type { AppCard };\n\nconst appCard = /*#__PURE__*/ l.typedObject<AppCard>($nsid, \"appCard\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"logo\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"backgroundImage\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"category\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096}))}));\n\nexport { appCard };\n"]}
1
+ {"version":3,"file":"getAtmosphereExploreTab.defs.js","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * THIS FILE WAS GENERATED BY \"@atproto/lex\". DO NOT EDIT.\n */\n\nimport { l } from \"@atproto/lex\";\nimport * as EmbedExternal from \"../embed/external.defs.js\";\nimport * as ActorDefs from \"../actor/defs.defs.js\";\n\nconst $nsid = \"app.bsky.unspecced.getAtmosphereExploreTab\";\n\ntype $nsid = typeof $nsid;\n\nexport { $nsid };\n\nexport const $params = /*#__PURE__*/ l.params({\"langs\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({\"format\":\"language\"}), )),\"countryCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),\"regionCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())});\n\nexport type $Params = l.InferOutput<typeof $params>;\n\nexport const $output = /*#__PURE__*/ l.jsonPayload({\"announcementBanner\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref<AnnouncementBanner>((() => announcementBanner) as any)),\"articles\":/*#__PURE__*/ l.ref<ArticleList>((() => articleList) as any),\"publications\":/*#__PURE__*/ l.ref<PublicationList>((() => publicationList) as any),\"photos\":/*#__PURE__*/ l.ref<GalleryList>((() => galleryList) as any),\"livestreams\":/*#__PURE__*/ l.ref<LivestreamList>((() => livestreamList) as any),\"apps\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<AppCard>((() => appCard) as any), {\"maxLength\":100})});\n\nexport type $Output<B = l.BinaryData> = l.InferPayload<typeof $output, B>;\nexport type $OutputBody<B = l.BinaryData> = l.InferPayloadBody<typeof $output, B>;\n\n/** Get Atmosphere Explore content. Articles are recommended when algorithmic recommendations are enabled for the request, and curated otherwise; other sections are curated. Authentication is optional; authenticated requests include viewer-specific profile state. */\nconst main = /*#__PURE__*/ l.query($nsid, $params, $output);\n\nexport { main };\n\nconst $lxm = $nsid;\n\ntype $lxm = typeof $lxm;\n\nexport { $lxm };\n\ntype ArticleList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleList\";\"items\":(ArticleItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { ArticleList };\n\nconst articleList = /*#__PURE__*/ l.typedObject<ArticleList>($nsid, \"articleList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<ArticleItem>((() => articleItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { articleList };\n\ntype PublicationList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationList\";\"items\":(PublicationItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { PublicationList };\n\nconst publicationList = /*#__PURE__*/ l.typedObject<PublicationList>($nsid, \"publicationList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<PublicationItem>((() => publicationItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { publicationList };\n\ntype GalleryList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryList\";\"items\":(GalleryItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { GalleryList };\n\nconst galleryList = /*#__PURE__*/ l.typedObject<GalleryList>($nsid, \"galleryList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<GalleryItem>((() => galleryItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { galleryList };\n\ntype LivestreamList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamList\";\"items\":(LivestreamItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { LivestreamList };\n\nconst livestreamList = /*#__PURE__*/ l.typedObject<LivestreamList>($nsid, \"livestreamList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<LivestreamItem>((() => livestreamItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { livestreamList };\n\ntype ArticleItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewArticle };\n\nexport type { ArticleItem };\n\nconst articleItem = /*#__PURE__*/ l.typedObject<ArticleItem>($nsid, \"articleItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticle>((() => EmbedExternal.viewArticle) as any)}));\n\nexport { articleItem };\n\ntype PublicationItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewArticlePublication };\n\nexport type { PublicationItem };\n\nconst publicationItem = /*#__PURE__*/ l.typedObject<PublicationItem>($nsid, \"publicationItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticlePublication>((() => EmbedExternal.viewArticlePublication) as any)}));\n\nexport { publicationItem };\n\ntype GalleryItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewGallery };\n\nexport type { GalleryItem };\n\nconst galleryItem = /*#__PURE__*/ l.typedObject<GalleryItem>($nsid, \"galleryItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewGallery>((() => EmbedExternal.viewGallery) as any)}));\n\nexport { galleryItem };\n\ntype LivestreamItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewLivestream };\n\nexport type { LivestreamItem };\n\nconst livestreamItem = /*#__PURE__*/ l.typedObject<LivestreamItem>($nsid, \"livestreamItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewLivestream>((() => EmbedExternal.viewLivestream) as any)}));\n\nexport { livestreamItem };\n\ntype AnnouncementBanner = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#announcementBanner\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\"url\"?:l.UriString;\"image\"?:l.UriString;\"overlayColor\"?:string;\"textColor\"?:string };\n\nexport type { AnnouncementBanner };\n\nconst announcementBanner = /*#__PURE__*/ l.typedObject<AnnouncementBanner>($nsid, \"announcementBanner\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"image\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096}))}));\n\nexport { announcementBanner };\n\ntype AppCard = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#appCard\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\n\n /**\n * Compatibility field. The profile avatar when available, otherwise the editorial logo.\n */\n \"logo\"?:l.UriString;\n\n /**\n * Compatibility field. The profile banner when available, otherwise the editorial background image.\n */\n \"backgroundImage\"?:l.UriString;\n\n /**\n * @deprecated . Retained for compatibility.\n */\n \"overlayColor\"?:string;\n\n /**\n * @deprecated . Retained for compatibility.\n */\n \"textColor\"?:string;\"url\"?:l.UriString;\"category\"?:string;\n\n /**\n * The app's account profile, when available.\n */\n \"profile\"?:ActorDefs.ProfileViewDetailed };\n\nexport type { AppCard };\n\nconst appCard = /*#__PURE__*/ l.typedObject<AppCard>($nsid, \"appCard\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"logo\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"backgroundImage\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"category\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"profile\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref<ActorDefs.ProfileViewDetailed>((() => ActorDefs.profileViewDetailed) as any))}));\n\nexport { appCard };\n"]}
@@ -0,0 +1,3 @@
1
+ export * from "./getAtmosphereTimeline.defs.js";
2
+ export { main as default } from "./getAtmosphereTimeline.defs.js";
3
+ //# sourceMappingURL=getAtmosphereTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAtmosphereTimeline.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereTimeline.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { l } from "@atproto/lex";
2
+ import * as EmbedExternal from "../embed/external.defs.js";
3
+ import * as FeedDefs from "../feed/defs.defs.js";
4
+ import * as ActorDefs from "../actor/defs.defs.js";
5
+ declare const $nsid = "app.bsky.unspecced.getAtmosphereTimeline";
6
+ type $nsid = typeof $nsid;
7
+ export { $nsid };
8
+ export declare const $params: l.ParamsSchema<{
9
+ readonly cursor: l.OptionalSchema<l.StringSchema<{}>>;
10
+ }>;
11
+ export type $Params = l.InferOutput<typeof $params>;
12
+ export declare const $output: l.Payload<"application/json", l.ObjectSchema<{
13
+ cursor: l.OptionalSchema<l.StringSchema<{}>>;
14
+ feed: l.ArraySchema<l.TypedUnionSchema<readonly [l.TypedRefSchema<l.TypedObjectValidator<ActivityItem, ActivityItem>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityItemOverflow, ActivityItemOverflow>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityGroup, ActivityGroup>>], false>>;
15
+ }>>;
16
+ export type $Output<B = l.BinaryData> = l.InferPayload<typeof $output, B>;
17
+ export type $OutputBody<B = l.BinaryData> = l.InferPayloadBody<typeof $output, B>;
18
+ /** Get the authenticated viewer's Atmosphere activity timeline. Grouping and related activity are limited to the returned page. */
19
+ declare const main: l.Query<"app.bsky.unspecced.getAtmosphereTimeline", l.ParamsSchema<{
20
+ readonly cursor: l.OptionalSchema<l.StringSchema<{}>>;
21
+ }>, l.Payload<"application/json", l.ObjectSchema<{
22
+ cursor: l.OptionalSchema<l.StringSchema<{}>>;
23
+ feed: l.ArraySchema<l.TypedUnionSchema<readonly [l.TypedRefSchema<l.TypedObjectValidator<ActivityItem, ActivityItem>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityItemOverflow, ActivityItemOverflow>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityGroup, ActivityGroup>>], false>>;
24
+ }>>, undefined>;
25
+ export { main };
26
+ declare const $lxm = "app.bsky.unspecced.getAtmosphereTimeline";
27
+ type $lxm = typeof $lxm;
28
+ export { $lxm };
29
+ type ActivityRecord = {
30
+ $type?: "app.bsky.unspecced.getAtmosphereTimeline#activityRecord";
31
+ "uri": l.AtUriString;
32
+ "cid": l.CidString;
33
+ "indexedAt": l.DatetimeString;
34
+ };
35
+ export type { ActivityRecord };
36
+ declare const activityRecord: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityRecord", l.Validator<ActivityRecord, ActivityRecord>>;
37
+ export { activityRecord };
38
+ type ViewerState = {
39
+ $type?: "app.bsky.unspecced.getAtmosphereTimeline#viewerState";
40
+ "subscribed": boolean;
41
+ };
42
+ export type { ViewerState };
43
+ declare const viewerState: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#viewerState", l.Validator<ViewerState, ViewerState>>;
44
+ export { viewerState };
45
+ type ActivityItem = {
46
+ $type?: "app.bsky.unspecced.getAtmosphereTimeline#activityItem";
47
+ "record": ActivityRecord;
48
+ "collection": l.NsidString;
49
+ "viewerState": ViewerState;
50
+ "view"?: l.$Typed<EmbedExternal.ViewArticle> | l.$Typed<EmbedExternal.ViewArticlePublication> | l.$Typed<EmbedExternal.ViewGallery> | l.$Typed<EmbedExternal.ViewLivestream> | l.$Typed<FeedDefs.PostView> | l.Unknown$TypedObject;
51
+ /**
52
+ * Recommendations and shares attached to this article. Attached activities do not themselves contain related activity.
53
+ */
54
+ "relatedActivity"?: (ActivityItem)[];
55
+ };
56
+ export type { ActivityItem };
57
+ declare const activityItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityItem", l.Validator<ActivityItem, ActivityItem>>;
58
+ export { activityItem };
59
+ /** Distinct additional activities omitted from this page for an author and collection, without hydrating the omitted records. */
60
+ type ActivityItemOverflow = {
61
+ $type?: "app.bsky.unspecced.getAtmosphereTimeline#activityItemOverflow";
62
+ "count": number;
63
+ "collection": l.NsidString;
64
+ "associatedProfiles": (ActorDefs.ProfileViewBasic)[];
65
+ };
66
+ export type { ActivityItemOverflow };
67
+ /** Distinct additional activities omitted from this page for an author and collection, without hydrating the omitted records. */
68
+ declare const activityItemOverflow: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityItemOverflow", l.Validator<ActivityItemOverflow, ActivityItemOverflow>>;
69
+ export { activityItemOverflow };
70
+ /** Two or more activities of the same collection, within a fixed window anchored at the newest member. The group occupies the newest member's position. */
71
+ type ActivityGroup = {
72
+ $type?: "app.bsky.unspecced.getAtmosphereTimeline#activityGroup";
73
+ "id": string;
74
+ "groupBy": "subject" | "actor" | l.UnknownString;
75
+ "collection": l.NsidString;
76
+ "indexedAt": l.DatetimeString;
77
+ "items": (ActivityItem)[];
78
+ "subject"?: l.AtUriString;
79
+ "actor"?: l.DidString;
80
+ };
81
+ export type { ActivityGroup };
82
+ /** Two or more activities of the same collection, within a fixed window anchored at the newest member. The group occupies the newest member's position. */
83
+ declare const activityGroup: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityGroup", l.Validator<ActivityGroup, ActivityGroup>>;
84
+ export { activityGroup };
85
+ //# sourceMappingURL=getAtmosphereTimeline.defs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAtmosphereTimeline.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.ts"],"names":[],"mappings":"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"}