@singi-labs/sifa-sdk 0.19.48 → 0.19.50

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 (42) hide show
  1. package/dist/cards/app-url-patterns.js +20 -1
  2. package/dist/cards/app-url-patterns.js.map +1 -1
  3. package/dist/cards/visibility.js +9 -1
  4. package/dist/cards/visibility.js.map +1 -1
  5. package/dist/index.cjs +53 -4
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +3 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.js +1 -1
  10. package/dist/{org-CxTEjjrm.d.ts → org-Bp4mNT8K.d.ts} +26 -2
  11. package/dist/{org-DC_FpoTY.d.cts → org-CFzRg61Q.d.cts} +26 -2
  12. package/dist/query/fetchers/follow.js +30 -6
  13. package/dist/query/fetchers/follow.js.map +1 -1
  14. package/dist/query/fetchers/index.cjs +31 -6
  15. package/dist/query/fetchers/index.cjs.map +1 -1
  16. package/dist/query/fetchers/index.d.cts +1 -1
  17. package/dist/query/fetchers/index.d.ts +1 -1
  18. package/dist/query/fetchers/index.js +4 -0
  19. package/dist/query/fetchers/index.js.map +1 -1
  20. package/dist/query/hooks/index.cjs +45 -7
  21. package/dist/query/hooks/index.cjs.map +1 -1
  22. package/dist/query/hooks/index.d.cts +2 -2
  23. package/dist/query/hooks/index.d.ts +2 -2
  24. package/dist/query/hooks/index.js +2 -0
  25. package/dist/query/hooks/index.js.map +1 -1
  26. package/dist/query/hooks/use-follow.js +21 -1
  27. package/dist/query/hooks/use-follow.js.map +1 -1
  28. package/dist/query/index.cjs +51 -7
  29. package/dist/query/index.cjs.map +1 -1
  30. package/dist/query/index.d.cts +3 -3
  31. package/dist/query/index.d.ts +3 -3
  32. package/dist/query/index.js +6 -0
  33. package/dist/query/index.js.map +1 -1
  34. package/dist/query/keys.js +1 -0
  35. package/dist/query/keys.js.map +1 -1
  36. package/dist/taxonomy/activity-tiers.js +15 -0
  37. package/dist/taxonomy/activity-tiers.js.map +1 -1
  38. package/dist/taxonomy/app-category-map.js +8 -1
  39. package/dist/taxonomy/app-category-map.js.map +1 -1
  40. package/dist/{use-org-notification-emails-CWWi1D8t.d.ts → use-org-notification-emails-CJ0hKqco.d.ts} +9 -3
  41. package/dist/{use-org-notification-emails-DOyAF0C_.d.cts → use-org-notification-emails-Dk084Rrw.d.cts} +9 -3
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/taxonomy/activity-tiers.json","../../src/taxonomy/activity-tiers.ts"],"sourcesContent":["{\n \"$schema\": \"https://sifa.id/schemas/activity-tiers/v1.json\",\n \"version\": \"1.4.0\",\n \"updated\": \"2026-09-04\",\n \"tiers\": {\n \"creation\": {\n \"label\": \"Made\",\n \"description\": \"Substantive records the actor authored: posts, articles, repos, galleries, livestreams, RSVPs, CV entries. Surfaced on the public profile and in the network timeline.\",\n \"shownOnPublicProfile\": true\n },\n \"action\": {\n \"label\": \"Did\",\n \"description\": \"Engagement records (likes, reposts, follows, votes, stars, reactions). Visible to the actor on the 'What is public about me' page and on the originating app, but not surfaced on the Sifa public profile.\",\n \"shownOnPublicProfile\": false\n },\n \"filtered\": {\n \"label\": null,\n \"description\": \"Configuration, infrastructure, moderation, game state, ephemeral consumption signals (bookmarks, highlights), and other records Sifa does not display anywhere. The records remain public on the actor's PDS regardless.\",\n \"shownOnPublicProfile\": false\n }\n },\n \"lexicons\": {\n \"actor.rpg.sprite\": {\n \"tier\": \"creation\",\n \"app\": \"rpgactor\",\n \"notes\": \"The player's pixel-art RPG character sprite sheet (rkey self), portable across games.\"\n },\n \"equipment.rpg.item\": {\n \"tier\": \"creation\",\n \"app\": \"rpgactor\",\n \"notes\": \"An equipment item the player accepted from a provider, in the player's own repo. The provider-side equipment.rpg.give stays filtered.\"\n },\n \"agency.portable.membership\": {\n \"tier\": \"creation\",\n \"app\": \"portable\",\n \"notes\": \"Joining a community (a commitment), attested by another actor.\"\n },\n \"in.atmob.paste.document\": {\n \"tier\": \"creation\",\n \"app\": \"atmob\"\n },\n \"in.atmob.paste.bundle\": {\n \"tier\": \"creation\",\n \"app\": \"atmob\"\n },\n \"ma.tokono.byov.video\": {\n \"tier\": \"creation\",\n \"app\": \"tokono\"\n },\n \"app.atmobb.discussion.reply\": {\n \"tier\": \"creation\",\n \"app\": \"atmobb\",\n \"notes\": \"Replies are authored text, consistent with app.bsky.feed.post covering replies.\"\n },\n \"app.atmobb.discussion.thread\": {\n \"tier\": \"creation\",\n \"app\": \"atmobb\"\n },\n \"app.beaconbits.beacon\": {\n \"tier\": \"creation\",\n \"app\": \"beaconbits\"\n },\n \"app.bsky.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Profile metadata record.\"\n },\n \"app.bsky.feed.generator\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Feed generator definition record, not personal activity.\"\n },\n \"app.bsky.feed.like\": {\n \"tier\": \"action\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"bluesky\",\n \"notes\": \"Ambiguous: many posts are casual, but the lexicon also carries long-form posts and threads. Treated as creation; empty quote-posts (no text + record embed) are filtered at the consumer layer, not here.\"\n },\n \"app.bsky.feed.repost\": {\n \"tier\": \"action\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.graph.block\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.follow\": {\n \"tier\": \"action\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.graph.list\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"User-curated list metadata; not surfaced as profile activity.\"\n },\n \"app.bsky.graph.listblock\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.listitem\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"List membership; rendered via the parent list, not as standalone activity.\"\n },\n \"app.bsky.graph.mute\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.starterpack\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.graph.verification\": {\n \"tier\": \"creation\",\n \"app\": \"bluesky\",\n \"notes\": \"Diverges from app.bsky.graph.follow (action) on purpose: verifying another account's handle is a deliberate trust statement the actor authors, not a tap. Sifa renders it with its own card.\"\n },\n \"app.certified.actor.membership\": {\n \"tier\": \"creation\",\n \"app\": \"certified\",\n \"notes\": \"Joining a group is a commitment, same shape as a Colibri or Open Social membership.\"\n },\n \"app.certified.badge.award\": {\n \"tier\": \"creation\",\n \"app\": \"certified\",\n \"notes\": \"An endorsement issued to another DID. A trust signal the actor contributes, like a Bluesky verification.\"\n },\n \"app.certified.badge.response\": {\n \"tier\": \"creation\",\n \"app\": \"certified\",\n \"notes\": \"The recipient's acceptance of a badge someone else awarded them. An accepted badge is a credential the person holds; rejected ones are hidden by an ACTIVITY_VISIBILITY_RULES predicate.\"\n },\n \"app.collectivesocial.feed.list\": {\n \"tier\": \"creation\",\n \"app\": \"collectivesocial\",\n \"notes\": \"Auto-created default Inbox lists are filtered at the consumer layer via isDefault=true predicate.\"\n },\n \"app.dropanchor.checkin\": {\n \"tier\": \"creation\",\n \"app\": \"dropanchor\",\n \"notes\": \"A location check-in (place, geo, category, optional review text). Authored, so creation. app.dropanchor.like is excluded backend-side.\"\n },\n \"app.askeverything.feed.answer\": {\n \"tier\": \"creation\",\n \"app\": \"askeverything\",\n \"notes\": \"An authored answer to a community question (opinion with body text). app.askeverything.actor.* and graph.follow are excluded backend-side.\"\n },\n \"app.greengale.blog.entry\": {\n \"tier\": \"creation\",\n \"app\": \"greengale\",\n \"notes\": \"An authored blog post (title, subtitle, Markdown body, visibility). app.greengale.document and app.greengale.publication (drafts/containers) are excluded backend-side.\"\n },\n \"social.kut.community.membership\": {\n \"tier\": \"creation\",\n \"app\": \"kut\",\n \"notes\": \"Joining a Kut community, a commitment. Mirrors Colibri/OpenSocial memberships, which are creation-tier.\"\n },\n \"app.mcp.server\": {\n \"tier\": \"creation\",\n \"app\": \"mcp\"\n },\n \"app.photosky.collection\": {\n \"tier\": \"creation\",\n \"app\": \"zeens\",\n \"notes\": \"A curated photo collection on Zeens (still the app.photosky namespace).\"\n },\n \"app.sidetrail.trail\": {\n \"tier\": \"creation\",\n \"app\": \"semble\"\n },\n \"app.sidetrail.walk\": {\n \"tier\": \"creation\",\n \"app\": \"semble\"\n },\n \"app.userinput.discussion\": {\n \"tier\": \"creation\",\n \"app\": \"userinput\"\n },\n \"app.userinput.reply\": {\n \"tier\": \"creation\",\n \"app\": \"userinput\",\n \"notes\": \"Replies are authored text, consistent with app.bsky.feed.post covering replies.\"\n },\n \"at.locale.project\": {\n \"tier\": \"creation\",\n \"app\": \"locale\",\n \"notes\": \"A localization project the actor owns: git source, source and target locales.\"\n },\n \"at.locale.translation\": {\n \"tier\": \"creation\",\n \"app\": \"locale\",\n \"notes\": \"One authored translated string for a message key in a target locale.\"\n },\n \"at.margin.annotation\": {\n \"tier\": \"creation\",\n \"app\": \"margin\",\n \"notes\": \"An annotation on someone else's text is still authored writing.\"\n },\n \"at.margin.bookmark\": {\n \"tier\": \"filtered\",\n \"notes\": \"Bookmark \\u2014 consumption signal, not creation.\",\n \"app\": \"margin\"\n },\n \"at.margin.highlight\": {\n \"tier\": \"filtered\",\n \"notes\": \"Highlight \\u2014 consumption signal, not creation.\",\n \"app\": \"margin\"\n },\n \"at.margin.note\": {\n \"tier\": \"creation\",\n \"app\": \"margin\"\n },\n \"at.marque.domain\": {\n \"tier\": \"creation\",\n \"app\": \"marque\"\n },\n \"at.youandme.connection\": {\n \"tier\": \"creation\",\n \"app\": \"youandme\"\n },\n \"blog.pckt.mini.post\": {\n \"tier\": \"creation\",\n \"app\": \"pckt\",\n \"notes\": \"A pckt microblog post. Long-form pckt posts are site.standard.document instead.\"\n },\n \"blue.flashes.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"flashes\"\n },\n \"blue.linkat.board\": {\n \"tier\": \"filtered\",\n \"notes\": \"Link-in-bio board; consumption signal.\",\n \"app\": \"linkat\"\n },\n \"buzz.bookhive.book\": {\n \"tier\": \"creation\",\n \"app\": \"bookhive\"\n },\n \"com.minomobi.music.composition\": {\n \"tier\": \"creation\",\n \"app\": \"minomobi\"\n },\n \"com.shinolabs.pinksea.oekaki\": {\n \"tier\": \"creation\",\n \"app\": \"pinksea\",\n \"notes\": \"A drawing made in PinkSea's canvas, stored as an image blob with alt text and tags.\"\n },\n \"com.voxport.podcast.series\": {\n \"tier\": \"creation\",\n \"app\": \"voxport\"\n },\n \"com.whtwnd.blog.entry\": {\n \"tier\": \"creation\",\n \"app\": \"whitewind\"\n },\n \"community.lexicon.badge.award\": {\n \"tier\": \"creation\",\n \"app\": \"badges\",\n \"notes\": \"The award record is authored by the giver, so it is their attestation about someone else.\"\n },\n \"community.lexicon.bookmarks.bookmark\": {\n \"tier\": \"filtered\",\n \"notes\": \"Bookmark \\u2014 consumption signal.\",\n \"app\": \"kipclip\"\n },\n \"community.lexicon.calendar.rsvp\": {\n \"tier\": \"creation\",\n \"app\": \"smokesignal\",\n \"notes\": \"Ambiguous: RSVPs are reactions to events, but they are public commitments and the only Smoke Signal record Sifa scans today. Classified as creation.\"\n },\n \"community.nooki.comments\": {\n \"tier\": \"creation\",\n \"app\": \"nooki\",\n \"notes\": \"Comments are authored text.\"\n },\n \"community.nooki.membership\": {\n \"tier\": \"creation\",\n \"app\": \"nooki\",\n \"notes\": \"Joining a community, classified like social.colibri.membership (creation).\"\n },\n \"community.opensocial.membership\": {\n \"tier\": \"creation\",\n \"app\": \"opensocial\",\n \"notes\": \"Joining a community, classified like social.colibri.membership (creation).\"\n },\n \"computer.aetheros.page\": {\n \"tier\": \"creation\",\n \"app\": \"aetheros\"\n },\n \"dev.atvouch.graph.vouch\": {\n \"tier\": \"creation\",\n \"app\": \"atvouch\",\n \"notes\": \"Vouching for someone. Authored attestation, same reasoning as fund.at.graph.endorse.\"\n },\n \"dev.baileytownsend.guestbook.entry\": {\n \"tier\": \"creation\",\n \"app\": \"guestbook\",\n \"notes\": \"Signing someone else's guestbook is a short authored message.\"\n },\n \"dev.keytrace.claim\": {\n \"tier\": \"creation\",\n \"app\": \"keytrace\"\n },\n \"dev.skyboard.board\": {\n \"tier\": \"filtered\",\n \"notes\": \"Skyboard task-board metadata.\",\n \"app\": \"skyboard\"\n },\n \"dev.skyboard.op\": {\n \"tier\": \"filtered\",\n \"notes\": \"Skyboard operation log.\",\n \"app\": \"skyboard\"\n },\n \"dev.skyboard.task\": {\n \"tier\": \"filtered\",\n \"notes\": \"Skyboard task record.\",\n \"app\": \"skyboard\"\n },\n \"eu.atcommons.member\": {\n \"tier\": \"creation\",\n \"app\": \"atcommons\",\n \"notes\": \"Joining a national AT Protocol community commons, classified like community.opensocial.membership (creation).\"\n },\n \"events.smokesignal.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"smokesignal\",\n \"notes\": \"Profile metadata record.\"\n },\n \"exchange.recipe.recipe\": {\n \"tier\": \"creation\",\n \"app\": \"recipe\"\n },\n \"fm.plyr.comment\": {\n \"tier\": \"creation\",\n \"app\": \"plyr\",\n \"notes\": \"Comments are authored text.\"\n },\n \"forum.barazo.community.member\": {\n \"tier\": \"creation\",\n \"app\": \"barazo\"\n },\n \"forum.barazo.flag\": {\n \"tier\": \"filtered\",\n \"app\": \"barazo\",\n \"notes\": \"Moderation flag.\"\n },\n \"forum.barazo.post\": {\n \"tier\": \"creation\",\n \"app\": \"barazo\"\n },\n \"forum.barazo.reaction\": {\n \"tier\": \"action\",\n \"app\": \"barazo\"\n },\n \"forum.barazo.reply\": {\n \"tier\": \"action\",\n \"app\": \"barazo\",\n \"notes\": \"Short conversational reply \\u2014 engagement signal.\"\n },\n \"forum.barazo.reputation.event\": {\n \"tier\": \"creation\",\n \"app\": \"barazo\"\n },\n \"fund.at.graph.endorse\": {\n \"tier\": \"creation\",\n \"app\": \"atfund\",\n \"notes\": \"Endorsing someone. Authored attestation, not engagement.\"\n },\n \"fyi.asq.answer\": {\n \"tier\": \"creation\",\n \"app\": \"asq\"\n },\n \"fyi.asq.question\": {\n \"tier\": \"creation\",\n \"app\": \"asq\"\n },\n \"fyi.atstore.listing.review\": {\n \"tier\": \"creation\",\n \"app\": \"atstore\"\n },\n \"fyi.unravel.frontpage.post\": {\n \"tier\": \"creation\",\n \"app\": \"frontpage\"\n },\n \"fyi.unravel.frontpage.vote\": {\n \"tier\": \"action\",\n \"app\": \"frontpage\"\n },\n \"id.sifa.authConnection\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.authMeet\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.authProfile\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.authProfileAccess\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth profile-access record.\"\n },\n \"id.sifa.authProject\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.confirmation\": {\n \"tier\": \"action\",\n \"app\": \"sifa\",\n \"notes\": \"Confirmation that a record naming the actor is accurate (co-speaker credit, project membership).\"\n },\n \"id.sifa.endorsement\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Endorsement authored by the actor about another profile.\"\n },\n \"id.sifa.endorsement.confirmation\": {\n \"tier\": \"action\",\n \"app\": \"sifa\",\n \"notes\": \"Confirmation/acceptance of an endorsement received.\"\n },\n \"id.sifa.graph.connection\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Mutual professional connection record.\"\n },\n \"id.sifa.graph.follow\": {\n \"tier\": \"action\",\n \"app\": \"sifa\"\n },\n \"id.sifa.meeting\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.certification\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.course\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.education\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.externalAccount\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.honor\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.language\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.location\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.position\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.presentation\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.presentationDelivery\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.project\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.publication\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.self\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Sifa professional profile root.\"\n },\n \"id.sifa.profile.skill\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.volunteering\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.project.member\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Deprecated, never implemented. Superseded by id.sifa.confirmation.\"\n },\n \"id.sifa.project.membership\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Deprecated, never implemented. Superseded by id.sifa.confirmation.\"\n },\n \"id.sifa.project.self\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"io.atcr.repo.page\": {\n \"tier\": \"creation\",\n \"app\": \"atcr\"\n },\n \"io.calabro.watsm.program\": {\n \"tier\": \"creation\",\n \"app\": \"watsm\"\n },\n \"io.kich.recipe.recipe\": {\n \"tier\": \"creation\",\n \"app\": \"kich\"\n },\n \"is.kevara.directory.speaker\": {\n \"tier\": \"creation\",\n \"app\": \"kevara\"\n },\n \"li.plonk.paste\": {\n \"tier\": \"creation\",\n \"app\": \"plonk\"\n },\n \"link.pastesphere.snippet\": {\n \"tier\": \"creation\",\n \"app\": \"pastesphere\"\n },\n \"net.alternativeproto.submission\": {\n \"tier\": \"creation\",\n \"app\": \"alternativeproto\"\n },\n \"net.alternativeproto.vote\": {\n \"tier\": \"action\",\n \"notes\": \"Vote record on a third-party protocol.\",\n \"app\": \"alternativeproto\"\n },\n \"net.anisota.feed.list\": {\n \"tier\": \"creation\",\n \"app\": \"anisota\"\n },\n \"net.anisota.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"anisota\"\n },\n \"net.anisota.player.state\": {\n \"tier\": \"filtered\",\n \"notes\": \"Anisota game player state.\",\n \"app\": \"anisota\"\n },\n \"network.cosmik.card\": {\n \"tier\": \"filtered\",\n \"notes\": \"Link-in-bio card; consumption signal.\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.collection\": {\n \"tier\": \"filtered\",\n \"notes\": \"Stale registry id \\u2014 Cosmik formerly in app registry.\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.collectionLink\": {\n \"tier\": \"filtered\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.connection\": {\n \"tier\": \"filtered\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.follow\": {\n \"tier\": \"filtered\",\n \"app\": \"cosmik\"\n },\n \"one.papili.post\": {\n \"tier\": \"creation\",\n \"app\": \"papili\"\n },\n \"org.hypercerts.claim.activity\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"A hypercert: an authored claim of work done, with title, description, and weighted contributors.\"\n },\n \"org.hypercerts.claim.collection\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"Older shape of the project container that groups claims. Superseded by org.hypercerts.collection.\"\n },\n \"org.hypercerts.claim.evaluation\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"An assessment of a claim carrying a score and a written summary. An opinion with a body.\"\n },\n \"org.hypercerts.collection\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"An authored project container grouping hypercert claims, with its own title, banner, and description.\"\n },\n \"org.impactindexer.review.comment\": {\n \"tier\": \"creation\",\n \"app\": \"impactindexer\",\n \"notes\": \"A written review of a hypercert claim, like a Popfeed or BookHive review.\"\n },\n \"org.v-it.skill\": {\n \"tier\": \"creation\",\n \"app\": \"vit\"\n },\n \"os.aether.docs.presentation\": {\n \"tier\": \"creation\",\n \"app\": \"aetherdocs\"\n },\n \"pics.pixl.image\": {\n \"tier\": \"creation\",\n \"app\": \"pixl\"\n },\n \"place.stream.broadcast.origin\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Broadcast origin/infrastructure record.\"\n },\n \"place.stream.chat.message\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Ephemeral chat message.\"\n },\n \"place.stream.chat.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Chat profile metadata.\"\n },\n \"place.stream.key\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Stream key \\u2014 sensitive infrastructure record.\"\n },\n \"place.stream.livestream\": {\n \"tier\": \"creation\",\n \"app\": \"streamplace\"\n },\n \"place.stream.metadata.configuration\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Stream configuration metadata.\"\n },\n \"pub.chive.eprint.submission\": {\n \"tier\": \"creation\",\n \"app\": \"chive\",\n \"notes\": \"An authored preprint: title, ordered authors with affiliations, abstract.\"\n },\n \"pub.leaflet.authFullPermissions\": {\n \"tier\": \"filtered\",\n \"app\": \"leaflet\",\n \"notes\": \"OAuth permission record.\"\n },\n \"pub.leaflet.comment\": {\n \"tier\": \"creation\",\n \"app\": \"leaflet\"\n },\n \"pub.leaflet.interactions.recommend\": {\n \"tier\": \"action\",\n \"app\": \"leaflet\"\n },\n \"quest.atmo.checkin\": {\n \"tier\": \"creation\",\n \"app\": \"atmorsvp\",\n \"notes\": \"Attendance, classified like community.lexicon.calendar.rsvp (creation) rather than as engagement. The creation tier description names RSVPs explicitly.\"\n },\n \"quest.atmo.event\": {\n \"tier\": \"creation\",\n \"app\": \"atmorsvp\"\n },\n \"sh.tangled.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"tangled\",\n \"notes\": \"Profile metadata record.\"\n },\n \"sh.tangled.feed.star\": {\n \"tier\": \"action\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.graph.follow\": {\n \"tier\": \"action\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.repo\": {\n \"tier\": \"creation\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.repo.issue\": {\n \"tier\": \"creation\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.repo.pull\": {\n \"tier\": \"creation\",\n \"app\": \"tangled\"\n },\n \"site.standard.document\": {\n \"tier\": \"creation\",\n \"app\": \"standard\"\n },\n \"so.sprk.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"spark\"\n },\n \"so.sprk.story.post\": {\n \"tier\": \"creation\",\n \"app\": \"spark\"\n },\n \"social.colibri.actor.data\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Actor metadata.\"\n },\n \"social.colibri.approval\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Moderation approval record.\"\n },\n \"social.colibri.category\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Category metadata.\"\n },\n \"social.colibri.channel\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Channel definition.\"\n },\n \"social.colibri.channel.read\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Read-state marker.\"\n },\n \"social.colibri.community\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Community definition.\"\n },\n \"social.colibri.membership\": {\n \"tier\": \"creation\",\n \"app\": \"colibri\"\n },\n \"social.colibri.message\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Chat message \\u2014 high-volume conversational signal, not portfolio.\"\n },\n \"social.colibri.reaction\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Chat reaction.\"\n },\n \"social.colibri.richtext.facet\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Richtext facet sub-record.\"\n },\n \"social.crate.content\": {\n \"tier\": \"creation\",\n \"app\": \"crate\"\n },\n \"social.crate.note\": {\n \"tier\": \"creation\",\n \"app\": \"crate\"\n },\n \"social.grain.gallery\": {\n \"tier\": \"creation\",\n \"app\": \"grain\"\n },\n \"social.grain.gallery.item\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Item-within-gallery; rendered via parent gallery.\"\n },\n \"social.grain.photo\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Raw photo asset; surfaced via the gallery that references it.\"\n },\n \"social.grain.photo.exif\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"EXIF metadata for a photo.\"\n },\n \"social.grain.story\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Ephemeral story format.\"\n },\n \"social.passports.fiftyStates.visit\": {\n \"tier\": \"creation\",\n \"app\": \"passports\"\n },\n \"social.passports.travel.leg\": {\n \"tier\": \"creation\",\n \"app\": \"passports\"\n },\n \"social.pinksky.app.preference\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Pinkleap (Bluesky client) app preferences.\"\n },\n \"social.popfeed.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"popfeed\",\n \"notes\": \"Profile metadata record.\"\n },\n \"social.popfeed.challenge.participation\": {\n \"tier\": \"filtered\",\n \"app\": \"popfeed\",\n \"notes\": \"Challenge participation tracking.\"\n },\n \"social.popfeed.feed.like\": {\n \"tier\": \"action\",\n \"app\": \"popfeed\"\n },\n \"social.popfeed.feed.note\": {\n \"tier\": \"creation\",\n \"app\": \"popfeed\"\n },\n \"social.popfeed.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"popfeed\"\n },\n \"social.popfeed.feed.review\": {\n \"tier\": \"creation\",\n \"app\": \"popfeed\"\n },\n \"social.psky.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"picosky\"\n },\n \"space.roomy.space.personal\": {\n \"tier\": \"creation\",\n \"app\": \"roomy\"\n },\n \"st.lifepo.lifeEvent\": {\n \"tier\": \"creation\",\n \"app\": \"lifepo\"\n },\n \"stream.thought.blip\": {\n \"tier\": \"creation\",\n \"app\": \"streamthought\"\n },\n \"tech.waow.doodl.drawing\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.doodl.icon\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.doodl.iconset\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.doodl.logo\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.pollz.poll\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.slides.deck\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.slides.slide\": {\n \"tier\": \"creation\",\n \"app\": \"waow\",\n \"notes\": \"Individual slides are components of a deck. Both are kept; the consumer decides whether to collapse them.\"\n },\n \"wiki.lichen.note\": {\n \"tier\": \"creation\",\n \"app\": \"lichen\"\n },\n \"wiki.lichen.wiki\": {\n \"tier\": \"creation\",\n \"app\": \"lichen\"\n },\n \"xyz.statusphere.status\": {\n \"tier\": \"filtered\",\n \"notes\": \"Statusphere emoji status \\u2014 leisure signal.\",\n \"app\": \"statusphere\"\n }\n }\n}\n","// This SDK is the source of truth for the activity taxonomy.\n//\n// It used to be synced from sifa-lexicons, but the taxonomy is editorial\n// rather than protocol: none of it is published to a PDS, and it governs how\n// Sifa renders records rather than what any record means. Keeping it in the\n// lexicon repo meant it lived where nobody edited it, and the two copies\n// drifted 60 entries apart before anything noticed.\n//\n// It is served publicly at https://sifa.id/.well-known/sifa-activity-tiers.json\n// so third-party clients and sibling AppViews can read Sifa's choices rather\n// than infer them.\nimport rawTaxonomy from './activity-tiers.json' with { type: 'json' };\n\nexport type ActivityTier = 'creation' | 'action' | 'filtered';\n\nexport interface TierMeta {\n label: string | null;\n description: string;\n shownOnPublicProfile: boolean;\n}\n\nexport interface LexiconEntry {\n tier: ActivityTier;\n app?: string;\n notes?: string;\n}\n\nexport interface ActivityTaxonomy {\n version: string;\n updated: string;\n tiers: Record<ActivityTier, TierMeta>;\n lexicons: Record<string, LexiconEntry>;\n}\n\n// activity-tiers.json is checked against this shape in activity-tiers.test.ts.\n// Only the taxonomy fields are copied, so the file's `$schema` key stays out.\nconst parsed: ActivityTaxonomy = {\n version: rawTaxonomy.version,\n updated: rawTaxonomy.updated,\n tiers: rawTaxonomy.tiers,\n lexicons: rawTaxonomy.lexicons as Record<string, LexiconEntry>,\n};\n\nexport const ACTIVITY_TIERS: Readonly<ActivityTaxonomy> = Object.freeze(parsed);\n\n/**\n * Returns the activity tier for a given AT Protocol NSID.\n * Returns 'filtered' for unknown/unclassified NSIDs (safe default — won't\n * leak unknown records to public profile surfaces).\n */\nexport function getActivityTier(nsid: string): ActivityTier {\n if (!nsid) return 'filtered';\n const entry = ACTIVITY_TIERS.lexicons[nsid];\n return entry ? entry.tier : 'filtered';\n}\n\n/**\n * Returns the full lexicon entry (tier + app + notes), or null if unknown.\n */\nexport function getLexiconEntry(nsid: string): LexiconEntry | null {\n if (!nsid) return null;\n const entry = ACTIVITY_TIERS.lexicons[nsid];\n return entry ?? null;\n}\n\n/**\n * Returns tier metadata (label, description, public visibility).\n */\nexport function getTierMeta(tier: ActivityTier): TierMeta {\n return ACTIVITY_TIERS.tiers[tier];\n}\n\n/**\n * Returns the taxonomy version + updated date for diagnostics and\n * version-skew detection between SDK consumers and the canonical taxonomy.\n */\nexport function getActivityTaxonomyVersion(): { version: string; updated: string } {\n return { version: ACTIVITY_TIERS.version, updated: ACTIVITY_TIERS.updated };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/taxonomy/activity-tiers.json","../../src/taxonomy/activity-tiers.ts"],"sourcesContent":["{\n \"$schema\": \"https://sifa.id/schemas/activity-tiers/v1.json\",\n \"version\": \"1.4.0\",\n \"updated\": \"2026-09-04\",\n \"tiers\": {\n \"creation\": {\n \"label\": \"Made\",\n \"description\": \"Substantive records the actor authored: posts, articles, repos, galleries, livestreams, RSVPs, CV entries. Surfaced on the public profile and in the network timeline.\",\n \"shownOnPublicProfile\": true\n },\n \"action\": {\n \"label\": \"Did\",\n \"description\": \"Engagement records (likes, reposts, follows, votes, stars, reactions). Visible to the actor on the 'What is public about me' page and on the originating app, but not surfaced on the Sifa public profile.\",\n \"shownOnPublicProfile\": false\n },\n \"filtered\": {\n \"label\": null,\n \"description\": \"Configuration, infrastructure, moderation, game state, ephemeral consumption signals (bookmarks, highlights), and other records Sifa does not display anywhere. The records remain public on the actor's PDS regardless.\",\n \"shownOnPublicProfile\": false\n }\n },\n \"lexicons\": {\n \"actor.rpg.sprite\": {\n \"tier\": \"creation\",\n \"app\": \"rpgactor\",\n \"notes\": \"The player's pixel-art RPG character sprite sheet (rkey self), portable across games.\"\n },\n \"equipment.rpg.item\": {\n \"tier\": \"creation\",\n \"app\": \"rpgactor\",\n \"notes\": \"An equipment item the player accepted from a provider, in the player's own repo. The provider-side equipment.rpg.give stays filtered.\"\n },\n \"agency.portable.membership\": {\n \"tier\": \"creation\",\n \"app\": \"portable\",\n \"notes\": \"Joining a community (a commitment), attested by another actor.\"\n },\n \"in.atmob.paste.document\": {\n \"tier\": \"creation\",\n \"app\": \"atmob\"\n },\n \"in.atmob.paste.bundle\": {\n \"tier\": \"creation\",\n \"app\": \"atmob\"\n },\n \"ma.tokono.byov.video\": {\n \"tier\": \"creation\",\n \"app\": \"tokono\"\n },\n \"app.atmobb.discussion.reply\": {\n \"tier\": \"creation\",\n \"app\": \"atmobb\",\n \"notes\": \"Replies are authored text, consistent with app.bsky.feed.post covering replies.\"\n },\n \"app.atmobb.discussion.thread\": {\n \"tier\": \"creation\",\n \"app\": \"atmobb\"\n },\n \"app.beaconbits.beacon\": {\n \"tier\": \"creation\",\n \"app\": \"beaconbits\"\n },\n \"app.bsky.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Profile metadata record.\"\n },\n \"app.bsky.feed.generator\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Feed generator definition record, not personal activity.\"\n },\n \"app.bsky.feed.like\": {\n \"tier\": \"action\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"bluesky\",\n \"notes\": \"Ambiguous: many posts are casual, but the lexicon also carries long-form posts and threads. Treated as creation; empty quote-posts (no text + record embed) are filtered at the consumer layer, not here.\"\n },\n \"app.bsky.feed.repost\": {\n \"tier\": \"action\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.graph.block\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.follow\": {\n \"tier\": \"action\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.graph.list\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"User-curated list metadata; not surfaced as profile activity.\"\n },\n \"app.bsky.graph.listblock\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.listitem\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"List membership; rendered via the parent list, not as standalone activity.\"\n },\n \"app.bsky.graph.mute\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.starterpack\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\"\n },\n \"app.bsky.graph.verification\": {\n \"tier\": \"creation\",\n \"app\": \"bluesky\",\n \"notes\": \"Diverges from app.bsky.graph.follow (action) on purpose: verifying another account's handle is a deliberate trust statement the actor authors, not a tap. Sifa renders it with its own card.\"\n },\n \"app.certified.actor.membership\": {\n \"tier\": \"creation\",\n \"app\": \"certified\",\n \"notes\": \"Joining a group is a commitment, same shape as a Colibri or Open Social membership.\"\n },\n \"app.certified.badge.award\": {\n \"tier\": \"creation\",\n \"app\": \"certified\",\n \"notes\": \"An endorsement issued to another DID. A trust signal the actor contributes, like a Bluesky verification.\"\n },\n \"app.certified.badge.response\": {\n \"tier\": \"creation\",\n \"app\": \"certified\",\n \"notes\": \"The recipient's acceptance of a badge someone else awarded them. An accepted badge is a credential the person holds; rejected ones are hidden by an ACTIVITY_VISIBILITY_RULES predicate.\"\n },\n \"app.collectivesocial.feed.list\": {\n \"tier\": \"creation\",\n \"app\": \"collectivesocial\",\n \"notes\": \"Auto-created default Inbox lists are filtered at the consumer layer via isDefault=true predicate.\"\n },\n \"app.dropanchor.checkin\": {\n \"tier\": \"creation\",\n \"app\": \"dropanchor\",\n \"notes\": \"A location check-in (place, geo, category, optional review text). Authored, so creation. app.dropanchor.like is excluded backend-side.\"\n },\n \"app.askeverything.feed.answer\": {\n \"tier\": \"creation\",\n \"app\": \"askeverything\",\n \"notes\": \"An authored answer to a community question (opinion with body text). app.askeverything.actor.* and graph.follow are excluded backend-side.\"\n },\n \"app.greengale.blog.entry\": {\n \"tier\": \"creation\",\n \"app\": \"greengale\",\n \"notes\": \"An authored blog post (title, subtitle, Markdown body, visibility). app.greengale.document and app.greengale.publication (drafts/containers) are excluded backend-side.\"\n },\n \"social.kut.community.membership\": {\n \"tier\": \"creation\",\n \"app\": \"kut\",\n \"notes\": \"Joining a Kut community, a commitment. Mirrors Colibri/OpenSocial memberships, which are creation-tier.\"\n },\n \"app.mcp.server\": {\n \"tier\": \"creation\",\n \"app\": \"mcp\"\n },\n \"app.photosky.collection\": {\n \"tier\": \"creation\",\n \"app\": \"zeens\",\n \"notes\": \"A curated photo collection on Zeens (still the app.photosky namespace).\"\n },\n \"app.sidetrail.trail\": {\n \"tier\": \"creation\",\n \"app\": \"semble\"\n },\n \"app.sidetrail.walk\": {\n \"tier\": \"creation\",\n \"app\": \"semble\"\n },\n \"app.userinput.discussion\": {\n \"tier\": \"creation\",\n \"app\": \"userinput\"\n },\n \"app.userinput.reply\": {\n \"tier\": \"creation\",\n \"app\": \"userinput\",\n \"notes\": \"Replies are authored text, consistent with app.bsky.feed.post covering replies.\"\n },\n \"at.locale.project\": {\n \"tier\": \"creation\",\n \"app\": \"locale\",\n \"notes\": \"A localization project the actor owns: git source, source and target locales.\"\n },\n \"at.locale.translation\": {\n \"tier\": \"creation\",\n \"app\": \"locale\",\n \"notes\": \"One authored translated string for a message key in a target locale.\"\n },\n \"at.margin.annotation\": {\n \"tier\": \"creation\",\n \"app\": \"margin\",\n \"notes\": \"An annotation on someone else's text is still authored writing.\"\n },\n \"at.margin.bookmark\": {\n \"tier\": \"filtered\",\n \"notes\": \"Bookmark \\u2014 consumption signal, not creation.\",\n \"app\": \"margin\"\n },\n \"at.margin.highlight\": {\n \"tier\": \"filtered\",\n \"notes\": \"Highlight \\u2014 consumption signal, not creation.\",\n \"app\": \"margin\"\n },\n \"at.margin.note\": {\n \"tier\": \"creation\",\n \"app\": \"margin\"\n },\n \"at.marque.domain\": {\n \"tier\": \"creation\",\n \"app\": \"marque\"\n },\n \"at.youandme.connection\": {\n \"tier\": \"creation\",\n \"app\": \"youandme\"\n },\n \"blog.pckt.mini.post\": {\n \"tier\": \"creation\",\n \"app\": \"pckt\",\n \"notes\": \"A pckt microblog post. Long-form pckt posts are site.standard.document instead.\"\n },\n \"blue.flashes.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"flashes\"\n },\n \"blue.linkat.board\": {\n \"tier\": \"filtered\",\n \"notes\": \"Link-in-bio board; consumption signal.\",\n \"app\": \"linkat\"\n },\n \"buzz.bookhive.book\": {\n \"tier\": \"creation\",\n \"app\": \"bookhive\"\n },\n \"com.minomobi.music.composition\": {\n \"tier\": \"creation\",\n \"app\": \"minomobi\"\n },\n \"com.shinolabs.pinksea.oekaki\": {\n \"tier\": \"creation\",\n \"app\": \"pinksea\",\n \"notes\": \"A drawing made in PinkSea's canvas, stored as an image blob with alt text and tags.\"\n },\n \"com.voxport.podcast.series\": {\n \"tier\": \"creation\",\n \"app\": \"voxport\"\n },\n \"com.whtwnd.blog.entry\": {\n \"tier\": \"creation\",\n \"app\": \"whitewind\"\n },\n \"community.lexicon.badge.award\": {\n \"tier\": \"creation\",\n \"app\": \"badges\",\n \"notes\": \"The award record is authored by the giver, so it is their attestation about someone else.\"\n },\n \"community.lexicon.bookmarks.bookmark\": {\n \"tier\": \"filtered\",\n \"notes\": \"Bookmark \\u2014 consumption signal.\",\n \"app\": \"kipclip\"\n },\n \"community.lexicon.calendar.rsvp\": {\n \"tier\": \"creation\",\n \"app\": \"smokesignal\",\n \"notes\": \"Ambiguous: RSVPs are reactions to events, but they are public commitments and the only Smoke Signal record Sifa scans today. Classified as creation.\"\n },\n \"community.nooki.comments\": {\n \"tier\": \"creation\",\n \"app\": \"nooki\",\n \"notes\": \"Comments are authored text.\"\n },\n \"community.nooki.membership\": {\n \"tier\": \"creation\",\n \"app\": \"nooki\",\n \"notes\": \"Joining a community, classified like social.colibri.membership (creation).\"\n },\n \"community.opensocial.membership\": {\n \"tier\": \"creation\",\n \"app\": \"opensocial\",\n \"notes\": \"Joining a community, classified like social.colibri.membership (creation).\"\n },\n \"computer.aetheros.page\": {\n \"tier\": \"creation\",\n \"app\": \"aetheros\"\n },\n \"dev.atvouch.graph.vouch\": {\n \"tier\": \"creation\",\n \"app\": \"atvouch\",\n \"notes\": \"Vouching for someone. Authored attestation, same reasoning as fund.at.graph.endorse.\"\n },\n \"dev.baileytownsend.guestbook.entry\": {\n \"tier\": \"creation\",\n \"app\": \"guestbook\",\n \"notes\": \"Signing someone else's guestbook is a short authored message.\"\n },\n \"dev.keytrace.claim\": {\n \"tier\": \"creation\",\n \"app\": \"keytrace\"\n },\n \"dev.skyboard.board\": {\n \"tier\": \"filtered\",\n \"notes\": \"Skyboard task-board metadata.\",\n \"app\": \"skyboard\"\n },\n \"dev.skyboard.op\": {\n \"tier\": \"filtered\",\n \"notes\": \"Skyboard operation log.\",\n \"app\": \"skyboard\"\n },\n \"dev.skyboard.task\": {\n \"tier\": \"filtered\",\n \"notes\": \"Skyboard task record.\",\n \"app\": \"skyboard\"\n },\n \"eu.atcommons.member\": {\n \"tier\": \"creation\",\n \"app\": \"atcommons\",\n \"notes\": \"Joining a national AT Protocol community commons, classified like community.opensocial.membership (creation).\"\n },\n \"events.smokesignal.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"smokesignal\",\n \"notes\": \"Profile metadata record.\"\n },\n \"exchange.recipe.recipe\": {\n \"tier\": \"creation\",\n \"app\": \"recipe\"\n },\n \"fm.plyr.comment\": {\n \"tier\": \"creation\",\n \"app\": \"plyr\",\n \"notes\": \"Comments are authored text.\"\n },\n \"forum.barazo.community.member\": {\n \"tier\": \"creation\",\n \"app\": \"barazo\"\n },\n \"forum.barazo.flag\": {\n \"tier\": \"filtered\",\n \"app\": \"barazo\",\n \"notes\": \"Moderation flag.\"\n },\n \"forum.barazo.post\": {\n \"tier\": \"creation\",\n \"app\": \"barazo\"\n },\n \"forum.barazo.reaction\": {\n \"tier\": \"action\",\n \"app\": \"barazo\"\n },\n \"forum.barazo.reply\": {\n \"tier\": \"action\",\n \"app\": \"barazo\",\n \"notes\": \"Short conversational reply \\u2014 engagement signal.\"\n },\n \"forum.barazo.reputation.event\": {\n \"tier\": \"creation\",\n \"app\": \"barazo\"\n },\n \"fund.at.graph.endorse\": {\n \"tier\": \"creation\",\n \"app\": \"atfund\",\n \"notes\": \"Endorsing someone. Authored attestation, not engagement.\"\n },\n \"fyi.asq.answer\": {\n \"tier\": \"creation\",\n \"app\": \"asq\"\n },\n \"fyi.asq.question\": {\n \"tier\": \"creation\",\n \"app\": \"asq\"\n },\n \"fyi.atstore.listing.review\": {\n \"tier\": \"creation\",\n \"app\": \"atstore\"\n },\n \"fyi.unravel.frontpage.post\": {\n \"tier\": \"creation\",\n \"app\": \"frontpage\"\n },\n \"fyi.unravel.frontpage.vote\": {\n \"tier\": \"action\",\n \"app\": \"frontpage\"\n },\n \"id.sifa.authConnection\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.authMeet\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.authProfile\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.authProfileAccess\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth profile-access record.\"\n },\n \"id.sifa.authProject\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth scope record.\"\n },\n \"id.sifa.confirmation\": {\n \"tier\": \"action\",\n \"app\": \"sifa\",\n \"notes\": \"Confirmation that a record naming the actor is accurate (co-speaker credit, project membership).\"\n },\n \"id.sifa.endorsement\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Endorsement authored by the actor about another profile.\"\n },\n \"id.sifa.endorsement.confirmation\": {\n \"tier\": \"action\",\n \"app\": \"sifa\",\n \"notes\": \"Confirmation/acceptance of an endorsement received.\"\n },\n \"id.sifa.graph.connection\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Mutual professional connection record.\"\n },\n \"id.sifa.graph.follow\": {\n \"tier\": \"action\",\n \"app\": \"sifa\"\n },\n \"id.sifa.meeting\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.certification\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.course\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.education\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.externalAccount\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.honor\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.language\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.location\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.position\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.presentation\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.presentationDelivery\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.project\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.publication\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.self\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Sifa professional profile root.\"\n },\n \"id.sifa.profile.skill\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.profile.volunteering\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"id.sifa.project.member\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Deprecated, never implemented. Superseded by id.sifa.confirmation.\"\n },\n \"id.sifa.project.membership\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Deprecated, never implemented. Superseded by id.sifa.confirmation.\"\n },\n \"id.sifa.project.self\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\"\n },\n \"io.atcr.repo.page\": {\n \"tier\": \"creation\",\n \"app\": \"atcr\"\n },\n \"io.calabro.watsm.program\": {\n \"tier\": \"creation\",\n \"app\": \"watsm\"\n },\n \"io.kich.recipe.recipe\": {\n \"tier\": \"creation\",\n \"app\": \"kich\"\n },\n \"is.kevara.directory.speaker\": {\n \"tier\": \"creation\",\n \"app\": \"kevara\"\n },\n \"li.plonk.paste\": {\n \"tier\": \"creation\",\n \"app\": \"plonk\"\n },\n \"link.pastesphere.snippet\": {\n \"tier\": \"creation\",\n \"app\": \"pastesphere\"\n },\n \"net.alternativeproto.submission\": {\n \"tier\": \"creation\",\n \"app\": \"alternativeproto\"\n },\n \"net.alternativeproto.vote\": {\n \"tier\": \"action\",\n \"notes\": \"Vote record on a third-party protocol.\",\n \"app\": \"alternativeproto\"\n },\n \"net.anisota.feed.list\": {\n \"tier\": \"creation\",\n \"app\": \"anisota\"\n },\n \"net.anisota.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"anisota\"\n },\n \"net.anisota.player.state\": {\n \"tier\": \"filtered\",\n \"notes\": \"Anisota game player state.\",\n \"app\": \"anisota\"\n },\n \"network.cosmik.card\": {\n \"tier\": \"filtered\",\n \"notes\": \"Link-in-bio card; consumption signal.\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.collection\": {\n \"tier\": \"filtered\",\n \"notes\": \"Stale registry id \\u2014 Cosmik formerly in app registry.\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.collectionLink\": {\n \"tier\": \"filtered\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.connection\": {\n \"tier\": \"filtered\",\n \"app\": \"cosmik\"\n },\n \"network.cosmik.follow\": {\n \"tier\": \"filtered\",\n \"app\": \"cosmik\"\n },\n \"one.papili.post\": {\n \"tier\": \"creation\",\n \"app\": \"papili\"\n },\n \"org.hypercerts.claim.activity\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"A hypercert: an authored claim of work done, with title, description, and weighted contributors.\"\n },\n \"org.hypercerts.claim.collection\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"Older shape of the project container that groups claims. Superseded by org.hypercerts.collection.\"\n },\n \"org.hypercerts.claim.evaluation\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"An assessment of a claim carrying a score and a written summary. An opinion with a body.\"\n },\n \"org.hypercerts.collection\": {\n \"tier\": \"creation\",\n \"app\": \"hypercerts\",\n \"notes\": \"An authored project container grouping hypercert claims, with its own title, banner, and description.\"\n },\n \"org.impactindexer.review.comment\": {\n \"tier\": \"creation\",\n \"app\": \"impactindexer\",\n \"notes\": \"A written review of a hypercert claim, like a Popfeed or BookHive review.\"\n },\n \"org.v-it.skill\": {\n \"tier\": \"creation\",\n \"app\": \"vit\"\n },\n \"os.aether.docs.presentation\": {\n \"tier\": \"creation\",\n \"app\": \"aetherdocs\"\n },\n \"pics.pixl.image\": {\n \"tier\": \"creation\",\n \"app\": \"pixl\"\n },\n \"place.stream.broadcast.origin\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Broadcast origin/infrastructure record.\"\n },\n \"place.stream.chat.message\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Ephemeral chat message.\"\n },\n \"place.stream.chat.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Chat profile metadata.\"\n },\n \"place.stream.key\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Stream key \\u2014 sensitive infrastructure record.\"\n },\n \"place.stream.livestream\": {\n \"tier\": \"creation\",\n \"app\": \"streamplace\"\n },\n \"place.stream.metadata.configuration\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Stream configuration metadata.\"\n },\n \"pub.chive.eprint.submission\": {\n \"tier\": \"creation\",\n \"app\": \"chive\",\n \"notes\": \"An authored preprint: title, ordered authors with affiliations, abstract.\"\n },\n \"pub.leaflet.authFullPermissions\": {\n \"tier\": \"filtered\",\n \"app\": \"leaflet\",\n \"notes\": \"OAuth permission record.\"\n },\n \"pub.leaflet.comment\": {\n \"tier\": \"creation\",\n \"app\": \"leaflet\"\n },\n \"pub.leaflet.interactions.recommend\": {\n \"tier\": \"action\",\n \"app\": \"leaflet\"\n },\n \"quest.atmo.checkin\": {\n \"tier\": \"creation\",\n \"app\": \"atmorsvp\",\n \"notes\": \"Attendance, classified like community.lexicon.calendar.rsvp (creation) rather than as engagement. The creation tier description names RSVPs explicitly.\"\n },\n \"quest.atmo.event\": {\n \"tier\": \"creation\",\n \"app\": \"atmorsvp\"\n },\n \"sh.tangled.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"tangled\",\n \"notes\": \"Profile metadata record.\"\n },\n \"sh.tangled.feed.star\": {\n \"tier\": \"action\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.graph.follow\": {\n \"tier\": \"action\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.repo\": {\n \"tier\": \"creation\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.repo.issue\": {\n \"tier\": \"creation\",\n \"app\": \"tangled\"\n },\n \"sh.tangled.repo.pull\": {\n \"tier\": \"creation\",\n \"app\": \"tangled\"\n },\n \"site.standard.document\": {\n \"tier\": \"creation\",\n \"app\": \"standard\"\n },\n \"so.sprk.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"spark\"\n },\n \"so.sprk.story.post\": {\n \"tier\": \"creation\",\n \"app\": \"spark\"\n },\n \"social.colibri.actor.data\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Actor metadata.\"\n },\n \"social.colibri.approval\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Moderation approval record.\"\n },\n \"social.colibri.category\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Category metadata.\"\n },\n \"social.colibri.channel\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Channel definition.\"\n },\n \"social.colibri.channel.read\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Read-state marker.\"\n },\n \"social.colibri.community\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Community definition.\"\n },\n \"social.colibri.membership\": {\n \"tier\": \"creation\",\n \"app\": \"colibri\"\n },\n \"social.colibri.message\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Chat message \\u2014 high-volume conversational signal, not portfolio.\"\n },\n \"social.colibri.reaction\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Chat reaction.\"\n },\n \"social.colibri.richtext.facet\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Richtext facet sub-record.\"\n },\n \"social.crate.content\": {\n \"tier\": \"creation\",\n \"app\": \"crate\"\n },\n \"social.crate.note\": {\n \"tier\": \"creation\",\n \"app\": \"crate\"\n },\n \"social.grain.gallery\": {\n \"tier\": \"creation\",\n \"app\": \"grain\"\n },\n \"social.grain.gallery.item\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Item-within-gallery; rendered via parent gallery.\"\n },\n \"social.grain.photo\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Raw photo asset; surfaced via the gallery that references it.\"\n },\n \"social.grain.photo.exif\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"EXIF metadata for a photo.\"\n },\n \"social.grain.story\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Ephemeral story format.\"\n },\n \"social.passports.fiftyStates.visit\": {\n \"tier\": \"creation\",\n \"app\": \"passports\"\n },\n \"social.passports.travel.leg\": {\n \"tier\": \"creation\",\n \"app\": \"passports\"\n },\n \"social.pinksky.app.preference\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Pinkleap (Bluesky client) app preferences.\"\n },\n \"social.popfeed.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"popfeed\",\n \"notes\": \"Profile metadata record.\"\n },\n \"social.popfeed.challenge.participation\": {\n \"tier\": \"filtered\",\n \"app\": \"popfeed\",\n \"notes\": \"Challenge participation tracking.\"\n },\n \"social.popfeed.feed.like\": {\n \"tier\": \"action\",\n \"app\": \"popfeed\"\n },\n \"social.popfeed.feed.note\": {\n \"tier\": \"creation\",\n \"app\": \"popfeed\"\n },\n \"social.popfeed.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"popfeed\"\n },\n \"social.popfeed.feed.review\": {\n \"tier\": \"creation\",\n \"app\": \"popfeed\"\n },\n \"social.psky.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"picosky\"\n },\n \"space.roomy.space.personal\": {\n \"tier\": \"creation\",\n \"app\": \"roomy\"\n },\n \"st.lifepo.lifeEvent\": {\n \"tier\": \"creation\",\n \"app\": \"lifepo\"\n },\n \"stream.thought.blip\": {\n \"tier\": \"creation\",\n \"app\": \"streamthought\"\n },\n \"tech.waow.doodl.drawing\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.doodl.icon\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.doodl.iconset\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.doodl.logo\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.pollz.poll\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.slides.deck\": {\n \"tier\": \"creation\",\n \"app\": \"waow\"\n },\n \"tech.waow.slides.slide\": {\n \"tier\": \"creation\",\n \"app\": \"waow\",\n \"notes\": \"Individual slides are components of a deck. Both are kept; the consumer decides whether to collapse them.\"\n },\n \"wiki.lichen.note\": {\n \"tier\": \"creation\",\n \"app\": \"lichen\"\n },\n \"wiki.lichen.wiki\": {\n \"tier\": \"creation\",\n \"app\": \"lichen\"\n },\n \"xyz.statusphere.status\": {\n \"tier\": \"filtered\",\n \"notes\": \"Statusphere emoji status \\u2014 leisure signal.\",\n \"app\": \"statusphere\"\n },\n \"app.lexidraw.scene\": {\n \"tier\": \"creation\",\n \"app\": \"lexidraw\",\n \"notes\": \"A named whiteboard drawing, stored as a gzipped scene blob with a thumbnail.\"\n },\n \"fm.leadsheet.sheet\": {\n \"tier\": \"creation\",\n \"app\": \"leadsheet\",\n \"notes\": \"An authored chord sheet or tab (ChordPro) for a song.\"\n },\n \"at.brickster.creation\": {\n \"tier\": \"creation\",\n \"app\": \"brickster\",\n \"notes\": \"A 3D brick build saved from the Brickster editor.\"\n }\n }\n}\n","// This SDK is the source of truth for the activity taxonomy.\n//\n// It used to be synced from sifa-lexicons, but the taxonomy is editorial\n// rather than protocol: none of it is published to a PDS, and it governs how\n// Sifa renders records rather than what any record means. Keeping it in the\n// lexicon repo meant it lived where nobody edited it, and the two copies\n// drifted 60 entries apart before anything noticed.\n//\n// It is served publicly at https://sifa.id/.well-known/sifa-activity-tiers.json\n// so third-party clients and sibling AppViews can read Sifa's choices rather\n// than infer them.\nimport rawTaxonomy from './activity-tiers.json' with { type: 'json' };\n\nexport type ActivityTier = 'creation' | 'action' | 'filtered';\n\nexport interface TierMeta {\n label: string | null;\n description: string;\n shownOnPublicProfile: boolean;\n}\n\nexport interface LexiconEntry {\n tier: ActivityTier;\n app?: string;\n notes?: string;\n}\n\nexport interface ActivityTaxonomy {\n version: string;\n updated: string;\n tiers: Record<ActivityTier, TierMeta>;\n lexicons: Record<string, LexiconEntry>;\n}\n\n// activity-tiers.json is checked against this shape in activity-tiers.test.ts.\n// Only the taxonomy fields are copied, so the file's `$schema` key stays out.\nconst parsed: ActivityTaxonomy = {\n version: rawTaxonomy.version,\n updated: rawTaxonomy.updated,\n tiers: rawTaxonomy.tiers,\n lexicons: rawTaxonomy.lexicons as Record<string, LexiconEntry>,\n};\n\nexport const ACTIVITY_TIERS: Readonly<ActivityTaxonomy> = Object.freeze(parsed);\n\n/**\n * Returns the activity tier for a given AT Protocol NSID.\n * Returns 'filtered' for unknown/unclassified NSIDs (safe default — won't\n * leak unknown records to public profile surfaces).\n */\nexport function getActivityTier(nsid: string): ActivityTier {\n if (!nsid) return 'filtered';\n const entry = ACTIVITY_TIERS.lexicons[nsid];\n return entry ? entry.tier : 'filtered';\n}\n\n/**\n * Returns the full lexicon entry (tier + app + notes), or null if unknown.\n */\nexport function getLexiconEntry(nsid: string): LexiconEntry | null {\n if (!nsid) return null;\n const entry = ACTIVITY_TIERS.lexicons[nsid];\n return entry ?? null;\n}\n\n/**\n * Returns tier metadata (label, description, public visibility).\n */\nexport function getTierMeta(tier: ActivityTier): TierMeta {\n return ACTIVITY_TIERS.tiers[tier];\n}\n\n/**\n * Returns the taxonomy version + updated date for diagnostics and\n * version-skew detection between SDK consumers and the canonical taxonomy.\n */\nexport function getActivityTaxonomyVersion(): { version: string; updated: string } {\n return { version: ACTIVITY_TIERS.version, updated: ACTIVITY_TIERS.updated };\n}\n"],"mappings":"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","names":[]}
@@ -150,7 +150,14 @@ var APP_CATEGORY_MAP = {
150
150
  // no backend scan collection yet)
151
151
  linkat: "Links",
152
152
  kipclip: "Links",
153
- statusphere: "Social"
153
+ statusphere: "Social",
154
+ // 2026-09-28 profile-of-the-day queue onboards.
155
+ lexidraw: "Art",
156
+ // app.lexidraw.scene — named whiteboard drawings
157
+ leadsheet: "Music",
158
+ // fm.leadsheet.sheet — authored chord sheets and tabs
159
+ brickster: "Art"
160
+ // at.brickster.creation — 3D brick builds
154
161
  };
