@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.
- package/CHANGELOG.md +61 -0
- package/dist/api/app/bsky/actor/getProfile.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getProfile.js +1 -0
- package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
- package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getProfiles.js +1 -0
- package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
- package/dist/api/app/bsky/actor/getSuggestions.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getSuggestions.js +1 -0
- package/dist/api/app/bsky/actor/getSuggestions.js.map +1 -1
- package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/searchActors.js +1 -0
- package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js +1 -0
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
- package/dist/api/app/bsky/bookmark/getBookmarks.d.ts.map +1 -1
- package/dist/api/app/bsky/bookmark/getBookmarks.js +1 -0
- package/dist/api/app/bsky/bookmark/getBookmarks.js.map +1 -1
- package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -1
- package/dist/api/app/bsky/contact/getMatches.js +1 -0
- package/dist/api/app/bsky/contact/getMatches.js.map +1 -1
- package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -1
- package/dist/api/app/bsky/contact/importContacts.js +1 -0
- package/dist/api/app/bsky/contact/importContacts.js.map +1 -1
- package/dist/api/app/bsky/feed/getActorFeeds.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getActorFeeds.js +5 -1
- package/dist/api/app/bsky/feed/getActorFeeds.js.map +1 -1
- package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getActorLikes.js +1 -0
- package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
- package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getAuthorFeed.js +1 -0
- package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeed.js +1 -0
- package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.js +5 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.js +5 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.js.map +1 -1
- package/dist/api/app/bsky/feed/getLikes.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getLikes.js +1 -0
- package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
- package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getListFeed.js +1 -0
- package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getPostThread.js +1 -0
- package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
- package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getPosts.js +5 -1
- package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
- package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getQuotes.js +1 -0
- package/dist/api/app/bsky/feed/getQuotes.js.map +1 -1
- package/dist/api/app/bsky/feed/getRepostedBy.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getRepostedBy.js +1 -0
- package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.js +5 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.js.map +1 -1
- package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getTimeline.js +1 -0
- package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.js +1 -0
- package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPostsV2.js +1 -0
- package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -1
- package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getActorStarterPacks.js +1 -0
- package/dist/api/app/bsky/graph/getActorStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/graph/getBlocks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getBlocks.js +5 -1
- package/dist/api/app/bsky/graph/getBlocks.js.map +1 -1
- package/dist/api/app/bsky/graph/getFollowers.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getFollowers.js +1 -0
- package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
- package/dist/api/app/bsky/graph/getFollows.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getFollows.js +1 -0
- package/dist/api/app/bsky/graph/getFollows.js.map +1 -1
- package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getKnownFollowers.js +1 -0
- package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -1
- package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getList.js +1 -0
- package/dist/api/app/bsky/graph/getList.js.map +1 -1
- package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getListBlocks.js +5 -1
- package/dist/api/app/bsky/graph/getListBlocks.js.map +1 -1
- package/dist/api/app/bsky/graph/getListMutes.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getListMutes.js +5 -1
- package/dist/api/app/bsky/graph/getListMutes.js.map +1 -1
- package/dist/api/app/bsky/graph/getLists.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getLists.js +1 -0
- package/dist/api/app/bsky/graph/getLists.js.map +1 -1
- package/dist/api/app/bsky/graph/getListsWithMembership.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getListsWithMembership.js +1 -0
- package/dist/api/app/bsky/graph/getListsWithMembership.js.map +1 -1
- package/dist/api/app/bsky/graph/getMutes.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getMutes.js +5 -1
- package/dist/api/app/bsky/graph/getMutes.js.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPack.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPack.js +1 -0
- package/dist/api/app/bsky/graph/getStarterPack.js.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacks.js +1 -0
- package/dist/api/app/bsky/graph/getStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js +1 -0
- package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js.map +1 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js +1 -0
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacks.js +1 -0
- package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacksV2.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacksV2.js +1 -0
- package/dist/api/app/bsky/graph/searchStarterPacksV2.js.map +1 -1
- package/dist/api/app/bsky/labeler/getServices.d.ts.map +1 -1
- package/dist/api/app/bsky/labeler/getServices.js +1 -0
- package/dist/api/app/bsky/labeler/getServices.js.map +1 -1
- package/dist/api/app/bsky/notification/getGroupedNotifications.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/getGroupedNotifications.js +41 -20
- package/dist/api/app/bsky/notification/getGroupedNotifications.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoGravity.d.ts +4 -3
- package/dist/api/app/bsky/notification/grouping/algoGravity.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoGravity.js +53 -42
- package/dist/api/app/bsky/notification/grouping/algoGravity.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoLookback.d.ts +4 -3
- package/dist/api/app/bsky/notification/grouping/algoLookback.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoLookback.js +56 -42
- package/dist/api/app/bsky/notification/grouping/algoLookback.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/grouping.d.ts +12 -2
- package/dist/api/app/bsky/notification/grouping/grouping.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/grouping.js +20 -6
- package/dist/api/app/bsky/notification/grouping/grouping.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.d.ts +2 -2
- package/dist/api/app/bsky/notification/grouping/spotlight.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.js +35 -22
- package/dist/api/app/bsky/notification/grouping/spotlight.js.map +1 -1
- package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/listActivitySubscriptions.js +1 -0
- package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.js +5 -1
- package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.d.ts +16 -0
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.js +124 -0
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.js.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.d.ts +32 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.js +201 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.js.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.d.ts +6 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.js +164 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.js.map +1 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js +120 -55
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.d.ts +4 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.js +30 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.js.map +1 -0
- package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js +4 -7
- package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js +1 -0
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js +1 -0
- package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -0
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js +4 -7
- package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js +4 -7
- package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.js +2 -19
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrendingTopics.js +6 -2
- package/dist/api/app/bsky/unspecced/getTrendingTopics.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrends.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrends.js +6 -2
- package/dist/api/app/bsky/unspecced/getTrends.js.map +1 -1
- package/dist/api/blob-resolver.d.ts.map +1 -1
- package/dist/api/blob-resolver.js +9 -8
- package/dist/api/blob-resolver.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/bsky/actor/getProfiles.d.ts.map +1 -1
- package/dist/api/internal/bsky/actor/getProfiles.js +1 -0
- package/dist/api/internal/bsky/actor/getProfiles.js.map +1 -1
- package/dist/config.d.ts +2 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -16
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +0 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +0 -3
- package/dist/context.js.map +1 -1
- package/dist/feature-gates/gates.d.ts +0 -4
- package/dist/feature-gates/gates.d.ts.map +1 -1
- package/dist/feature-gates/gates.js +0 -4
- package/dist/feature-gates/gates.js.map +1 -1
- package/dist/hydration/external.d.ts +58 -45
- package/dist/hydration/external.d.ts.map +1 -1
- package/dist/hydration/external.js +134 -114
- package/dist/hydration/external.js.map +1 -1
- package/dist/hydration/hydrator.d.ts +15 -9
- package/dist/hydration/hydrator.d.ts.map +1 -1
- package/dist/hydration/hydrator.js +170 -210
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/image/server.d.ts.map +1 -1
- package/dist/image/server.js +12 -1
- package/dist/image/server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -19
- package/dist/index.js.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts +29 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js +2 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.d.ts +85 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.js +29 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.js +6 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced.d.ts +1 -0
- package/dist/lexicons/app/bsky/unspecced.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/unspecced.js +1 -0
- package/dist/lexicons/app/bsky/unspecced.js.map +1 -1
- package/dist/lexicons/tools/ozone/moderation/emitEvent.defs.d.ts +2 -2
- package/dist/lexicons/tools/ozone/moderation/emitEvent.defs.js.map +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.d.ts +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.d.ts.map +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.js +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.js.map +1 -1
- package/dist/telemetry/events.d.ts +14 -6
- package/dist/telemetry/events.d.ts.map +1 -1
- package/dist/telemetry/events.js +40 -5
- package/dist/telemetry/events.js.map +1 -1
- package/dist/util/external/standard-site.d.ts +2 -3
- package/dist/util/external/standard-site.d.ts.map +1 -1
- package/dist/util/external/standard-site.js +2 -3
- package/dist/util/external/standard-site.js.map +1 -1
- package/dist/util/uris.d.ts +5 -2
- package/dist/util/uris.d.ts.map +1 -1
- package/dist/util/uris.js +14 -1
- package/dist/util/uris.js.map +1 -1
- package/dist/views/external.d.ts +5 -0
- package/dist/views/external.d.ts.map +1 -1
- package/dist/views/external.js +38 -11
- package/dist/views/external.js.map +1 -1
- package/dist/views/index.d.ts +2 -2
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +17 -11
- package/dist/views/index.js.map +1 -1
- package/package.json +13 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-site.js","sourceRoot":"","sources":["../../../src/util/external/standard-site.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AtUriString, InferInput, RecordSchema } from '@atproto/lex'\nimport { parseAtUriString } from '@atproto/syntax'\nimport type {\n AssociatedSiteStandardRecord,\n ExternalRecord,\n ExternalRecords,\n SiteStandardDocument,\n SiteStandardPublication,\n} from '../../hydration/external.js'\nimport type { RecordInfo } from '../../hydration/util.js'\nimport { site } from '../../lexicons/index.js'\n\nexport const SITE_STANDARD_NSID_PREFIX = 'site.standard.'\n\n/**\n * Parse `url` as HTTP(S) and reduce it to a canonical\n * `protocol://host/path` string for equality comparison: lowercases host,\n * strips a trailing slash from the path, and drops query/fragment. Returns\n * `null` when the input isn't a valid HTTP(S) URL.\n */\nconst canonicalizeHttpUrl = (url: string): string | null => {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n return null\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return null\n const path = parsed.pathname === '/' ? '' : parsed.pathname.replace(/\\/$/, '')\n return `${parsed.protocol}//${parsed.host}${path}`\n}\n\n/**\n * Append `path` to `base` with exactly one slash between, or return `base`\n * unchanged when `path` is empty. Unlike `new URL(path, base)`, a leading\n * slash on `path` does NOT swallow `base`'s pathname — so\n * `joinPath('https://x.com/blog', '/foo')` is `https://x.com/blog/foo`,\n * not `https://x.com/foo`.\n */\nconst joinPath = (base: string, path: string): string => {\n if (!path) return base\n const baseTrimmed = base.endsWith('/') ? base.slice(0, -1) : base\n const pathTrimmed = path.startsWith('/') ? path.slice(1) : path\n return `${baseTrimmed}/${pathTrimmed}`\n}\n\n/**\n * Apex domains whose authors own the full subpath space under their\n * record-claimed URL. Each entry matches itself and any subdomain; e.g.\n * `pckt.blog` matches `pckt.blog` and `waow-tech.pckt.blog`.\n *\n * On these domains, an `assumedUrl` whose pathname extends the canonical\n * record URL with extra segments is treated as valid. Adding to this list\n * is a trust call — only platforms where each record's URL space is\n * authoritatively owned by its author belong here.\n */\nconst SUBPATH_FRIENDLY_DOMAINS = ['pckt.blog', 'leaflet.pub', 'offprint.app']\n\nconst isSubpathFriendlyHost = (host: string): boolean => {\n const lower = host.toLowerCase()\n return SUBPATH_FRIENDLY_DOMAINS.some(\n (domain) => lower === domain || lower.endsWith(`.${domain}`),\n )\n}\n\n/**\n * Return whether `recordUrl` and `assumedUrl` should validate as the same\n * canonical content. Strictly equal canonical forms always match. On\n * subpath-friendly hosts (see `SUBPATH_FRIENDLY_DOMAINS`), an `assumedUrl`\n * whose path extends `recordUrl`'s with extra segments is also accepted.\n *\n * Both inputs are pre-canonicalized strings (`canonicalizeHttpUrl` output)\n * with no trailing slash and no query/fragment.\n */\nconst canonicalUrlMatchesAssumed = (\n canonicalRecordUrl: string,\n canonicalAssumedUrl: string,\n): boolean => {\n if (canonicalRecordUrl === canonicalAssumedUrl) return true\n // Subpath fallback. Both strings are canonicalized, so a real\n // path-segment boundary at `recordUrl + '/'` (e.g. `/foo` vs `/foo-bar`\n // never matches; `/foo` vs `/foo/bar` does).\n if (!canonicalAssumedUrl.startsWith(`${canonicalRecordUrl}/`)) return false\n let host: string\n try {\n host = new URL(canonicalAssumedUrl).host\n } catch {\n return false\n }\n return isSubpathFriendlyHost(host)\n}\n\n/**\n * Confirm that the supplied SS records actually back `assumedUrl`. The\n * record-side URL is built by concatenating the publication URL (or the\n * loose-doc site) with the document's `path` field, then both sides are\n * canonicalized for equality: lowercase host, query/fragment dropped,\n * trailing slash stripped.\n *\n * Path concatenation is `base + '/' + path` semantics — a leading `/` on\n * `path` does NOT swallow the base's pathname (the way\n * `new URL(path, base)` would). So\n * `'https://atproto.com/blog' + '/indexing-standard-site'` resolves to\n * `https://atproto.com/blog/indexing-standard-site` regardless of which\n * side carries the slash.\n *\n * Structural validation of the doc/pub pair (matching `site` ↔ pub URI,\n * no orphan docs that claim a missing publication) happens upstream: in the\n * pinned `getSiteStandardRecordsFromHydrationMapsByRefs`\n * (`hydration/external.ts`), or by `validateStandardSiteRecordsForUrl` over\n * `getStandardSiteRecordsForUri`'s selection (which alone leaves an orphan\n * document selected with an absent publication). By the time this\n * function runs the pair is already known to be structurally consistent,\n * so we only check whether the records back the URL.\n *\n * For document validation, `SUBPATH_FRIENDLY_DOMAINS` (and their\n * subdomains) accept an assumed URL whose path extends the canonical\n * record URL with additional segments — these are platforms where each\n * record's author owns the full subpath space under their claimed URL.\n * Publication-only validation always requires exact match: there's no\n * coherent \"subpath\" of a publication's home page.\n *\n * Cases:\n * - Document + publication: `publication.url + document.path` must\n * canonicalize to `assumedUrl` (or be a subpath-friendly prefix of it).\n * - Loose document (web-URL `site`): `document.site + document.path`\n * must canonicalize to `assumedUrl` (or be a subpath-friendly prefix).\n * (Doc with at-uri `site` but no publication can't reach this function\n * — callers reject it.)\n * - Publication only: `publication.url` must canonicalize exactly to\n * `assumedUrl`.\n * - Neither: vacuously valid; the caller short-circuits before we get\n * here.\n */\nexport const validateStandardSiteForUrl = (\n document:\n | {\n ref: { uri: string }\n info: { record: { site: string; path?: string } }\n }\n | undefined,\n publication:\n { ref: { uri: string }; info: { record: { url: string } } } | undefined,\n assumedUrl: string,\n): boolean => {\n const canonicalAssumed = canonicalizeHttpUrl(assumedUrl)\n if (canonicalAssumed === null) return false\n\n if (document && publication) {\n const joined = canonicalizeHttpUrl(\n joinPath(publication.info.record.url, document.info.record.path ?? ''),\n )\n return (\n joined !== null && canonicalUrlMatchesAssumed(joined, canonicalAssumed)\n )\n }\n if (document) {\n const joined = canonicalizeHttpUrl(\n joinPath(document.info.record.site, document.info.record.path ?? ''),\n )\n return (\n joined !== null && canonicalUrlMatchesAssumed(joined, canonicalAssumed)\n )\n }\n if (publication) {\n // Publication-only matches are exact: `assumedUrl` represents the\n // publication's home page, not an article underneath it. Subpath\n // extensions belong to document validation.\n return canonicalizeHttpUrl(publication.info.record.url) === canonicalAssumed\n }\n return true\n}\n\nexport type StandardSiteRecordSelection = {\n document?: AssociatedSiteStandardRecord<SiteStandardDocument>\n publication?: AssociatedSiteStandardRecord<SiteStandardPublication>\n}\n\nconst matchStoredRecord = <TSchema extends RecordSchema>(\n schema: TSchema,\n uri: AtUriString,\n info: ExternalRecord | null | undefined,\n): AssociatedSiteStandardRecord<RecordInfo<InferInput<TSchema>>> | undefined =>\n info && schema.$matches(info.record, { strict: false })\n ? { ref: { uri, cid: info.cid }, info: { ...info, record: info.record } }\n : undefined\n\n/**\n * Select the Standard.site records backing `canonicalUri` from in-memory\n * hydrated `records`: the canonical record itself and, for a document whose\n * `site` is a publication AT-URI, that publication. Stored bodies are checked\n * against the Lexicon without parsing or defaulting. Nothing is fetched, and a\n * missing or invalid referenced publication leaves that slot empty while the\n * document stays selected.\n */\nexport const getStandardSiteRecordsForUri = (\n canonicalUri: AtUriString,\n records: ExternalRecords | undefined,\n): StandardSiteRecordSelection => {\n const parsed = parseAtUriString(canonicalUri)\n if (!parsed.success) return {}\n const info = records?.get(canonicalUri)\n\n switch (parsed.value.collection) {\n case site.standard.publication.$type: {\n const publication = matchStoredRecord(\n site.standard.publication.main,\n canonicalUri,\n info,\n )\n return publication ? { publication } : {}\n }\n case site.standard.document.$type: {\n const document = matchStoredRecord(\n site.standard.document.main,\n canonicalUri,\n info,\n )\n if (!document) return {}\n const publicationUri = publicationUriOf(document.info.record.site)\n if (!publicationUri) return { document }\n const publication = matchStoredRecord(\n site.standard.publication.main,\n publicationUri,\n records?.get(publicationUri),\n )\n return publication ? { document, publication } : { document }\n }\n default:\n return {}\n }\n}\n\nconst publicationUriOf = (value: string): AtUriString | undefined => {\n const parsed = parseAtUriString(value)\n return parsed.success &&\n parsed.value.collection === site.standard.publication.$type\n ? (value as AtUriString)\n : undefined\n}\n\n/**\n * Whether the selected records form a valid association that backs\n * `assumedUrl`. A document naming a publication AT-URI needs exactly that\n * publication; a supplied publication must be the one the document names.\n * Standalone publications and documents with a web-URL `site` are valid on\n * their own. URL comparison is `validateStandardSiteForUrl`; renderability\n * (e.g. empty titles) is not considered.\n */\nexport const validateStandardSiteRecordsForUrl = (\n document: AssociatedSiteStandardRecord<SiteStandardDocument> | undefined,\n publication:\n AssociatedSiteStandardRecord<SiteStandardPublication> | undefined,\n assumedUrl: string,\n): boolean => {\n if (!document && !publication) return false\n if (document) {\n const documentSite = document.info.record.site\n if (publication) {\n if (documentSite !== publication.ref.uri) return false\n } else if (publicationUriOf(documentSite)) {\n return false\n }\n }\n return validateStandardSiteForUrl(document, publication, assumedUrl)\n}\n\nconst WORDS_PER_MINUTE = 200\n\n/**\n * Estimate reading time in minutes from a plaintext document body. Returns\n * `undefined` when the input has no countable words. Uses a coarse\n * `WORDS_PER_MINUTE` heuristic; swap in a more accurate library here if\n * needed (e.g. `reading-time`).\n */\nexport const estimateReadingTimeMinutes = (\n text: string,\n): number | undefined => {\n const words = text.trim().split(/\\s+/).filter(Boolean).length\n if (!words) return undefined\n return Math.max(1, Math.ceil(words / WORDS_PER_MINUTE))\n}\n"]}
|
|
1
|
+
{"version":3,"file":"standard-site.js","sourceRoot":"","sources":["../../../src/util/external/standard-site.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AtUriString, InferInput, RecordSchema } from '@atproto/lex'\nimport { parseAtUriString } from '@atproto/syntax'\nimport type {\n AssociatedSiteStandardRecord,\n ExternalRecord,\n ExternalRecords,\n SiteStandardDocument,\n SiteStandardPublication,\n} from '../../hydration/external.js'\nimport type { RecordInfo } from '../../hydration/util.js'\nimport { site } from '../../lexicons/index.js'\n\n/**\n * Parse `url` as HTTP(S) and reduce it to a canonical\n * `protocol://host/path` string for equality comparison: lowercases host,\n * strips a trailing slash from the path, and drops query/fragment. Returns\n * `null` when the input isn't a valid HTTP(S) URL.\n */\nconst canonicalizeHttpUrl = (url: string): string | null => {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n return null\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return null\n const path = parsed.pathname === '/' ? '' : parsed.pathname.replace(/\\/$/, '')\n return `${parsed.protocol}//${parsed.host}${path}`\n}\n\n/**\n * Append `path` to `base` with exactly one slash between, or return `base`\n * unchanged when `path` is empty. Unlike `new URL(path, base)`, a leading\n * slash on `path` does NOT swallow `base`'s pathname — so\n * `joinPath('https://x.com/blog', '/foo')` is `https://x.com/blog/foo`,\n * not `https://x.com/foo`.\n */\nconst joinPath = (base: string, path: string): string => {\n if (!path) return base\n const baseTrimmed = base.endsWith('/') ? base.slice(0, -1) : base\n const pathTrimmed = path.startsWith('/') ? path.slice(1) : path\n return `${baseTrimmed}/${pathTrimmed}`\n}\n\n/**\n * Apex domains whose authors own the full subpath space under their\n * record-claimed URL. Each entry matches itself and any subdomain; e.g.\n * `pckt.blog` matches `pckt.blog` and `waow-tech.pckt.blog`.\n *\n * On these domains, an `assumedUrl` whose pathname extends the canonical\n * record URL with extra segments is treated as valid. Adding to this list\n * is a trust call — only platforms where each record's URL space is\n * authoritatively owned by its author belong here.\n */\nconst SUBPATH_FRIENDLY_DOMAINS = ['pckt.blog', 'leaflet.pub', 'offprint.app']\n\nconst isSubpathFriendlyHost = (host: string): boolean => {\n const lower = host.toLowerCase()\n return SUBPATH_FRIENDLY_DOMAINS.some(\n (domain) => lower === domain || lower.endsWith(`.${domain}`),\n )\n}\n\n/**\n * Return whether `recordUrl` and `assumedUrl` should validate as the same\n * canonical content. Strictly equal canonical forms always match. On\n * subpath-friendly hosts (see `SUBPATH_FRIENDLY_DOMAINS`), an `assumedUrl`\n * whose path extends `recordUrl`'s with extra segments is also accepted.\n *\n * Both inputs are pre-canonicalized strings (`canonicalizeHttpUrl` output)\n * with no trailing slash and no query/fragment.\n */\nconst canonicalUrlMatchesAssumed = (\n canonicalRecordUrl: string,\n canonicalAssumedUrl: string,\n): boolean => {\n if (canonicalRecordUrl === canonicalAssumedUrl) return true\n // Subpath fallback. Both strings are canonicalized, so a real\n // path-segment boundary at `recordUrl + '/'` (e.g. `/foo` vs `/foo-bar`\n // never matches; `/foo` vs `/foo/bar` does).\n if (!canonicalAssumedUrl.startsWith(`${canonicalRecordUrl}/`)) return false\n let host: string\n try {\n host = new URL(canonicalAssumedUrl).host\n } catch {\n return false\n }\n return isSubpathFriendlyHost(host)\n}\n\n/**\n * Confirm that the supplied SS records actually back `assumedUrl`. The\n * record-side URL is built by concatenating the publication URL (or the\n * loose-doc site) with the document's `path` field, then both sides are\n * canonicalized for equality: lowercase host, query/fragment dropped,\n * trailing slash stripped.\n *\n * Path concatenation is `base + '/' + path` semantics — a leading `/` on\n * `path` does NOT swallow the base's pathname (the way\n * `new URL(path, base)` would). So\n * `'https://atproto.com/blog' + '/indexing-standard-site'` resolves to\n * `https://atproto.com/blog/indexing-standard-site` regardless of which\n * side carries the slash.\n *\n * Structural validation of the doc/pub pair (matching `site` ↔ pub URI,\n * no orphan docs that claim a missing publication) happens upstream: in\n * `getSiteStandardRecordsFromRefs`'s pinned-root/dependency selection\n * (`hydration/external.ts`), or by `validateStandardSiteRecordsForUrl` over\n * `getStandardSiteRecordsForUri`'s selection (which alone leaves an orphan\n * document selected with an absent publication). By the time this\n * function runs the pair is already known to be structurally consistent,\n * so we only check whether the records back the URL.\n *\n * For document validation, `SUBPATH_FRIENDLY_DOMAINS` (and their\n * subdomains) accept an assumed URL whose path extends the canonical\n * record URL with additional segments — these are platforms where each\n * record's author owns the full subpath space under their claimed URL.\n * Publication-only validation always requires exact match: there's no\n * coherent \"subpath\" of a publication's home page.\n *\n * Cases:\n * - Document + publication: `publication.url + document.path` must\n * canonicalize to `assumedUrl` (or be a subpath-friendly prefix of it).\n * - Loose document (web-URL `site`): `document.site + document.path`\n * must canonicalize to `assumedUrl` (or be a subpath-friendly prefix).\n * (Doc with at-uri `site` but no publication can't reach this function\n * — callers reject it.)\n * - Publication only: `publication.url` must canonicalize exactly to\n * `assumedUrl`.\n * - Neither: vacuously valid; the caller short-circuits before we get\n * here.\n */\nexport const validateStandardSiteForUrl = (\n document:\n | {\n ref: { uri: string }\n info: { record: { site: string; path?: string } }\n }\n | undefined,\n publication:\n { ref: { uri: string }; info: { record: { url: string } } } | undefined,\n assumedUrl: string,\n): boolean => {\n const canonicalAssumed = canonicalizeHttpUrl(assumedUrl)\n if (canonicalAssumed === null) return false\n\n if (document && publication) {\n const joined = canonicalizeHttpUrl(\n joinPath(publication.info.record.url, document.info.record.path ?? ''),\n )\n return (\n joined !== null && canonicalUrlMatchesAssumed(joined, canonicalAssumed)\n )\n }\n if (document) {\n const joined = canonicalizeHttpUrl(\n joinPath(document.info.record.site, document.info.record.path ?? ''),\n )\n return (\n joined !== null && canonicalUrlMatchesAssumed(joined, canonicalAssumed)\n )\n }\n if (publication) {\n // Publication-only matches are exact: `assumedUrl` represents the\n // publication's home page, not an article underneath it. Subpath\n // extensions belong to document validation.\n return canonicalizeHttpUrl(publication.info.record.url) === canonicalAssumed\n }\n return true\n}\n\nexport type StandardSiteRecordSelection = {\n document?: AssociatedSiteStandardRecord<SiteStandardDocument>\n publication?: AssociatedSiteStandardRecord<SiteStandardPublication>\n}\n\nconst matchStoredRecord = <TSchema extends RecordSchema>(\n schema: TSchema,\n uri: AtUriString,\n info: ExternalRecord | null | undefined,\n): AssociatedSiteStandardRecord<RecordInfo<InferInput<TSchema>>> | undefined =>\n info && schema.$matches(info.record, { strict: false })\n ? { ref: { uri, cid: info.cid }, info: { ...info, record: info.record } }\n : undefined\n\n/**\n * Select the Standard.site records backing `canonicalUri` from in-memory\n * hydrated `records`: the canonical record itself and, for a document whose\n * `site` is a publication AT-URI, that publication. Stored bodies are checked\n * against the Lexicon without parsing or defaulting. Nothing is fetched, and a\n * missing or invalid referenced publication leaves that slot empty while the\n * document stays selected.\n */\nexport const getStandardSiteRecordsForUri = (\n canonicalUri: AtUriString,\n records: ExternalRecords | undefined,\n): StandardSiteRecordSelection => {\n const parsed = parseAtUriString(canonicalUri)\n if (!parsed.success) return {}\n const info = records?.get(canonicalUri)\n\n switch (parsed.value.collection) {\n case site.standard.publication.$type: {\n const publication = matchStoredRecord(\n site.standard.publication.main,\n canonicalUri,\n info,\n )\n return publication ? { publication } : {}\n }\n case site.standard.document.$type: {\n const document = matchStoredRecord(\n site.standard.document.main,\n canonicalUri,\n info,\n )\n if (!document) return {}\n const publicationUri = publicationUriOf(document.info.record.site)\n if (!publicationUri) return { document }\n const publication = matchStoredRecord(\n site.standard.publication.main,\n publicationUri,\n records?.get(publicationUri),\n )\n return publication ? { document, publication } : { document }\n }\n default:\n return {}\n }\n}\n\nconst publicationUriOf = (value: string): AtUriString | undefined => {\n const parsed = parseAtUriString(value)\n return parsed.success &&\n parsed.value.collection === site.standard.publication.$type\n ? (value as AtUriString)\n : undefined\n}\n\n/**\n * Whether the selected records form a valid association that backs\n * `assumedUrl`. A document naming a publication AT-URI needs exactly that\n * publication; a supplied publication must be the one the document names.\n * Standalone publications and documents with a web-URL `site` are valid on\n * their own. URL comparison is `validateStandardSiteForUrl`; renderability\n * (e.g. empty titles) is not considered.\n */\nexport const validateStandardSiteRecordsForUrl = (\n document: AssociatedSiteStandardRecord<SiteStandardDocument> | undefined,\n publication:\n AssociatedSiteStandardRecord<SiteStandardPublication> | undefined,\n assumedUrl: string,\n): boolean => {\n if (!document && !publication) return false\n if (document) {\n const documentSite = document.info.record.site\n if (publication) {\n if (documentSite !== publication.ref.uri) return false\n } else if (publicationUriOf(documentSite)) {\n return false\n }\n }\n return validateStandardSiteForUrl(document, publication, assumedUrl)\n}\n\nconst WORDS_PER_MINUTE = 200\n\n/**\n * Estimate reading time in minutes from a plaintext document body. Returns\n * `undefined` when the input has no countable words. Uses a coarse\n * `WORDS_PER_MINUTE` heuristic; swap in a more accurate library here if\n * needed (e.g. `reading-time`).\n */\nexport const estimateReadingTimeMinutes = (\n text: string,\n): number | undefined => {\n const words = text.trim().split(/\\s+/).filter(Boolean).length\n if (!words) return undefined\n return Math.max(1, Math.ceil(words / WORDS_PER_MINUTE))\n}\n"]}
|
package/dist/util/uris.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
import { type AtUriString, type NsidString } from '@atproto/lex';
|
|
1
2
|
import { type DidString } from '@atproto/syntax';
|
|
2
3
|
import { type StrongRef } from '../views/types.js';
|
|
4
|
+
/** A complete DID-based record URI in the expected collection, with no query or fragment. */
|
|
5
|
+
export declare function recordUriOf(value: string, collection: NsidString): AtUriString | undefined;
|
|
3
6
|
/**
|
|
4
7
|
* Convert a post URI to a threadgate URI. If the URI is not a valid
|
|
5
8
|
* post URI, return URI unchanged. Threadgate lookups will then fail.
|
|
6
9
|
*/
|
|
7
|
-
export declare function postUriToThreadgateUri(postUri: string):
|
|
10
|
+
export declare function postUriToThreadgateUri(postUri: string): AtUriString;
|
|
8
11
|
/**
|
|
9
12
|
* Convert a post URI to a postgate URI. If the URI is not a valid
|
|
10
13
|
* post URI, return URI unchanged. Postgate lookups will then fail.
|
|
11
14
|
*/
|
|
12
|
-
export declare function postUriToPostgateUri(postUri: string):
|
|
15
|
+
export declare function postUriToPostgateUri(postUri: string): AtUriString;
|
|
13
16
|
export declare function uriToDid(uri: string): DidString;
|
|
14
17
|
export declare function safePinnedPost(value: unknown): StrongRef | undefined;
|
|
15
18
|
//# sourceMappingURL=uris.d.ts.map
|
package/dist/util/uris.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uris.d.ts","sourceRoot":"","sources":["../../src/util/uris.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"uris.d.ts","sourceRoot":"","sources":["../../src/util/uris.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAe,MAAM,cAAc,CAAA;AAC7E,OAAO,EAAS,KAAK,SAAS,EAAoB,MAAM,iBAAiB,CAAA;AAEzE,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAA;AAErE,6FAA6F;AAC7F,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,UAAU,GACrB,WAAW,GAAG,SAAS,CAUzB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,eAMrD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,eAMnD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAG/C;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAGpE"}
|
package/dist/util/uris.js
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isDidString } from '@atproto/lex';
|
|
2
|
+
import { AtUri, parseAtUriString } from '@atproto/syntax';
|
|
2
3
|
import { app } from '../lexicons/index.js';
|
|
3
4
|
import { validateStrongRef } from '../views/types.js';
|
|
5
|
+
/** A complete DID-based record URI in the expected collection, with no query or fragment. */
|
|
6
|
+
export function recordUriOf(value, collection) {
|
|
7
|
+
const parsed = parseAtUriString(value);
|
|
8
|
+
return parsed.success &&
|
|
9
|
+
isDidString(parsed.value.authority) &&
|
|
10
|
+
parsed.value.collection === collection &&
|
|
11
|
+
parsed.value.rkey &&
|
|
12
|
+
parsed.value.query === undefined &&
|
|
13
|
+
parsed.value.hash === undefined
|
|
14
|
+
? value
|
|
15
|
+
: undefined;
|
|
16
|
+
}
|
|
4
17
|
/**
|
|
5
18
|
* Convert a post URI to a threadgate URI. If the URI is not a valid
|
|
6
19
|
* post URI, return URI unchanged. Threadgate lookups will then fail.
|
package/dist/util/uris.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uris.js","sourceRoot":"","sources":["../../src/util/uris.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"uris.js","sourceRoot":"","sources":["../../src/util/uris.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,WAAW,EAAE,MAAM,cAAc,CAAA;AAC7E,OAAO,EAAE,KAAK,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAkB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErE,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CACzB,KAAa,EACb,UAAsB;IAEtB,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,OAAO;QACnB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI;QACjB,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS;QAChC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;QAC/B,CAAC,CAAE,KAAqB;QACxB,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAA;IAClD,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA;IAChD,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,iEAAiE;IACjE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAA;AAC3B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC1C,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACxD,CAAC","sourcesContent":["import { type AtUriString, type NsidString, isDidString } from '@atproto/lex'\nimport { AtUri, type DidString, parseAtUriString } from '@atproto/syntax'\nimport { app } from '../lexicons/index.js'\nimport { type StrongRef, validateStrongRef } from '../views/types.js'\n\n/** A complete DID-based record URI in the expected collection, with no query or fragment. */\nexport function recordUriOf(\n value: string,\n collection: NsidString,\n): AtUriString | undefined {\n const parsed = parseAtUriString(value)\n return parsed.success &&\n isDidString(parsed.value.authority) &&\n parsed.value.collection === collection &&\n parsed.value.rkey &&\n parsed.value.query === undefined &&\n parsed.value.hash === undefined\n ? (value as AtUriString)\n : undefined\n}\n\n/**\n * Convert a post URI to a threadgate URI. If the URI is not a valid\n * post URI, return URI unchanged. Threadgate lookups will then fail.\n */\nexport function postUriToThreadgateUri(postUri: string) {\n const urip = new AtUri(postUri)\n if (urip.collection === app.bsky.feed.post.$type) {\n urip.collection = app.bsky.feed.threadgate.$type\n }\n return urip.toString()\n}\n\n/**\n * Convert a post URI to a postgate URI. If the URI is not a valid\n * post URI, return URI unchanged. Postgate lookups will then fail.\n */\nexport function postUriToPostgateUri(postUri: string) {\n const urip = new AtUri(postUri)\n if (urip.collection === app.bsky.feed.post.$type) {\n urip.collection = app.bsky.feed.postgate.$type\n }\n return urip.toString()\n}\n\nexport function uriToDid(uri: string): DidString {\n // @NOTE URIs returned from the dataplane are always in DID form.\n return new AtUri(uri).did\n}\n\n// @TODO temp fix for proliferation of invalid pinned post values\nexport function safePinnedPost(value: unknown): StrongRef | undefined {\n const validated = validateStrongRef(value)\n return validated.success ? validated.value : undefined\n}\n"]}
|
package/dist/views/external.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { type $Typed, type AtUriString } from '@atproto/lex';
|
|
2
|
+
import type { ExternalRecord } from '../hydration/external.js';
|
|
2
3
|
import type { HydrationState } from '../hydration/hydrator.js';
|
|
3
4
|
import type { Views } from './index.js';
|
|
4
5
|
import type { ExternalRecordView } from './types.js';
|
|
5
6
|
export declare const LIVESTREAM_HEARTBEAT_WINDOW_MS: number;
|
|
6
7
|
/** Build a modality view from validated, available records in hydration state. */
|
|
7
8
|
export declare function externalRecordView(views: Views, uri: AtUriString, state: HydrationState, now: number): $Typed<ExternalRecordView> | undefined;
|
|
9
|
+
/** Resolve renderable view dependencies without constructing presentation fields. */
|
|
10
|
+
export declare function externalRecordViewRefs(views: Views, uri: AtUriString, state: HydrationState): AtUriString[] | undefined;
|
|
11
|
+
/** Apply shared block, review, and takedown checks to a hydrated record. */
|
|
12
|
+
export declare function availableRecord(views: Views, uri: AtUriString, state: HydrationState, info?: ExternalRecord | null | undefined): ExternalRecord | undefined;
|
|
8
13
|
//# sourceMappingURL=external.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../../src/views/external.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,WAAW,EAOjB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../../src/views/external.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,WAAW,EAOjB,MAAM,cAAc,CAAA;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAK9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAA2B,MAAM,YAAY,CAAA;AAE7E,eAAO,MAAM,8BAA8B,QAAa,CAAA;AAExD,kFAAkF;AAClF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAExC;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,GACpB,WAAW,EAAE,GAAG,SAAS,CAE3B;AA2ND,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,EACrB,IAAI,GAAE,cAAc,GAAG,IAAI,GAAG,SAA2C,GACxE,cAAc,GAAG,SAAS,CAmB5B"}
|
package/dist/views/external.js
CHANGED
|
@@ -8,6 +8,13 @@ import { uriToDid } from '../util/uris.js';
|
|
|
8
8
|
export const LIVESTREAM_HEARTBEAT_WINDOW_MS = 2 * MINUTE;
|
|
9
9
|
/** Build a modality view from validated, available records in hydration state. */
|
|
10
10
|
export function externalRecordView(views, uri, state, now) {
|
|
11
|
+
return externalRecordViewOrRefs(views, uri, state, now, false);
|
|
12
|
+
}
|
|
13
|
+
/** Resolve renderable view dependencies without constructing presentation fields. */
|
|
14
|
+
export function externalRecordViewRefs(views, uri, state) {
|
|
15
|
+
return externalRecordViewOrRefs(views, uri, state, 0, true);
|
|
16
|
+
}
|
|
17
|
+
function externalRecordViewOrRefs(views, uri, state, now, refsOnly) {
|
|
11
18
|
const info = availableRecord(views, uri, state);
|
|
12
19
|
if (!info)
|
|
13
20
|
return;
|
|
@@ -17,10 +24,13 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
17
24
|
let base = record.site;
|
|
18
25
|
const refs = [uri];
|
|
19
26
|
if (isAtUriString(record.site)) {
|
|
20
|
-
|
|
21
|
-
if (!
|
|
27
|
+
const publication = publicationRecord(views, record.site, state);
|
|
28
|
+
if (!publication)
|
|
22
29
|
return;
|
|
23
|
-
base =
|
|
30
|
+
base = publication.url;
|
|
31
|
+
if (!refsOnly) {
|
|
32
|
+
publisher = publicationView(views, record.site, state, publication);
|
|
33
|
+
}
|
|
24
34
|
refs.push(record.site);
|
|
25
35
|
}
|
|
26
36
|
const url = httpUri(record.path
|
|
@@ -28,6 +38,8 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
28
38
|
: base);
|
|
29
39
|
if (!url || !record.title)
|
|
30
40
|
return;
|
|
41
|
+
if (refsOnly)
|
|
42
|
+
return refs;
|
|
31
43
|
return app.bsky.embed.external.viewArticle.$build({
|
|
32
44
|
...commonFields(views, refs, state),
|
|
33
45
|
uri: url,
|
|
@@ -47,6 +59,9 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
47
59
|
});
|
|
48
60
|
}
|
|
49
61
|
if (site.standard.publication.$matches(record)) {
|
|
62
|
+
if (refsOnly) {
|
|
63
|
+
return publicationRecord(views, uri, state) ? [uri] : undefined;
|
|
64
|
+
}
|
|
50
65
|
return publicationView(views, uri, state);
|
|
51
66
|
}
|
|
52
67
|
if (social.grain.gallery.$matches(record)) {
|
|
@@ -73,6 +88,8 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
73
88
|
continue;
|
|
74
89
|
seenPhotos.add(photoUri);
|
|
75
90
|
refs.push(link.uri, photoUri);
|
|
91
|
+
if (refsOnly)
|
|
92
|
+
continue;
|
|
76
93
|
items.push(app.bsky.embed.external.viewGalleryImage.$build({
|
|
77
94
|
thumbnail: views.imgUriBuilder.getPresetUri('feed_thumbnail', uriToDid(photoUri), getBlobCidString(photo.photo)),
|
|
78
95
|
fullsize: views.imgUriBuilder.getPresetUri('feed_fullsize', uriToDid(photoUri), getBlobCidString(photo.photo)),
|
|
@@ -85,6 +102,8 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
85
102
|
: undefined,
|
|
86
103
|
}));
|
|
87
104
|
}
|
|
105
|
+
if (refsOnly)
|
|
106
|
+
return refs;
|
|
88
107
|
return app.bsky.embed.external.viewGallery.$build({
|
|
89
108
|
...commonFields(views, refs, state),
|
|
90
109
|
uri: buildExternalRecordUrl(uri) ?? uri,
|
|
@@ -97,6 +116,8 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
97
116
|
});
|
|
98
117
|
}
|
|
99
118
|
if (place.stream.livestream.$matches(record)) {
|
|
119
|
+
if (refsOnly)
|
|
120
|
+
return [uri];
|
|
100
121
|
const lastSeen = record.lastSeenAt ? Date.parse(record.lastSeenAt) : NaN;
|
|
101
122
|
// @NOTE The window applies on both sides of now to tolerate clock skew, so
|
|
102
123
|
// a future heartbeat counts as live for at most twice the window.
|
|
@@ -116,13 +137,10 @@ export function externalRecordView(views, uri, state, now) {
|
|
|
116
137
|
});
|
|
117
138
|
}
|
|
118
139
|
}
|
|
119
|
-
function publicationView(views, uri, state) {
|
|
120
|
-
|
|
121
|
-
if (!site.standard.publication.$matches(record))
|
|
122
|
-
return;
|
|
123
|
-
const url = httpUri(record.url);
|
|
124
|
-
if (!url || !record.name)
|
|
140
|
+
function publicationView(views, uri, state, publication = publicationRecord(views, uri, state)) {
|
|
141
|
+
if (!publication)
|
|
125
142
|
return;
|
|
143
|
+
const { record, url } = publication;
|
|
126
144
|
return app.bsky.embed.external.viewArticlePublication.$build({
|
|
127
145
|
...commonFields(views, [uri], state),
|
|
128
146
|
uri: url,
|
|
@@ -143,8 +161,17 @@ function publicationView(views, uri, state) {
|
|
|
143
161
|
subscribers: backlinkProfiles(views, uri, state, 'subscription'),
|
|
144
162
|
});
|
|
145
163
|
}
|
|
146
|
-
function
|
|
147
|
-
const
|
|
164
|
+
function publicationRecord(views, uri, state) {
|
|
165
|
+
const record = availableRecord(views, uri, state)?.record;
|
|
166
|
+
if (!site.standard.publication.$matches(record))
|
|
167
|
+
return;
|
|
168
|
+
const url = httpUri(record.url);
|
|
169
|
+
if (!url || !record.name)
|
|
170
|
+
return;
|
|
171
|
+
return { record, url };
|
|
172
|
+
}
|
|
173
|
+
/** Apply shared block, review, and takedown checks to a hydrated record. */
|
|
174
|
+
export function availableRecord(views, uri, state, info = state.externalRecords?.get(uri)) {
|
|
148
175
|
if (!info)
|
|
149
176
|
return;
|
|
150
177
|
const parsed = new AtUri(uri);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external.js","sourceRoot":"","sources":["../../src/views/external.ts"],"names":[],"mappings":"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","sourcesContent":["import { MINUTE } from '@atproto/common'\nimport {\n type $Typed,\n type AtUriString,\n type DidString,\n type NsidString,\n type UriString,\n getBlobCidString,\n isAtUriString,\n isDidString,\n} from '@atproto/lex'\nimport { AtUri, normalizeDatetimeAlways } from '@atproto/syntax'\nimport type { ExternalRecord } from '../hydration/external.js'\nimport type { HydrationState } from '../hydration/hydrator.js'\nimport { app, com, place, site, social } from '../lexicons/index.js'\nimport { buildExternalRecordUrl } from '../util/external/record-url.js'\nimport { estimateReadingTimeMinutes } from '../util/external/standard-site.js'\nimport { uriToDid } from '../util/uris.js'\nimport type { Views } from './index.js'\nimport type { ExternalRecordView, Label, ProfileViewBasic } from './types.js'\n\nexport const LIVESTREAM_HEARTBEAT_WINDOW_MS = 2 * MINUTE\n\n/** Build a modality view from validated, available records in hydration state. */\nexport function externalRecordView(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n now: number,\n): $Typed<ExternalRecordView> | undefined {\n const info = availableRecord(views, uri, state)\n if (!info) return\n const { record } = info\n\n if (site.standard.document.$matches(record)) {\n let publisher:\n $Typed<app.bsky.embed.external.ViewArticlePublication> | undefined\n let base = record.site\n const refs = [uri]\n if (isAtUriString(record.site)) {\n publisher = publicationView(views, record.site, state)\n if (!publisher) return\n base = publisher.uri\n refs.push(record.site)\n }\n const url = httpUri(\n record.path\n ? `${base.replace(/\\/$/, '')}/${record.path.replace(/^\\//, '')}`\n : base,\n )\n if (!url || !record.title) return\n return app.bsky.embed.external.viewArticle.$build({\n ...commonFields(views, refs, state),\n uri: url,\n title: record.title,\n description: record.description ?? '',\n createdAt: record.publishedAt,\n updatedAt: record.updatedAt,\n image: record.coverImage\n ? views.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n uriToDid(uri),\n getBlobCidString(record.coverImage),\n )\n : undefined,\n publisher,\n readingTime: record.textContent\n ? estimateReadingTimeMinutes(record.textContent)\n : undefined,\n likeCount: backlinkCount(uri, site.standard.graph.recommend.$type, state),\n likers: backlinkProfiles(views, uri, state, 'recommend'),\n })\n }\n\n if (site.standard.publication.$matches(record)) {\n return publicationView(views, uri, state)\n }\n\n if (social.grain.gallery.$matches(record)) {\n const links = (state.externalRecordBacklinks?.get(uri) ?? []).flatMap(\n (linkUri) => {\n const link = availableRecord(views, linkUri, state)?.record\n if (\n !social.grain.gallery.item.$matches(link) ||\n link.gallery !== uri ||\n uriToDid(linkUri) !== uriToDid(uri)\n ) {\n return []\n }\n return [{ uri: linkUri, record: link }]\n },\n )\n links.sort(\n (a, b) =>\n (a.record.position ?? 0) - (b.record.position ?? 0) ||\n compareStrings(a.uri, b.uri),\n )\n\n const refs = [uri]\n const seenPhotos = new Set<AtUriString>()\n const items: $Typed<app.bsky.embed.external.ViewGalleryImage>[] = []\n for (const link of links) {\n const photoUri = link.record.item\n if (seenPhotos.has(photoUri)) continue\n const photo = availableRecord(views, photoUri, state)?.record\n if (!social.grain.photo.$matches(photo)) continue\n seenPhotos.add(photoUri)\n refs.push(link.uri, photoUri)\n items.push(\n app.bsky.embed.external.viewGalleryImage.$build({\n thumbnail: views.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n uriToDid(photoUri),\n getBlobCidString(photo.photo),\n ),\n fullsize: views.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n uriToDid(photoUri),\n getBlobCidString(photo.photo),\n ),\n alt: photo.alt,\n aspectRatio: photo.aspectRatio\n ? {\n width: photo.aspectRatio.width,\n height: photo.aspectRatio.height,\n }\n : undefined,\n }),\n )\n }\n return app.bsky.embed.external.viewGallery.$build({\n ...commonFields(views, refs, state),\n uri: buildExternalRecordUrl(uri) ?? uri,\n title: record.title,\n description: record.description ?? '',\n createdAt: record.createdAt,\n items,\n likeCount: backlinkCount(uri, social.grain.favorite.$type, state),\n likers: backlinkProfiles(views, uri, state, 'favorite'),\n })\n }\n\n if (place.stream.livestream.$matches(record)) {\n const lastSeen = record.lastSeenAt ? Date.parse(record.lastSeenAt) : NaN\n // @NOTE The window applies on both sides of now to tolerate clock skew, so\n // a future heartbeat counts as live for at most twice the window.\n const fresh = Math.abs(now - lastSeen) < LIVESTREAM_HEARTBEAT_WINDOW_MS\n return app.bsky.embed.external.viewLivestream.$build({\n ...commonFields(views, [uri], state),\n uri: httpUri(record.canonicalUrl) ?? httpUri(record.url) ?? uri,\n title: record.title,\n description: '',\n createdAt: record.createdAt,\n image: record.thumb\n ? views.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n uriToDid(uri),\n getBlobCidString(record.thumb),\n )\n : undefined,\n active: !record.endedAt && fresh,\n startedAt: record.createdAt,\n endedAt: record.endedAt,\n })\n }\n}\n\nfunction publicationView(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n): $Typed<app.bsky.embed.external.ViewArticlePublication> | undefined {\n const record = availableRecord(views, uri, state)?.record\n if (!site.standard.publication.$matches(record)) return\n const url = httpUri(record.url)\n if (!url || !record.name) return\n return app.bsky.embed.external.viewArticlePublication.$build({\n ...commonFields(views, [uri], state),\n uri: url,\n title: record.name,\n description: record.description ?? '',\n logo: record.icon\n ? views.imgUriBuilder.getPresetUri(\n 'avatar',\n uriToDid(uri),\n getBlobCidString(record.icon),\n )\n : undefined,\n theme: record.basicTheme\n ? app.bsky.embed.external.viewArticlePublicationTheme.$build({\n background: hexColor(record.basicTheme.background),\n foreground: hexColor(record.basicTheme.foreground),\n accent: hexColor(record.basicTheme.accent),\n accentForeground: hexColor(record.basicTheme.accentForeground),\n })\n : undefined,\n subscriptionCount: backlinkCount(\n uri,\n site.standard.graph.subscription.$type,\n state,\n ),\n subscribers: backlinkProfiles(views, uri, state, 'subscription'),\n })\n}\n\nfunction availableRecord(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n): ExternalRecord | undefined {\n const info = state.externalRecords?.get(uri)\n if (!info) return\n const parsed = new AtUri(uri)\n if (!isDidString(parsed.host) || parsed.collection !== info.record.$type)\n return\n // @NOTE Actor hydration nulls unavailable accounts (missing and tombstoned\n // ones even with includeTakedowns). Absent entries just weren't hydrated.\n if (state.actors?.get(parsed.host) === null) return\n if (views.viewerBlockExists(parsed.host, state)) return\n if (!views.viewerSeesNeedsReview({ uri }, state)) return\n if (\n !state.ctx?.includeTakedowns &&\n (info.takedownRef ||\n state.labels?.get(uri)?.isTakendown ||\n views.actorIsNoHosted(parsed.host, state))\n ) {\n return\n }\n return info\n}\n\nfunction commonFields(\n views: Views,\n uris: AtUriString[],\n state: HydrationState,\n) {\n const refs = [...new Set(uris)]\n const dids = [...new Set(refs.map(uriToDid))]\n return {\n associatedRefs: refs.map((uri) =>\n com.atproto.repo.strongRef.$build({\n uri,\n cid: state.externalRecords!.get(uri)!.cid,\n }),\n ),\n associatedProfiles: dids.flatMap((did) => {\n const profile = views.profileBasic(did, state)\n return profile ? [profile] : []\n }),\n labels: refs.flatMap((uri) =>\n recordLabels(uri, state.externalRecords!.get(uri)!, state),\n ),\n }\n}\n\nfunction recordLabels(\n uri: AtUriString,\n info: ExternalRecord,\n state: HydrationState,\n): Label[] {\n const labels = state.labels?.getBySubject(uri) ?? []\n const selfLabels = info.record.labels\n if (!com.atproto.label.defs.selfLabels.$matches(selfLabels)) return labels\n const createdAt = info.record.createdAt ?? info.record.publishedAt\n const cts =\n typeof createdAt === 'string'\n ? normalizeDatetimeAlways(createdAt)\n : '1970-01-01T00:00:00.000Z'\n return [\n ...labels,\n ...selfLabels.values.map(({ val }) => ({\n src: uriToDid(uri),\n uri,\n cid: info.cid,\n val,\n cts,\n })),\n ]\n}\n\nfunction backlinkCount(\n uri: AtUriString,\n collection: NsidString,\n state: HydrationState,\n): number | undefined {\n const counts = state.externalRecordBacklinkCounts?.get(uri)\n if (!counts) return\n const count = counts[collection] ?? 0\n return Number.isSafeInteger(count) && count >= 0 ? count : undefined\n}\n\nfunction backlinkProfiles(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n kind: 'recommend' | 'subscription' | 'favorite',\n): ProfileViewBasic[] | undefined {\n const backlinks = state.externalRecordBacklinks?.get(uri)\n if (!backlinks) return\n const dids = new Set<DidString>()\n for (const backlink of backlinks) {\n const record = availableRecord(views, backlink, state)?.record\n const matches =\n kind === 'recommend'\n ? site.standard.graph.recommend.$matches(record) &&\n record.document === uri\n : kind === 'subscription'\n ? site.standard.graph.subscription.$matches(record) &&\n record.publication === uri\n : social.grain.favorite.$matches(record) && record.subject === uri\n if (matches) dids.add(uriToDid(backlink))\n }\n const profiles: ProfileViewBasic[] = []\n for (const did of [...dids].sort(compareStrings)) {\n const profile = views.profileBasic(did, state)\n if (profile) profiles.push(profile)\n if (profiles.length === 3) break\n }\n return profiles\n}\n\nfunction hexColor(\n color: site.standard.theme.basic.Main['background'],\n): string | undefined {\n if (site.standard.theme.color.rgb.$matches(color)) {\n return `#${[color.r, color.g, color.b].map(hexByte).join('')}`\n }\n}\n\nfunction hexByte(value: number): string {\n return value.toString(16).padStart(2, '0')\n}\n\nfunction httpUri(value: string | undefined): UriString | undefined {\n if (!value) return\n try {\n const url = new URL(value)\n if (url.protocol === 'http:' || url.protocol === 'https:')\n return url.href as UriString\n } catch {\n return\n }\n}\n\nfunction compareStrings(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0\n}\n"]}
|
|
1
|
+
{"version":3,"file":"external.js","sourceRoot":"","sources":["../../src/views/external.ts"],"names":[],"mappings":"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","sourcesContent":["import { MINUTE } from '@atproto/common'\nimport {\n type $Typed,\n type AtUriString,\n type DidString,\n type NsidString,\n type UriString,\n getBlobCidString,\n isAtUriString,\n isDidString,\n} from '@atproto/lex'\nimport { AtUri, normalizeDatetimeAlways } from '@atproto/syntax'\nimport type { ExternalRecord } from '../hydration/external.js'\nimport type { HydrationState } from '../hydration/hydrator.js'\nimport { app, com, place, site, social } from '../lexicons/index.js'\nimport { buildExternalRecordUrl } from '../util/external/record-url.js'\nimport { estimateReadingTimeMinutes } from '../util/external/standard-site.js'\nimport { uriToDid } from '../util/uris.js'\nimport type { Views } from './index.js'\nimport type { ExternalRecordView, Label, ProfileViewBasic } from './types.js'\n\nexport const LIVESTREAM_HEARTBEAT_WINDOW_MS = 2 * MINUTE\n\n/** Build a modality view from validated, available records in hydration state. */\nexport function externalRecordView(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n now: number,\n): $Typed<ExternalRecordView> | undefined {\n return externalRecordViewOrRefs(views, uri, state, now, false)\n}\n\n/** Resolve renderable view dependencies without constructing presentation fields. */\nexport function externalRecordViewRefs(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n): AtUriString[] | undefined {\n return externalRecordViewOrRefs(views, uri, state, 0, true)\n}\n\nfunction externalRecordViewOrRefs(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n now: number,\n refsOnly: false,\n): $Typed<ExternalRecordView> | undefined\nfunction externalRecordViewOrRefs(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n now: number,\n refsOnly: true,\n): AtUriString[] | undefined\nfunction externalRecordViewOrRefs(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n now: number,\n refsOnly: boolean,\n): $Typed<ExternalRecordView> | AtUriString[] | undefined {\n const info = availableRecord(views, uri, state)\n if (!info) return\n const { record } = info\n\n if (site.standard.document.$matches(record)) {\n let publisher:\n $Typed<app.bsky.embed.external.ViewArticlePublication> | undefined\n let base = record.site\n const refs = [uri]\n if (isAtUriString(record.site)) {\n const publication = publicationRecord(views, record.site, state)\n if (!publication) return\n base = publication.url\n if (!refsOnly) {\n publisher = publicationView(views, record.site, state, publication)\n }\n refs.push(record.site)\n }\n const url = httpUri(\n record.path\n ? `${base.replace(/\\/$/, '')}/${record.path.replace(/^\\//, '')}`\n : base,\n )\n if (!url || !record.title) return\n if (refsOnly) return refs\n return app.bsky.embed.external.viewArticle.$build({\n ...commonFields(views, refs, state),\n uri: url,\n title: record.title,\n description: record.description ?? '',\n createdAt: record.publishedAt,\n updatedAt: record.updatedAt,\n image: record.coverImage\n ? views.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n uriToDid(uri),\n getBlobCidString(record.coverImage),\n )\n : undefined,\n publisher,\n readingTime: record.textContent\n ? estimateReadingTimeMinutes(record.textContent)\n : undefined,\n likeCount: backlinkCount(uri, site.standard.graph.recommend.$type, state),\n likers: backlinkProfiles(views, uri, state, 'recommend'),\n })\n }\n\n if (site.standard.publication.$matches(record)) {\n if (refsOnly) {\n return publicationRecord(views, uri, state) ? [uri] : undefined\n }\n return publicationView(views, uri, state)\n }\n\n if (social.grain.gallery.$matches(record)) {\n const links = (state.externalRecordBacklinks?.get(uri) ?? []).flatMap(\n (linkUri) => {\n const link = availableRecord(views, linkUri, state)?.record\n if (\n !social.grain.gallery.item.$matches(link) ||\n link.gallery !== uri ||\n uriToDid(linkUri) !== uriToDid(uri)\n ) {\n return []\n }\n return [{ uri: linkUri, record: link }]\n },\n )\n links.sort(\n (a, b) =>\n (a.record.position ?? 0) - (b.record.position ?? 0) ||\n compareStrings(a.uri, b.uri),\n )\n\n const refs = [uri]\n const seenPhotos = new Set<AtUriString>()\n const items: $Typed<app.bsky.embed.external.ViewGalleryImage>[] = []\n for (const link of links) {\n const photoUri = link.record.item\n if (seenPhotos.has(photoUri)) continue\n const photo = availableRecord(views, photoUri, state)?.record\n if (!social.grain.photo.$matches(photo)) continue\n seenPhotos.add(photoUri)\n refs.push(link.uri, photoUri)\n if (refsOnly) continue\n items.push(\n app.bsky.embed.external.viewGalleryImage.$build({\n thumbnail: views.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n uriToDid(photoUri),\n getBlobCidString(photo.photo),\n ),\n fullsize: views.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n uriToDid(photoUri),\n getBlobCidString(photo.photo),\n ),\n alt: photo.alt,\n aspectRatio: photo.aspectRatio\n ? {\n width: photo.aspectRatio.width,\n height: photo.aspectRatio.height,\n }\n : undefined,\n }),\n )\n }\n if (refsOnly) return refs\n return app.bsky.embed.external.viewGallery.$build({\n ...commonFields(views, refs, state),\n uri: buildExternalRecordUrl(uri) ?? uri,\n title: record.title,\n description: record.description ?? '',\n createdAt: record.createdAt,\n items,\n likeCount: backlinkCount(uri, social.grain.favorite.$type, state),\n likers: backlinkProfiles(views, uri, state, 'favorite'),\n })\n }\n\n if (place.stream.livestream.$matches(record)) {\n if (refsOnly) return [uri]\n const lastSeen = record.lastSeenAt ? Date.parse(record.lastSeenAt) : NaN\n // @NOTE The window applies on both sides of now to tolerate clock skew, so\n // a future heartbeat counts as live for at most twice the window.\n const fresh = Math.abs(now - lastSeen) < LIVESTREAM_HEARTBEAT_WINDOW_MS\n return app.bsky.embed.external.viewLivestream.$build({\n ...commonFields(views, [uri], state),\n uri: httpUri(record.canonicalUrl) ?? httpUri(record.url) ?? uri,\n title: record.title,\n description: '',\n createdAt: record.createdAt,\n image: record.thumb\n ? views.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n uriToDid(uri),\n getBlobCidString(record.thumb),\n )\n : undefined,\n active: !record.endedAt && fresh,\n startedAt: record.createdAt,\n endedAt: record.endedAt,\n })\n }\n}\n\nfunction publicationView(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n publication = publicationRecord(views, uri, state),\n): $Typed<app.bsky.embed.external.ViewArticlePublication> | undefined {\n if (!publication) return\n const { record, url } = publication\n return app.bsky.embed.external.viewArticlePublication.$build({\n ...commonFields(views, [uri], state),\n uri: url,\n title: record.name,\n description: record.description ?? '',\n logo: record.icon\n ? views.imgUriBuilder.getPresetUri(\n 'avatar',\n uriToDid(uri),\n getBlobCidString(record.icon),\n )\n : undefined,\n theme: record.basicTheme\n ? app.bsky.embed.external.viewArticlePublicationTheme.$build({\n background: hexColor(record.basicTheme.background),\n foreground: hexColor(record.basicTheme.foreground),\n accent: hexColor(record.basicTheme.accent),\n accentForeground: hexColor(record.basicTheme.accentForeground),\n })\n : undefined,\n subscriptionCount: backlinkCount(\n uri,\n site.standard.graph.subscription.$type,\n state,\n ),\n subscribers: backlinkProfiles(views, uri, state, 'subscription'),\n })\n}\n\nfunction publicationRecord(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n) {\n const record = availableRecord(views, uri, state)?.record\n if (!site.standard.publication.$matches(record)) return\n const url = httpUri(record.url)\n if (!url || !record.name) return\n return { record, url }\n}\n\n/** Apply shared block, review, and takedown checks to a hydrated record. */\nexport function availableRecord(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n info: ExternalRecord | null | undefined = state.externalRecords?.get(uri),\n): ExternalRecord | undefined {\n if (!info) return\n const parsed = new AtUri(uri)\n if (!isDidString(parsed.host) || parsed.collection !== info.record.$type)\n return\n // @NOTE Actor hydration nulls unavailable accounts (missing and tombstoned\n // ones even with includeTakedowns). Absent entries just weren't hydrated.\n if (state.actors?.get(parsed.host) === null) return\n if (views.viewerBlockExists(parsed.host, state)) return\n if (!views.viewerSeesNeedsReview({ uri }, state)) return\n if (\n !state.ctx?.includeTakedowns &&\n (info.takedownRef ||\n state.labels?.get(uri)?.isTakendown ||\n views.actorIsNoHosted(parsed.host, state))\n ) {\n return\n }\n return info\n}\n\nfunction commonFields(\n views: Views,\n uris: AtUriString[],\n state: HydrationState,\n) {\n const refs = [...new Set(uris)]\n const dids = [...new Set(refs.map(uriToDid))]\n return {\n associatedRefs: refs.map((uri) =>\n com.atproto.repo.strongRef.$build({\n uri,\n cid: state.externalRecords!.get(uri)!.cid,\n }),\n ),\n associatedProfiles: dids.flatMap((did) => {\n const profile = views.profileBasic(did, state)\n return profile ? [profile] : []\n }),\n labels: refs.flatMap((uri) =>\n recordLabels(uri, state.externalRecords!.get(uri)!, state),\n ),\n }\n}\n\nfunction recordLabels(\n uri: AtUriString,\n info: ExternalRecord,\n state: HydrationState,\n): Label[] {\n const labels = state.labels?.getBySubject(uri) ?? []\n const selfLabels = info.record.labels\n if (!com.atproto.label.defs.selfLabels.$matches(selfLabels)) return labels\n const createdAt = info.record.createdAt ?? info.record.publishedAt\n const cts =\n typeof createdAt === 'string'\n ? normalizeDatetimeAlways(createdAt)\n : '1970-01-01T00:00:00.000Z'\n return [\n ...labels,\n ...selfLabels.values.map(({ val }) => ({\n src: uriToDid(uri),\n uri,\n cid: info.cid,\n val,\n cts,\n })),\n ]\n}\n\nfunction backlinkCount(\n uri: AtUriString,\n collection: NsidString,\n state: HydrationState,\n): number | undefined {\n const counts = state.externalRecordBacklinkCounts?.get(uri)\n if (!counts) return\n const count = counts[collection] ?? 0\n return Number.isSafeInteger(count) && count >= 0 ? count : undefined\n}\n\nfunction backlinkProfiles(\n views: Views,\n uri: AtUriString,\n state: HydrationState,\n kind: 'recommend' | 'subscription' | 'favorite',\n): ProfileViewBasic[] | undefined {\n const backlinks = state.externalRecordBacklinks?.get(uri)\n if (!backlinks) return\n const dids = new Set<DidString>()\n for (const backlink of backlinks) {\n const record = availableRecord(views, backlink, state)?.record\n const matches =\n kind === 'recommend'\n ? site.standard.graph.recommend.$matches(record) &&\n record.document === uri\n : kind === 'subscription'\n ? site.standard.graph.subscription.$matches(record) &&\n record.publication === uri\n : social.grain.favorite.$matches(record) && record.subject === uri\n if (matches) dids.add(uriToDid(backlink))\n }\n const profiles: ProfileViewBasic[] = []\n for (const did of [...dids].sort(compareStrings)) {\n const profile = views.profileBasic(did, state)\n if (profile) profiles.push(profile)\n if (profiles.length === 3) break\n }\n return profiles\n}\n\nfunction hexColor(\n color: site.standard.theme.basic.Main['background'],\n): string | undefined {\n if (site.standard.theme.color.rgb.$matches(color)) {\n return `#${[color.r, color.g, color.b].map(hexByte).join('')}`\n }\n}\n\nfunction hexByte(value: number): string {\n return value.toString(16).padStart(2, '0')\n}\n\nfunction httpUri(value: string | undefined): UriString | undefined {\n if (!value) return\n try {\n const url = new URL(value)\n if (url.protocol === 'http:' || url.protocol === 'https:')\n return url.href as UriString\n } catch {\n return\n }\n}\n\nfunction compareStrings(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0\n}\n"]}
|
package/dist/views/index.d.ts
CHANGED
|
@@ -152,8 +152,8 @@ export declare class Views {
|
|
|
152
152
|
externalEmbed(did: DidString, embed: ExternalEmbed, state: HydrationState): $Typed<ExternalEmbedView>;
|
|
153
153
|
/**
|
|
154
154
|
* Read-path entry point: caller has the post's `external.associatedRefs[]`
|
|
155
|
-
* and the global hydration state
|
|
156
|
-
*
|
|
155
|
+
* and the global hydration state. Resolve the selected pinned root and its
|
|
156
|
+
* publication dependency. Used by `externalEmbed`.
|
|
157
157
|
*
|
|
158
158
|
* Returns a fully-populated `viewExternal['external']` shape (including
|
|
159
159
|
* the required `uri`/`title`/`description`), or `undefined` if the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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"}
|
package/dist/views/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { HOUR, MINUTE, dedupeStrs, mapDefined } from '@atproto/common';
|
|
|
2
2
|
import { atUri, getBlobCidString, } from '@atproto/lex';
|
|
3
3
|
import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways, } from '@atproto/syntax';
|
|
4
4
|
import { APPVIEW_NOTIFICATION_REASON, NOTIFICATION_REASON, } from '../api/app/bsky/notification/constants.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getSiteStandardRecordsFromRefs, } from '../hydration/external.js';
|
|
6
6
|
import { getStarterPackUriFromNotification, parseString, } from '../hydration/util.js';
|
|
7
7
|
import { app, site } from '../lexicons/index.js';
|
|
8
8
|
import { viewsLogger } from '../logger.js';
|
|
@@ -1644,8 +1644,8 @@ export class Views {
|
|
|
1644
1644
|
}
|
|
1645
1645
|
/**
|
|
1646
1646
|
* Read-path entry point: caller has the post's `external.associatedRefs[]`
|
|
1647
|
-
* and the global hydration state
|
|
1648
|
-
*
|
|
1647
|
+
* and the global hydration state. Resolve the selected pinned root and its
|
|
1648
|
+
* publication dependency. Used by `externalEmbed`.
|
|
1649
1649
|
*
|
|
1650
1650
|
* Returns a fully-populated `viewExternal['external']` shape (including
|
|
1651
1651
|
* the required `uri`/`title`/`description`), or `undefined` if the
|
|
@@ -1660,7 +1660,15 @@ export class Views {
|
|
|
1660
1660
|
* returned overlay.
|
|
1661
1661
|
*/
|
|
1662
1662
|
externalEmbedFromStandardSite({ associatedRefs, state, assumedUrl, }) {
|
|
1663
|
-
const { document, publication } =
|
|
1663
|
+
const { document, publication } = getSiteStandardRecordsFromRefs(associatedRefs, state.externalRecordsByRef, state.externalRecords);
|
|
1664
|
+
for (const selected of [document, publication]) {
|
|
1665
|
+
if (selected &&
|
|
1666
|
+
(state.actors?.get(creatorFromUri(selected.ref.uri)) === null ||
|
|
1667
|
+
(!state.ctx?.includeTakedowns &&
|
|
1668
|
+
state.labels?.get(selected.ref.uri)?.isTakendown))) {
|
|
1669
|
+
return undefined;
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1664
1672
|
return this.externalEmbedFromStandardSiteRecords({
|
|
1665
1673
|
document,
|
|
1666
1674
|
publication,
|
|
@@ -1690,13 +1698,11 @@ export class Views {
|
|
|
1690
1698
|
externalEmbedFromStandardSiteRecords({ document, publication, state, assumedUrl, }) {
|
|
1691
1699
|
// Three layers of validation gate this overlay:
|
|
1692
1700
|
//
|
|
1693
|
-
// 1.
|
|
1694
|
-
//
|
|
1695
|
-
//
|
|
1696
|
-
//
|
|
1697
|
-
//
|
|
1698
|
-
// publication (see `getSiteStandardRecordsFromHydrationMapsByRefs`
|
|
1699
|
-
// in `hydration/external.ts`).
|
|
1701
|
+
// 1. Generic hydration nulls taken-down records individually, and
|
|
1702
|
+
// `externalEmbedFromStandardSite` rejects a moderated root or dependency.
|
|
1703
|
+
// 2. The read-path selection resolves the pinned root and its named
|
|
1704
|
+
// publication dependency; an unavailable root never falls back to a
|
|
1705
|
+
// discarded authored ref. The compose path selects its own pair.
|
|
1700
1706
|
// 3. `validateStandardSiteRecordsForUrl` below re-checks the doc/pub
|
|
1701
1707
|
// relationship and that the records back the URL the embed claims
|
|
1702
1708
|
// (see `util/external/standard-site.ts`).
|