@atproto/bsky 0.0.216 → 0.0.218

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 (92) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
  3. package/dist/api/app/bsky/feed/searchPosts.js +6 -4
  4. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  5. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
  6. package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -1
  7. package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
  8. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
  9. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js +9 -2
  10. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
  11. package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
  12. package/dist/api/app/bsky/unspecced/getSuggestedUsers.js +9 -2
  13. package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
  14. package/dist/auth-verifier.d.ts +1 -1
  15. package/dist/config.d.ts +2 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +5 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/context.d.ts +3 -3
  20. package/dist/context.d.ts.map +1 -1
  21. package/dist/context.js +2 -2
  22. package/dist/context.js.map +1 -1
  23. package/dist/data-plane/server/db/pagination.d.ts +3 -3
  24. package/dist/feature-gates/gates.d.ts +5 -0
  25. package/dist/feature-gates/gates.d.ts.map +1 -0
  26. package/dist/feature-gates/gates.js +6 -0
  27. package/dist/feature-gates/gates.js.map +1 -0
  28. package/dist/feature-gates/index.d.ts +24 -0
  29. package/dist/feature-gates/index.d.ts.map +1 -0
  30. package/dist/feature-gates/index.js +135 -0
  31. package/dist/feature-gates/index.js.map +1 -0
  32. package/dist/feature-gates/metrics.d.ts +32 -0
  33. package/dist/feature-gates/metrics.d.ts.map +1 -0
  34. package/dist/feature-gates/metrics.js +100 -0
  35. package/dist/feature-gates/metrics.js.map +1 -0
  36. package/dist/feature-gates/metrics.test.d.ts +2 -0
  37. package/dist/feature-gates/metrics.test.d.ts.map +1 -0
  38. package/dist/feature-gates/metrics.test.js +152 -0
  39. package/dist/feature-gates/metrics.test.js.map +1 -0
  40. package/dist/feature-gates/types.d.ts +49 -0
  41. package/dist/feature-gates/types.d.ts.map +1 -0
  42. package/dist/feature-gates/types.js +3 -0
  43. package/dist/feature-gates/types.js.map +1 -0
  44. package/dist/feature-gates/utils.d.ts +21 -0
  45. package/dist/feature-gates/utils.d.ts.map +1 -0
  46. package/dist/feature-gates/utils.js +85 -0
  47. package/dist/feature-gates/utils.js.map +1 -0
  48. package/dist/hydration/hydrator.d.ts +8 -3
  49. package/dist/hydration/hydrator.d.ts.map +1 -1
  50. package/dist/hydration/hydrator.js +9 -5
  51. package/dist/hydration/hydrator.js.map +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +7 -6
  54. package/dist/index.js.map +1 -1
  55. package/dist/lexicon/lexicons.d.ts +8 -0
  56. package/dist/lexicon/lexicons.d.ts.map +1 -1
  57. package/dist/lexicon/lexicons.js +4 -0
  58. package/dist/lexicon/lexicons.js.map +1 -1
  59. package/dist/lexicon/types/app/bsky/feed/sendInteractions.d.ts +1 -0
  60. package/dist/lexicon/types/app/bsky/feed/sendInteractions.d.ts.map +1 -1
  61. package/dist/lexicon/types/app/bsky/feed/sendInteractions.js.map +1 -1
  62. package/dist/views/index.d.ts.map +1 -1
  63. package/dist/views/index.js +7 -4
  64. package/dist/views/index.js.map +1 -1
  65. package/package.json +12 -12
  66. package/src/api/app/bsky/feed/searchPosts.ts +10 -8
  67. package/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +0 -1
  68. package/src/api/app/bsky/unspecced/getPostThreadV2.ts +3 -3
  69. package/src/api/app/bsky/unspecced/getSuggestedOnboardingUsers.ts +13 -6
  70. package/src/api/app/bsky/unspecced/getSuggestedUsers.ts +13 -6
  71. package/src/config.ts +8 -0
  72. package/src/context.ts +4 -4
  73. package/src/feature-gates/README.md +47 -0
  74. package/src/feature-gates/gates.ts +9 -0
  75. package/src/feature-gates/index.ts +146 -0
  76. package/src/feature-gates/metrics.test.ts +196 -0
  77. package/src/feature-gates/metrics.ts +107 -0
  78. package/src/feature-gates/types.ts +52 -0
  79. package/src/feature-gates/utils.ts +90 -0
  80. package/src/hydration/hydrator.ts +12 -6
  81. package/src/index.ts +8 -7
  82. package/src/lexicon/lexicons.ts +4 -0
  83. package/src/lexicon/types/app/bsky/feed/sendInteractions.ts +1 -0
  84. package/src/views/index.ts +9 -8
  85. package/tests/views/thread.test.ts +2 -0
  86. package/tests/views/verification.test.ts +19 -37
  87. package/tsconfig.build.tsbuildinfo +1 -1
  88. package/dist/feature-gates.d.ts +0 -44
  89. package/dist/feature-gates.d.ts.map +0 -1
  90. package/dist/feature-gates.js +0 -133
  91. package/dist/feature-gates.js.map +0 -1
  92. package/src/feature-gates.ts +0 -136