155
162
  function isKnownAppId(appId) {
156
163
  return Object.prototype.hasOwnProperty.call(APP_CATEGORY_MAP, appId);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/taxonomy/app-category-map.ts"],"sourcesContent":["/**\n * Maps every AT Protocol app Sifa tracks to its `AppCategoryId`. Single source\n * of truth for what category an app belongs to; sifa-api and sifa-web both\n * import from here.\n *\n * Add a new app: pick the category whose generic glyph best represents the\n * activity. If no existing category fits, add a new one to APP_CATEGORIES\n * rather than introducing a per-app override.\n */\n\nimport type { AppCategoryId } from './app-categories.js';\n\nexport const APP_CATEGORY_MAP = {\n // Backend-scanned (sifa-api APP_REGISTRY)\n bluesky: 'Posts',\n tangled: 'Code',\n github: 'Code',\n // Posts ingested from a verified Fediverse (ActivityPub) account. Like\n // github, there is no PDS collection behind it -- its own scanner owns the\n // app-stats row.\n fediverse: 'Posts',\n // Items ingested from a verified RSS or Atom feed: blogs, newsletters,\n // podcast and channel feeds. Categorized as Articles rather than Posts\n // because the common case is a long-form blog entry with a title.\n rss: 'Articles',\n smokesignal: 'Events',\n flashes: 'Photos',\n grain: 'Photos',\n pixl: 'Photos', // pics.pixl.image — photo posts on pixl.pics\n whitewind: 'Articles',\n frontpage: 'Links',\n pastesphere: 'Pastes',\n standard: 'Articles',\n aetheros: 'Pages',\n roomy: 'Social',\n keytrace: 'Verification',\n popfeed: 'Reviews',\n streamplace: 'Video',\n semble: 'Research',\n youandme: 'Social',\n leaflet: 'Articles',\n colibri: 'Social',\n collectivesocial: 'Lists',\n bookhive: 'Reviews',\n beaconbits: 'Places',\n passports: 'Places',\n asq: 'Q&A',\n spark: 'Posts',\n nooki: 'Social',\n atstore: 'Reviews',\n plyr: 'Music',\n anisota: 'Posts',\n atfund: 'Endorsements',\n crate: 'Articles',\n atmorsvp: 'Events',\n opensocial: 'Social',\n // eu.atcommons.member — a self-asserted declaration of belonging to a\n // national AT Protocol community commons (atproto.nl, atproto.eu, ...).\n // Same shape as the colibri / opensocial membership commitment.\n atcommons: 'Social',\n // Kevara speaker-directory listing — a professional speaking-availability\n // declaration (talk topics, formats like keynote/panel/conference-talk).\n // Grouped under Events as the closest fit (speaking engagements).\n kevara: 'Events',\n // Marque domain registrar — a domain registration record is a dated\n // identity/ownership action, surfaced as a \"registered a domain\" event.\n marque: 'Domains',\n // ATCR (io.atcr) — distributed OCI container registry. The portfolio entry\n // is io.atcr.repo.page (a published repository with a markdown README);\n // manifests and tags are low-level artifacts excluded backend-side.\n atcr: 'Code',\n // Batch onboard — apps surfaced on high-volume profiles. Each gives its\n // collections a named pill + category icon instead of a raw NSID.\n mcp: 'Code', // app.mcp.server — published MCP servers (name/tools/language)\n userinput: 'Social', // app.userinput — roadmap discussions + replies\n minomobi: 'Music', // com.minomobi.music.composition — authored music\n voxport: 'Video', // com.voxport.podcast.series — podcast series\n badges: 'Verification', // community.lexicon.badge.award — signed earned credentials\n atvouch: 'Endorsements', // dev.atvouch.graph.vouch — trust vouches\n watsm: 'Code', // io.calabro.watsm.program — published WASM programs\n plonk: 'Pastes', // li.plonk.paste — text pastes\n alternativeproto: 'Links', // net.alternativeproto.submission — app-directory listings\n papili: 'Links', // one.papili.post — link posts\n vit: 'Code', // org.v-it.skill — published agent skills\n lifepo: 'Social', // st.lifepo.lifeEvent — life-event timeline\n streamthought: 'Posts', // stream.thought.blip — microblog thoughts\n waow: 'Photos', // tech.waow.* — doodl drawings (dominant), polls, slides\n lichen: 'Pages', // wiki.lichen — wiki notes + wikis\n // Onboard from aramzs.xyz profile audit — new named pills.\n aetherdocs: 'Slides', // os.aether.docs.presentation — authored slide decks\n kich: 'Recipes', // io.kich.recipe.recipe — authored recipes\n margin: 'Research', // at.margin.{note,annotation} — web-annotation notes with a body\n // Onboard from moll.dev profile audit.\n recipe: 'Recipes', // exchange.recipe.recipe — authored recipes on recipe.exchange\n\n // Onboard from willow.sh profile audit.\n guestbook: 'Social', // dev.baileytownsend.guestbook.entry — a note left on someone's cross-site guestbook\n\n // Onboard from trezy.codes profile audit.\n atmobb: 'Social', // app.atmobb.discussion.{thread,reply} — federated forum threads + replies\n\n // Onboard from aaronstevenwhite.io profile audit.\n chive: 'Research', // pub.chive.eprint.submission — preprints on chive.pub\n\n // Onboard from helene-cook.eu profile audit.\n zeens: 'Photos', // app.photosky.collection — curated photo collections on zeens.app\n\n // Onboard from scanash.com profile audit.\n locale: 'Translations', // at.locale.{project,translation} — localization projects and authored translation strings on locale.at\n pckt: 'Posts', // blog.pckt.mini.post — microblog posts with no site.standard.document twin\n\n // Onboard from the holke.xyz profile audit (impact-funding ecosystem).\n hypercerts: 'Impact', // org.hypercerts.{claim.activity,collection} — authored claims of work done, and the project collections that group them\n certified: 'Endorsements', // app.certified.{badge.award,actor.membership} — endorsements issued to another DID, and group memberships\n impactindexer: 'Reviews', // org.impactindexer.review.comment — written reviews of a hypercert claim\n pinksea: 'Art', // com.shinolabs.pinksea.oekaki — hand-drawn artwork posted to the PinkSea oekaki BBS\n\n // Onboard from the tijs.org profile audit.\n dropanchor: 'Places', // app.dropanchor.checkin — location check-ins (place, geo, optional review text)\n\n // Onboard from the angrydutchman.houseofmadness.org profile audit.\n askeverything: 'Q&A', // app.askeverything.feed.answer — authored answers to community questions\n greengale: 'Articles', // app.greengale.blog.entry — authored blog posts (title, subtitle, Markdown body)\n kut: 'Social', // social.kut.community.membership — joining a Kut community (a commitment)\n\n // Onboard from the upcoming profile-of-the-day audit.\n atmob: 'Pastes', // in.atmob.paste.{document,bundle} — authored text/code pastes on atmob.in\n tokono: 'Video', // ma.tokono.byov.video — authored videos hosted via the tokono.ma \"bring your own video\" feature\n portable: 'Social', // agency.portable.membership — joining a community (a commitment), attested by another actor\n rpgactor: 'Art', // actor.rpg.sprite + equipment.rpg.item: a pixel-art RPG character and the equipment items it was given\n\n // Web-only (rendered in pills/cards via sifa-web atproto-apps.ts;\n // no backend scan collection yet)\n linkat: 'Links',\n kipclip: 'Links',\n statusphere: 'Social',\n} as const satisfies Record<string, AppCategoryId>;\n\nexport type KnownAppId = keyof typeof APP_CATEGORY_MAP;\n\nexport function isKnownAppId(appId: string): appId is KnownAppId {\n return Object.prototype.hasOwnProperty.call(APP_CATEGORY_MAP, appId);\n}\n\nexport function categoryForApp(appId: string): AppCategoryId | undefined {\n return isKnownAppId(appId) ? APP_CATEGORY_MAP[appId] : undefined;\n}\n"],"mappings":";AAYO,IAAM,mBAAmB;AAAA;AAAA,EAE9B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,WAAW;AAAA;AAAA;AAAA;AAAA,EAIX,KAAK;AAAA,EACL,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA;AAAA;AAAA;AAAA,EAIZ,WAAW;AAAA;AAAA;AAAA;AAAA,EAIX,QAAQ;AAAA;AAAA;AAAA,EAGR,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,MAAM;AAAA;AAAA;AAAA,EAGN,KAAK;AAAA;AAAA,EACL,WAAW;AAAA;AAAA,EACX,UAAU;AAAA;AAAA,EACV,SAAS;AAAA;AAAA,EACT,QAAQ;AAAA;AAAA,EACR,SAAS;AAAA;AAAA,EACT,OAAO;AAAA;AAAA,EACP,OAAO;AAAA;AAAA,EACP,kBAAkB;AAAA;AAAA,EAClB,QAAQ;AAAA;AAAA,EACR,KAAK;AAAA;AAAA,EACL,QAAQ;AAAA;AAAA,EACR,eAAe;AAAA;AAAA,EACf,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA;AAAA,EAER,YAAY;AAAA;AAAA,EACZ,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA;AAAA,EAGR,WAAW;AAAA;AAAA;AAAA,EAGX,QAAQ;AAAA;AAAA;AAAA,EAGR,OAAO;AAAA;AAAA;AAAA,EAGP,OAAO;AAAA;AAAA;AAAA,EAGP,QAAQ;AAAA;AAAA,EACR,MAAM;AAAA;AAAA;AAAA,EAGN,YAAY;AAAA;AAAA,EACZ,WAAW;AAAA;AAAA,EACX,eAAe;AAAA;AAAA,EACf,SAAS;AAAA;AAAA;AAAA,EAGT,YAAY;AAAA;AAAA;AAAA,EAGZ,eAAe;AAAA;AAAA,EACf,WAAW;AAAA;AAAA,EACX,KAAK;AAAA;AAAA;AAAA,EAGL,OAAO;AAAA;AAAA,EACP,QAAQ;AAAA;AAAA,EACR,UAAU;AAAA;AAAA,EACV,UAAU;AAAA;AAAA;AAAA;AAAA,EAIV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AACf;AAIO,SAAS,aAAa,OAAoC;AAC/D,SAAO,OAAO,UAAU,eAAe,KAAK,kBAAkB,KAAK;AACrE;AAEO,SAAS,eAAe,OAA0C;AACvE,SAAO,aAAa,KAAK,IAAI,iBAAiB,KAAK,IAAI;AACzD;","names":[]}
1
+ {"version":3,"sources":["../../src/taxonomy/app-category-map.ts"],"sourcesContent":["/**\n * Maps every AT Protocol app Sifa tracks to its `AppCategoryId`. Single source\n * of truth for what category an app belongs to; sifa-api and sifa-web both\n * import from here.\n *\n * Add a new app: pick the category whose generic glyph best represents the\n * activity. If no existing category fits, add a new one to APP_CATEGORIES\n * rather than introducing a per-app override.\n */\n\nimport type { AppCategoryId } from './app-categories.js';\n\nexport const APP_CATEGORY_MAP = {\n // Backend-scanned (sifa-api APP_REGISTRY)\n bluesky: 'Posts',\n tangled: 'Code',\n github: 'Code',\n // Posts ingested from a verified Fediverse (ActivityPub) account. Like\n // github, there is no PDS collection behind it -- its own scanner owns the\n // app-stats row.\n fediverse: 'Posts',\n // Items ingested from a verified RSS or Atom feed: blogs, newsletters,\n // podcast and channel feeds. Categorized as Articles rather than Posts\n // because the common case is a long-form blog entry with a title.\n rss: 'Articles',\n smokesignal: 'Events',\n flashes: 'Photos',\n grain: 'Photos',\n pixl: 'Photos', // pics.pixl.image — photo posts on pixl.pics\n whitewind: 'Articles',\n frontpage: 'Links',\n pastesphere: 'Pastes',\n standard: 'Articles',\n aetheros: 'Pages',\n roomy: 'Social',\n keytrace: 'Verification',\n popfeed: 'Reviews',\n streamplace: 'Video',\n semble: 'Research',\n youandme: 'Social',\n leaflet: 'Articles',\n colibri: 'Social',\n collectivesocial: 'Lists',\n bookhive: 'Reviews',\n beaconbits: 'Places',\n passports: 'Places',\n asq: 'Q&A',\n spark: 'Posts',\n nooki: 'Social',\n atstore: 'Reviews',\n plyr: 'Music',\n anisota: 'Posts',\n atfund: 'Endorsements',\n crate: 'Articles',\n atmorsvp: 'Events',\n opensocial: 'Social',\n // eu.atcommons.member — a self-asserted declaration of belonging to a\n // national AT Protocol community commons (atproto.nl, atproto.eu, ...).\n // Same shape as the colibri / opensocial membership commitment.\n atcommons: 'Social',\n // Kevara speaker-directory listing — a professional speaking-availability\n // declaration (talk topics, formats like keynote/panel/conference-talk).\n // Grouped under Events as the closest fit (speaking engagements).\n kevara: 'Events',\n // Marque domain registrar — a domain registration record is a dated\n // identity/ownership action, surfaced as a \"registered a domain\" event.\n marque: 'Domains',\n // ATCR (io.atcr) — distributed OCI container registry. The portfolio entry\n // is io.atcr.repo.page (a published repository with a markdown README);\n // manifests and tags are low-level artifacts excluded backend-side.\n atcr: 'Code',\n // Batch onboard — apps surfaced on high-volume profiles. Each gives its\n // collections a named pill + category icon instead of a raw NSID.\n mcp: 'Code', // app.mcp.server — published MCP servers (name/tools/language)\n userinput: 'Social', // app.userinput — roadmap discussions + replies\n minomobi: 'Music', // com.minomobi.music.composition — authored music\n voxport: 'Video', // com.voxport.podcast.series — podcast series\n badges: 'Verification', // community.lexicon.badge.award — signed earned credentials\n atvouch: 'Endorsements', // dev.atvouch.graph.vouch — trust vouches\n watsm: 'Code', // io.calabro.watsm.program — published WASM programs\n plonk: 'Pastes', // li.plonk.paste — text pastes\n alternativeproto: 'Links', // net.alternativeproto.submission — app-directory listings\n papili: 'Links', // one.papili.post — link posts\n vit: 'Code', // org.v-it.skill — published agent skills\n lifepo: 'Social', // st.lifepo.lifeEvent — life-event timeline\n streamthought: 'Posts', // stream.thought.blip — microblog thoughts\n waow: 'Photos', // tech.waow.* — doodl drawings (dominant), polls, slides\n lichen: 'Pages', // wiki.lichen — wiki notes + wikis\n // Onboard from aramzs.xyz profile audit — new named pills.\n aetherdocs: 'Slides', // os.aether.docs.presentation — authored slide decks\n kich: 'Recipes', // io.kich.recipe.recipe — authored recipes\n margin: 'Research', // at.margin.{note,annotation} — web-annotation notes with a body\n // Onboard from moll.dev profile audit.\n recipe: 'Recipes', // exchange.recipe.recipe — authored recipes on recipe.exchange\n\n // Onboard from willow.sh profile audit.\n guestbook: 'Social', // dev.baileytownsend.guestbook.entry — a note left on someone's cross-site guestbook\n\n // Onboard from trezy.codes profile audit.\n atmobb: 'Social', // app.atmobb.discussion.{thread,reply} — federated forum threads + replies\n\n // Onboard from aaronstevenwhite.io profile audit.\n chive: 'Research', // pub.chive.eprint.submission — preprints on chive.pub\n\n // Onboard from helene-cook.eu profile audit.\n zeens: 'Photos', // app.photosky.collection — curated photo collections on zeens.app\n\n // Onboard from scanash.com profile audit.\n locale: 'Translations', // at.locale.{project,translation} — localization projects and authored translation strings on locale.at\n pckt: 'Posts', // blog.pckt.mini.post — microblog posts with no site.standard.document twin\n\n // Onboard from the holke.xyz profile audit (impact-funding ecosystem).\n hypercerts: 'Impact', // org.hypercerts.{claim.activity,collection} — authored claims of work done, and the project collections that group them\n certified: 'Endorsements', // app.certified.{badge.award,actor.membership} — endorsements issued to another DID, and group memberships\n impactindexer: 'Reviews', // org.impactindexer.review.comment — written reviews of a hypercert claim\n pinksea: 'Art', // com.shinolabs.pinksea.oekaki — hand-drawn artwork posted to the PinkSea oekaki BBS\n\n // Onboard from the tijs.org profile audit.\n dropanchor: 'Places', // app.dropanchor.checkin — location check-ins (place, geo, optional review text)\n\n // Onboard from the angrydutchman.houseofmadness.org profile audit.\n askeverything: 'Q&A', // app.askeverything.feed.answer — authored answers to community questions\n greengale: 'Articles', // app.greengale.blog.entry — authored blog posts (title, subtitle, Markdown body)\n kut: 'Social', // social.kut.community.membership — joining a Kut community (a commitment)\n\n // Onboard from the upcoming profile-of-the-day audit.\n atmob: 'Pastes', // in.atmob.paste.{document,bundle} — authored text/code pastes on atmob.in\n tokono: 'Video', // ma.tokono.byov.video — authored videos hosted via the tokono.ma \"bring your own video\" feature\n portable: 'Social', // agency.portable.membership — joining a community (a commitment), attested by another actor\n rpgactor: 'Art', // actor.rpg.sprite + equipment.rpg.item: a pixel-art RPG character and the equipment items it was given\n\n // Web-only (rendered in pills/cards via sifa-web atproto-apps.ts;\n // no backend scan collection yet)\n linkat: 'Links',\n kipclip: 'Links',\n statusphere: 'Social',\n // 2026-09-28 profile-of-the-day queue onboards.\n lexidraw: 'Art', // app.lexidraw.scene — named whiteboard drawings\n leadsheet: 'Music', // fm.leadsheet.sheet — authored chord sheets and tabs\n brickster: 'Art', // at.brickster.creation — 3D brick builds\n} as const satisfies Record<string, AppCategoryId>;\n\nexport type KnownAppId = keyof typeof APP_CATEGORY_MAP;\n\nexport function isKnownAppId(appId: string): appId is KnownAppId {\n return Object.prototype.hasOwnProperty.call(APP_CATEGORY_MAP, appId);\n}\n\nexport function categoryForApp(appId: string): AppCategoryId | undefined {\n return isKnownAppId(appId) ? APP_CATEGORY_MAP[appId] : undefined;\n}\n"],"mappings":";AAYO,IAAM,mBAAmB;AAAA;AAAA,EAE9B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,WAAW;AAAA;AAAA;AAAA;AAAA,EAIX,KAAK;AAAA,EACL,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA;AAAA;AAAA;AAAA,EAIZ,WAAW;AAAA;AAAA;AAAA;AAAA,EAIX,QAAQ;AAAA;AAAA;AAAA,EAGR,QAAQ;AAAA;AAAA;AAAA;AAAA,EAIR,MAAM;AAAA;AAAA;AAAA,EAGN,KAAK;AAAA;AAAA,EACL,WAAW;AAAA;AAAA,EACX,UAAU;AAAA;AAAA,EACV,SAAS;AAAA;AAAA,EACT,QAAQ;AAAA;AAAA,EACR,SAAS;AAAA;AAAA,EACT,OAAO;AAAA;AAAA,EACP,OAAO;AAAA;AAAA,EACP,kBAAkB;AAAA;AAAA,EAClB,QAAQ;AAAA;AAAA,EACR,KAAK;AAAA;AAAA,EACL,QAAQ;AAAA;AAAA,EACR,eAAe;AAAA;AAAA,EACf,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA;AAAA,EAER,YAAY;AAAA;AAAA,EACZ,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA;AAAA,EAGR,WAAW;AAAA;AAAA;AAAA,EAGX,QAAQ;AAAA;AAAA;AAAA,EAGR,OAAO;AAAA;AAAA;AAAA,EAGP,OAAO;AAAA;AAAA;AAAA,EAGP,QAAQ;AAAA;AAAA,EACR,MAAM;AAAA;AAAA;AAAA,EAGN,YAAY;AAAA;AAAA,EACZ,WAAW;AAAA;AAAA,EACX,eAAe;AAAA;AAAA,EACf,SAAS;AAAA;AAAA;AAAA,EAGT,YAAY;AAAA;AAAA;AAAA,EAGZ,eAAe;AAAA;AAAA,EACf,WAAW;AAAA;AAAA,EACX,KAAK;AAAA;AAAA;AAAA,EAGL,OAAO;AAAA;AAAA,EACP,QAAQ;AAAA;AAAA,EACR,UAAU;AAAA;AAAA,EACV,UAAU;AAAA;AAAA;AAAA;AAAA,EAIV,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,aAAa;AAAA;AAAA,EAEb,UAAU;AAAA;AAAA,EACV,WAAW;AAAA;AAAA,EACX,WAAW;AAAA;AACb;AAIO,SAAS,aAAa,OAAoC;AAC/D,SAAO,OAAO,UAAU,eAAe,KAAK,kBAAkB,KAAK;AACrE;AAEO,SAAS,eAAe,OAA0C;AACvE,SAAO,aAAa,KAAK,IAAI,iBAAiB,KAAK,IAAI;AACzD;","names":[]}
@@ -4,7 +4,7 @@ import { K as SifaApiConfig, n as ProfileView, W as WriteResult, N as CreateResu
4
4
  import * as _tanstack_react_query from '@tanstack/react-query';
5
5
  import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
6
6
  import { c as Profile, d as ProfilePosition, S as SkillRef, p as ExternalAccount, T as SkillSuggestion, s as OrgFloorVerdict } from './index-D9GC0u__.js';
7
- import { s as sifaQueryKeys, aB as RefreshPdsResult, aS as UpdateProfileOverrideInput, aT as UpdateProfileSelfInput, aU as UploadAvatarResult, aV as UploadPronunciationAudioResult, al as PrimarySection, aM as SubCategoryBulkResult, aq as ProfileLocationInput, o as ExternalAccountInput, m as CreateExternalAccountResult, aW as VerifyExternalAccountResult, E as EndorsementInput, k as ConfirmationInput, l as ConfirmationSubjectInput, X as GivenConfirmation, ak as PendingConfirmationsPage, a6 as InboxCounts, n as DismissUnlinkedPositionInput, aR as UnlinkedPositionsResult, am as ProfileCompleteness, aA as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a5 as HideProfileItemInput, a0 as HiddenActivityItem, a4 as HideActivityItemInput, aP as UnhideActivityItemInput, aL as StatsResponse, h as AppRegistryEntry, a1 as HiddenApp, b as AccountSummary, p as FeaturedProfile, aK as SimilarProfile, L as FetchSuggestionsOptions, aO as SuggestionsResponse, Q as FollowUserResult, v as FetchFollowListOptions, N as FollowListPage, U as FollowingResponse, x as FetchFollowingFeedOptions, T as FollowingFeedResponse, w as FetchFollowProfilePageOptions, P as FollowProfilePageResponse, F as FeatureAllowlistResponse, g as AdminReviewQueues, r as FetchActivityFeedOptions, c as ActivityFeedResponse, f as ActivityTeaserResponse, $ as HeatmapResponse, a8 as MyGithubPullRequestsResponse, A as AccountCheckResult, az as ReactionStatus, ay as ReactionResult, ax as ReactionError, aI as RoadmapVotesResponse, i as CastRoadmapVoteResult, D as DeleteAccountResult, aD as ResetProfileResult, aX as WipePreview, aC as RepoDeleteInput, aa as OrgClaimResult, ag as OrgProfileUpdateResult, ab as OrgDomainChallengeResult, ac as OrgDomainVerifyResult, ad as OrgNotificationEmailAddResult, ae as OrgNotificationEmailRemoveResult } from './org-CxTEjjrm.js';
7
+ import { s as sifaQueryKeys, aC as RefreshPdsResult, aT as UpdateProfileOverrideInput, aU as UpdateProfileSelfInput, aV as UploadAvatarResult, aW as UploadPronunciationAudioResult, am as PrimarySection, aN as SubCategoryBulkResult, ar as ProfileLocationInput, o as ExternalAccountInput, m as CreateExternalAccountResult, aX as VerifyExternalAccountResult, E as EndorsementInput, k as ConfirmationInput, l as ConfirmationSubjectInput, Y as GivenConfirmation, al as PendingConfirmationsPage, a7 as InboxCounts, n as DismissUnlinkedPositionInput, aS as UnlinkedPositionsResult, an as ProfileCompleteness, aB as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a6 as HideProfileItemInput, a1 as HiddenActivityItem, a5 as HideActivityItemInput, aQ as UnhideActivityItemInput, aM as StatsResponse, h as AppRegistryEntry, a2 as HiddenApp, b as AccountSummary, p as FeaturedProfile, aL as SimilarProfile, L as FetchSuggestionsOptions, aP as SuggestionsResponse, Q as FollowUserResult, v as FetchFollowListOptions, N as FollowListPage, V as FollowingResponse, x as FetchFollowingFeedOptions, T as FollowingFeedResponse, w as FetchFollowProfilePageOptions, P as FollowProfilePageResponse, F as FeatureAllowlistResponse, g as AdminReviewQueues, r as FetchActivityFeedOptions, c as ActivityFeedResponse, f as ActivityTeaserResponse, a0 as HeatmapResponse, a9 as MyGithubPullRequestsResponse, A as AccountCheckResult, aA as ReactionStatus, az as ReactionResult, ay as ReactionError, aJ as RoadmapVotesResponse, i as CastRoadmapVoteResult, D as DeleteAccountResult, aE as ResetProfileResult, aY as WipePreview, aD as RepoDeleteInput, ab as OrgClaimResult, ah as OrgProfileUpdateResult, ac as OrgDomainChallengeResult, ad as OrgDomainVerifyResult, ae as OrgNotificationEmailAddResult, af as OrgNotificationEmailRemoveResult } from './org-Bp4mNT8K.js';
8
8
  import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-D1l6pulB.js';
9
9
  import { O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, d as OrgDomainVerifyRequestInput, f as OrgNotificationEmailRequestInput } from './org-settings-BShvhyFp.js';
10
10
 
@@ -568,7 +568,13 @@ declare function useFollowingList(handle: string, opts?: Omit<FetchFollowListOpt
568
568
  * See {@link fetchFollowingFeed}. v1 is a finite first page (no infinite scroll
569
569
  * yet). The native app must set `config.getAuthToken`; web uses its cookie.
570
570
  */
571
- declare function useFollowingFeed(opts?: FetchFollowingFeedOptions, options?: Omit<UseQueryOptions<FollowingFeedResponse | null, Error, FollowingFeedResponse | null, ReturnType<typeof sifaQueryKeys.follow.feed>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<NoInfer<FollowingFeedResponse | null>, Error>;
571
+ declare function useFollowingFeed(opts?: FetchFollowingFeedOptions, options?: Omit<UseQueryOptions<FollowingFeedResponse, Error, FollowingFeedResponse, ReturnType<typeof sifaQueryKeys.follow.feed>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<NoInfer<FollowingFeedResponse>, Error>;
572
+ /**
573
+ * When the cached following feed for the same query was built (ISO 8601, or
574
+ * null). Poll it while a `stale` feed is shown, e.g. with `refetchInterval`,
575
+ * and offer the newer feed once {@link isNewerFollowingFeed} is true.
576
+ */
577
+ declare function useFollowingFeedVersion(opts?: FetchFollowingFeedOptions, options?: Omit<UseQueryOptions<string | null, Error, string | null, ReturnType<typeof sifaQueryKeys.follow.feedVersion>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<string | null, Error>;
572
578
 
573
579
  /**
574
580
  * Infinite-query hook for the mutuals list of `handleOrDid`. Backed by
@@ -895,4 +901,4 @@ declare function useRemoveOrgNotificationEmail(options?: Omit<UseMutationOptions
895
901
  email: string;
896
902
  }, unknown>;
897
903
 
898
- export { useDeleteReaction as $, type AddFeatureAllowlistVariables as A, useCanonicalSkillSearch as B, type CreateReactionVariables as C, type DeleteReactionVariables as D, useCastRoadmapVote as E, type FollowVariables as F, useCreateConfirmation as G, useCreateEducation as H, useCreateEndorsement as I, useCreateExternalAccount as J, useCreatePosition as K, useCreateProfileLocation as L, useCreateReaction as M, useCreateRecord as N, useCreateSkill as O, type PositionSkillLinkVariables as P, useDebouncedValue as Q, type RemoveFeatureAllowlistVariables as R, SifaProvider as S, useDeleteAccount as T, type UnfollowVariables as U, useDeleteAvatarOverride as V, useDeleteEducation as W, useDeleteExternalAccount as X, useDeleteNamePronunciationAudio as Y, useDeletePosition as Z, useDeleteProfileLocation as _, type CreateRecordVariables as a, useSuggestionCount as a$, useDeleteRecord as a0, useDeleteRepoRecords as a1, useDeleteSkill as a2, useDismissConfirmation as a3, useDismissUnlinkedPosition as a4, useEndorsementCount as a5, useEntitySearch as a6, useExternalAccounts as a7, useFeatureAllowlist as a8, useFeaturedProfile as a9, useOrgDomainVerify as aA, useOrgProfile as aB, usePendingConfirmations as aC, useProfile as aD, useProfileCompleteness as aE, useReactionStatus as aF, useRefreshOrcidPublications as aG, useRefreshPds as aH, useRemoveFeatureAllowlist as aI, useRemoveOrgNotificationEmail as aJ, useRepoInventory as aK, useResetProfile as aL, useResolveEntityDomain as aM, useRetractRoadmapVote as aN, useRevealMarqueDomain as aO, useRevokeConfirmation as aP, useRoadmapVotes as aQ, useSearchFilters as aR, useSearchProfiles as aS, useSelectEntity as aT, useSetExternalAccountPrimary as aU, useSetPositionPrimary as aV, useSetSectionPrimary as aW, useSifaConfig as aX, useSimilarProfiles as aY, useSkillSuggestions as aZ, useStats as a_, useFollow as aa, useFollowers as ab, useFollowing as ac, useFollowingFeed as ad, useFollowingList as ae, useGetProfileView as af, useGivenConfirmations as ag, useHeatmapData as ah, useHiddenActivityItems as ai, useHiddenApps as aj, useHideActivityItem as ak, useHideKeytraceClaim as al, useHideOrcidPublication as am, useHideProfileItem as an, useHideSifaPublication as ao, useHideStandardPublication as ap, useImportSearchEntities as aq, useInboxCounts as ar, useLinkSkillToPosition as as, useMintEntityDomain as at, useMutuals as au, useMyGithubPullRequests as av, useMyRoadmapVotes as aw, useNetworkStreamCount as ax, useOrgClaim as ay, useOrgDomainChallenge as az, type DeleteRecordVariables as b, useSuggestions as b0, useUnfollow as b1, useUnhideActivityItem as b2, useUnhideKeytraceClaim as b3, useUnhideOrcidPublication as b4, useUnhideProfileItem as b5, useUnhideSifaPublication as b6, useUnhideStandardPublication as b7, useUnlinkSkillFromPosition as b8, useUnlinkedPositions as b9, useUnrevealMarqueDomain as ba, useUnsetExternalAccountPrimary as bb, useUnsetPositionPrimary as bc, useUnsetSectionPrimary as bd, useUpdateEducation as be, useUpdateExternalAccount as bf, useUpdateOrgProfile as bg, useUpdatePosition as bh, useUpdateProfileLocation as bi, useUpdateProfileOverride as bj, useUpdateProfileSelf as bk, useUpdateRecord as bl, useUpdateSkill as bm, useUpdateSkillSubCategories as bn, useUploadAvatar as bo, useUploadNamePronunciationAudio as bp, useVerifyExternalAccount as bq, useWipePreview as br, useSearchCompanies as bs, type SifaProviderProps as c, type UpdateEducationVariables as d, type UpdateExternalAccountVariables as e, type UpdatePositionVariables as f, type UpdateProfileLocationVariables as g, type UpdateRecordVariables as h, type UpdateSkillSubCategoriesVariables as i, type UpdateSkillVariables as j, type UseEntitySearchOptions as k, type UseMyGithubPullRequestsParams as l, useActivityFeed as m, useActivityTeaser as n, useAddFeatureAllowlist as o, useAddOrgNotificationEmail as p, useAdminReviewQueues as q, useAppAccountCheck as r, useAppsRegistry as s, useAtFundLink as t, useAccounts as u, useBlueskySuggestions as v, useBulkHideProfileItems as w, useBulkHideStandardPublications as x, useBulkUnhideProfileItems as y, useBulkUnhideStandardPublications as z };
904
+ export { useDeleteReaction as $, type AddFeatureAllowlistVariables as A, useCanonicalSkillSearch as B, type CreateReactionVariables as C, type DeleteReactionVariables as D, useCastRoadmapVote as E, type FollowVariables as F, useCreateConfirmation as G, useCreateEducation as H, useCreateEndorsement as I, useCreateExternalAccount as J, useCreatePosition as K, useCreateProfileLocation as L, useCreateReaction as M, useCreateRecord as N, useCreateSkill as O, type PositionSkillLinkVariables as P, useDebouncedValue as Q, type RemoveFeatureAllowlistVariables as R, SifaProvider as S, useDeleteAccount as T, type UnfollowVariables as U, useDeleteAvatarOverride as V, useDeleteEducation as W, useDeleteExternalAccount as X, useDeleteNamePronunciationAudio as Y, useDeletePosition as Z, useDeleteProfileLocation as _, type CreateRecordVariables as a, useStats as a$, useDeleteRecord as a0, useDeleteRepoRecords as a1, useDeleteSkill as a2, useDismissConfirmation as a3, useDismissUnlinkedPosition as a4, useEndorsementCount as a5, useEntitySearch as a6, useExternalAccounts as a7, useFeatureAllowlist as a8, useFeaturedProfile as a9, useOrgDomainChallenge as aA, useOrgDomainVerify as aB, useOrgProfile as aC, usePendingConfirmations as aD, useProfile as aE, useProfileCompleteness as aF, useReactionStatus as aG, useRefreshOrcidPublications as aH, useRefreshPds as aI, useRemoveFeatureAllowlist as aJ, useRemoveOrgNotificationEmail as aK, useRepoInventory as aL, useResetProfile as aM, useResolveEntityDomain as aN, useRetractRoadmapVote as aO, useRevealMarqueDomain as aP, useRevokeConfirmation as aQ, useRoadmapVotes as aR, useSearchFilters as aS, useSearchProfiles as aT, useSelectEntity as aU, useSetExternalAccountPrimary as aV, useSetPositionPrimary as aW, useSetSectionPrimary as aX, useSifaConfig as aY, useSimilarProfiles as aZ, useSkillSuggestions as a_, useFollow as aa, useFollowers as ab, useFollowing as ac, useFollowingFeed as ad, useFollowingFeedVersion as ae, useFollowingList as af, useGetProfileView as ag, useGivenConfirmations as ah, useHeatmapData as ai, useHiddenActivityItems as aj, useHiddenApps as ak, useHideActivityItem as al, useHideKeytraceClaim as am, useHideOrcidPublication as an, useHideProfileItem as ao, useHideSifaPublication as ap, useHideStandardPublication as aq, useImportSearchEntities as ar, useInboxCounts as as, useLinkSkillToPosition as at, useMintEntityDomain as au, useMutuals as av, useMyGithubPullRequests as aw, useMyRoadmapVotes as ax, useNetworkStreamCount as ay, useOrgClaim as az, type DeleteRecordVariables as b, useSuggestionCount as b0, useSuggestions as b1, useUnfollow as b2, useUnhideActivityItem as b3, useUnhideKeytraceClaim as b4, useUnhideOrcidPublication as b5, useUnhideProfileItem as b6, useUnhideSifaPublication as b7, useUnhideStandardPublication as b8, useUnlinkSkillFromPosition as b9, useUnlinkedPositions as ba, useUnrevealMarqueDomain as bb, useUnsetExternalAccountPrimary as bc, useUnsetPositionPrimary as bd, useUnsetSectionPrimary as be, useUpdateEducation as bf, useUpdateExternalAccount as bg, useUpdateOrgProfile as bh, useUpdatePosition as bi, useUpdateProfileLocation as bj, useUpdateProfileOverride as bk, useUpdateProfileSelf as bl, useUpdateRecord as bm, useUpdateSkill as bn, useUpdateSkillSubCategories as bo, useUploadAvatar as bp, useUploadNamePronunciationAudio as bq, useVerifyExternalAccount as br, useWipePreview as bs, useSearchCompanies as bt, type SifaProviderProps as c, type UpdateEducationVariables as d, type UpdateExternalAccountVariables as e, type UpdatePositionVariables as f, type UpdateProfileLocationVariables as g, type UpdateRecordVariables as h, type UpdateSkillSubCategoriesVariables as i, type UpdateSkillVariables as j, type UseEntitySearchOptions as k, type UseMyGithubPullRequestsParams as l, useActivityFeed as m, useActivityTeaser as n, useAddFeatureAllowlist as o, useAddOrgNotificationEmail as p, useAdminReviewQueues as q, useAppAccountCheck as r, useAppsRegistry as s, useAtFundLink as t, useAccounts as u, useBlueskySuggestions as v, useBulkHideProfileItems as w, useBulkHideStandardPublications as x, useBulkUnhideProfileItems as y, useBulkUnhideStandardPublications as z };
@@ -4,7 +4,7 @@ import { K as SifaApiConfig, n as ProfileView, W as WriteResult, N as CreateResu
4
4
  import * as _tanstack_react_query from '@tanstack/react-query';
5
5
  import { UseQueryOptions, UseMutationOptions, UseInfiniteQueryOptions, InfiniteData } from '@tanstack/react-query';
6
6
  import { c as Profile, d as ProfilePosition, S as SkillRef, p as ExternalAccount, T as SkillSuggestion, s as OrgFloorVerdict } from './index-DmlIG8sJ.cjs';
7
- import { s as sifaQueryKeys, aB as RefreshPdsResult, aS as UpdateProfileOverrideInput, aT as UpdateProfileSelfInput, aU as UploadAvatarResult, aV as UploadPronunciationAudioResult, al as PrimarySection, aM as SubCategoryBulkResult, aq as ProfileLocationInput, o as ExternalAccountInput, m as CreateExternalAccountResult, aW as VerifyExternalAccountResult, E as EndorsementInput, k as ConfirmationInput, l as ConfirmationSubjectInput, X as GivenConfirmation, ak as PendingConfirmationsPage, a6 as InboxCounts, n as DismissUnlinkedPositionInput, aR as UnlinkedPositionsResult, am as ProfileCompleteness, aA as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a5 as HideProfileItemInput, a0 as HiddenActivityItem, a4 as HideActivityItemInput, aP as UnhideActivityItemInput, aL as StatsResponse, h as AppRegistryEntry, a1 as HiddenApp, b as AccountSummary, p as FeaturedProfile, aK as SimilarProfile, L as FetchSuggestionsOptions, aO as SuggestionsResponse, Q as FollowUserResult, v as FetchFollowListOptions, N as FollowListPage, U as FollowingResponse, x as FetchFollowingFeedOptions, T as FollowingFeedResponse, w as FetchFollowProfilePageOptions, P as FollowProfilePageResponse, F as FeatureAllowlistResponse, g as AdminReviewQueues, r as FetchActivityFeedOptions, c as ActivityFeedResponse, f as ActivityTeaserResponse, $ as HeatmapResponse, a8 as MyGithubPullRequestsResponse, A as AccountCheckResult, az as ReactionStatus, ay as ReactionResult, ax as ReactionError, aI as RoadmapVotesResponse, i as CastRoadmapVoteResult, D as DeleteAccountResult, aD as ResetProfileResult, aX as WipePreview, aC as RepoDeleteInput, aa as OrgClaimResult, ag as OrgProfileUpdateResult, ab as OrgDomainChallengeResult, ac as OrgDomainVerifyResult, ad as OrgNotificationEmailAddResult, ae as OrgNotificationEmailRemoveResult } from './org-DC_FpoTY.cjs';
7
+ import { s as sifaQueryKeys, aC as RefreshPdsResult, aT as UpdateProfileOverrideInput, aU as UpdateProfileSelfInput, aV as UploadAvatarResult, aW as UploadPronunciationAudioResult, am as PrimarySection, aN as SubCategoryBulkResult, ar as ProfileLocationInput, o as ExternalAccountInput, m as CreateExternalAccountResult, aX as VerifyExternalAccountResult, E as EndorsementInput, k as ConfirmationInput, l as ConfirmationSubjectInput, Y as GivenConfirmation, al as PendingConfirmationsPage, a7 as InboxCounts, n as DismissUnlinkedPositionInput, aS as UnlinkedPositionsResult, an as ProfileCompleteness, aB as RefreshOrcidPublicationsResult, B as BulkHideProfileItemInput, a6 as HideProfileItemInput, a1 as HiddenActivityItem, a5 as HideActivityItemInput, aQ as UnhideActivityItemInput, aM as StatsResponse, h as AppRegistryEntry, a2 as HiddenApp, b as AccountSummary, p as FeaturedProfile, aL as SimilarProfile, L as FetchSuggestionsOptions, aP as SuggestionsResponse, Q as FollowUserResult, v as FetchFollowListOptions, N as FollowListPage, V as FollowingResponse, x as FetchFollowingFeedOptions, T as FollowingFeedResponse, w as FetchFollowProfilePageOptions, P as FollowProfilePageResponse, F as FeatureAllowlistResponse, g as AdminReviewQueues, r as FetchActivityFeedOptions, c as ActivityFeedResponse, f as ActivityTeaserResponse, a0 as HeatmapResponse, a9 as MyGithubPullRequestsResponse, A as AccountCheckResult, aA as ReactionStatus, az as ReactionResult, ay as ReactionError, aJ as RoadmapVotesResponse, i as CastRoadmapVoteResult, D as DeleteAccountResult, aE as ResetProfileResult, aY as WipePreview, aD as RepoDeleteInput, ab as OrgClaimResult, ah as OrgProfileUpdateResult, ac as OrgDomainChallengeResult, ad as OrgDomainVerifyResult, ae as OrgNotificationEmailAddResult, af as OrgNotificationEmailRemoveResult } from './org-CFzRg61Q.cjs';
8
8
  import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, n as EntitySelectResponse, l as EntitySelectRequest, r as FeatureFlag } from './follow-profile-D1l6pulB.cjs';
9
9
  import { O as OrgClaimRequestInput, a as OrgProfileUpdateRequestInput, b as OrgDomainChallengeRequestInput, c as OrgDomainVerifyRequestInput, d as OrgNotificationEmailRequestInput } from './org-settings-C73Sin5E.cjs';
10
10
 
@@ -568,7 +568,13 @@ declare function useFollowingList(handle: string, opts?: Omit<FetchFollowListOpt
568
568
  * See {@link fetchFollowingFeed}. v1 is a finite first page (no infinite scroll
569
569
  * yet). The native app must set `config.getAuthToken`; web uses its cookie.
570
570
  */
571
- declare function useFollowingFeed(opts?: FetchFollowingFeedOptions, options?: Omit<UseQueryOptions<FollowingFeedResponse | null, Error, FollowingFeedResponse | null, ReturnType<typeof sifaQueryKeys.follow.feed>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<NoInfer<FollowingFeedResponse | null>, Error>;
571
+ declare function useFollowingFeed(opts?: FetchFollowingFeedOptions, options?: Omit<UseQueryOptions<FollowingFeedResponse, Error, FollowingFeedResponse, ReturnType<typeof sifaQueryKeys.follow.feed>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<NoInfer<FollowingFeedResponse>, Error>;
572
+ /**
573
+ * When the cached following feed for the same query was built (ISO 8601, or
574
+ * null). Poll it while a `stale` feed is shown, e.g. with `refetchInterval`,
575
+ * and offer the newer feed once {@link isNewerFollowingFeed} is true.
576
+ */
577
+ declare function useFollowingFeedVersion(opts?: FetchFollowingFeedOptions, options?: Omit<UseQueryOptions<string | null, Error, string | null, ReturnType<typeof sifaQueryKeys.follow.feedVersion>>, 'queryKey' | 'queryFn'>): _tanstack_react_query.UseQueryResult<string | null, Error>;
572
578
 
573
579
  /**
574
580
  * Infinite-query hook for the mutuals list of `handleOrDid`. Backed by
@@ -895,4 +901,4 @@ declare function useRemoveOrgNotificationEmail(options?: Omit<UseMutationOptions
895
901
  email: string;
896
902
  }, unknown>;
897
903
 
898
- export { useDeleteReaction as $, type AddFeatureAllowlistVariables as A, useCanonicalSkillSearch as B, type CreateReactionVariables as C, type DeleteReactionVariables as D, useCastRoadmapVote as E, type FollowVariables as F, useCreateConfirmation as G, useCreateEducation as H, useCreateEndorsement as I, useCreateExternalAccount as J, useCreatePosition as K, useCreateProfileLocation as L, useCreateReaction as M, useCreateRecord as N, useCreateSkill as O, type PositionSkillLinkVariables as P, useDebouncedValue as Q, type RemoveFeatureAllowlistVariables as R, SifaProvider as S, useDeleteAccount as T, type UnfollowVariables as U, useDeleteAvatarOverride as V, useDeleteEducation as W, useDeleteExternalAccount as X, useDeleteNamePronunciationAudio as Y, useDeletePosition as Z, useDeleteProfileLocation as _, type CreateRecordVariables as a, useSuggestionCount as a$, useDeleteRecord as a0, useDeleteRepoRecords as a1, useDeleteSkill as a2, useDismissConfirmation as a3, useDismissUnlinkedPosition as a4, useEndorsementCount as a5, useEntitySearch as a6, useExternalAccounts as a7, useFeatureAllowlist as a8, useFeaturedProfile as a9, useOrgDomainVerify as aA, useOrgProfile as aB, usePendingConfirmations as aC, useProfile as aD, useProfileCompleteness as aE, useReactionStatus as aF, useRefreshOrcidPublications as aG, useRefreshPds as aH, useRemoveFeatureAllowlist as aI, useRemoveOrgNotificationEmail as aJ, useRepoInventory as aK, useResetProfile as aL, useResolveEntityDomain as aM, useRetractRoadmapVote as aN, useRevealMarqueDomain as aO, useRevokeConfirmation as aP, useRoadmapVotes as aQ, useSearchFilters as aR, useSearchProfiles as aS, useSelectEntity as aT, useSetExternalAccountPrimary as aU, useSetPositionPrimary as aV, useSetSectionPrimary as aW, useSifaConfig as aX, useSimilarProfiles as aY, useSkillSuggestions as aZ, useStats as a_, useFollow as aa, useFollowers as ab, useFollowing as ac, useFollowingFeed as ad, useFollowingList as ae, useGetProfileView as af, useGivenConfirmations as ag, useHeatmapData as ah, useHiddenActivityItems as ai, useHiddenApps as aj, useHideActivityItem as ak, useHideKeytraceClaim as al, useHideOrcidPublication as am, useHideProfileItem as an, useHideSifaPublication as ao, useHideStandardPublication as ap, useImportSearchEntities as aq, useInboxCounts as ar, useLinkSkillToPosition as as, useMintEntityDomain as at, useMutuals as au, useMyGithubPullRequests as av, useMyRoadmapVotes as aw, useNetworkStreamCount as ax, useOrgClaim as ay, useOrgDomainChallenge as az, type DeleteRecordVariables as b, useSuggestions as b0, useUnfollow as b1, useUnhideActivityItem as b2, useUnhideKeytraceClaim as b3, useUnhideOrcidPublication as b4, useUnhideProfileItem as b5, useUnhideSifaPublication as b6, useUnhideStandardPublication as b7, useUnlinkSkillFromPosition as b8, useUnlinkedPositions as b9, useUnrevealMarqueDomain as ba, useUnsetExternalAccountPrimary as bb, useUnsetPositionPrimary as bc, useUnsetSectionPrimary as bd, useUpdateEducation as be, useUpdateExternalAccount as bf, useUpdateOrgProfile as bg, useUpdatePosition as bh, useUpdateProfileLocation as bi, useUpdateProfileOverride as bj, useUpdateProfileSelf as bk, useUpdateRecord as bl, useUpdateSkill as bm, useUpdateSkillSubCategories as bn, useUploadAvatar as bo, useUploadNamePronunciationAudio as bp, useVerifyExternalAccount as bq, useWipePreview as br, useSearchCompanies as bs, type SifaProviderProps as c, type UpdateEducationVariables as d, type UpdateExternalAccountVariables as e, type UpdatePositionVariables as f, type UpdateProfileLocationVariables as g, type UpdateRecordVariables as h, type UpdateSkillSubCategoriesVariables as i, type UpdateSkillVariables as j, type UseEntitySearchOptions as k, type UseMyGithubPullRequestsParams as l, useActivityFeed as m, useActivityTeaser as n, useAddFeatureAllowlist as o, useAddOrgNotificationEmail as p, useAdminReviewQueues as q, useAppAccountCheck as r, useAppsRegistry as s, useAtFundLink as t, useAccounts as u, useBlueskySuggestions as v, useBulkHideProfileItems as w, useBulkHideStandardPublications as x, useBulkUnhideProfileItems as y, useBulkUnhideStandardPublications as z };
904
+ export { useDeleteReaction as $, type AddFeatureAllowlistVariables as A, useCanonicalSkillSearch as B, type CreateReactionVariables as C, type DeleteReactionVariables as D, useCastRoadmapVote as E, type FollowVariables as F, useCreateConfirmation as G, useCreateEducation as H, useCreateEndorsement as I, useCreateExternalAccount as J, useCreatePosition as K, useCreateProfileLocation as L, useCreateReaction as M, useCreateRecord as N, useCreateSkill as O, type PositionSkillLinkVariables as P, useDebouncedValue as Q, type RemoveFeatureAllowlistVariables as R, SifaProvider as S, useDeleteAccount as T, type UnfollowVariables as U, useDeleteAvatarOverride as V, useDeleteEducation as W, useDeleteExternalAccount as X, useDeleteNamePronunciationAudio as Y, useDeletePosition as Z, useDeleteProfileLocation as _, type CreateRecordVariables as a, useStats as a$, useDeleteRecord as a0, useDeleteRepoRecords as a1, useDeleteSkill as a2, useDismissConfirmation as a3, useDismissUnlinkedPosition as a4, useEndorsementCount as a5, useEntitySearch as a6, useExternalAccounts as a7, useFeatureAllowlist as a8, useFeaturedProfile as a9, useOrgDomainChallenge as aA, useOrgDomainVerify as aB, useOrgProfile as aC, usePendingConfirmations as aD, useProfile as aE, useProfileCompleteness as aF, useReactionStatus as aG, useRefreshOrcidPublications as aH, useRefreshPds as aI, useRemoveFeatureAllowlist as aJ, useRemoveOrgNotificationEmail as aK, useRepoInventory as aL, useResetProfile as aM, useResolveEntityDomain as aN, useRetractRoadmapVote as aO, useRevealMarqueDomain as aP, useRevokeConfirmation as aQ, useRoadmapVotes as aR, useSearchFilters as aS, useSearchProfiles as aT, useSelectEntity as aU, useSetExternalAccountPrimary as aV, useSetPositionPrimary as aW, useSetSectionPrimary as aX, useSifaConfig as aY, useSimilarProfiles as aZ, useSkillSuggestions as a_, useFollow as aa, useFollowers as ab, useFollowing as ac, useFollowingFeed as ad, useFollowingFeedVersion as ae, useFollowingList as af, useGetProfileView as ag, useGivenConfirmations as ah, useHeatmapData as ai, useHiddenActivityItems as aj, useHiddenApps as ak, useHideActivityItem as al, useHideKeytraceClaim as am, useHideOrcidPublication as an, useHideProfileItem as ao, useHideSifaPublication as ap, useHideStandardPublication as aq, useImportSearchEntities as ar, useInboxCounts as as, useLinkSkillToPosition as at, useMintEntityDomain as au, useMutuals as av, useMyGithubPullRequests as aw, useMyRoadmapVotes as ax, useNetworkStreamCount as ay, useOrgClaim as az, type DeleteRecordVariables as b, useSuggestionCount as b0, useSuggestions as b1, useUnfollow as b2, useUnhideActivityItem as b3, useUnhideKeytraceClaim as b4, useUnhideOrcidPublication as b5, useUnhideProfileItem as b6, useUnhideSifaPublication as b7, useUnhideStandardPublication as b8, useUnlinkSkillFromPosition as b9, useUnlinkedPositions as ba, useUnrevealMarqueDomain as bb, useUnsetExternalAccountPrimary as bc, useUnsetPositionPrimary as bd, useUnsetSectionPrimary as be, useUpdateEducation as bf, useUpdateExternalAccount as bg, useUpdateOrgProfile as bh, useUpdatePosition as bi, useUpdateProfileLocation as bj, useUpdateProfileOverride as bk, useUpdateProfileSelf as bl, useUpdateRecord as bm, useUpdateSkill as bn, useUpdateSkillSubCategories as bo, useUploadAvatar as bp, useUploadNamePronunciationAudio as bq, useVerifyExternalAccount as br, useWipePreview as bs, useSearchCompanies as bt, type SifaProviderProps as c, type UpdateEducationVariables as d, type UpdateExternalAccountVariables as e, type UpdatePositionVariables as f, type UpdateProfileLocationVariables as g, type UpdateRecordVariables as h, type UpdateSkillSubCategoriesVariables as i, type UpdateSkillVariables as j, type UseEntitySearchOptions as k, type UseMyGithubPullRequestsParams as l, useActivityFeed as m, useActivityTeaser as n, useAddFeatureAllowlist as o, useAddOrgNotificationEmail as p, useAdminReviewQueues as q, useAppAccountCheck as r, useAppsRegistry as s, useAtFundLink as t, useAccounts as u, useBlueskySuggestions as v, useBulkHideProfileItems as w, useBulkHideStandardPublications as x, useBulkUnhideProfileItems as y, useBulkUnhideStandardPublications as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singi-labs/sifa-sdk",
3
- "version": "0.19.48",
3
+ "version": "0.19.50",
4
4
  "description": "Sifa SDK — public client library for the Sifa AppView on AT Protocol. Shared by sifa-web and sifa-app.",
5
5
  "license": "MIT",
6
6
  "type": "module",