@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.
- package/CHANGELOG.md +21 -0
- package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.js +6 -4
- package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js +9 -2
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.js +9 -2
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
- package/dist/auth-verifier.d.ts +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +3 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2 -2
- package/dist/context.js.map +1 -1
- package/dist/data-plane/server/db/pagination.d.ts +3 -3
- package/dist/feature-gates/gates.d.ts +5 -0
- package/dist/feature-gates/gates.d.ts.map +1 -0
- package/dist/feature-gates/gates.js +6 -0
- package/dist/feature-gates/gates.js.map +1 -0
- package/dist/feature-gates/index.d.ts +24 -0
- package/dist/feature-gates/index.d.ts.map +1 -0
- package/dist/feature-gates/index.js +135 -0
- package/dist/feature-gates/index.js.map +1 -0
- package/dist/feature-gates/metrics.d.ts +32 -0
- package/dist/feature-gates/metrics.d.ts.map +1 -0
- package/dist/feature-gates/metrics.js +100 -0
- package/dist/feature-gates/metrics.js.map +1 -0
- package/dist/feature-gates/metrics.test.d.ts +2 -0
- package/dist/feature-gates/metrics.test.d.ts.map +1 -0
- package/dist/feature-gates/metrics.test.js +152 -0
- package/dist/feature-gates/metrics.test.js.map +1 -0
- package/dist/feature-gates/types.d.ts +49 -0
- package/dist/feature-gates/types.d.ts.map +1 -0
- package/dist/feature-gates/types.js +3 -0
- package/dist/feature-gates/types.js.map +1 -0
- package/dist/feature-gates/utils.d.ts +21 -0
- package/dist/feature-gates/utils.d.ts.map +1 -0
- package/dist/feature-gates/utils.js +85 -0
- package/dist/feature-gates/utils.js.map +1 -0
- package/dist/hydration/hydrator.d.ts +8 -3
- package/dist/hydration/hydrator.d.ts.map +1 -1
- package/dist/hydration/hydrator.js +9 -5
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +8 -0
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +4 -0
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/sendInteractions.d.ts +1 -0
- package/dist/lexicon/types/app/bsky/feed/sendInteractions.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/sendInteractions.js.map +1 -1
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +7 -4
- package/dist/views/index.js.map +1 -1
- package/package.json +12 -12
- package/src/api/app/bsky/feed/searchPosts.ts +10 -8
- package/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +0 -1
- package/src/api/app/bsky/unspecced/getPostThreadV2.ts +3 -3
- package/src/api/app/bsky/unspecced/getSuggestedOnboardingUsers.ts +13 -6
- package/src/api/app/bsky/unspecced/getSuggestedUsers.ts +13 -6
- package/src/config.ts +8 -0
- package/src/context.ts +4 -4
- package/src/feature-gates/README.md +47 -0
- package/src/feature-gates/gates.ts +9 -0
- package/src/feature-gates/index.ts +146 -0
- package/src/feature-gates/metrics.test.ts +196 -0
- package/src/feature-gates/metrics.ts +107 -0
- package/src/feature-gates/types.ts +52 -0
- package/src/feature-gates/utils.ts +90 -0
- package/src/hydration/hydrator.ts +12 -6
- package/src/index.ts +8 -7
- package/src/lexicon/lexicons.ts +4 -0
- package/src/lexicon/types/app/bsky/feed/sendInteractions.ts +1 -0
- package/src/views/index.ts +9 -8
- package/tests/views/thread.test.ts +2 -0
- package/tests/views/verification.test.ts +19 -37
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/feature-gates.d.ts +0 -44
- package/dist/feature-gates.d.ts.map +0 -1
- package/dist/feature-gates.js +0 -133
- package/dist/feature-gates.js.map +0 -1
- 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"}
|
package/dist/feature-gates.d.ts
DELETED
|
@@ -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"}
|
package/dist/feature-gates.js
DELETED
|
@@ -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"]}
|
package/src/feature-gates.ts
DELETED
|
@@ -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
|
-
}
|