@@ -1 +1 @@
1
- {"root":["./src/auth-verifier.ts","./src/bsync.ts","./src/config.ts","./src/context.ts","./src/courier.ts","./src/error.ts","./src/etcd.ts","./src/feature-gates.ts","./src/index.ts","./src/kws.ts","./src/logger.ts","./src/pipeline.ts","./src/redis.ts","./src/rolodex.ts","./src/stash.ts","./src/util.ts","./src/api/blob-dispatcher.ts","./src/api/blob-resolver.ts","./src/api/external.ts","./src/api/health.ts","./src/api/index.ts","./src/api/sitemap.ts","./src/api/util.ts","./src/api/well-known.ts","./src/api/age-assurance/const.ts","./src/api/age-assurance/index.ts","./src/api/age-assurance/stash.ts","./src/api/age-assurance/types.ts","./src/api/age-assurance/util.ts","./src/api/age-assurance/kws/age-verified.ts","./src/api/age-assurance/kws/const.ts","./src/api/age-assurance/kws/external-payload.test.ts","./src/api/age-assurance/kws/external-payload.ts","./src/api/age-assurance/redirects/kws-age-verified.ts","./src/api/age-assurance/webhooks/kws-age-verified.ts","./src/api/app/bsky/actor/getProfile.ts","./src/api/app/bsky/actor/getProfiles.ts","./src/api/app/bsky/actor/getSuggestions.ts","./src/api/app/bsky/actor/searchActors.ts","./src/api/app/bsky/actor/searchActorsTypeahead.ts","./src/api/app/bsky/ageassurance/begin.ts","./src/api/app/bsky/ageassurance/getConfig.ts","./src/api/app/bsky/ageassurance/getState.ts","./src/api/app/bsky/bookmark/createBookmark.ts","./src/api/app/bsky/bookmark/deleteBookmark.ts","./src/api/app/bsky/bookmark/getBookmarks.ts","./src/api/app/bsky/bookmark/util.ts","./src/api/app/bsky/contact/dismissMatch.ts","./src/api/app/bsky/contact/getMatches.ts","./src/api/app/bsky/contact/getSyncStatus.ts","./src/api/app/bsky/contact/importContacts.ts","./src/api/app/bsky/contact/removeData.ts","./src/api/app/bsky/contact/sendNotification.ts","./src/api/app/bsky/contact/startPhoneVerification.ts","./src/api/app/bsky/contact/util.ts","./src/api/app/bsky/contact/verifyPhone.ts","./src/api/app/bsky/draft/createDraft.ts","./src/api/app/bsky/draft/deleteDraft.ts","./src/api/app/bsky/draft/getDrafts.ts","./src/api/app/bsky/draft/updateDraft.ts","./src/api/app/bsky/feed/getActorFeeds.ts","./src/api/app/bsky/feed/getActorLikes.ts","./src/api/app/bsky/feed/getAuthorFeed.ts","./src/api/app/bsky/feed/getFeed.ts","./src/api/app/bsky/feed/getFeedGenerator.ts","./src/api/app/bsky/feed/getFeedGenerators.ts","./src/api/app/bsky/feed/getLikes.ts","./src/api/app/bsky/feed/getListFeed.ts","./src/api/app/bsky/feed/getPostThread.ts","./src/api/app/bsky/feed/getPosts.ts","./src/api/app/bsky/feed/getQuotes.ts","./src/api/app/bsky/feed/getRepostedBy.ts","./src/api/app/bsky/feed/getSuggestedFeeds.ts","./src/api/app/bsky/feed/getTimeline.ts","./src/api/app/bsky/feed/searchPosts.ts","./src/api/app/bsky/graph/getActorStarterPacks.ts","./src/api/app/bsky/graph/getBlocks.ts","./src/api/app/bsky/graph/getFollowers.ts","./src/api/app/bsky/graph/getFollows.ts","./src/api/app/bsky/graph/getKnownFollowers.ts","./src/api/app/bsky/graph/getList.ts","./src/api/app/bsky/graph/getListBlocks.ts","./src/api/app/bsky/graph/getListMutes.ts","./src/api/app/bsky/graph/getLists.ts","./src/api/app/bsky/graph/getListsWithMembership.ts","./src/api/app/bsky/graph/getMutes.ts","./src/api/app/bsky/graph/getRelationships.ts","./src/api/app/bsky/graph/getStarterPack.ts","./src/api/app/bsky/graph/getStarterPacks.ts","./src/api/app/bsky/graph/getStarterPacksWithMembership.ts","./src/api/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/api/app/bsky/graph/muteActor.ts","./src/api/app/bsky/graph/muteActorList.ts","./src/api/app/bsky/graph/muteThread.ts","./src/api/app/bsky/graph/searchStarterPacks.ts","./src/api/app/bsky/graph/unmuteActor.ts","./src/api/app/bsky/graph/unmuteActorList.ts","./src/api/app/bsky/graph/unmuteThread.ts","./src/api/app/bsky/labeler/getServices.ts","./src/api/app/bsky/notification/getPreferences.ts","./src/api/app/bsky/notification/getUnreadCount.ts","./src/api/app/bsky/notification/listActivitySubscriptions.ts","./src/api/app/bsky/notification/listNotifications.ts","./src/api/app/bsky/notification/putActivitySubscription.ts","./src/api/app/bsky/notification/putPreferences.ts","./src/api/app/bsky/notification/putPreferencesV2.ts","./src/api/app/bsky/notification/registerPush.ts","./src/api/app/bsky/notification/unregisterPush.ts","./src/api/app/bsky/notification/updateSeen.ts","./src/api/app/bsky/notification/util.ts","./src/api/app/bsky/unspecced/getAgeAssuranceState.ts","./src/api/app/bsky/unspecced/getConfig.ts","./src/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts","./src/api/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/api/app/bsky/unspecced/getPostThreadOtherV2.ts","./src/api/app/bsky/unspecced/getPostThreadV2.ts","./src/api/app/bsky/unspecced/getSuggestedFeeds.ts","./src/api/app/bsky/unspecced/getSuggestedOnboardingUsers.ts","./src/api/app/bsky/unspecced/getSuggestedStarterPacks.ts","./src/api/app/bsky/unspecced/getSuggestedUsers.ts","./src/api/app/bsky/unspecced/getTaggedSuggestions.ts","./src/api/app/bsky/unspecced/getTrendingTopics.ts","./src/api/app/bsky/unspecced/getTrends.ts","./src/api/app/bsky/unspecced/initAgeAssurance.ts","./src/api/com/atproto/admin/getAccountInfos.ts","./src/api/com/atproto/admin/getSubjectStatus.ts","./src/api/com/atproto/admin/updateSubjectStatus.ts","./src/api/com/atproto/identity/resolveHandle.ts","./src/api/com/atproto/label/queryLabels.ts","./src/api/com/atproto/repo/getRecord.ts","./src/api/com/atproto/temp/fetchLabels.ts","./src/api/kws/api.ts","./src/api/kws/index.ts","./src/api/kws/types.ts","./src/api/kws/util.ts","./src/api/kws/webhook.ts","./src/cache/read-through.ts","./src/data-plane/index.ts","./src/data-plane/bsync/index.ts","./src/data-plane/client/hosts.ts","./src/data-plane/client/index.ts","./src/data-plane/client/util.ts","./src/data-plane/server/background.ts","./src/data-plane/server/index.ts","./src/data-plane/server/subscription.ts","./src/data-plane/server/util.ts","./src/data-plane/server/db/database-schema.ts","./src/data-plane/server/db/db.ts","./src/data-plane/server/db/index.ts","./src/data-plane/server/db/pagination.ts","./src/data-plane/server/db/types.ts","./src/data-plane/server/db/util.ts","./src/data-plane/server/db/migrations/20230309T045948368Z-init.ts","./src/data-plane/server/db/migrations/20230408T152211201Z-notification-init.ts","./src/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.ts","./src/data-plane/server/db/migrations/20230420T211446071Z-did-cache.ts","./src/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.ts","./src/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.ts","./src/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.ts","./src/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.ts","./src/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.ts","./src/data-plane/server/db/migrations/20230608T205147239Z-mutes.ts","./src/data-plane/server/db/migrations/20230609T153623961Z-blocks.ts","./src/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.ts","./src/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.ts","./src/data-plane/server/db/migrations/20230611T215300060Z-actor-state.ts","./src/data-plane/server/db/migrations/20230620T161134972Z-post-langs.ts","./src/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.ts","./src/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.ts","./src/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.ts","./src/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.ts","./src/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.ts","./src/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.ts","./src/data-plane/server/db/migrations/20230810T203349843Z-action-duration.ts","./src/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.ts","./src/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.ts","./src/data-plane/server/db/migrations/20230904T211011773Z-block-lists.ts","./src/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.ts","./src/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.ts","./src/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.ts","./src/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.ts","./src/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.ts","./src/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.ts","./src/data-plane/server/db/migrations/20240226T225725627Z-labelers.ts","./src/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.ts","./src/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.ts","./src/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.ts","./src/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.ts","./src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts","./src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts","./src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts","./src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts","./src/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.ts","./src/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.ts","./src/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.ts","./src/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.ts","./src/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.ts","./src/data-plane/server/db/migrations/20250404T163421487Z-verifications.ts","./src/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.ts","./src/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.ts","./src/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.ts","./src/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.ts","./src/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.ts","./src/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.ts","./src/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.ts","./src/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.ts","./src/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.ts","./src/data-plane/server/db/migrations/index.ts","./src/data-plane/server/db/migrations/provider.ts","./src/data-plane/server/db/tables/activity-subscription.ts","./src/data-plane/server/db/tables/actor-block.ts","./src/data-plane/server/db/tables/actor-state.ts","./src/data-plane/server/db/tables/actor-sync.ts","./src/data-plane/server/db/tables/actor.ts","./src/data-plane/server/db/tables/algo.ts","./src/data-plane/server/db/tables/blob-takedown.ts","./src/data-plane/server/db/tables/bookmark.ts","./src/data-plane/server/db/tables/did-cache.ts","./src/data-plane/server/db/tables/draft.ts","./src/data-plane/server/db/tables/duplicate-record.ts","./src/data-plane/server/db/tables/feed-generator.ts","./src/data-plane/server/db/tables/feed-item.ts","./src/data-plane/server/db/tables/follow.ts","./src/data-plane/server/db/tables/label.ts","./src/data-plane/server/db/tables/labeler.ts","./src/data-plane/server/db/tables/like.ts","./src/data-plane/server/db/tables/list-block.ts","./src/data-plane/server/db/tables/list-item.ts","./src/data-plane/server/db/tables/list-mute.ts","./src/data-plane/server/db/tables/list.ts","./src/data-plane/server/db/tables/mute.ts","./src/data-plane/server/db/tables/notification-push-token.ts","./src/data-plane/server/db/tables/notification.ts","./src/data-plane/server/db/tables/post-agg.ts","./src/data-plane/server/db/tables/post-embed.ts","./src/data-plane/server/db/tables/post-gate.ts","./src/data-plane/server/db/tables/post.ts","./src/data-plane/server/db/tables/private-data.ts","./src/data-plane/server/db/tables/profile-agg.ts","./src/data-plane/server/db/tables/profile.ts","./src/data-plane/server/db/tables/quote.ts","./src/data-plane/server/db/tables/record.ts","./src/data-plane/server/db/tables/repost.ts","./src/data-plane/server/db/tables/starter-pack.ts","./src/data-plane/server/db/tables/subscription.ts","./src/data-plane/server/db/tables/suggested-feed.ts","./src/data-plane/server/db/tables/suggested-follow.ts","./src/data-plane/server/db/tables/tagged-suggestion.ts","./src/data-plane/server/db/tables/thread-gate.ts","./src/data-plane/server/db/tables/thread-mute.ts","./src/data-plane/server/db/tables/verification.ts","./src/data-plane/server/db/tables/view-param.ts","./src/data-plane/server/indexing/index.ts","./src/data-plane/server/indexing/processor.ts","./src/data-plane/server/indexing/plugins/block.ts","./src/data-plane/server/indexing/plugins/chat-declaration.ts","./src/data-plane/server/indexing/plugins/feed-generator.ts","./src/data-plane/server/indexing/plugins/follow.ts","./src/data-plane/server/indexing/plugins/germ-declaration.ts","./src/data-plane/server/indexing/plugins/labeler.ts","./src/data-plane/server/indexing/plugins/like.ts","./src/data-plane/server/indexing/plugins/list-block.ts","./src/data-plane/server/indexing/plugins/list-item.ts","./src/data-plane/server/indexing/plugins/list.ts","./src/data-plane/server/indexing/plugins/notif-declaration.ts","./src/data-plane/server/indexing/plugins/post-gate.ts","./src/data-plane/server/indexing/plugins/post.ts","./src/data-plane/server/indexing/plugins/profile.ts","./src/data-plane/server/indexing/plugins/repost.ts","./src/data-plane/server/indexing/plugins/starter-pack.ts","./src/data-plane/server/indexing/plugins/status.ts","./src/data-plane/server/indexing/plugins/thread-gate.ts","./src/data-plane/server/indexing/plugins/verification.ts","./src/data-plane/server/routes/activity-subscription.ts","./src/data-plane/server/routes/blocks.ts","./src/data-plane/server/routes/bookmarks.ts","./src/data-plane/server/routes/drafts.ts","./src/data-plane/server/routes/feed-gens.ts","./src/data-plane/server/routes/feeds.ts","./src/data-plane/server/routes/follows.ts","./src/data-plane/server/routes/identity.ts","./src/data-plane/server/routes/index.ts","./src/data-plane/server/routes/interactions.ts","./src/data-plane/server/routes/labels.ts","./src/data-plane/server/routes/likes.ts","./src/data-plane/server/routes/lists.ts","./src/data-plane/server/routes/moderation.ts","./src/data-plane/server/routes/mutes.ts","./src/data-plane/server/routes/notifs.ts","./src/data-plane/server/routes/profile.ts","./src/data-plane/server/routes/quotes.ts","./src/data-plane/server/routes/records.ts","./src/data-plane/server/routes/relationships.ts","./src/data-plane/server/routes/reposts.ts","./src/data-plane/server/routes/search.ts","./src/data-plane/server/routes/sitemap.ts","./src/data-plane/server/routes/starter-packs.ts","./src/data-plane/server/routes/suggestions.ts","./src/data-plane/server/routes/sync.ts","./src/data-plane/server/routes/threads.ts","./src/hydration/actor.ts","./src/hydration/feed.ts","./src/hydration/graph.ts","./src/hydration/hydrator.ts","./src/hydration/label.ts","./src/hydration/util.ts","./src/image/index.ts","./src/image/invalidator.ts","./src/image/logger.ts","./src/image/server.ts","./src/image/sharp.ts","./src/image/uri.ts","./src/image/util.ts","./src/lexicon/index.ts","./src/lexicon/lexicons.ts","./src/lexicon/util.ts","./src/lexicon/types/app/bsky/actor/defs.ts","./src/lexicon/types/app/bsky/actor/getPreferences.ts","./src/lexicon/types/app/bsky/actor/getProfile.ts","./src/lexicon/types/app/bsky/actor/getProfiles.ts","./src/lexicon/types/app/bsky/actor/getSuggestions.ts","./src/lexicon/types/app/bsky/actor/profile.ts","./src/lexicon/types/app/bsky/actor/putPreferences.ts","./src/lexicon/types/app/bsky/actor/searchActors.ts","./src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts","./src/lexicon/types/app/bsky/actor/status.ts","./src/lexicon/types/app/bsky/ageassurance/begin.ts","./src/lexicon/types/app/bsky/ageassurance/defs.ts","./src/lexicon/types/app/bsky/ageassurance/getConfig.ts","./src/lexicon/types/app/bsky/ageassurance/getState.ts","./src/lexicon/types/app/bsky/bookmark/createBookmark.ts","./src/lexicon/types/app/bsky/bookmark/defs.ts","./src/lexicon/types/app/bsky/bookmark/deleteBookmark.ts","./src/lexicon/types/app/bsky/bookmark/getBookmarks.ts","./src/lexicon/types/app/bsky/contact/defs.ts","./src/lexicon/types/app/bsky/contact/dismissMatch.ts","./src/lexicon/types/app/bsky/contact/getMatches.ts","./src/lexicon/types/app/bsky/contact/getSyncStatus.ts","./src/lexicon/types/app/bsky/contact/importContacts.ts","./src/lexicon/types/app/bsky/contact/removeData.ts","./src/lexicon/types/app/bsky/contact/sendNotification.ts","./src/lexicon/types/app/bsky/contact/startPhoneVerification.ts","./src/lexicon/types/app/bsky/contact/verifyPhone.ts","./src/lexicon/types/app/bsky/draft/createDraft.ts","./src/lexicon/types/app/bsky/draft/defs.ts","./src/lexicon/types/app/bsky/draft/deleteDraft.ts","./src/lexicon/types/app/bsky/draft/getDrafts.ts","./src/lexicon/types/app/bsky/draft/updateDraft.ts","./src/lexicon/types/app/bsky/embed/defs.ts","./src/lexicon/types/app/bsky/embed/external.ts","./src/lexicon/types/app/bsky/embed/images.ts","./src/lexicon/types/app/bsky/embed/record.ts","./src/lexicon/types/app/bsky/embed/recordWithMedia.ts","./src/lexicon/types/app/bsky/embed/video.ts","./src/lexicon/types/app/bsky/feed/defs.ts","./src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/generator.ts","./src/lexicon/types/app/bsky/feed/getActorFeeds.ts","./src/lexicon/types/app/bsky/feed/getActorLikes.ts","./src/lexicon/types/app/bsky/feed/getAuthorFeed.ts","./src/lexicon/types/app/bsky/feed/getFeed.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerators.ts","./src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts","./src/lexicon/types/app/bsky/feed/getLikes.ts","./src/lexicon/types/app/bsky/feed/getListFeed.ts","./src/lexicon/types/app/bsky/feed/getPostThread.ts","./src/lexicon/types/app/bsky/feed/getPosts.ts","./src/lexicon/types/app/bsky/feed/getQuotes.ts","./src/lexicon/types/app/bsky/feed/getRepostedBy.ts","./src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts","./src/lexicon/types/app/bsky/feed/getTimeline.ts","./src/lexicon/types/app/bsky/feed/like.ts","./src/lexicon/types/app/bsky/feed/post.ts","./src/lexicon/types/app/bsky/feed/postgate.ts","./src/lexicon/types/app/bsky/feed/repost.ts","./src/lexicon/types/app/bsky/feed/searchPosts.ts","./src/lexicon/types/app/bsky/feed/sendInteractions.ts","./src/lexicon/types/app/bsky/feed/threadgate.ts","./src/lexicon/types/app/bsky/graph/block.ts","./src/lexicon/types/app/bsky/graph/defs.ts","./src/lexicon/types/app/bsky/graph/follow.ts","./src/lexicon/types/app/bsky/graph/getActorStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getBlocks.ts","./src/lexicon/types/app/bsky/graph/getFollowers.ts","./src/lexicon/types/app/bsky/graph/getFollows.ts","./src/lexicon/types/app/bsky/graph/getKnownFollowers.ts","./src/lexicon/types/app/bsky/graph/getList.ts","./src/lexicon/types/app/bsky/graph/getListBlocks.ts","./src/lexicon/types/app/bsky/graph/getListMutes.ts","./src/lexicon/types/app/bsky/graph/getLists.ts","./src/lexicon/types/app/bsky/graph/getListsWithMembership.ts","./src/lexicon/types/app/bsky/graph/getMutes.ts","./src/lexicon/types/app/bsky/graph/getRelationships.ts","./src/lexicon/types/app/bsky/graph/getStarterPack.ts","./src/lexicon/types/app/bsky/graph/getStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getStarterPacksWithMembership.ts","./src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/lexicon/types/app/bsky/graph/list.ts","./src/lexicon/types/app/bsky/graph/listblock.ts","./src/lexicon/types/app/bsky/graph/listitem.ts","./src/lexicon/types/app/bsky/graph/muteActor.ts","./src/lexicon/types/app/bsky/graph/muteActorList.ts","./src/lexicon/types/app/bsky/graph/muteThread.ts","./src/lexicon/types/app/bsky/graph/searchStarterPacks.ts","./src/lexicon/types/app/bsky/graph/starterpack.ts","./src/lexicon/types/app/bsky/graph/unmuteActor.ts","./src/lexicon/types/app/bsky/graph/unmuteActorList.ts","./src/lexicon/types/app/bsky/graph/unmuteThread.ts","./src/lexicon/types/app/bsky/graph/verification.ts","./src/lexicon/types/app/bsky/labeler/defs.ts","./src/lexicon/types/app/bsky/labeler/getServices.ts","./src/lexicon/types/app/bsky/labeler/service.ts","./src/lexicon/types/app/bsky/notification/declaration.ts","./src/lexicon/types/app/bsky/notification/defs.ts","./src/lexicon/types/app/bsky/notification/getPreferences.ts","./src/lexicon/types/app/bsky/notification/getUnreadCount.ts","./src/lexicon/types/app/bsky/notification/listActivitySubscriptions.ts","./src/lexicon/types/app/bsky/notification/listNotifications.ts","./src/lexicon/types/app/bsky/notification/putActivitySubscription.ts","./src/lexicon/types/app/bsky/notification/putPreferences.ts","./src/lexicon/types/app/bsky/notification/putPreferencesV2.ts","./src/lexicon/types/app/bsky/notification/registerPush.ts","./src/lexicon/types/app/bsky/notification/unregisterPush.ts","./src/lexicon/types/app/bsky/notification/updateSeen.ts","./src/lexicon/types/app/bsky/richtext/facet.ts","./src/lexicon/types/app/bsky/unspecced/defs.ts","./src/lexicon/types/app/bsky/unspecced/getAgeAssuranceState.ts","./src/lexicon/types/app/bsky/unspecced/getConfig.ts","./src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts","./src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/lexicon/types/app/bsky/unspecced/getPostThreadOtherV2.ts","./src/lexicon/types/app/bsky/unspecced/getPostThreadV2.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedFeeds.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedOnboardingUsers.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedStarterPacks.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedUsers.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedUsersSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestionsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getTaggedSuggestions.ts","./src/lexicon/types/app/bsky/unspecced/getTrendingTopics.ts","./src/lexicon/types/app/bsky/unspecced/getTrends.ts","./src/lexicon/types/app/bsky/unspecced/getTrendsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/initAgeAssurance.ts","./src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/video/defs.ts","./src/lexicon/types/app/bsky/video/getJobStatus.ts","./src/lexicon/types/app/bsky/video/getUploadLimits.ts","./src/lexicon/types/app/bsky/video/uploadVideo.ts","./src/lexicon/types/chat/bsky/actor/declaration.ts","./src/lexicon/types/chat/bsky/actor/defs.ts","./src/lexicon/types/chat/bsky/actor/deleteAccount.ts","./src/lexicon/types/chat/bsky/actor/exportAccountData.ts","./src/lexicon/types/chat/bsky/convo/acceptConvo.ts","./src/lexicon/types/chat/bsky/convo/addReaction.ts","./src/lexicon/types/chat/bsky/convo/defs.ts","./src/lexicon/types/chat/bsky/convo/deleteMessageForSelf.ts","./src/lexicon/types/chat/bsky/convo/getConvo.ts","./src/lexicon/types/chat/bsky/convo/getConvoAvailability.ts","./src/lexicon/types/chat/bsky/convo/getConvoForMembers.ts","./src/lexicon/types/chat/bsky/convo/getLog.ts","./src/lexicon/types/chat/bsky/convo/getMessages.ts","./src/lexicon/types/chat/bsky/convo/leaveConvo.ts","./src/lexicon/types/chat/bsky/convo/listConvos.ts","./src/lexicon/types/chat/bsky/convo/muteConvo.ts","./src/lexicon/types/chat/bsky/convo/removeReaction.ts","./src/lexicon/types/chat/bsky/convo/sendMessage.ts","./src/lexicon/types/chat/bsky/convo/sendMessageBatch.ts","./src/lexicon/types/chat/bsky/convo/unmuteConvo.ts","./src/lexicon/types/chat/bsky/convo/updateAllRead.ts","./src/lexicon/types/chat/bsky/convo/updateRead.ts","./src/lexicon/types/chat/bsky/moderation/getActorMetadata.ts","./src/lexicon/types/chat/bsky/moderation/getMessageContext.ts","./src/lexicon/types/chat/bsky/moderation/updateActorAccess.ts","./src/lexicon/types/com/atproto/admin/defs.ts","./src/lexicon/types/com/atproto/admin/deleteAccount.ts","./src/lexicon/types/com/atproto/admin/disableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/disableInviteCodes.ts","./src/lexicon/types/com/atproto/admin/enableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/getAccountInfo.ts","./src/lexicon/types/com/atproto/admin/getAccountInfos.ts","./src/lexicon/types/com/atproto/admin/getInviteCodes.ts","./src/lexicon/types/com/atproto/admin/getSubjectStatus.ts","./src/lexicon/types/com/atproto/admin/searchAccounts.ts","./src/lexicon/types/com/atproto/admin/sendEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountHandle.ts","./src/lexicon/types/com/atproto/admin/updateAccountPassword.ts","./src/lexicon/types/com/atproto/admin/updateAccountSigningKey.ts","./src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts","./src/lexicon/types/com/atproto/identity/defs.ts","./src/lexicon/types/com/atproto/identity/getRecommendedDidCredentials.ts","./src/lexicon/types/com/atproto/identity/refreshIdentity.ts","./src/lexicon/types/com/atproto/identity/requestPlcOperationSignature.ts","./src/lexicon/types/com/atproto/identity/resolveDid.ts","./src/lexicon/types/com/atproto/identity/resolveHandle.ts","./src/lexicon/types/com/atproto/identity/resolveIdentity.ts","./src/lexicon/types/com/atproto/identity/signPlcOperation.ts","./src/lexicon/types/com/atproto/identity/submitPlcOperation.ts","./src/lexicon/types/com/atproto/identity/updateHandle.ts","./src/lexicon/types/com/atproto/label/defs.ts","./src/lexicon/types/com/atproto/label/queryLabels.ts","./src/lexicon/types/com/atproto/label/subscribeLabels.ts","./src/lexicon/types/com/atproto/lexicon/resolveLexicon.ts","./src/lexicon/types/com/atproto/lexicon/schema.ts","./src/lexicon/types/com/atproto/moderation/createReport.ts","./src/lexicon/types/com/atproto/moderation/defs.ts","./src/lexicon/types/com/atproto/repo/applyWrites.ts","./src/lexicon/types/com/atproto/repo/createRecord.ts","./src/lexicon/types/com/atproto/repo/defs.ts","./src/lexicon/types/com/atproto/repo/deleteRecord.ts","./src/lexicon/types/com/atproto/repo/describeRepo.ts","./src/lexicon/types/com/atproto/repo/getRecord.ts","./src/lexicon/types/com/atproto/repo/importRepo.ts","./src/lexicon/types/com/atproto/repo/listMissingBlobs.ts","./src/lexicon/types/com/atproto/repo/listRecords.ts","./src/lexicon/types/com/atproto/repo/putRecord.ts","./src/lexicon/types/com/atproto/repo/strongRef.ts","./src/lexicon/types/com/atproto/repo/uploadBlob.ts","./src/lexicon/types/com/atproto/server/activateAccount.ts","./src/lexicon/types/com/atproto/server/checkAccountStatus.ts","./src/lexicon/types/com/atproto/server/confirmEmail.ts","./src/lexicon/types/com/atproto/server/createAccount.ts","./src/lexicon/types/com/atproto/server/createAppPassword.ts","./src/lexicon/types/com/atproto/server/createInviteCode.ts","./src/lexicon/types/com/atproto/server/createInviteCodes.ts","./src/lexicon/types/com/atproto/server/createSession.ts","./src/lexicon/types/com/atproto/server/deactivateAccount.ts","./src/lexicon/types/com/atproto/server/defs.ts","./src/lexicon/types/com/atproto/server/deleteAccount.ts","./src/lexicon/types/com/atproto/server/deleteSession.ts","./src/lexicon/types/com/atproto/server/describeServer.ts","./src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts","./src/lexicon/types/com/atproto/server/getServiceAuth.ts","./src/lexicon/types/com/atproto/server/getSession.ts","./src/lexicon/types/com/atproto/server/listAppPasswords.ts","./src/lexicon/types/com/atproto/server/refreshSession.ts","./src/lexicon/types/com/atproto/server/requestAccountDelete.ts","./src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts","./src/lexicon/types/com/atproto/server/requestEmailUpdate.ts","./src/lexicon/types/com/atproto/server/requestPasswordReset.ts","./src/lexicon/types/com/atproto/server/reserveSigningKey.ts","./src/lexicon/types/com/atproto/server/resetPassword.ts","./src/lexicon/types/com/atproto/server/revokeAppPassword.ts","./src/lexicon/types/com/atproto/server/updateEmail.ts","./src/lexicon/types/com/atproto/sync/defs.ts","./src/lexicon/types/com/atproto/sync/getBlob.ts","./src/lexicon/types/com/atproto/sync/getBlocks.ts","./src/lexicon/types/com/atproto/sync/getCheckout.ts","./src/lexicon/types/com/atproto/sync/getHead.ts","./src/lexicon/types/com/atproto/sync/getHostStatus.ts","./src/lexicon/types/com/atproto/sync/getLatestCommit.ts","./src/lexicon/types/com/atproto/sync/getRecord.ts","./src/lexicon/types/com/atproto/sync/getRepo.ts","./src/lexicon/types/com/atproto/sync/getRepoStatus.ts","./src/lexicon/types/com/atproto/sync/listBlobs.ts","./src/lexicon/types/com/atproto/sync/listHosts.ts","./src/lexicon/types/com/atproto/sync/listRepos.ts","./src/lexicon/types/com/atproto/sync/listReposByCollection.ts","./src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts","./src/lexicon/types/com/atproto/sync/requestCrawl.ts","./src/lexicon/types/com/atproto/sync/subscribeRepos.ts","./src/lexicon/types/com/atproto/temp/addReservedHandle.ts","./src/lexicon/types/com/atproto/temp/checkHandleAvailability.ts","./src/lexicon/types/com/atproto/temp/checkSignupQueue.ts","./src/lexicon/types/com/atproto/temp/dereferenceScope.ts","./src/lexicon/types/com/atproto/temp/fetchLabels.ts","./src/lexicon/types/com/atproto/temp/requestPhoneVerification.ts","./src/lexicon/types/com/atproto/temp/revokeAccountCredentials.ts","./src/lexicon/types/com/germnetwork/declaration.ts","./src/proto/bsky_connect.ts","./src/proto/bsky_pb.ts","./src/proto/bsync_connect.ts","./src/proto/bsync_pb.ts","./src/proto/courier_connect.ts","./src/proto/courier_pb.ts","./src/proto/rolodex_connect.ts","./src/proto/rolodex_pb.ts","./src/util/debug.ts","./src/util/http.ts","./src/util/retry.ts","./src/util/uris.ts","./src/views/index.ts","./src/views/threads-v2.ts","./src/views/types.ts","./src/views/util.ts"],"version":"5.8.2"}
1
+ {"root":["./src/auth-verifier.ts","./src/bsync.ts","./src/config.ts","./src/context.ts","./src/courier.ts","./src/error.ts","./src/etcd.ts","./src/index.ts","./src/kws.ts","./src/logger.ts","./src/pipeline.ts","./src/redis.ts","./src/rolodex.ts","./src/stash.ts","./src/util.ts","./src/api/blob-dispatcher.ts","./src/api/blob-resolver.ts","./src/api/external.ts","./src/api/health.ts","./src/api/index.ts","./src/api/sitemap.ts","./src/api/util.ts","./src/api/well-known.ts","./src/api/age-assurance/const.ts","./src/api/age-assurance/index.ts","./src/api/age-assurance/stash.ts","./src/api/age-assurance/types.ts","./src/api/age-assurance/util.ts","./src/api/age-assurance/kws/age-verified.ts","./src/api/age-assurance/kws/const.ts","./src/api/age-assurance/kws/external-payload.test.ts","./src/api/age-assurance/kws/external-payload.ts","./src/api/age-assurance/redirects/kws-age-verified.ts","./src/api/age-assurance/webhooks/kws-age-verified.ts","./src/api/app/bsky/actor/getProfile.ts","./src/api/app/bsky/actor/getProfiles.ts","./src/api/app/bsky/actor/getSuggestions.ts","./src/api/app/bsky/actor/searchActors.ts","./src/api/app/bsky/actor/searchActorsTypeahead.ts","./src/api/app/bsky/ageassurance/begin.ts","./src/api/app/bsky/ageassurance/getConfig.ts","./src/api/app/bsky/ageassurance/getState.ts","./src/api/app/bsky/bookmark/createBookmark.ts","./src/api/app/bsky/bookmark/deleteBookmark.ts","./src/api/app/bsky/bookmark/getBookmarks.ts","./src/api/app/bsky/bookmark/util.ts","./src/api/app/bsky/contact/dismissMatch.ts","./src/api/app/bsky/contact/getMatches.ts","./src/api/app/bsky/contact/getSyncStatus.ts","./src/api/app/bsky/contact/importContacts.ts","./src/api/app/bsky/contact/removeData.ts","./src/api/app/bsky/contact/sendNotification.ts","./src/api/app/bsky/contact/startPhoneVerification.ts","./src/api/app/bsky/contact/util.ts","./src/api/app/bsky/contact/verifyPhone.ts","./src/api/app/bsky/draft/createDraft.ts","./src/api/app/bsky/draft/deleteDraft.ts","./src/api/app/bsky/draft/getDrafts.ts","./src/api/app/bsky/draft/updateDraft.ts","./src/api/app/bsky/feed/getActorFeeds.ts","./src/api/app/bsky/feed/getActorLikes.ts","./src/api/app/bsky/feed/getAuthorFeed.ts","./src/api/app/bsky/feed/getFeed.ts","./src/api/app/bsky/feed/getFeedGenerator.ts","./src/api/app/bsky/feed/getFeedGenerators.ts","./src/api/app/bsky/feed/getLikes.ts","./src/api/app/bsky/feed/getListFeed.ts","./src/api/app/bsky/feed/getPostThread.ts","./src/api/app/bsky/feed/getPosts.ts","./src/api/app/bsky/feed/getQuotes.ts","./src/api/app/bsky/feed/getRepostedBy.ts","./src/api/app/bsky/feed/getSuggestedFeeds.ts","./src/api/app/bsky/feed/getTimeline.ts","./src/api/app/bsky/feed/searchPosts.ts","./src/api/app/bsky/graph/getActorStarterPacks.ts","./src/api/app/bsky/graph/getBlocks.ts","./src/api/app/bsky/graph/getFollowers.ts","./src/api/app/bsky/graph/getFollows.ts","./src/api/app/bsky/graph/getKnownFollowers.ts","./src/api/app/bsky/graph/getList.ts","./src/api/app/bsky/graph/getListBlocks.ts","./src/api/app/bsky/graph/getListMutes.ts","./src/api/app/bsky/graph/getLists.ts","./src/api/app/bsky/graph/getListsWithMembership.ts","./src/api/app/bsky/graph/getMutes.ts","./src/api/app/bsky/graph/getRelationships.ts","./src/api/app/bsky/graph/getStarterPack.ts","./src/api/app/bsky/graph/getStarterPacks.ts","./src/api/app/bsky/graph/getStarterPacksWithMembership.ts","./src/api/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/api/app/bsky/graph/muteActor.ts","./src/api/app/bsky/graph/muteActorList.ts","./src/api/app/bsky/graph/muteThread.ts","./src/api/app/bsky/graph/searchStarterPacks.ts","./src/api/app/bsky/graph/unmuteActor.ts","./src/api/app/bsky/graph/unmuteActorList.ts","./src/api/app/bsky/graph/unmuteThread.ts","./src/api/app/bsky/labeler/getServices.ts","./src/api/app/bsky/notification/getPreferences.ts","./src/api/app/bsky/notification/getUnreadCount.ts","./src/api/app/bsky/notification/listActivitySubscriptions.ts","./src/api/app/bsky/notification/listNotifications.ts","./src/api/app/bsky/notification/putActivitySubscription.ts","./src/api/app/bsky/notification/putPreferences.ts","./src/api/app/bsky/notification/putPreferencesV2.ts","./src/api/app/bsky/notification/registerPush.ts","./src/api/app/bsky/notification/unregisterPush.ts","./src/api/app/bsky/notification/updateSeen.ts","./src/api/app/bsky/notification/util.ts","./src/api/app/bsky/unspecced/getAgeAssuranceState.ts","./src/api/app/bsky/unspecced/getConfig.ts","./src/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts","./src/api/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/api/app/bsky/unspecced/getPostThreadOtherV2.ts","./src/api/app/bsky/unspecced/getPostThreadV2.ts","./src/api/app/bsky/unspecced/getSuggestedFeeds.ts","./src/api/app/bsky/unspecced/getSuggestedOnboardingUsers.ts","./src/api/app/bsky/unspecced/getSuggestedStarterPacks.ts","./src/api/app/bsky/unspecced/getSuggestedUsers.ts","./src/api/app/bsky/unspecced/getTaggedSuggestions.ts","./src/api/app/bsky/unspecced/getTrendingTopics.ts","./src/api/app/bsky/unspecced/getTrends.ts","./src/api/app/bsky/unspecced/initAgeAssurance.ts","./src/api/com/atproto/admin/getAccountInfos.ts","./src/api/com/atproto/admin/getSubjectStatus.ts","./src/api/com/atproto/admin/updateSubjectStatus.ts","./src/api/com/atproto/identity/resolveHandle.ts","./src/api/com/atproto/label/queryLabels.ts","./src/api/com/atproto/repo/getRecord.ts","./src/api/com/atproto/temp/fetchLabels.ts","./src/api/kws/api.ts","./src/api/kws/index.ts","./src/api/kws/types.ts","./src/api/kws/util.ts","./src/api/kws/webhook.ts","./src/cache/read-through.ts","./src/data-plane/index.ts","./src/data-plane/bsync/index.ts","./src/data-plane/client/hosts.ts","./src/data-plane/client/index.ts","./src/data-plane/client/util.ts","./src/data-plane/server/background.ts","./src/data-plane/server/index.ts","./src/data-plane/server/subscription.ts","./src/data-plane/server/util.ts","./src/data-plane/server/db/database-schema.ts","./src/data-plane/server/db/db.ts","./src/data-plane/server/db/index.ts","./src/data-plane/server/db/pagination.ts","./src/data-plane/server/db/types.ts","./src/data-plane/server/db/util.ts","./src/data-plane/server/db/migrations/20230309T045948368Z-init.ts","./src/data-plane/server/db/migrations/20230408T152211201Z-notification-init.ts","./src/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.ts","./src/data-plane/server/db/migrations/20230420T211446071Z-did-cache.ts","./src/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.ts","./src/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.ts","./src/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.ts","./src/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.ts","./src/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.ts","./src/data-plane/server/db/migrations/20230608T205147239Z-mutes.ts","./src/data-plane/server/db/migrations/20230609T153623961Z-blocks.ts","./src/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.ts","./src/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.ts","./src/data-plane/server/db/migrations/20230611T215300060Z-actor-state.ts","./src/data-plane/server/db/migrations/20230620T161134972Z-post-langs.ts","./src/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.ts","./src/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.ts","./src/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.ts","./src/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.ts","./src/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.ts","./src/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.ts","./src/data-plane/server/db/migrations/20230810T203349843Z-action-duration.ts","./src/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.ts","./src/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.ts","./src/data-plane/server/db/migrations/20230904T211011773Z-block-lists.ts","./src/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.ts","./src/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.ts","./src/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.ts","./src/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.ts","./src/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.ts","./src/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.ts","./src/data-plane/server/db/migrations/20240226T225725627Z-labelers.ts","./src/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.ts","./src/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.ts","./src/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.ts","./src/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.ts","./src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts","./src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts","./src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts","./src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts","./src/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.ts","./src/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.ts","./src/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.ts","./src/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.ts","./src/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.ts","./src/data-plane/server/db/migrations/20250404T163421487Z-verifications.ts","./src/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.ts","./src/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.ts","./src/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.ts","./src/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.ts","./src/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.ts","./src/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.ts","./src/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.ts","./src/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.ts","./src/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.ts","./src/data-plane/server/db/migrations/index.ts","./src/data-plane/server/db/migrations/provider.ts","./src/data-plane/server/db/tables/activity-subscription.ts","./src/data-plane/server/db/tables/actor-block.ts","./src/data-plane/server/db/tables/actor-state.ts","./src/data-plane/server/db/tables/actor-sync.ts","./src/data-plane/server/db/tables/actor.ts","./src/data-plane/server/db/tables/algo.ts","./src/data-plane/server/db/tables/blob-takedown.ts","./src/data-plane/server/db/tables/bookmark.ts","./src/data-plane/server/db/tables/did-cache.ts","./src/data-plane/server/db/tables/draft.ts","./src/data-plane/server/db/tables/duplicate-record.ts","./src/data-plane/server/db/tables/feed-generator.ts","./src/data-plane/server/db/tables/feed-item.ts","./src/data-plane/server/db/tables/follow.ts","./src/data-plane/server/db/tables/label.ts","./src/data-plane/server/db/tables/labeler.ts","./src/data-plane/server/db/tables/like.ts","./src/data-plane/server/db/tables/list-block.ts","./src/data-plane/server/db/tables/list-item.ts","./src/data-plane/server/db/tables/list-mute.ts","./src/data-plane/server/db/tables/list.ts","./src/data-plane/server/db/tables/mute.ts","./src/data-plane/server/db/tables/notification-push-token.ts","./src/data-plane/server/db/tables/notification.ts","./src/data-plane/server/db/tables/post-agg.ts","./src/data-plane/server/db/tables/post-embed.ts","./src/data-plane/server/db/tables/post-gate.ts","./src/data-plane/server/db/tables/post.ts","./src/data-plane/server/db/tables/private-data.ts","./src/data-plane/server/db/tables/profile-agg.ts","./src/data-plane/server/db/tables/profile.ts","./src/data-plane/server/db/tables/quote.ts","./src/data-plane/server/db/tables/record.ts","./src/data-plane/server/db/tables/repost.ts","./src/data-plane/server/db/tables/starter-pack.ts","./src/data-plane/server/db/tables/subscription.ts","./src/data-plane/server/db/tables/suggested-feed.ts","./src/data-plane/server/db/tables/suggested-follow.ts","./src/data-plane/server/db/tables/tagged-suggestion.ts","./src/data-plane/server/db/tables/thread-gate.ts","./src/data-plane/server/db/tables/thread-mute.ts","./src/data-plane/server/db/tables/verification.ts","./src/data-plane/server/db/tables/view-param.ts","./src/data-plane/server/indexing/index.ts","./src/data-plane/server/indexing/processor.ts","./src/data-plane/server/indexing/plugins/block.ts","./src/data-plane/server/indexing/plugins/chat-declaration.ts","./src/data-plane/server/indexing/plugins/feed-generator.ts","./src/data-plane/server/indexing/plugins/follow.ts","./src/data-plane/server/indexing/plugins/germ-declaration.ts","./src/data-plane/server/indexing/plugins/labeler.ts","./src/data-plane/server/indexing/plugins/like.ts","./src/data-plane/server/indexing/plugins/list-block.ts","./src/data-plane/server/indexing/plugins/list-item.ts","./src/data-plane/server/indexing/plugins/list.ts","./src/data-plane/server/indexing/plugins/notif-declaration.ts","./src/data-plane/server/indexing/plugins/post-gate.ts","./src/data-plane/server/indexing/plugins/post.ts","./src/data-plane/server/indexing/plugins/profile.ts","./src/data-plane/server/indexing/plugins/repost.ts","./src/data-plane/server/indexing/plugins/starter-pack.ts","./src/data-plane/server/indexing/plugins/status.ts","./src/data-plane/server/indexing/plugins/thread-gate.ts","./src/data-plane/server/indexing/plugins/verification.ts","./src/data-plane/server/routes/activity-subscription.ts","./src/data-plane/server/routes/blocks.ts","./src/data-plane/server/routes/bookmarks.ts","./src/data-plane/server/routes/drafts.ts","./src/data-plane/server/routes/feed-gens.ts","./src/data-plane/server/routes/feeds.ts","./src/data-plane/server/routes/follows.ts","./src/data-plane/server/routes/identity.ts","./src/data-plane/server/routes/index.ts","./src/data-plane/server/routes/interactions.ts","./src/data-plane/server/routes/labels.ts","./src/data-plane/server/routes/likes.ts","./src/data-plane/server/routes/lists.ts","./src/data-plane/server/routes/moderation.ts","./src/data-plane/server/routes/mutes.ts","./src/data-plane/server/routes/notifs.ts","./src/data-plane/server/routes/profile.ts","./src/data-plane/server/routes/quotes.ts","./src/data-plane/server/routes/records.ts","./src/data-plane/server/routes/relationships.ts","./src/data-plane/server/routes/reposts.ts","./src/data-plane/server/routes/search.ts","./src/data-plane/server/routes/sitemap.ts","./src/data-plane/server/routes/starter-packs.ts","./src/data-plane/server/routes/suggestions.ts","./src/data-plane/server/routes/sync.ts","./src/data-plane/server/routes/threads.ts","./src/feature-gates/gates.ts","./src/feature-gates/index.ts","./src/feature-gates/metrics.test.ts","./src/feature-gates/metrics.ts","./src/feature-gates/types.ts","./src/feature-gates/utils.ts","./src/hydration/actor.ts","./src/hydration/feed.ts","./src/hydration/graph.ts","./src/hydration/hydrator.ts","./src/hydration/label.ts","./src/hydration/util.ts","./src/image/index.ts","./src/image/invalidator.ts","./src/image/logger.ts","./src/image/server.ts","./src/image/sharp.ts","./src/image/uri.ts","./src/image/util.ts","./src/lexicon/index.ts","./src/lexicon/lexicons.ts","./src/lexicon/util.ts","./src/lexicon/types/app/bsky/actor/defs.ts","./src/lexicon/types/app/bsky/actor/getPreferences.ts","./src/lexicon/types/app/bsky/actor/getProfile.ts","./src/lexicon/types/app/bsky/actor/getProfiles.ts","./src/lexicon/types/app/bsky/actor/getSuggestions.ts","./src/lexicon/types/app/bsky/actor/profile.ts","./src/lexicon/types/app/bsky/actor/putPreferences.ts","./src/lexicon/types/app/bsky/actor/searchActors.ts","./src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts","./src/lexicon/types/app/bsky/actor/status.ts","./src/lexicon/types/app/bsky/ageassurance/begin.ts","./src/lexicon/types/app/bsky/ageassurance/defs.ts","./src/lexicon/types/app/bsky/ageassurance/getConfig.ts","./src/lexicon/types/app/bsky/ageassurance/getState.ts","./src/lexicon/types/app/bsky/bookmark/createBookmark.ts","./src/lexicon/types/app/bsky/bookmark/defs.ts","./src/lexicon/types/app/bsky/bookmark/deleteBookmark.ts","./src/lexicon/types/app/bsky/bookmark/getBookmarks.ts","./src/lexicon/types/app/bsky/contact/defs.ts","./src/lexicon/types/app/bsky/contact/dismissMatch.ts","./src/lexicon/types/app/bsky/contact/getMatches.ts","./src/lexicon/types/app/bsky/contact/getSyncStatus.ts","./src/lexicon/types/app/bsky/contact/importContacts.ts","./src/lexicon/types/app/bsky/contact/removeData.ts","./src/lexicon/types/app/bsky/contact/sendNotification.ts","./src/lexicon/types/app/bsky/contact/startPhoneVerification.ts","./src/lexicon/types/app/bsky/contact/verifyPhone.ts","./src/lexicon/types/app/bsky/draft/createDraft.ts","./src/lexicon/types/app/bsky/draft/defs.ts","./src/lexicon/types/app/bsky/draft/deleteDraft.ts","./src/lexicon/types/app/bsky/draft/getDrafts.ts","./src/lexicon/types/app/bsky/draft/updateDraft.ts","./src/lexicon/types/app/bsky/embed/defs.ts","./src/lexicon/types/app/bsky/embed/external.ts","./src/lexicon/types/app/bsky/embed/images.ts","./src/lexicon/types/app/bsky/embed/record.ts","./src/lexicon/types/app/bsky/embed/recordWithMedia.ts","./src/lexicon/types/app/bsky/embed/video.ts","./src/lexicon/types/app/bsky/feed/defs.ts","./src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/generator.ts","./src/lexicon/types/app/bsky/feed/getActorFeeds.ts","./src/lexicon/types/app/bsky/feed/getActorLikes.ts","./src/lexicon/types/app/bsky/feed/getAuthorFeed.ts","./src/lexicon/types/app/bsky/feed/getFeed.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerator.ts","./src/lexicon/types/app/bsky/feed/getFeedGenerators.ts","./src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts","./src/lexicon/types/app/bsky/feed/getLikes.ts","./src/lexicon/types/app/bsky/feed/getListFeed.ts","./src/lexicon/types/app/bsky/feed/getPostThread.ts","./src/lexicon/types/app/bsky/feed/getPosts.ts","./src/lexicon/types/app/bsky/feed/getQuotes.ts","./src/lexicon/types/app/bsky/feed/getRepostedBy.ts","./src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts","./src/lexicon/types/app/bsky/feed/getTimeline.ts","./src/lexicon/types/app/bsky/feed/like.ts","./src/lexicon/types/app/bsky/feed/post.ts","./src/lexicon/types/app/bsky/feed/postgate.ts","./src/lexicon/types/app/bsky/feed/repost.ts","./src/lexicon/types/app/bsky/feed/searchPosts.ts","./src/lexicon/types/app/bsky/feed/sendInteractions.ts","./src/lexicon/types/app/bsky/feed/threadgate.ts","./src/lexicon/types/app/bsky/graph/block.ts","./src/lexicon/types/app/bsky/graph/defs.ts","./src/lexicon/types/app/bsky/graph/follow.ts","./src/lexicon/types/app/bsky/graph/getActorStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getBlocks.ts","./src/lexicon/types/app/bsky/graph/getFollowers.ts","./src/lexicon/types/app/bsky/graph/getFollows.ts","./src/lexicon/types/app/bsky/graph/getKnownFollowers.ts","./src/lexicon/types/app/bsky/graph/getList.ts","./src/lexicon/types/app/bsky/graph/getListBlocks.ts","./src/lexicon/types/app/bsky/graph/getListMutes.ts","./src/lexicon/types/app/bsky/graph/getLists.ts","./src/lexicon/types/app/bsky/graph/getListsWithMembership.ts","./src/lexicon/types/app/bsky/graph/getMutes.ts","./src/lexicon/types/app/bsky/graph/getRelationships.ts","./src/lexicon/types/app/bsky/graph/getStarterPack.ts","./src/lexicon/types/app/bsky/graph/getStarterPacks.ts","./src/lexicon/types/app/bsky/graph/getStarterPacksWithMembership.ts","./src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts","./src/lexicon/types/app/bsky/graph/list.ts","./src/lexicon/types/app/bsky/graph/listblock.ts","./src/lexicon/types/app/bsky/graph/listitem.ts","./src/lexicon/types/app/bsky/graph/muteActor.ts","./src/lexicon/types/app/bsky/graph/muteActorList.ts","./src/lexicon/types/app/bsky/graph/muteThread.ts","./src/lexicon/types/app/bsky/graph/searchStarterPacks.ts","./src/lexicon/types/app/bsky/graph/starterpack.ts","./src/lexicon/types/app/bsky/graph/unmuteActor.ts","./src/lexicon/types/app/bsky/graph/unmuteActorList.ts","./src/lexicon/types/app/bsky/graph/unmuteThread.ts","./src/lexicon/types/app/bsky/graph/verification.ts","./src/lexicon/types/app/bsky/labeler/defs.ts","./src/lexicon/types/app/bsky/labeler/getServices.ts","./src/lexicon/types/app/bsky/labeler/service.ts","./src/lexicon/types/app/bsky/notification/declaration.ts","./src/lexicon/types/app/bsky/notification/defs.ts","./src/lexicon/types/app/bsky/notification/getPreferences.ts","./src/lexicon/types/app/bsky/notification/getUnreadCount.ts","./src/lexicon/types/app/bsky/notification/listActivitySubscriptions.ts","./src/lexicon/types/app/bsky/notification/listNotifications.ts","./src/lexicon/types/app/bsky/notification/putActivitySubscription.ts","./src/lexicon/types/app/bsky/notification/putPreferences.ts","./src/lexicon/types/app/bsky/notification/putPreferencesV2.ts","./src/lexicon/types/app/bsky/notification/registerPush.ts","./src/lexicon/types/app/bsky/notification/unregisterPush.ts","./src/lexicon/types/app/bsky/notification/updateSeen.ts","./src/lexicon/types/app/bsky/richtext/facet.ts","./src/lexicon/types/app/bsky/unspecced/defs.ts","./src/lexicon/types/app/bsky/unspecced/getAgeAssuranceState.ts","./src/lexicon/types/app/bsky/unspecced/getConfig.ts","./src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts","./src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts","./src/lexicon/types/app/bsky/unspecced/getPostThreadOtherV2.ts","./src/lexicon/types/app/bsky/unspecced/getPostThreadV2.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedFeeds.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedOnboardingUsers.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedStarterPacks.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedUsers.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestedUsersSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getSuggestionsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/getTaggedSuggestions.ts","./src/lexicon/types/app/bsky/unspecced/getTrendingTopics.ts","./src/lexicon/types/app/bsky/unspecced/getTrends.ts","./src/lexicon/types/app/bsky/unspecced/getTrendsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/initAgeAssurance.ts","./src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts","./src/lexicon/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts","./src/lexicon/types/app/bsky/video/defs.ts","./src/lexicon/types/app/bsky/video/getJobStatus.ts","./src/lexicon/types/app/bsky/video/getUploadLimits.ts","./src/lexicon/types/app/bsky/video/uploadVideo.ts","./src/lexicon/types/chat/bsky/actor/declaration.ts","./src/lexicon/types/chat/bsky/actor/defs.ts","./src/lexicon/types/chat/bsky/actor/deleteAccount.ts","./src/lexicon/types/chat/bsky/actor/exportAccountData.ts","./src/lexicon/types/chat/bsky/convo/acceptConvo.ts","./src/lexicon/types/chat/bsky/convo/addReaction.ts","./src/lexicon/types/chat/bsky/convo/defs.ts","./src/lexicon/types/chat/bsky/convo/deleteMessageForSelf.ts","./src/lexicon/types/chat/bsky/convo/getConvo.ts","./src/lexicon/types/chat/bsky/convo/getConvoAvailability.ts","./src/lexicon/types/chat/bsky/convo/getConvoForMembers.ts","./src/lexicon/types/chat/bsky/convo/getLog.ts","./src/lexicon/types/chat/bsky/convo/getMessages.ts","./src/lexicon/types/chat/bsky/convo/leaveConvo.ts","./src/lexicon/types/chat/bsky/convo/listConvos.ts","./src/lexicon/types/chat/bsky/convo/muteConvo.ts","./src/lexicon/types/chat/bsky/convo/removeReaction.ts","./src/lexicon/types/chat/bsky/convo/sendMessage.ts","./src/lexicon/types/chat/bsky/convo/sendMessageBatch.ts","./src/lexicon/types/chat/bsky/convo/unmuteConvo.ts","./src/lexicon/types/chat/bsky/convo/updateAllRead.ts","./src/lexicon/types/chat/bsky/convo/updateRead.ts","./src/lexicon/types/chat/bsky/moderation/getActorMetadata.ts","./src/lexicon/types/chat/bsky/moderation/getMessageContext.ts","./src/lexicon/types/chat/bsky/moderation/updateActorAccess.ts","./src/lexicon/types/com/atproto/admin/defs.ts","./src/lexicon/types/com/atproto/admin/deleteAccount.ts","./src/lexicon/types/com/atproto/admin/disableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/disableInviteCodes.ts","./src/lexicon/types/com/atproto/admin/enableAccountInvites.ts","./src/lexicon/types/com/atproto/admin/getAccountInfo.ts","./src/lexicon/types/com/atproto/admin/getAccountInfos.ts","./src/lexicon/types/com/atproto/admin/getInviteCodes.ts","./src/lexicon/types/com/atproto/admin/getSubjectStatus.ts","./src/lexicon/types/com/atproto/admin/searchAccounts.ts","./src/lexicon/types/com/atproto/admin/sendEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountEmail.ts","./src/lexicon/types/com/atproto/admin/updateAccountHandle.ts","./src/lexicon/types/com/atproto/admin/updateAccountPassword.ts","./src/lexicon/types/com/atproto/admin/updateAccountSigningKey.ts","./src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts","./src/lexicon/types/com/atproto/identity/defs.ts","./src/lexicon/types/com/atproto/identity/getRecommendedDidCredentials.ts","./src/lexicon/types/com/atproto/identity/refreshIdentity.ts","./src/lexicon/types/com/atproto/identity/requestPlcOperationSignature.ts","./src/lexicon/types/com/atproto/identity/resolveDid.ts","./src/lexicon/types/com/atproto/identity/resolveHandle.ts","./src/lexicon/types/com/atproto/identity/resolveIdentity.ts","./src/lexicon/types/com/atproto/identity/signPlcOperation.ts","./src/lexicon/types/com/atproto/identity/submitPlcOperation.ts","./src/lexicon/types/com/atproto/identity/updateHandle.ts","./src/lexicon/types/com/atproto/label/defs.ts","./src/lexicon/types/com/atproto/label/queryLabels.ts","./src/lexicon/types/com/atproto/label/subscribeLabels.ts","./src/lexicon/types/com/atproto/lexicon/resolveLexicon.ts","./src/lexicon/types/com/atproto/lexicon/schema.ts","./src/lexicon/types/com/atproto/moderation/createReport.ts","./src/lexicon/types/com/atproto/moderation/defs.ts","./src/lexicon/types/com/atproto/repo/applyWrites.ts","./src/lexicon/types/com/atproto/repo/createRecord.ts","./src/lexicon/types/com/atproto/repo/defs.ts","./src/lexicon/types/com/atproto/repo/deleteRecord.ts","./src/lexicon/types/com/atproto/repo/describeRepo.ts","./src/lexicon/types/com/atproto/repo/getRecord.ts","./src/lexicon/types/com/atproto/repo/importRepo.ts","./src/lexicon/types/com/atproto/repo/listMissingBlobs.ts","./src/lexicon/types/com/atproto/repo/listRecords.ts","./src/lexicon/types/com/atproto/repo/putRecord.ts","./src/lexicon/types/com/atproto/repo/strongRef.ts","./src/lexicon/types/com/atproto/repo/uploadBlob.ts","./src/lexicon/types/com/atproto/server/activateAccount.ts","./src/lexicon/types/com/atproto/server/checkAccountStatus.ts","./src/lexicon/types/com/atproto/server/confirmEmail.ts","./src/lexicon/types/com/atproto/server/createAccount.ts","./src/lexicon/types/com/atproto/server/createAppPassword.ts","./src/lexicon/types/com/atproto/server/createInviteCode.ts","./src/lexicon/types/com/atproto/server/createInviteCodes.ts","./src/lexicon/types/com/atproto/server/createSession.ts","./src/lexicon/types/com/atproto/server/deactivateAccount.ts","./src/lexicon/types/com/atproto/server/defs.ts","./src/lexicon/types/com/atproto/server/deleteAccount.ts","./src/lexicon/types/com/atproto/server/deleteSession.ts","./src/lexicon/types/com/atproto/server/describeServer.ts","./src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts","./src/lexicon/types/com/atproto/server/getServiceAuth.ts","./src/lexicon/types/com/atproto/server/getSession.ts","./src/lexicon/types/com/atproto/server/listAppPasswords.ts","./src/lexicon/types/com/atproto/server/refreshSession.ts","./src/lexicon/types/com/atproto/server/requestAccountDelete.ts","./src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts","./src/lexicon/types/com/atproto/server/requestEmailUpdate.ts","./src/lexicon/types/com/atproto/server/requestPasswordReset.ts","./src/lexicon/types/com/atproto/server/reserveSigningKey.ts","./src/lexicon/types/com/atproto/server/resetPassword.ts","./src/lexicon/types/com/atproto/server/revokeAppPassword.ts","./src/lexicon/types/com/atproto/server/updateEmail.ts","./src/lexicon/types/com/atproto/sync/defs.ts","./src/lexicon/types/com/atproto/sync/getBlob.ts","./src/lexicon/types/com/atproto/sync/getBlocks.ts","./src/lexicon/types/com/atproto/sync/getCheckout.ts","./src/lexicon/types/com/atproto/sync/getHead.ts","./src/lexicon/types/com/atproto/sync/getHostStatus.ts","./src/lexicon/types/com/atproto/sync/getLatestCommit.ts","./src/lexicon/types/com/atproto/sync/getRecord.ts","./src/lexicon/types/com/atproto/sync/getRepo.ts","./src/lexicon/types/com/atproto/sync/getRepoStatus.ts","./src/lexicon/types/com/atproto/sync/listBlobs.ts","./src/lexicon/types/com/atproto/sync/listHosts.ts","./src/lexicon/types/com/atproto/sync/listRepos.ts","./src/lexicon/types/com/atproto/sync/listReposByCollection.ts","./src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts","./src/lexicon/types/com/atproto/sync/requestCrawl.ts","./src/lexicon/types/com/atproto/sync/subscribeRepos.ts","./src/lexicon/types/com/atproto/temp/addReservedHandle.ts","./src/lexicon/types/com/atproto/temp/checkHandleAvailability.ts","./src/lexicon/types/com/atproto/temp/checkSignupQueue.ts","./src/lexicon/types/com/atproto/temp/dereferenceScope.ts","./src/lexicon/types/com/atproto/temp/fetchLabels.ts","./src/lexicon/types/com/atproto/temp/requestPhoneVerification.ts","./src/lexicon/types/com/atproto/temp/revokeAccountCredentials.ts","./src/lexicon/types/com/germnetwork/declaration.ts","./src/proto/bsky_connect.ts","./src/proto/bsky_pb.ts","./src/proto/bsync_connect.ts","./src/proto/bsync_pb.ts","./src/proto/courier_connect.ts","./src/proto/courier_pb.ts","./src/proto/rolodex_connect.ts","./src/proto/rolodex_pb.ts","./src/util/debug.ts","./src/util/http.ts","./src/util/retry.ts","./src/util/uris.ts","./src/views/index.ts","./src/views/threads-v2.ts","./src/views/types.ts","./src/views/util.ts"],"version":"5.8.2"}
@@ -1,44 +0,0 @@
1
- import { GrowthBookClient, type UserContext as GrowthBookUserContext } from '@growthbook/growthbook';
2
- export type Config = {
3
- apiHost?: string;
4
- clientKey?: string;
5
- };
6
- type UserContext = Omit<GrowthBookUserContext, 'attributes'> & {
7
- attributes?: {
8
- did?: string | null;
9
- };
10
- };
11
- export declare enum FeatureGateID {
12
- /**
13
- * Left here ensure this is interpreted as a string enum and therefore
14
- * appease TS
15
- */
16
- _ = "",
17
- SuggestedUsersDiscoverAgentEnable = "suggested_users:discover_agent:enable",
18
- SuggestedOnboardingUsersDiscoverAgentEnable = "suggested_onboarding_users:discover_agent:enable",
19
- ThreadsReplyRankingExplorationEnable = "threads:reply_ranking_exploration:enable",
20
- SearchFilteringExplorationEnable = "search:filtering_exploration:enable"
21
- }
22
- /**
23
- * Pre-evaluated feature gates map, the result of `FeatureGates.checkGates()`
24
- */
25
- export type CheckedFeatureGatesMap = Map<FeatureGateID, boolean>;
26
- export declare class FeatureGates {
27
- private config;
28
- ready: boolean;
29
- client: GrowthBookClient | undefined;
30
- ids: typeof FeatureGateID;
31
- refreshInterval: NodeJS.Timeout | undefined;
32
- constructor(config: Config);
33
- start(): Promise<void>;
34
- destroy(): void;
35
- userContext({ did, }: Exclude<UserContext['attributes'], undefined>): UserContext;
36
- check(gate: FeatureGateID, ctx: UserContext): boolean;
37
- /**
38
- * Pre-evaluate multiple feature gates for a given user, returning a map of
39
- * gate ID to boolean result.
40
- */
41
- checkGates(gates: FeatureGateID[], ctx: UserContext): CheckedFeatureGatesMap;
42
- }
43
- export {};
44
- //# sourceMappingURL=feature-gates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-gates.d.ts","sourceRoot":"","sources":["../src/feature-gates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,IAAI,qBAAqB,EAC1C,MAAM,wBAAwB,CAAA;AAe/B,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG;IAC7D,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACpB,CAAA;CACF,CAAA;AAED,oBAAY,aAAa;IACvB;;;OAGG;IACH,CAAC,KAAK;IACN,iCAAiC,0CAA0C;IAC3E,2CAA2C,qDAAqD;IAChG,oCAAoC,6CAA6C;IACjF,gCAAgC,wCAAwC;CACzE;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AAEhE,qBAAa,YAAY;IAMX,OAAO,CAAC,MAAM;IAL1B,KAAK,UAAQ;IACb,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAY;IAChD,GAAG,uBAAgB;IACnB,eAAe,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAY;gBAEnC,MAAM,EAAE,MAAM;IAE5B,KAAK;IAsDX,OAAO;IASP,WAAW,CAAC,EACV,GAAG,GACJ,EAAE,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,GAAG,WAAW;IAI9D,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO;IAKrD;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,WAAW,GAAG,sBAAsB;CAG7E"}
@@ -1,133 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FeatureGates = exports.FeatureGateID = void 0;
4
- const growthbook_1 = require("@growthbook/growthbook");
5
- const logger_1 = require("./logger");
6
- /**
7
- * We want this to be sufficiently high that we don't time out under
8
- * normal conditions, but not so high that it takes too long to boot
9
- * the server.
10
- */
11
- const FETCH_TIMEOUT = 3e3; // 3 seconds
12
- /**
13
- * StatSig used to default to every 10s, but I think 1m is fine
14
- */
15
- const REFETCH_INTERVAL = 60e3; // 1 minute
16
- var FeatureGateID;
17
- (function (FeatureGateID) {
18
- /**
19
- * Left here ensure this is interpreted as a string enum and therefore
20
- * appease TS
21
- */
22
- FeatureGateID["_"] = "";
23
- FeatureGateID["SuggestedUsersDiscoverAgentEnable"] = "suggested_users:discover_agent:enable";
24
- FeatureGateID["SuggestedOnboardingUsersDiscoverAgentEnable"] = "suggested_onboarding_users:discover_agent:enable";
25
- FeatureGateID["ThreadsReplyRankingExplorationEnable"] = "threads:reply_ranking_exploration:enable";
26
- FeatureGateID["SearchFilteringExplorationEnable"] = "search:filtering_exploration:enable";
27
- })(FeatureGateID || (exports.FeatureGateID = FeatureGateID = {}));
28
- class FeatureGates {
29
- constructor(config) {
30
- Object.defineProperty(this, "config", {
31
- enumerable: true,
32
- configurable: true,
33
- writable: true,
34
- value: config
35
- });
36
- Object.defineProperty(this, "ready", {
37
- enumerable: true,
38
- configurable: true,
39
- writable: true,
40
- value: false
41
- });
42
- Object.defineProperty(this, "client", {
43
- enumerable: true,
44
- configurable: true,
45
- writable: true,
46
- value: undefined
47
- });
48
- Object.defineProperty(this, "ids", {
49
- enumerable: true,
50
- configurable: true,
51
- writable: true,
52
- value: FeatureGateID
53
- });
54
- Object.defineProperty(this, "refreshInterval", {
55
- enumerable: true,
56
- configurable: true,
57
- writable: true,
58
- value: undefined
59
- });
60
- }
61
- async start() {
62
- try {
63
- if (this.config.apiHost && this.config.clientKey) {
64
- this.client = new growthbook_1.GrowthBookClient({
65
- apiHost: this.config.apiHost,
66
- clientKey: this.config.clientKey,
67
- });
68
- const { source, error } = await this.client.init({
69
- timeout: FETCH_TIMEOUT,
70
- });
71
- /**
72
- * This does not necessarily mean that the client completely failed,
73
- * since it could just be that the request timed out. It may succeed
74
- * after the timeout, or later during refreshes.
75
- *
76
- * @see https://docs.growthbook.io/lib/node#error-handling
77
- */
78
- if (error) {
79
- logger_1.featureGatesLogger.error({ err: error, source }, 'Client failed to initialize normally');
80
- }
81
- /**
82
- * Set up periodic refresh of feature definitions
83
- *
84
- * @see https://docs.growthbook.io/lib/node#refreshing-features
85
- */
86
- this.refreshInterval = setInterval(async () => {
87
- try {
88
- await this.client?.refreshFeatures({
89
- timeout: FETCH_TIMEOUT,
90
- });
91
- }
92
- catch (err) {
93
- logger_1.featureGatesLogger.error({ err }, 'Failed to refresh features');
94
- }
95
- }, REFETCH_INTERVAL);
96
- /* Ready or not, here we come */
97
- this.ready = true;
98
- }
99
- else {
100
- logger_1.featureGatesLogger.error('Missing required config for FeatureGates client');
101
- }
102
- }
103
- catch (err) {
104
- logger_1.featureGatesLogger.error({ err }, 'Client initialization failed');
105
- this.ready = false;
106
- }
107
- }
108
- destroy() {
109
- if (this.ready) {
110
- this.ready = false;
111
- if (this.refreshInterval) {
112
- clearInterval(this.refreshInterval);
113
- }
114
- }
115
- }
116
- userContext({ did, }) {
117
- return { attributes: { did: did ?? null } };
118
- }
119
- check(gate, ctx) {
120
- if (!this.ready || !this.client)
121
- return false;
122
- return this.client.isOn(gate, ctx);
123
- }
124
- /**
125
- * Pre-evaluate multiple feature gates for a given user, returning a map of
126
- * gate ID to boolean result.
127
- */
128
- checkGates(gates, ctx) {
129
- return new Map(gates.map((g) => [g, this.check(g, ctx)]));
130
- }
131
- }
132
- exports.FeatureGates = FeatureGates;
133
- //# sourceMappingURL=feature-gates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-gates.js","sourceRoot":"","sources":["../src/feature-gates.ts"],"names":[],"mappings":";;;AAAA,uDAG+B;AAC/B,qCAA6C;AAE7C;;;;GAIG;AACH,MAAM,aAAa,GAAG,GAAG,CAAA,CAAC,YAAY;AAEtC;;GAEG;AACH,MAAM,gBAAgB,GAAG,IAAI,CAAA,CAAC,WAAW;AAazC,IAAY,aAUX;AAVD,WAAY,aAAa;IACvB;;;OAGG;IACH,uBAAM,CAAA;IACN,4FAA2E,CAAA;IAC3E,iHAAgG,CAAA;IAChG,kGAAiF,CAAA;IACjF,yFAAwE,CAAA;AAC1E,CAAC,EAVW,aAAa,6BAAb,aAAa,QAUxB;AAOD,MAAa,YAAY;IAMvB,YAAoB,MAAc;QAAtB;;;;mBAAQ,MAAM;WAAQ;QALlC;;;;mBAAQ,KAAK;WAAA;QACb;;;;mBAAuC,SAAS;WAAA;QAChD;;;;mBAAM,aAAa;WAAA;QACnB;;;;mBAA8C,SAAS;WAAA;IAElB,CAAC;IAEtC,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjD,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAgB,CAAC;oBACjC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;oBAC5B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;iBACjC,CAAC,CAAA;gBAEF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC/C,OAAO,EAAE,aAAa;iBACvB,CAAC,CAAA;gBAEF;;;;;;mBAMG;gBACH,IAAI,KAAK,EAAE,CAAC;oBACV,2BAAkB,CAAC,KAAK,CACtB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EACtB,sCAAsC,CACvC,CAAA;gBACH,CAAC;gBAED;;;;mBAIG;gBACH,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;oBAC5C,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;4BACjC,OAAO,EAAE,aAAa;yBACvB,CAAC,CAAA;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,2BAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAA;oBACjE,CAAC;gBACH,CAAC,EAAE,gBAAgB,CAAC,CAAA;gBAEpB,gCAAgC;gBAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACnB,CAAC;iBAAM,CAAC;gBACN,2BAAkB,CAAC,KAAK,CACtB,iDAAiD,CAClD,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2BAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAA;YACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EACV,GAAG,GAC2C;QAC9C,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,IAAmB,EAAE,GAAgB;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACpC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,KAAsB,EAAE,GAAgB;QACjD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,CAAC;CACF;AAzFD,oCAyFC","sourcesContent":["import {\n GrowthBookClient,\n type UserContext as GrowthBookUserContext,\n} from '@growthbook/growthbook'\nimport { featureGatesLogger } from './logger'\n\n/**\n * We want this to be sufficiently high that we don't time out under\n * normal conditions, but not so high that it takes too long to boot\n * the server.\n */\nconst FETCH_TIMEOUT = 3e3 // 3 seconds\n\n/**\n * StatSig used to default to every 10s, but I think 1m is fine\n */\nconst REFETCH_INTERVAL = 60e3 // 1 minute\n\nexport type Config = {\n apiHost?: string\n clientKey?: string\n}\n\ntype UserContext = Omit<GrowthBookUserContext, 'attributes'> & {\n attributes?: {\n did?: string | null\n }\n}\n\nexport enum FeatureGateID {\n /**\n * Left here ensure this is interpreted as a string enum and therefore\n * appease TS\n */\n _ = '',\n SuggestedUsersDiscoverAgentEnable = 'suggested_users:discover_agent:enable',\n SuggestedOnboardingUsersDiscoverAgentEnable = 'suggested_onboarding_users:discover_agent:enable',\n ThreadsReplyRankingExplorationEnable = 'threads:reply_ranking_exploration:enable',\n SearchFilteringExplorationEnable = 'search:filtering_exploration:enable',\n}\n\n/**\n * Pre-evaluated feature gates map, the result of `FeatureGates.checkGates()`\n */\nexport type CheckedFeatureGatesMap = Map<FeatureGateID, boolean>\n\nexport class FeatureGates {\n ready = false\n client: GrowthBookClient | undefined = undefined\n ids = FeatureGateID\n refreshInterval: NodeJS.Timeout | undefined = undefined\n\n constructor(private config: Config) {}\n\n async start() {\n try {\n if (this.config.apiHost && this.config.clientKey) {\n this.client = new GrowthBookClient({\n apiHost: this.config.apiHost,\n clientKey: this.config.clientKey,\n })\n\n const { source, error } = await this.client.init({\n timeout: FETCH_TIMEOUT,\n })\n\n /**\n * This does not necessarily mean that the client completely failed,\n * since it could just be that the request timed out. It may succeed\n * after the timeout, or later during refreshes.\n *\n * @see https://docs.growthbook.io/lib/node#error-handling\n */\n if (error) {\n featureGatesLogger.error(\n { err: error, source },\n 'Client failed to initialize normally',\n )\n }\n\n /**\n * Set up periodic refresh of feature definitions\n *\n * @see https://docs.growthbook.io/lib/node#refreshing-features\n */\n this.refreshInterval = setInterval(async () => {\n try {\n await this.client?.refreshFeatures({\n timeout: FETCH_TIMEOUT,\n })\n } catch (err) {\n featureGatesLogger.error({ err }, 'Failed to refresh features')\n }\n }, REFETCH_INTERVAL)\n\n /* Ready or not, here we come */\n this.ready = true\n } else {\n featureGatesLogger.error(\n 'Missing required config for FeatureGates client',\n )\n }\n } catch (err) {\n featureGatesLogger.error({ err }, 'Client initialization failed')\n this.ready = false\n }\n }\n\n destroy() {\n if (this.ready) {\n this.ready = false\n if (this.refreshInterval) {\n clearInterval(this.refreshInterval)\n }\n }\n }\n\n userContext({\n did,\n }: Exclude<UserContext['attributes'], undefined>): UserContext {\n return { attributes: { did: did ?? null } }\n }\n\n check(gate: FeatureGateID, ctx: UserContext): boolean {\n if (!this.ready || !this.client) return false\n return this.client.isOn(gate, ctx)\n }\n\n /**\n * Pre-evaluate multiple feature gates for a given user, returning a map of\n * gate ID to boolean result.\n */\n checkGates(gates: FeatureGateID[], ctx: UserContext): CheckedFeatureGatesMap {\n return new Map(gates.map((g) => [g, this.check(g, ctx)]))\n }\n}\n"]}
@@ -1,136 +0,0 @@
1
- import {
2
- GrowthBookClient,
3
- type UserContext as GrowthBookUserContext,
4
- } from '@growthbook/growthbook'
5
- import { featureGatesLogger } from './logger'
6
-
7
- /**
8
- * We want this to be sufficiently high that we don't time out under
9
- * normal conditions, but not so high that it takes too long to boot
10
- * the server.
11
- */
12
- const FETCH_TIMEOUT = 3e3 // 3 seconds
13
-
14
- /**
15
- * StatSig used to default to every 10s, but I think 1m is fine
16
- */
17
- const REFETCH_INTERVAL = 60e3 // 1 minute
18
-
19
- export type Config = {
20
- apiHost?: string
21
- clientKey?: string
22
- }
23
-
24
- type UserContext = Omit<GrowthBookUserContext, 'attributes'> & {
25
- attributes?: {
26
- did?: string | null
27
- }
28
- }
29
-
30
- export enum FeatureGateID {
31
- /**
32
- * Left here ensure this is interpreted as a string enum and therefore
33
- * appease TS
34
- */
35
- _ = '',
36
- SuggestedUsersDiscoverAgentEnable = 'suggested_users:discover_agent:enable',
37
- SuggestedOnboardingUsersDiscoverAgentEnable = 'suggested_onboarding_users:discover_agent:enable',
38
- ThreadsReplyRankingExplorationEnable = 'threads:reply_ranking_exploration:enable',
39
- SearchFilteringExplorationEnable = 'search:filtering_exploration:enable',
40
- }
41
-
42
- /**
43
- * Pre-evaluated feature gates map, the result of `FeatureGates.checkGates()`
44
- */
45
- export type CheckedFeatureGatesMap = Map<FeatureGateID, boolean>
46
-
47
- export class FeatureGates {
48
- ready = false
49
- client: GrowthBookClient | undefined = undefined
50
- ids = FeatureGateID
51
- refreshInterval: NodeJS.Timeout | undefined = undefined
52
-
53
- constructor(private config: Config) {}
54
-
55
- async start() {
56
- try {
57
- if (this.config.apiHost && this.config.clientKey) {
58
- this.client = new GrowthBookClient({
59
- apiHost: this.config.apiHost,
60
- clientKey: this.config.clientKey,
61
- })
62
-
63
- const { source, error } = await this.client.init({
64
- timeout: FETCH_TIMEOUT,
65
- })
66
-
67
- /**
68
- * This does not necessarily mean that the client completely failed,
69
- * since it could just be that the request timed out. It may succeed
70
- * after the timeout, or later during refreshes.
71
- *
72
- * @see https://docs.growthbook.io/lib/node#error-handling
73
- */
74
- if (error) {
75
- featureGatesLogger.error(
76
- { err: error, source },
77
- 'Client failed to initialize normally',
78
- )
79
- }
80
-
81
- /**
82
- * Set up periodic refresh of feature definitions
83
- *
84
- * @see https://docs.growthbook.io/lib/node#refreshing-features
85
- */
86
- this.refreshInterval = setInterval(async () => {
87
- try {
88
- await this.client?.refreshFeatures({
89
- timeout: FETCH_TIMEOUT,
90
- })
91
- } catch (err) {
92
- featureGatesLogger.error({ err }, 'Failed to refresh features')
93
- }
94
- }, REFETCH_INTERVAL)
95
-
96
- /* Ready or not, here we come */
97
- this.ready = true
98
- } else {
99
- featureGatesLogger.error(
100
- 'Missing required config for FeatureGates client',
101
- )
102
- }
103
- } catch (err) {
104
- featureGatesLogger.error({ err }, 'Client initialization failed')
105
- this.ready = false
106
- }
107
- }
108
-
109
- destroy() {
110
- if (this.ready) {
111
- this.ready = false
112
- if (this.refreshInterval) {
113
- clearInterval(this.refreshInterval)
114
- }
115
- }
116
- }
117
-
118
- userContext({
119
- did,
120
- }: Exclude<UserContext['attributes'], undefined>): UserContext {
121
- return { attributes: { did: did ?? null } }
122
- }
123
-
124
- check(gate: FeatureGateID, ctx: UserContext): boolean {
125
- if (!this.ready || !this.client) return false
126
- return this.client.isOn(gate, ctx)
127
- }
128
-
129
- /**
130
- * Pre-evaluate multiple feature gates for a given user, returning a map of
131
- * gate ID to boolean result.
132
- */
133
- checkGates(gates: FeatureGateID[], ctx: UserContext): CheckedFeatureGatesMap {
134
- return new Map(gates.map((g) => [g, this.check(g, ctx)]))
135
- }
136
- }