@singi-labs/sifa-sdk 0.19.55 → 0.19.56

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 (47) hide show
  1. package/dist/{follow-profile-D1l6pulB.d.ts → follow-profile-CQ3DTTak.d.cts} +3 -0
  2. package/dist/{follow-profile-D1l6pulB.d.cts → follow-profile-ceqefXAw.d.ts} +3 -0
  3. package/dist/{index-DmlIG8sJ.d.cts → index-BeQbepFn.d.cts} +7 -1
  4. package/dist/{index-D9GC0u__.d.ts → index-CT-A3BEe.d.ts} +7 -1
  5. package/dist/index.cjs +16 -2
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +10 -81
  8. package/dist/index.d.ts +10 -81
  9. package/dist/index.js +1 -1
  10. package/dist/jsonld/index.d.cts +2 -2
  11. package/dist/jsonld/index.d.ts +2 -2
  12. package/dist/{network-map-CdYpUy-t.d.cts → network-map-4C9UwVmp.d.cts} +4 -4
  13. package/dist/{network-map-CiWrQ1fF.d.ts → network-map-D-XnMy5U.d.ts} +4 -4
  14. package/dist/{org-fmpG85L0.d.cts → org-DTZzfRQs.d.cts} +16 -3
  15. package/dist/{org-hxHnoBfg.d.ts → org-DtO2TCzd.d.ts} +16 -3
  16. package/dist/{profile-summary-5T1hDw6Q.d.cts → profile-summary-CVFSy7BE.d.cts} +1 -1
  17. package/dist/{profile-summary-Bj7ufSDK.d.ts → profile-summary-DiONU2n-.d.ts} +1 -1
  18. package/dist/query/fetchers/discovery.js.map +1 -1
  19. package/dist/query/fetchers/follow.js.map +1 -1
  20. package/dist/query/fetchers/index.cjs.map +1 -1
  21. package/dist/query/fetchers/index.d.cts +8 -8
  22. package/dist/query/fetchers/index.d.ts +8 -8
  23. package/dist/query/fetchers/search.js.map +1 -1
  24. package/dist/query/hooks/index.cjs.map +1 -1
  25. package/dist/query/hooks/index.d.cts +6 -6
  26. package/dist/query/hooks/index.d.ts +6 -6
  27. package/dist/query/index.cjs.map +1 -1
  28. package/dist/query/index.d.cts +12 -12
  29. package/dist/query/index.d.ts +12 -12
  30. package/dist/resume/index.d.cts +2 -2
  31. package/dist/resume/index.d.ts +2 -2
  32. package/dist/schemas/follow-profile.js +18 -1
  33. package/dist/schemas/follow-profile.js.map +1 -1
  34. package/dist/schemas/index.cjs +53 -1
  35. package/dist/schemas/index.cjs.map +1 -1
  36. package/dist/schemas/index.d.cts +2 -2
  37. package/dist/schemas/index.d.ts +2 -2
  38. package/dist/types/index.js.map +1 -1
  39. package/dist/{types-DHT7jcZc.d.cts → types-Bl8KYBSl.d.ts} +8 -1
  40. package/dist/{types-jB67EFpw.d.ts → types-CYjcuKr4.d.cts} +8 -1
  41. package/dist/{use-org-notification-emails-CWLCWkmb.d.ts → use-org-notification-emails-C-GftYx5.d.ts} +4 -4
  42. package/dist/{use-org-notification-emails-Cj8IDI_7.d.cts → use-org-notification-emails-D29UFyp2.d.cts} +4 -4
  43. package/dist/verification-providers-7il3kPQS.d.cts +158 -0
  44. package/dist/verification-providers-7il3kPQS.d.ts +158 -0
  45. package/package.json +1 -1
  46. package/dist/shared-v0vl5hov.d.cts +0 -87
  47. package/dist/shared-v0vl5hov.d.ts +0 -87
package/dist/index.d.cts CHANGED
@@ -1,15 +1,15 @@
1
- import { P as ProfileSkill, a as ProfilePresentationDelivery, L as LocationValue, b as PdsProviderInfo, c as Profile, A as AccountFacetMode, d as ProfilePosition, e as ProfileCertification, f as ProfileEducation, g as ProfileHonor, h as ProfileLanguage, i as ProfileProject, j as ProfilePublication, k as ProfileInvolvement, R as RelatedIdentifier } from './index-DmlIG8sJ.cjs';
2
- export { l as ActiveApp, m as ActorCard, n as AuthorSuggestion, C as CoSpeaker, E as Endorsement, o as EndorsementData, p as ExternalAccount, q as ExternalAccountKeytraceClaim, F as FeedItem, r as LanguageProficiency, O as OrgAddressView, s as OrgFloorVerdict, t as OrgLinkView, u as OrgProfileView, v as PROJECT_ROLES, w as PresentationLinkView, x as ProfileCourse, y as ProfileIndustry, z as ProfileInvestment, B as ProfileInvestmentLink, D as ProfileInvolvementLink, G as ProfileLocation, H as ProfileOverrideSource, I as ProfilePresentation, J as ProfileVolunteering, K as ProjectMemberCard, M as ProjectRole, N as PublicationContributor, Q as RecognizedEntity, S as SkillRef, T as SkillSuggestion, U as TrustStat, V as VerifiedAccount } from './index-DmlIG8sJ.cjs';
3
- import { S as SearchFilters } from './types-DHT7jcZc.cjs';
4
- export { A as ADULT_CONTENT_LABELS, a as ActiveAppView, b as ActivityLabel, c as AdultContentLabel, d as AtfundLinkView, C as CertificationView, e as CoSpeakerView, f as ContributorView, g as CourseView, D as DurationView, E as EducationView, h as ExternalAccountView, H as HonorView, I as IndustryDomain, i as InvolvementLinkView, j as InvolvementView, L as LanguageView, P as PositionView, k as PresentationDeliveryView, l as PresentationView, m as ProfileLocationView, n as ProfileView, o as ProjectMemberView, p as ProjectView, q as PublicationView, R as RepoCollectionGroup, r as RepoDeleteOutcome, s as RepoDeleteRecordResult, t as RepoDeleteResult, u as RepoGroupDefinition, v as RepoGroupId, w as RepoInventory, x as RepoRecordLabel, y as RepoRecordSummary, z as SIFA_REPO_GROUPS, B as SkillView, V as VolunteeringView, F as describeSifaRecord, G as hasAdultContent, J as repoGroupForCollection } from './types-DHT7jcZc.cjs';
1
+ import { P as ProfileSkill, a as ProfilePresentationDelivery, L as LocationValue, b as PdsProviderInfo, c as Profile, A as AccountFacetMode, d as ProfilePosition, e as ProfileCertification, f as ProfileEducation, g as ProfileHonor, h as ProfileLanguage, i as ProfileProject, j as ProfilePublication, k as ProfileInvolvement, R as RelatedIdentifier } from './index-BeQbepFn.cjs';
2
+ export { l as ActiveApp, m as ActorCard, n as AuthorSuggestion, C as CoSpeaker, E as Endorsement, o as EndorsementData, p as ExternalAccount, q as ExternalAccountKeytraceClaim, F as FeedItem, r as LanguageProficiency, O as OrgAddressView, s as OrgFloorVerdict, t as OrgLinkView, u as OrgProfileView, v as PROJECT_ROLES, w as PresentationLinkView, x as ProfileCourse, y as ProfileIndustry, z as ProfileInvestment, B as ProfileInvestmentLink, D as ProfileInvolvementLink, G as ProfileLocation, H as ProfileOverrideSource, I as ProfilePresentation, J as ProfileVolunteering, K as ProjectMemberCard, M as ProjectRole, N as PublicationContributor, Q as RecognizedEntity, S as SkillRef, T as SkillSuggestion, U as TrustStat, V as VerifiedAccount } from './index-BeQbepFn.cjs';
3
+ import { S as SearchFilters } from './types-CYjcuKr4.cjs';
4
+ export { A as ADULT_CONTENT_LABELS, a as ActiveAppView, b as ActivityLabel, c as AdultContentLabel, d as AtfundLinkView, C as CertificationView, e as CoSpeakerView, f as ContributorView, g as CourseView, D as DurationView, E as EducationView, h as ExternalAccountView, H as HonorView, I as IndustryDomain, i as InvolvementLinkView, j as InvolvementView, L as LanguageView, P as PositionView, k as PresentationDeliveryView, l as PresentationView, m as ProfileLocationView, n as ProfileView, o as ProjectMemberView, p as ProjectView, q as PublicationView, R as RepoCollectionGroup, r as RepoDeleteOutcome, s as RepoDeleteRecordResult, t as RepoDeleteResult, u as RepoGroupDefinition, v as RepoGroupId, w as RepoInventory, x as RepoRecordLabel, y as RepoRecordSummary, z as SIFA_REPO_GROUPS, B as SkillView, V as VolunteeringView, F as describeSifaRecord, G as hasAdultContent, J as repoGroupForCollection } from './types-CYjcuKr4.cjs';
5
+ import { A as AgentRef } from './verification-providers-7il3kPQS.cjs';
6
+ export { a as AccountVerification, V as VERIFICATION_PROVIDERS, b as VerificationProvider, c as VerificationProviderId, d as VerificationSource, e as agentRefSchema, f as atUriSchema, g as cidSchema, h as datetimeSchema, i as didSchema, j as externalRecordRefSchema, k as getVerificationProvider, l as isKnownVerificationProvider, m as languageTagSchema, n as maxGraphemes, p as partialDateSchema, o as primaryVerification, r as resolveVerifierProvider, s as selfLabelsSchema, q as skillRefSchema, t as strongRefSchema, u as uriSchema } from './verification-providers-7il3kPQS.cjs';
5
7
  import { P as PresentationDuration, a as ProfilePresentationDeliveryRecord, b as ProfilePresentationRecord, O as OrgProfileRecord } from './profile-investment-BiHM7C5q.cjs';
6
8
  export { A as ArtifactLink, c as ArtifactLinkSchema, d as AtmosphereFeedItem, e as AtmosphereFeedItemSchema, B as BlobRef, f as BlobRefSchema, E as EndorsementConfirmationRecord, g as EndorsementConfirmationRecordSchema, h as EndorsementRecord, i as EndorsementRecordSchema, F as FeedActor, j as FeedActorSchema, k as FeedCursor, l as FollowFeedItem, m as FollowFeedItemSchema, n as FollowFeedPage, o as FollowFeedPageSchema, G as GraphFollowRecord, p as GraphFollowRecordSchema, I as InvestmentAmountSchema, q as OrgEmploymentAttestationRecord, r as OrgEmploymentAttestationRecordSchema, s as OrgProfileRecordSchema, t as PROFILE_INVESTMENT_NSID, u as PROFILE_INVOLVEMENT_NSID, v as PresentationDurationSchema, w as PresentationLink, x as PresentationLinkSchema, y as ProfileCertificationRecord, z as ProfileCertificationRecordSchema, C as ProfileCourseRecord, D as ProfileCourseRecordSchema, H as ProfileEducationRecord, J as ProfileEducationRecordSchema, K as ProfileExternalAccountRecord, L as ProfileExternalAccountRecordSchema, M as ProfileHonorRecord, N as ProfileHonorRecordSchema, Q as ProfileInvestmentRecordSchema, R as ProfileInvolvementRecord, S as ProfileInvolvementRecordSchema, T as ProfileLanguageRecord, U as ProfileLanguageRecordSchema, V as ProfilePositionRecord, W as ProfilePositionRecordSchema, X as ProfilePresentationDeliveryRecordSchema, Y as ProfilePresentationRecordSchema, Z as ProfileProjectRecord, _ as ProfileProjectRecordSchema, $ as ProfilePublicationRecord, a0 as ProfilePublicationRecordSchema, a1 as ProfileSelfRecord, a2 as ProfileSelfRecordSchema, a3 as ProfileSkillRecord, a4 as ProfileSkillRecordSchema, a5 as ProfileVolunteeringRecord, a6 as ProfileVolunteeringRecordSchema, a7 as PublicationAuthor, a8 as PublicationAuthorSchema, a9 as RelatedIdentifierSchema, aa as SifaFeedItem, ab as SifaFeedItemSchema, ac as decodeFeedCursor, ad as encodeFeedCursor, ae as makeGraphFollowRecordSchema } from './profile-investment-BiHM7C5q.cjs';
7
9
  import { z } from 'zod';
8
- export { P as ProfileSummary, S as SummarizeProfileViewOptions, s as summarizeProfileView } from './profile-summary-5T1hDw6Q.cjs';
9
- import { E as EntitySearchResult } from './follow-profile-D1l6pulB.cjs';
10
- export { a as EntityImportSearchResponse, b as EntityImportSearchResponseSchema, c as EntityMintDomainResponse, d as EntityMintDomainResponseSchema, e as EntityResolveDomainRequest, f as EntityResolveDomainRequestSchema, g as EntityResolveDomainResponse, h as EntityResolveDomainResponseSchema, i as EntitySearchResponse, j as EntitySearchResponseSchema, k as EntitySearchResultSchema, l as EntitySelectRequest, m as EntitySelectRequestSchema, n as EntitySelectResponse, o as EntitySelectResponseSchema, F as FEATURE_FLAGS, p as FeatureAllowlistEntry, q as FeatureAllowlistEntrySchema, r as FeatureFlag, s as FollowProfileItem, t as FollowProfilePage, u as FollowProfilePageSchema, v as FollowProfileSchema } from './follow-profile-D1l6pulB.cjs';
11
- import { A as AgentRef } from './shared-v0vl5hov.cjs';
12
- export { a as agentRefSchema, b as atUriSchema, c as cidSchema, d as datetimeSchema, e as didSchema, f as externalRecordRefSchema, l as languageTagSchema, m as maxGraphemes, p as partialDateSchema, s as selfLabelsSchema, g as skillRefSchema, h as strongRefSchema, u as uriSchema } from './shared-v0vl5hov.cjs';
10
+ export { P as ProfileSummary, S as SummarizeProfileViewOptions, s as summarizeProfileView } from './profile-summary-CVFSy7BE.cjs';
11
+ import { E as EntitySearchResult } from './follow-profile-CQ3DTTak.cjs';
12
+ export { a as EntityImportSearchResponse, b as EntityImportSearchResponseSchema, c as EntityMintDomainResponse, d as EntityMintDomainResponseSchema, e as EntityResolveDomainRequest, f as EntityResolveDomainRequestSchema, g as EntityResolveDomainResponse, h as EntityResolveDomainResponseSchema, i as EntitySearchResponse, j as EntitySearchResponseSchema, k as EntitySearchResultSchema, l as EntitySelectRequest, m as EntitySelectRequestSchema, n as EntitySelectResponse, o as EntitySelectResponseSchema, F as FEATURE_FLAGS, p as FeatureAllowlistEntry, q as FeatureAllowlistEntrySchema, r as FeatureFlag, s as FollowProfileItem, t as FollowProfilePage, u as FollowProfilePageSchema, v as FollowProfileSchema } from './follow-profile-CQ3DTTak.cjs';
13
13
 
14
14
  type ContinentCode = 'AF' | 'AN' | 'AS' | 'EU' | 'NA' | 'OC' | 'SA';
15
15
  declare const CONTINENTS: ReadonlyArray<{
@@ -775,77 +775,6 @@ declare const ARTIFACT_LINK_KIND_LABELS: Record<string, string>;
775
775
  /** Resolve a label for an artifact-link-kind value. Falls back to the raw value. */
776
776
  declare function getArtifactLinkKindLabel(value: string | undefined | null): string | undefined;
777
777
 
778
- /**
779
- * Verification providers -- the trust roots Sifa recognizes for AT Protocol
780
- * `app.bsky.graph.verification` records.
781
- *
782
- * Framing (see decisions/2026-07-13-third-party-verification-providers.md, D4):
783
- * a verification checkmark is ONE low-tier trust layer, not Sifa's headline.
784
- * Most of what it certifies is "this account is who they claim to be" -- useful,
785
- * and worth carrying because it's an already-recognized network signal, but low
786
- * value on its own. It sits among Sifa's other trust signals and never becomes a
787
- * score or a gate. This registry only decides which issuers Sifa displays and
788
- * with what provenance.
789
- *
790
- * Data-only: badge colors and icons are consumer concerns (React DOM on web,
791
- * React Native on mobile), same split as {@link PLATFORM_LABELS}. Consumers map
792
- * a provider id to a token/color.
793
- */
794
- type VerificationProviderId = 'bluesky' | 'mu';
795
- /** How Sifa learns about a provider's verifications. */
796
- type VerificationSource = 'bluesky-api' | 'firehose';
797
- interface VerificationProvider {
798
- id: VerificationProviderId;
799
- /** Human label for the badge popover, e.g. "Bluesky", "mu (Eurosky)". */
800
- label: string;
801
- /**
802
- * Primary-display priority (D1): when an account holds verifications from
803
- * multiple providers, the lowest number wins the single inline badge and the
804
- * rest move into the popover. Must be unique across providers.
805
- */
806
- priority: number;
807
- /**
808
- * - `bluesky-api`: sourced from Bluesky's public-API `verifiedStatus`. Bluesky
809
- * maintains its own trusted-verifier set, so Sifa keeps no local DID list.
810
- * - `firehose`: sourced from the Jetstream, gated on {@link verifierDids}.
811
- */
812
- source: VerificationSource;
813
- /**
814
- * Trusted verifier DIDs for firehose-sourced providers. A verification record
815
- * counts only if its ISSUER DID is in this list. Empty for `bluesky-api`
816
- * providers (Bluesky's AppView owns that decision). DIDs, not handles: a handle
817
- * takeover must never confer verifier status.
818
- */
819
- verifierDids: readonly string[];
820
- }
821
- /**
822
- * A verification held by an account, as surfaced to the UI. `issuerDid` is
823
- * present for firehose-sourced providers and absent for `bluesky-api`.
824
- */
825
- interface AccountVerification {
826
- provider: VerificationProviderId;
827
- verifiedAt?: string | null;
828
- issuerDid?: string | null;
829
- }
830
- declare const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider>;
831
- declare function isKnownVerificationProvider(id: string): id is VerificationProviderId;
832
- declare function getVerificationProvider(id: string): VerificationProvider | undefined;
833
- /**
834
- * The firehose issuer gate: given the DID that authored an
835
- * `app.bsky.graph.verification` record, return the provider it verifies for, or
836
- * `null` if the issuer is not a recognized firehose verifier. API-sourced
837
- * providers (Bluesky) are never matched here -- their verifications do not enter
838
- * through the firehose, so a self-issued record cannot resolve to them.
839
- */
840
- declare function resolveVerifierProvider(issuerDid: string): VerificationProviderId | null;
841
- /**
842
- * D1 primary-provider selection: from all verifications an account holds, pick
843
- * the one whose provider has the highest priority (lowest `priority` number) for
844
- * the single inline badge. The rest belong in the popover. Verifications from
845
- * unknown providers are ignored. Returns `null` when nothing is displayable.
846
- */
847
- declare function primaryVerification(verifications: readonly AccountVerification[]): AccountVerification | null;
848
-
849
778
  /**
850
779
  * Investment taxonomy. Mirrors `id.sifa.defs#investmentRole`, `#investmentStage`
851
780
  * and `#investmentStatus` from sifa-lexicons.
@@ -3165,4 +3094,4 @@ declare function roadmapIssueUrl(issue: number): string;
3165
3094
  */
3166
3095
  declare const SIFA_SDK_VERSION: string;
3167
3096
 
3168
- export { ACTIVITY_TIERS, ACTIVITY_VERBS, ACTIVITY_VISIBILITY_RULES, ALL_SECTIONS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, ARTIFACT_LINK_KIND_LABELS, ARTIFACT_LINK_KIND_OPTIONS, AccountFacetMode, type AccountVerification, type ActivityItem, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type ActivityVerbMap, AgentRef, type AgentRefFlat, type AppCategoryId, type AppUrlPatterns, type AppWithId, type ArtifactLinkKindOption, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, COURSE_ROLE_LABELS, COURSE_ROLE_OPTIONS, COURSE_ROLE_TAKEN, COURSE_ROLE_TAUGHT, COURSE_ROLE_TEACHING_ASSISTANT, type CardHealth, type CardHealthStrategy, type CollapseContributorsOptions, type CollapsedContributors, type CompanyFirmographics, type ContinentCode, type CourseRoleOption, type CsvRow, DATE_LOOKAHEAD_MONTHS, DIMENSIONS_MAX_SCORE, type DailyActivityCount, type DateLookaheadKind, type DimensionKey, type DimensionMap, type DisambiguationFields, type DisplayUrl, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, ENTITY_REF_ANCHORS, EQF_LEVEL_LABELS, EQF_LEVEL_OPTIONS, type EmbedResult, type EmploymentTypeGroup, type EmploymentTypeOption, type EntityRefAnchor, EntitySearchResult, type EqfLevel, type EqfLevelOption, type FormatDisplayUrlOptions, type GroupPublicationVersionsOptions, INDUSTRY_LABELS, INDUSTRY_OPTIONS, INVESTMENT_ROLE_LABELS, INVESTMENT_ROLE_OPTIONS, INVESTMENT_STAGE_LABELS, INVESTMENT_STAGE_OPTIONS, INVESTMENT_STATUS_LABELS, INVESTMENT_STATUS_OPTIONS, INVOLVEMENT_HEADING_ORDER, INVOLVEMENT_KIND_HEADINGS, INVOLVEMENT_KIND_LABELS, INVOLVEMENT_KIND_OPTIONS, type IndustryOption, type InvestmentOption, type InvolvementGroup, type InvolvementKindOption, type KnownAppId, type LexiconEntry, type LocationSegment, type LocationSegmentKind, type LocationSegmentsOptions, LocationValue, MIN_SKILLS, type MergedProfileSkill, ON_BEHALF_OF_EMPLOYMENT_TYPES, OPEN_TO_GROUP_LABELS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_LABELS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLICATION_TYPE_LABELS, PUBLICATION_TYPE_OPTIONS, PUBLISHERS, type ParsedDelivery, type ParsedEndorsementComment, type ParsedPresentation, type PdsProvider, PdsProviderInfo, type PersonalFacetContent, type PlatformId, type PresentationDeliverySummary, PresentationDuration, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryFlagCandidate, type PrimaryPositionCandidate, Profile, ProfileCertification, type ProfileCompletion, type ProfileDimensionInputs, ProfileEducation, type ProfileHighlightSection, type ProfileHighlightStatus, type ProfileHighlightTile, type ProfileHighlightsInput, ProfileHonor, ProfileInvolvement, ProfileLanguage, ProfilePosition, ProfilePresentationDelivery, ProfilePresentationDeliveryRecord, ProfilePresentationRecord, ProfileProject, ProfilePublication, ProfileSkill, type PublicationTypeOption, type PublicationVersionGroup, type Publisher, ROADMAP_ISSUES_REPO, ROADMAP_ITEM_META, RelatedIdentifier, type RgbColor, type RoadmapItemMeta, SEARCH_FILTER_DEFS, SECTION_GROUPS, SECTION_LABELS, SELF_APP_ID, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, STREAM_VERBS, type SearchFilterControl, type SearchFilterDef, type SearchFilterOptionSource, type SectionGroupId, type SectionId, type SkillCategory, type StreamAddress, type StreamAuthor, type StreamCardBody, type StreamCardContent, type StreamCardSubject, type StreamCardVM, type StreamExternalLink, type StreamGeo, type StreamMedia, type StreamMediaBase, type StreamMediaBlob, type StreamMediaResolved, type StreamRichSegment, type StreamSource, type StreamTheme, type StreamVerb, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, VERIFICATION_PROVIDERS, type VerificationProvider, type VerificationProviderId, type VerificationSource, type VersionablePublication, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countRecentActivity, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, durationFromMinutes, entityDisambiguationLabel, entityResultKey, excludeSelfApp, filterHidden, findIndustry, followingFeedFallbackApp, formatCompanyName, formatCredentialDateRange, formatDateRange, formatDisplayUrl, formatDistanceToNow, formatEventDate, formatIsoTitle, formatLocation, formatPositionDateRange, formatPresentationDuration, formatRelationship, formatRelativeTime, formatSingleDate, formatSpanDate, formatTimelineDate, getActivityTaxonomyVersion, getActivityTier, getActivityVerbsVersion, getAppCategoryIcon, getAppIdForCollection, getArtifactLinkKindLabel, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getCourseRoleLabel, getDisplayLabel, getEducationLevelDisplay, getEmploymentTypeLabel, getEqfLevelLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabel, getIndustryLabelKey, getInvestmentRoleLabel, getInvestmentStageLabel, getInvestmentStatusLabel, getInvolvementKindHeading, getInvolvementKindLabel, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublicationTypeLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getVerificationProvider, getVisibleSectionIds, getWorkplaceTypeLabel, groupInvolvementByHeading, groupPublicationVersions, groupSkillsByCategory, groupSkillsBySubCategory, groupSkillsForDisplay, hasPersonalProfileContent, hoistPrimary, isAppCategory, isBeyondLookahead, isCompanyPageIndexable, isCompanyRequired, isKnownAppId, isKnownPlatform, isKnownVerificationProvider, isLinked, isOnBehalfOfApplicable, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseEndorsementComment, parseIntendedAudiences, parseLocationString, parsePresentationDuration, parseTalkRkey, pdsProviderFromApi, pickPrimaryFlagged, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, primaryVerification, profileToDimensionInputs, qualifiesAsOrg, readEqfLevel, relativeLuminance, renderAsLine, rendersCompanyProfile, rendersPersonalProfile, resolveAccountFacetMode, resolveAgentRef, resolveCardHealth, resolveCardUrl, resolveEmbed, resolveVerifierProvider, rgbToString, roadmapIssueUrl, sanitizeDisplayText, sanitizeHandleInput, searchResultDisambiguation, shouldRenderHighlights, singleDateExtractor, slugifyTitle, sortByActiveDateRange, sortByDateDesc, sortCertifications, sortEducation, sortHonors, sortLanguages, sortLanguagesByProficiency, sortPositions, sortProjects, sortPublications, splitCoursesByRole, streamAddressSchema, streamAuthorSchema, streamCardBodyContent, streamCardBodySchema, streamCardContent, streamCardSubjectSchema, streamCardSubjectText, streamCardVMSchema, streamExternalLinkSchema, streamGeoSchema, streamMediaSchema, streamRichSegmentSchema, streamSourceSchema, streamThemeSchema, streamVerbSchema, stripHtmlToText, suggestEqfLevelFromDegree, summarizePresentationDeliveries, toStreamCardVM, toStreamCardVMs, truncateGraphemes, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
3097
+ export { ACTIVITY_TIERS, ACTIVITY_VERBS, ACTIVITY_VISIBILITY_RULES, ALL_SECTIONS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, ARTIFACT_LINK_KIND_LABELS, ARTIFACT_LINK_KIND_OPTIONS, AccountFacetMode, type ActivityItem, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type ActivityVerbMap, AgentRef, type AgentRefFlat, type AppCategoryId, type AppUrlPatterns, type AppWithId, type ArtifactLinkKindOption, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, COURSE_ROLE_LABELS, COURSE_ROLE_OPTIONS, COURSE_ROLE_TAKEN, COURSE_ROLE_TAUGHT, COURSE_ROLE_TEACHING_ASSISTANT, type CardHealth, type CardHealthStrategy, type CollapseContributorsOptions, type CollapsedContributors, type CompanyFirmographics, type ContinentCode, type CourseRoleOption, type CsvRow, DATE_LOOKAHEAD_MONTHS, DIMENSIONS_MAX_SCORE, type DailyActivityCount, type DateLookaheadKind, type DimensionKey, type DimensionMap, type DisambiguationFields, type DisplayUrl, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, ENTITY_REF_ANCHORS, EQF_LEVEL_LABELS, EQF_LEVEL_OPTIONS, type EmbedResult, type EmploymentTypeGroup, type EmploymentTypeOption, type EntityRefAnchor, EntitySearchResult, type EqfLevel, type EqfLevelOption, type FormatDisplayUrlOptions, type GroupPublicationVersionsOptions, INDUSTRY_LABELS, INDUSTRY_OPTIONS, INVESTMENT_ROLE_LABELS, INVESTMENT_ROLE_OPTIONS, INVESTMENT_STAGE_LABELS, INVESTMENT_STAGE_OPTIONS, INVESTMENT_STATUS_LABELS, INVESTMENT_STATUS_OPTIONS, INVOLVEMENT_HEADING_ORDER, INVOLVEMENT_KIND_HEADINGS, INVOLVEMENT_KIND_LABELS, INVOLVEMENT_KIND_OPTIONS, type IndustryOption, type InvestmentOption, type InvolvementGroup, type InvolvementKindOption, type KnownAppId, type LexiconEntry, type LocationSegment, type LocationSegmentKind, type LocationSegmentsOptions, LocationValue, MIN_SKILLS, type MergedProfileSkill, ON_BEHALF_OF_EMPLOYMENT_TYPES, OPEN_TO_GROUP_LABELS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_LABELS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLICATION_TYPE_LABELS, PUBLICATION_TYPE_OPTIONS, PUBLISHERS, type ParsedDelivery, type ParsedEndorsementComment, type ParsedPresentation, type PdsProvider, PdsProviderInfo, type PersonalFacetContent, type PlatformId, type PresentationDeliverySummary, PresentationDuration, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryFlagCandidate, type PrimaryPositionCandidate, Profile, ProfileCertification, type ProfileCompletion, type ProfileDimensionInputs, ProfileEducation, type ProfileHighlightSection, type ProfileHighlightStatus, type ProfileHighlightTile, type ProfileHighlightsInput, ProfileHonor, ProfileInvolvement, ProfileLanguage, ProfilePosition, ProfilePresentationDelivery, ProfilePresentationDeliveryRecord, ProfilePresentationRecord, ProfileProject, ProfilePublication, ProfileSkill, type PublicationTypeOption, type PublicationVersionGroup, type Publisher, ROADMAP_ISSUES_REPO, ROADMAP_ITEM_META, RelatedIdentifier, type RgbColor, type RoadmapItemMeta, SEARCH_FILTER_DEFS, SECTION_GROUPS, SECTION_LABELS, SELF_APP_ID, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, STREAM_VERBS, type SearchFilterControl, type SearchFilterDef, type SearchFilterOptionSource, type SectionGroupId, type SectionId, type SkillCategory, type StreamAddress, type StreamAuthor, type StreamCardBody, type StreamCardContent, type StreamCardSubject, type StreamCardVM, type StreamExternalLink, type StreamGeo, type StreamMedia, type StreamMediaBase, type StreamMediaBlob, type StreamMediaResolved, type StreamRichSegment, type StreamSource, type StreamTheme, type StreamVerb, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, type VersionablePublication, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countRecentActivity, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, durationFromMinutes, entityDisambiguationLabel, entityResultKey, excludeSelfApp, filterHidden, findIndustry, followingFeedFallbackApp, formatCompanyName, formatCredentialDateRange, formatDateRange, formatDisplayUrl, formatDistanceToNow, formatEventDate, formatIsoTitle, formatLocation, formatPositionDateRange, formatPresentationDuration, formatRelationship, formatRelativeTime, formatSingleDate, formatSpanDate, formatTimelineDate, getActivityTaxonomyVersion, getActivityTier, getActivityVerbsVersion, getAppCategoryIcon, getAppIdForCollection, getArtifactLinkKindLabel, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getCourseRoleLabel, getDisplayLabel, getEducationLevelDisplay, getEmploymentTypeLabel, getEqfLevelLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabel, getIndustryLabelKey, getInvestmentRoleLabel, getInvestmentStageLabel, getInvestmentStatusLabel, getInvolvementKindHeading, getInvolvementKindLabel, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublicationTypeLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getVisibleSectionIds, getWorkplaceTypeLabel, groupInvolvementByHeading, groupPublicationVersions, groupSkillsByCategory, groupSkillsBySubCategory, groupSkillsForDisplay, hasPersonalProfileContent, hoistPrimary, isAppCategory, isBeyondLookahead, isCompanyPageIndexable, isCompanyRequired, isKnownAppId, isKnownPlatform, isLinked, isOnBehalfOfApplicable, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseEndorsementComment, parseIntendedAudiences, parseLocationString, parsePresentationDuration, parseTalkRkey, pdsProviderFromApi, pickPrimaryFlagged, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, profileToDimensionInputs, qualifiesAsOrg, readEqfLevel, relativeLuminance, renderAsLine, rendersCompanyProfile, rendersPersonalProfile, resolveAccountFacetMode, resolveAgentRef, resolveCardHealth, resolveCardUrl, resolveEmbed, rgbToString, roadmapIssueUrl, sanitizeDisplayText, sanitizeHandleInput, searchResultDisambiguation, shouldRenderHighlights, singleDateExtractor, slugifyTitle, sortByActiveDateRange, sortByDateDesc, sortCertifications, sortEducation, sortHonors, sortLanguages, sortLanguagesByProficiency, sortPositions, sortProjects, sortPublications, splitCoursesByRole, streamAddressSchema, streamAuthorSchema, streamCardBodyContent, streamCardBodySchema, streamCardContent, streamCardSubjectSchema, streamCardSubjectText, streamCardVMSchema, streamExternalLinkSchema, streamGeoSchema, streamMediaSchema, streamRichSegmentSchema, streamSourceSchema, streamThemeSchema, streamVerbSchema, stripHtmlToText, suggestEqfLevelFromDegree, summarizePresentationDeliveries, toStreamCardVM, toStreamCardVMs, truncateGraphemes, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
- import { P as ProfileSkill, a as ProfilePresentationDelivery, L as LocationValue, b as PdsProviderInfo, c as Profile, A as AccountFacetMode, d as ProfilePosition, e as ProfileCertification, f as ProfileEducation, g as ProfileHonor, h as ProfileLanguage, i as ProfileProject, j as ProfilePublication, k as ProfileInvolvement, R as RelatedIdentifier } from './index-D9GC0u__.js';
2
- export { l as ActiveApp, m as ActorCard, n as AuthorSuggestion, C as CoSpeaker, E as Endorsement, o as EndorsementData, p as ExternalAccount, q as ExternalAccountKeytraceClaim, F as FeedItem, r as LanguageProficiency, O as OrgAddressView, s as OrgFloorVerdict, t as OrgLinkView, u as OrgProfileView, v as PROJECT_ROLES, w as PresentationLinkView, x as ProfileCourse, y as ProfileIndustry, z as ProfileInvestment, B as ProfileInvestmentLink, D as ProfileInvolvementLink, G as ProfileLocation, H as ProfileOverrideSource, I as ProfilePresentation, J as ProfileVolunteering, K as ProjectMemberCard, M as ProjectRole, N as PublicationContributor, Q as RecognizedEntity, S as SkillRef, T as SkillSuggestion, U as TrustStat, V as VerifiedAccount } from './index-D9GC0u__.js';
3
- import { S as SearchFilters } from './types-jB67EFpw.js';
4
- export { A as ADULT_CONTENT_LABELS, a as ActiveAppView, b as ActivityLabel, c as AdultContentLabel, d as AtfundLinkView, C as CertificationView, e as CoSpeakerView, f as ContributorView, g as CourseView, D as DurationView, E as EducationView, h as ExternalAccountView, H as HonorView, I as IndustryDomain, i as InvolvementLinkView, j as InvolvementView, L as LanguageView, P as PositionView, k as PresentationDeliveryView, l as PresentationView, m as ProfileLocationView, n as ProfileView, o as ProjectMemberView, p as ProjectView, q as PublicationView, R as RepoCollectionGroup, r as RepoDeleteOutcome, s as RepoDeleteRecordResult, t as RepoDeleteResult, u as RepoGroupDefinition, v as RepoGroupId, w as RepoInventory, x as RepoRecordLabel, y as RepoRecordSummary, z as SIFA_REPO_GROUPS, B as SkillView, V as VolunteeringView, F as describeSifaRecord, G as hasAdultContent, J as repoGroupForCollection } from './types-jB67EFpw.js';
1
+ import { P as ProfileSkill, a as ProfilePresentationDelivery, L as LocationValue, b as PdsProviderInfo, c as Profile, A as AccountFacetMode, d as ProfilePosition, e as ProfileCertification, f as ProfileEducation, g as ProfileHonor, h as ProfileLanguage, i as ProfileProject, j as ProfilePublication, k as ProfileInvolvement, R as RelatedIdentifier } from './index-CT-A3BEe.js';
2
+ export { l as ActiveApp, m as ActorCard, n as AuthorSuggestion, C as CoSpeaker, E as Endorsement, o as EndorsementData, p as ExternalAccount, q as ExternalAccountKeytraceClaim, F as FeedItem, r as LanguageProficiency, O as OrgAddressView, s as OrgFloorVerdict, t as OrgLinkView, u as OrgProfileView, v as PROJECT_ROLES, w as PresentationLinkView, x as ProfileCourse, y as ProfileIndustry, z as ProfileInvestment, B as ProfileInvestmentLink, D as ProfileInvolvementLink, G as ProfileLocation, H as ProfileOverrideSource, I as ProfilePresentation, J as ProfileVolunteering, K as ProjectMemberCard, M as ProjectRole, N as PublicationContributor, Q as RecognizedEntity, S as SkillRef, T as SkillSuggestion, U as TrustStat, V as VerifiedAccount } from './index-CT-A3BEe.js';
3
+ import { S as SearchFilters } from './types-Bl8KYBSl.js';
4
+ export { A as ADULT_CONTENT_LABELS, a as ActiveAppView, b as ActivityLabel, c as AdultContentLabel, d as AtfundLinkView, C as CertificationView, e as CoSpeakerView, f as ContributorView, g as CourseView, D as DurationView, E as EducationView, h as ExternalAccountView, H as HonorView, I as IndustryDomain, i as InvolvementLinkView, j as InvolvementView, L as LanguageView, P as PositionView, k as PresentationDeliveryView, l as PresentationView, m as ProfileLocationView, n as ProfileView, o as ProjectMemberView, p as ProjectView, q as PublicationView, R as RepoCollectionGroup, r as RepoDeleteOutcome, s as RepoDeleteRecordResult, t as RepoDeleteResult, u as RepoGroupDefinition, v as RepoGroupId, w as RepoInventory, x as RepoRecordLabel, y as RepoRecordSummary, z as SIFA_REPO_GROUPS, B as SkillView, V as VolunteeringView, F as describeSifaRecord, G as hasAdultContent, J as repoGroupForCollection } from './types-Bl8KYBSl.js';
5
+ import { A as AgentRef } from './verification-providers-7il3kPQS.js';
6
+ export { a as AccountVerification, V as VERIFICATION_PROVIDERS, b as VerificationProvider, c as VerificationProviderId, d as VerificationSource, e as agentRefSchema, f as atUriSchema, g as cidSchema, h as datetimeSchema, i as didSchema, j as externalRecordRefSchema, k as getVerificationProvider, l as isKnownVerificationProvider, m as languageTagSchema, n as maxGraphemes, p as partialDateSchema, o as primaryVerification, r as resolveVerifierProvider, s as selfLabelsSchema, q as skillRefSchema, t as strongRefSchema, u as uriSchema } from './verification-providers-7il3kPQS.js';
5
7
  import { P as PresentationDuration, a as ProfilePresentationDeliveryRecord, b as ProfilePresentationRecord, O as OrgProfileRecord } from './profile-investment-BiHM7C5q.js';
6
8
  export { A as ArtifactLink, c as ArtifactLinkSchema, d as AtmosphereFeedItem, e as AtmosphereFeedItemSchema, B as BlobRef, f as BlobRefSchema, E as EndorsementConfirmationRecord, g as EndorsementConfirmationRecordSchema, h as EndorsementRecord, i as EndorsementRecordSchema, F as FeedActor, j as FeedActorSchema, k as FeedCursor, l as FollowFeedItem, m as FollowFeedItemSchema, n as FollowFeedPage, o as FollowFeedPageSchema, G as GraphFollowRecord, p as GraphFollowRecordSchema, I as InvestmentAmountSchema, q as OrgEmploymentAttestationRecord, r as OrgEmploymentAttestationRecordSchema, s as OrgProfileRecordSchema, t as PROFILE_INVESTMENT_NSID, u as PROFILE_INVOLVEMENT_NSID, v as PresentationDurationSchema, w as PresentationLink, x as PresentationLinkSchema, y as ProfileCertificationRecord, z as ProfileCertificationRecordSchema, C as ProfileCourseRecord, D as ProfileCourseRecordSchema, H as ProfileEducationRecord, J as ProfileEducationRecordSchema, K as ProfileExternalAccountRecord, L as ProfileExternalAccountRecordSchema, M as ProfileHonorRecord, N as ProfileHonorRecordSchema, Q as ProfileInvestmentRecordSchema, R as ProfileInvolvementRecord, S as ProfileInvolvementRecordSchema, T as ProfileLanguageRecord, U as ProfileLanguageRecordSchema, V as ProfilePositionRecord, W as ProfilePositionRecordSchema, X as ProfilePresentationDeliveryRecordSchema, Y as ProfilePresentationRecordSchema, Z as ProfileProjectRecord, _ as ProfileProjectRecordSchema, $ as ProfilePublicationRecord, a0 as ProfilePublicationRecordSchema, a1 as ProfileSelfRecord, a2 as ProfileSelfRecordSchema, a3 as ProfileSkillRecord, a4 as ProfileSkillRecordSchema, a5 as ProfileVolunteeringRecord, a6 as ProfileVolunteeringRecordSchema, a7 as PublicationAuthor, a8 as PublicationAuthorSchema, a9 as RelatedIdentifierSchema, aa as SifaFeedItem, ab as SifaFeedItemSchema, ac as decodeFeedCursor, ad as encodeFeedCursor, ae as makeGraphFollowRecordSchema } from './profile-investment-BiHM7C5q.js';
7
9
  import { z } from 'zod';
8
- export { P as ProfileSummary, S as SummarizeProfileViewOptions, s as summarizeProfileView } from './profile-summary-Bj7ufSDK.js';
9
- import { E as EntitySearchResult } from './follow-profile-D1l6pulB.js';
10
- export { a as EntityImportSearchResponse, b as EntityImportSearchResponseSchema, c as EntityMintDomainResponse, d as EntityMintDomainResponseSchema, e as EntityResolveDomainRequest, f as EntityResolveDomainRequestSchema, g as EntityResolveDomainResponse, h as EntityResolveDomainResponseSchema, i as EntitySearchResponse, j as EntitySearchResponseSchema, k as EntitySearchResultSchema, l as EntitySelectRequest, m as EntitySelectRequestSchema, n as EntitySelectResponse, o as EntitySelectResponseSchema, F as FEATURE_FLAGS, p as FeatureAllowlistEntry, q as FeatureAllowlistEntrySchema, r as FeatureFlag, s as FollowProfileItem, t as FollowProfilePage, u as FollowProfilePageSchema, v as FollowProfileSchema } from './follow-profile-D1l6pulB.js';
11
- import { A as AgentRef } from './shared-v0vl5hov.js';
12
- export { a as agentRefSchema, b as atUriSchema, c as cidSchema, d as datetimeSchema, e as didSchema, f as externalRecordRefSchema, l as languageTagSchema, m as maxGraphemes, p as partialDateSchema, s as selfLabelsSchema, g as skillRefSchema, h as strongRefSchema, u as uriSchema } from './shared-v0vl5hov.js';
10
+ export { P as ProfileSummary, S as SummarizeProfileViewOptions, s as summarizeProfileView } from './profile-summary-DiONU2n-.js';
11
+ import { E as EntitySearchResult } from './follow-profile-ceqefXAw.js';
12
+ export { a as EntityImportSearchResponse, b as EntityImportSearchResponseSchema, c as EntityMintDomainResponse, d as EntityMintDomainResponseSchema, e as EntityResolveDomainRequest, f as EntityResolveDomainRequestSchema, g as EntityResolveDomainResponse, h as EntityResolveDomainResponseSchema, i as EntitySearchResponse, j as EntitySearchResponseSchema, k as EntitySearchResultSchema, l as EntitySelectRequest, m as EntitySelectRequestSchema, n as EntitySelectResponse, o as EntitySelectResponseSchema, F as FEATURE_FLAGS, p as FeatureAllowlistEntry, q as FeatureAllowlistEntrySchema, r as FeatureFlag, s as FollowProfileItem, t as FollowProfilePage, u as FollowProfilePageSchema, v as FollowProfileSchema } from './follow-profile-ceqefXAw.js';
13
13
 
14
14
  type ContinentCode = 'AF' | 'AN' | 'AS' | 'EU' | 'NA' | 'OC' | 'SA';
15
15
  declare const CONTINENTS: ReadonlyArray<{
@@ -775,77 +775,6 @@ declare const ARTIFACT_LINK_KIND_LABELS: Record<string, string>;
775
775
  /** Resolve a label for an artifact-link-kind value. Falls back to the raw value. */
776
776
  declare function getArtifactLinkKindLabel(value: string | undefined | null): string | undefined;
777
777
 
778
- /**
779
- * Verification providers -- the trust roots Sifa recognizes for AT Protocol
780
- * `app.bsky.graph.verification` records.
781
- *
782
- * Framing (see decisions/2026-07-13-third-party-verification-providers.md, D4):
783
- * a verification checkmark is ONE low-tier trust layer, not Sifa's headline.
784
- * Most of what it certifies is "this account is who they claim to be" -- useful,
785
- * and worth carrying because it's an already-recognized network signal, but low
786
- * value on its own. It sits among Sifa's other trust signals and never becomes a
787
- * score or a gate. This registry only decides which issuers Sifa displays and
788
- * with what provenance.
789
- *
790
- * Data-only: badge colors and icons are consumer concerns (React DOM on web,
791
- * React Native on mobile), same split as {@link PLATFORM_LABELS}. Consumers map
792
- * a provider id to a token/color.
793
- */
794
- type VerificationProviderId = 'bluesky' | 'mu';
795
- /** How Sifa learns about a provider's verifications. */
796
- type VerificationSource = 'bluesky-api' | 'firehose';
797
- interface VerificationProvider {
798
- id: VerificationProviderId;
799
- /** Human label for the badge popover, e.g. "Bluesky", "mu (Eurosky)". */
800
- label: string;
801
- /**
802
- * Primary-display priority (D1): when an account holds verifications from
803
- * multiple providers, the lowest number wins the single inline badge and the
804
- * rest move into the popover. Must be unique across providers.
805
- */
806
- priority: number;
807
- /**
808
- * - `bluesky-api`: sourced from Bluesky's public-API `verifiedStatus`. Bluesky
809
- * maintains its own trusted-verifier set, so Sifa keeps no local DID list.
810
- * - `firehose`: sourced from the Jetstream, gated on {@link verifierDids}.
811
- */
812
- source: VerificationSource;
813
- /**
814
- * Trusted verifier DIDs for firehose-sourced providers. A verification record
815
- * counts only if its ISSUER DID is in this list. Empty for `bluesky-api`
816
- * providers (Bluesky's AppView owns that decision). DIDs, not handles: a handle
817
- * takeover must never confer verifier status.
818
- */
819
- verifierDids: readonly string[];
820
- }
821
- /**
822
- * A verification held by an account, as surfaced to the UI. `issuerDid` is
823
- * present for firehose-sourced providers and absent for `bluesky-api`.
824
- */
825
- interface AccountVerification {
826
- provider: VerificationProviderId;
827
- verifiedAt?: string | null;
828
- issuerDid?: string | null;
829
- }
830
- declare const VERIFICATION_PROVIDERS: Record<VerificationProviderId, VerificationProvider>;
831
- declare function isKnownVerificationProvider(id: string): id is VerificationProviderId;
832
- declare function getVerificationProvider(id: string): VerificationProvider | undefined;
833
- /**
834
- * The firehose issuer gate: given the DID that authored an
835
- * `app.bsky.graph.verification` record, return the provider it verifies for, or
836
- * `null` if the issuer is not a recognized firehose verifier. API-sourced
837
- * providers (Bluesky) are never matched here -- their verifications do not enter
838
- * through the firehose, so a self-issued record cannot resolve to them.
839
- */
840
- declare function resolveVerifierProvider(issuerDid: string): VerificationProviderId | null;
841
- /**
842
- * D1 primary-provider selection: from all verifications an account holds, pick
843
- * the one whose provider has the highest priority (lowest `priority` number) for
844
- * the single inline badge. The rest belong in the popover. Verifications from
845
- * unknown providers are ignored. Returns `null` when nothing is displayable.
846
- */
847
- declare function primaryVerification(verifications: readonly AccountVerification[]): AccountVerification | null;
848
-
849
778
  /**
850
779
  * Investment taxonomy. Mirrors `id.sifa.defs#investmentRole`, `#investmentStage`
851
780
  * and `#investmentStatus` from sifa-lexicons.
@@ -3165,4 +3094,4 @@ declare function roadmapIssueUrl(issue: number): string;
3165
3094
  */
3166
3095
  declare const SIFA_SDK_VERSION: string;
3167
3096
 
3168
- export { ACTIVITY_TIERS, ACTIVITY_VERBS, ACTIVITY_VISIBILITY_RULES, ALL_SECTIONS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, ARTIFACT_LINK_KIND_LABELS, ARTIFACT_LINK_KIND_OPTIONS, AccountFacetMode, type AccountVerification, type ActivityItem, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type ActivityVerbMap, AgentRef, type AgentRefFlat, type AppCategoryId, type AppUrlPatterns, type AppWithId, type ArtifactLinkKindOption, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, COURSE_ROLE_LABELS, COURSE_ROLE_OPTIONS, COURSE_ROLE_TAKEN, COURSE_ROLE_TAUGHT, COURSE_ROLE_TEACHING_ASSISTANT, type CardHealth, type CardHealthStrategy, type CollapseContributorsOptions, type CollapsedContributors, type CompanyFirmographics, type ContinentCode, type CourseRoleOption, type CsvRow, DATE_LOOKAHEAD_MONTHS, DIMENSIONS_MAX_SCORE, type DailyActivityCount, type DateLookaheadKind, type DimensionKey, type DimensionMap, type DisambiguationFields, type DisplayUrl, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, ENTITY_REF_ANCHORS, EQF_LEVEL_LABELS, EQF_LEVEL_OPTIONS, type EmbedResult, type EmploymentTypeGroup, type EmploymentTypeOption, type EntityRefAnchor, EntitySearchResult, type EqfLevel, type EqfLevelOption, type FormatDisplayUrlOptions, type GroupPublicationVersionsOptions, INDUSTRY_LABELS, INDUSTRY_OPTIONS, INVESTMENT_ROLE_LABELS, INVESTMENT_ROLE_OPTIONS, INVESTMENT_STAGE_LABELS, INVESTMENT_STAGE_OPTIONS, INVESTMENT_STATUS_LABELS, INVESTMENT_STATUS_OPTIONS, INVOLVEMENT_HEADING_ORDER, INVOLVEMENT_KIND_HEADINGS, INVOLVEMENT_KIND_LABELS, INVOLVEMENT_KIND_OPTIONS, type IndustryOption, type InvestmentOption, type InvolvementGroup, type InvolvementKindOption, type KnownAppId, type LexiconEntry, type LocationSegment, type LocationSegmentKind, type LocationSegmentsOptions, LocationValue, MIN_SKILLS, type MergedProfileSkill, ON_BEHALF_OF_EMPLOYMENT_TYPES, OPEN_TO_GROUP_LABELS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_LABELS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLICATION_TYPE_LABELS, PUBLICATION_TYPE_OPTIONS, PUBLISHERS, type ParsedDelivery, type ParsedEndorsementComment, type ParsedPresentation, type PdsProvider, PdsProviderInfo, type PersonalFacetContent, type PlatformId, type PresentationDeliverySummary, PresentationDuration, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryFlagCandidate, type PrimaryPositionCandidate, Profile, ProfileCertification, type ProfileCompletion, type ProfileDimensionInputs, ProfileEducation, type ProfileHighlightSection, type ProfileHighlightStatus, type ProfileHighlightTile, type ProfileHighlightsInput, ProfileHonor, ProfileInvolvement, ProfileLanguage, ProfilePosition, ProfilePresentationDelivery, ProfilePresentationDeliveryRecord, ProfilePresentationRecord, ProfileProject, ProfilePublication, ProfileSkill, type PublicationTypeOption, type PublicationVersionGroup, type Publisher, ROADMAP_ISSUES_REPO, ROADMAP_ITEM_META, RelatedIdentifier, type RgbColor, type RoadmapItemMeta, SEARCH_FILTER_DEFS, SECTION_GROUPS, SECTION_LABELS, SELF_APP_ID, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, STREAM_VERBS, type SearchFilterControl, type SearchFilterDef, type SearchFilterOptionSource, type SectionGroupId, type SectionId, type SkillCategory, type StreamAddress, type StreamAuthor, type StreamCardBody, type StreamCardContent, type StreamCardSubject, type StreamCardVM, type StreamExternalLink, type StreamGeo, type StreamMedia, type StreamMediaBase, type StreamMediaBlob, type StreamMediaResolved, type StreamRichSegment, type StreamSource, type StreamTheme, type StreamVerb, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, VERIFICATION_PROVIDERS, type VerificationProvider, type VerificationProviderId, type VerificationSource, type VersionablePublication, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countRecentActivity, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, durationFromMinutes, entityDisambiguationLabel, entityResultKey, excludeSelfApp, filterHidden, findIndustry, followingFeedFallbackApp, formatCompanyName, formatCredentialDateRange, formatDateRange, formatDisplayUrl, formatDistanceToNow, formatEventDate, formatIsoTitle, formatLocation, formatPositionDateRange, formatPresentationDuration, formatRelationship, formatRelativeTime, formatSingleDate, formatSpanDate, formatTimelineDate, getActivityTaxonomyVersion, getActivityTier, getActivityVerbsVersion, getAppCategoryIcon, getAppIdForCollection, getArtifactLinkKindLabel, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getCourseRoleLabel, getDisplayLabel, getEducationLevelDisplay, getEmploymentTypeLabel, getEqfLevelLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabel, getIndustryLabelKey, getInvestmentRoleLabel, getInvestmentStageLabel, getInvestmentStatusLabel, getInvolvementKindHeading, getInvolvementKindLabel, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublicationTypeLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getVerificationProvider, getVisibleSectionIds, getWorkplaceTypeLabel, groupInvolvementByHeading, groupPublicationVersions, groupSkillsByCategory, groupSkillsBySubCategory, groupSkillsForDisplay, hasPersonalProfileContent, hoistPrimary, isAppCategory, isBeyondLookahead, isCompanyPageIndexable, isCompanyRequired, isKnownAppId, isKnownPlatform, isKnownVerificationProvider, isLinked, isOnBehalfOfApplicable, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseEndorsementComment, parseIntendedAudiences, parseLocationString, parsePresentationDuration, parseTalkRkey, pdsProviderFromApi, pickPrimaryFlagged, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, primaryVerification, profileToDimensionInputs, qualifiesAsOrg, readEqfLevel, relativeLuminance, renderAsLine, rendersCompanyProfile, rendersPersonalProfile, resolveAccountFacetMode, resolveAgentRef, resolveCardHealth, resolveCardUrl, resolveEmbed, resolveVerifierProvider, rgbToString, roadmapIssueUrl, sanitizeDisplayText, sanitizeHandleInput, searchResultDisambiguation, shouldRenderHighlights, singleDateExtractor, slugifyTitle, sortByActiveDateRange, sortByDateDesc, sortCertifications, sortEducation, sortHonors, sortLanguages, sortLanguagesByProficiency, sortPositions, sortProjects, sortPublications, splitCoursesByRole, streamAddressSchema, streamAuthorSchema, streamCardBodyContent, streamCardBodySchema, streamCardContent, streamCardSubjectSchema, streamCardSubjectText, streamCardVMSchema, streamExternalLinkSchema, streamGeoSchema, streamMediaSchema, streamRichSegmentSchema, streamSourceSchema, streamThemeSchema, streamVerbSchema, stripHtmlToText, suggestEqfLevelFromDegree, summarizePresentationDeliveries, toStreamCardVM, toStreamCardVMs, truncateGraphemes, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
3097
+ export { ACTIVITY_TIERS, ACTIVITY_VERBS, ACTIVITY_VISIBILITY_RULES, ALL_SECTIONS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, ARTIFACT_LINK_KIND_LABELS, ARTIFACT_LINK_KIND_OPTIONS, AccountFacetMode, type ActivityItem, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type ActivityVerbMap, AgentRef, type AgentRefFlat, type AppCategoryId, type AppUrlPatterns, type AppWithId, type ArtifactLinkKindOption, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, COURSE_ROLE_LABELS, COURSE_ROLE_OPTIONS, COURSE_ROLE_TAKEN, COURSE_ROLE_TAUGHT, COURSE_ROLE_TEACHING_ASSISTANT, type CardHealth, type CardHealthStrategy, type CollapseContributorsOptions, type CollapsedContributors, type CompanyFirmographics, type ContinentCode, type CourseRoleOption, type CsvRow, DATE_LOOKAHEAD_MONTHS, DIMENSIONS_MAX_SCORE, type DailyActivityCount, type DateLookaheadKind, type DimensionKey, type DimensionMap, type DisambiguationFields, type DisplayUrl, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, ENTITY_REF_ANCHORS, EQF_LEVEL_LABELS, EQF_LEVEL_OPTIONS, type EmbedResult, type EmploymentTypeGroup, type EmploymentTypeOption, type EntityRefAnchor, EntitySearchResult, type EqfLevel, type EqfLevelOption, type FormatDisplayUrlOptions, type GroupPublicationVersionsOptions, INDUSTRY_LABELS, INDUSTRY_OPTIONS, INVESTMENT_ROLE_LABELS, INVESTMENT_ROLE_OPTIONS, INVESTMENT_STAGE_LABELS, INVESTMENT_STAGE_OPTIONS, INVESTMENT_STATUS_LABELS, INVESTMENT_STATUS_OPTIONS, INVOLVEMENT_HEADING_ORDER, INVOLVEMENT_KIND_HEADINGS, INVOLVEMENT_KIND_LABELS, INVOLVEMENT_KIND_OPTIONS, type IndustryOption, type InvestmentOption, type InvolvementGroup, type InvolvementKindOption, type KnownAppId, type LexiconEntry, type LocationSegment, type LocationSegmentKind, type LocationSegmentsOptions, LocationValue, MIN_SKILLS, type MergedProfileSkill, ON_BEHALF_OF_EMPLOYMENT_TYPES, OPEN_TO_GROUP_LABELS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_LABELS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLICATION_TYPE_LABELS, PUBLICATION_TYPE_OPTIONS, PUBLISHERS, type ParsedDelivery, type ParsedEndorsementComment, type ParsedPresentation, type PdsProvider, PdsProviderInfo, type PersonalFacetContent, type PlatformId, type PresentationDeliverySummary, PresentationDuration, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryFlagCandidate, type PrimaryPositionCandidate, Profile, ProfileCertification, type ProfileCompletion, type ProfileDimensionInputs, ProfileEducation, type ProfileHighlightSection, type ProfileHighlightStatus, type ProfileHighlightTile, type ProfileHighlightsInput, ProfileHonor, ProfileInvolvement, ProfileLanguage, ProfilePosition, ProfilePresentationDelivery, ProfilePresentationDeliveryRecord, ProfilePresentationRecord, ProfileProject, ProfilePublication, ProfileSkill, type PublicationTypeOption, type PublicationVersionGroup, type Publisher, ROADMAP_ISSUES_REPO, ROADMAP_ITEM_META, RelatedIdentifier, type RgbColor, type RoadmapItemMeta, SEARCH_FILTER_DEFS, SECTION_GROUPS, SECTION_LABELS, SELF_APP_ID, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, STREAM_VERBS, type SearchFilterControl, type SearchFilterDef, type SearchFilterOptionSource, type SectionGroupId, type SectionId, type SkillCategory, type StreamAddress, type StreamAuthor, type StreamCardBody, type StreamCardContent, type StreamCardSubject, type StreamCardVM, type StreamExternalLink, type StreamGeo, type StreamMedia, type StreamMediaBase, type StreamMediaBlob, type StreamMediaResolved, type StreamRichSegment, type StreamSource, type StreamTheme, type StreamVerb, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, type VersionablePublication, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countRecentActivity, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, durationFromMinutes, entityDisambiguationLabel, entityResultKey, excludeSelfApp, filterHidden, findIndustry, followingFeedFallbackApp, formatCompanyName, formatCredentialDateRange, formatDateRange, formatDisplayUrl, formatDistanceToNow, formatEventDate, formatIsoTitle, formatLocation, formatPositionDateRange, formatPresentationDuration, formatRelationship, formatRelativeTime, formatSingleDate, formatSpanDate, formatTimelineDate, getActivityTaxonomyVersion, getActivityTier, getActivityVerbsVersion, getAppCategoryIcon, getAppIdForCollection, getArtifactLinkKindLabel, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getCourseRoleLabel, getDisplayLabel, getEducationLevelDisplay, getEmploymentTypeLabel, getEqfLevelLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabel, getIndustryLabelKey, getInvestmentRoleLabel, getInvestmentStageLabel, getInvestmentStatusLabel, getInvolvementKindHeading, getInvolvementKindLabel, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublicationTypeLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getVisibleSectionIds, getWorkplaceTypeLabel, groupInvolvementByHeading, groupPublicationVersions, groupSkillsByCategory, groupSkillsBySubCategory, groupSkillsForDisplay, hasPersonalProfileContent, hoistPrimary, isAppCategory, isBeyondLookahead, isCompanyPageIndexable, isCompanyRequired, isKnownAppId, isKnownPlatform, isLinked, isOnBehalfOfApplicable, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseEndorsementComment, parseIntendedAudiences, parseLocationString, parsePresentationDuration, parseTalkRkey, pdsProviderFromApi, pickPrimaryFlagged, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, profileToDimensionInputs, qualifiesAsOrg, readEqfLevel, relativeLuminance, renderAsLine, rendersCompanyProfile, rendersPersonalProfile, resolveAccountFacetMode, resolveAgentRef, resolveCardHealth, resolveCardUrl, resolveEmbed, rgbToString, roadmapIssueUrl, sanitizeDisplayText, sanitizeHandleInput, searchResultDisambiguation, shouldRenderHighlights, singleDateExtractor, slugifyTitle, sortByActiveDateRange, sortByDateDesc, sortCertifications, sortEducation, sortHonors, sortLanguages, sortLanguagesByProficiency, sortPositions, sortProjects, sortPublications, splitCoursesByRole, streamAddressSchema, streamAuthorSchema, streamCardBodyContent, streamCardBodySchema, streamCardContent, streamCardSubjectSchema, streamCardSubjectText, streamCardVMSchema, streamExternalLinkSchema, streamGeoSchema, streamMediaSchema, streamRichSegmentSchema, streamSourceSchema, streamThemeSchema, streamVerbSchema, stripHtmlToText, suggestEqfLevelFromDegree, summarizePresentationDeliveries, toStreamCardVM, toStreamCardVMs, truncateGraphemes, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
package/dist/index.js CHANGED
@@ -350,7 +350,7 @@ import {
350
350
  roadmapIssueUrl
351
351
  } from "./roadmap/index.js";
352
352
  import { SIFA_REPO_GROUPS, describeSifaRecord, repoGroupForCollection } from "./repo/index.js";
353
- var SIFA_SDK_VERSION = "0.19.55";
353
+ var SIFA_SDK_VERSION = "0.19.56";
354
354
  export {
355
355
  ACTIVITY_TIERS,
356
356
  ACTIVITY_VERBS,
@@ -1,5 +1,5 @@
1
- import { L as LocationValue } from '../index-DmlIG8sJ.cjs';
2
- import '../shared-v0vl5hov.cjs';
1
+ import { L as LocationValue } from '../index-BeQbepFn.cjs';
2
+ import '../verification-providers-7il3kPQS.cjs';
3
3
  import 'zod';
4
4
 
5
5
  var vocabularies = {
@@ -1,5 +1,5 @@
1
- import { L as LocationValue } from '../index-D9GC0u__.js';
2
- import '../shared-v0vl5hov.js';
1
+ import { L as LocationValue } from '../index-CT-A3BEe.js';
2
+ import '../verification-providers-7il3kPQS.js';
3
3
  import 'zod';
4
4
 
5
5
  var vocabularies = {
@@ -1,7 +1,7 @@
1
- import { c as Profile, d as ProfilePosition, S as SkillRef, w as PresentationLinkView } from './index-DmlIG8sJ.cjs';
2
- import { K as SifaApiConfig, M as ApiFetchOptions, n as ProfileView, N as CreateResult, W as WriteResult } from './types-DHT7jcZc.cjs';
3
- import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-5T1hDw6Q.cjs';
4
- import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, l as EntitySelectRequest, n as EntitySelectResponse } from './follow-profile-D1l6pulB.cjs';
1
+ import { c as Profile, d as ProfilePosition, S as SkillRef, w as PresentationLinkView } from './index-BeQbepFn.cjs';
2
+ import { K as SifaApiConfig, M as ApiFetchOptions, n as ProfileView, N as CreateResult, W as WriteResult } from './types-CYjcuKr4.cjs';
3
+ import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-CVFSy7BE.cjs';
4
+ import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, l as EntitySelectRequest, n as EntitySelectResponse } from './follow-profile-CQ3DTTak.cjs';
5
5
  import { z } from 'zod';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { c as Profile, d as ProfilePosition, S as SkillRef, w as PresentationLinkView } from './index-D9GC0u__.js';
2
- import { K as SifaApiConfig, M as ApiFetchOptions, n as ProfileView, N as CreateResult, W as WriteResult } from './types-jB67EFpw.js';
3
- import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-Bj7ufSDK.js';
4
- import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, l as EntitySelectRequest, n as EntitySelectResponse } from './follow-profile-D1l6pulB.js';
1
+ import { c as Profile, d as ProfilePosition, S as SkillRef, w as PresentationLinkView } from './index-CT-A3BEe.js';
2
+ import { K as SifaApiConfig, M as ApiFetchOptions, n as ProfileView, N as CreateResult, W as WriteResult } from './types-Bl8KYBSl.js';
3
+ import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-DiONU2n-.js';
4
+ import { i as EntitySearchResponse, E as EntitySearchResult, c as EntityMintDomainResponse, g as EntityResolveDomainResponse, l as EntitySelectRequest, n as EntitySelectResponse } from './follow-profile-ceqefXAw.js';
5
5
  import { z } from 'zod';
6
6
 
7
7
  /**
@@ -1,6 +1,7 @@
1
- import { W as WriteResult, K as SifaApiConfig, M as ApiFetchOptions, N as CreateResult, b as ActivityLabel, t as RepoDeleteResult, w as RepoInventory } from './types-DHT7jcZc.cjs';
2
- import { p as ExternalAccount } from './index-DmlIG8sJ.cjs';
3
- import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-D1l6pulB.cjs';
1
+ import { W as WriteResult, K as SifaApiConfig, M as ApiFetchOptions, N as CreateResult, b as ActivityLabel, t as RepoDeleteResult, w as RepoInventory } from './types-CYjcuKr4.cjs';
2
+ import { p as ExternalAccount } from './index-BeQbepFn.cjs';
3
+ import { a as AccountVerification } from './verification-providers-7il3kPQS.cjs';
4
+ import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-CQ3DTTak.cjs';
4
5
  import { z } from 'zod';
5
6
  import { d as OrgNotificationEmailRequestInput, b as OrgDomainChallengeRequestInput, O as OrgClaimRequestInput, a as OrgProfileUpdateRequestInput, c as OrgDomainVerifyRequestInput } from './org-settings-C73Sin5E.cjs';
6
7
 
@@ -736,6 +737,12 @@ interface SuggestionProfile {
736
737
  source: string;
737
738
  dismissed: boolean;
738
739
  blueskyVerified?: boolean;
740
+ /**
741
+ * Every verification the account holds, across all recognized providers
742
+ * (Bluesky and firehose-sourced ones like mu). Supersedes the Bluesky-only
743
+ * `blueskyVerified` pair for badge rendering. Absent on older API responses.
744
+ */
745
+ verificationBadges?: AccountVerification[];
739
746
  }
740
747
  interface SuggestionsResponse {
741
748
  onSifa: SuggestionProfile[];
@@ -984,6 +991,12 @@ interface FollowProfile {
984
991
  followedAt: string;
985
992
  blueskyVerified?: boolean;
986
993
  blueskyVerifiedAt?: string | null;
994
+ /**
995
+ * Every verification the account holds, across all recognized providers
996
+ * (Bluesky and firehose-sourced ones like mu). Supersedes the Bluesky-only
997
+ * `blueskyVerified` pair for badge rendering. Absent on older API responses.
998
+ */
999
+ verificationBadges?: AccountVerification[];
987
1000
  }
988
1001
  interface FollowingResponse {
989
1002
  follows: FollowProfile[];
@@ -1,6 +1,7 @@
1
- import { W as WriteResult, K as SifaApiConfig, M as ApiFetchOptions, N as CreateResult, b as ActivityLabel, t as RepoDeleteResult, w as RepoInventory } from './types-jB67EFpw.js';
2
- import { p as ExternalAccount } from './index-D9GC0u__.js';
3
- import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-D1l6pulB.js';
1
+ import { W as WriteResult, K as SifaApiConfig, M as ApiFetchOptions, N as CreateResult, b as ActivityLabel, t as RepoDeleteResult, w as RepoInventory } from './types-Bl8KYBSl.js';
2
+ import { p as ExternalAccount } from './index-CT-A3BEe.js';
3
+ import { a as AccountVerification } from './verification-providers-7il3kPQS.js';
4
+ import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-ceqefXAw.js';
4
5
  import { z } from 'zod';
5
6
  import { f as OrgNotificationEmailRequestInput, b as OrgDomainChallengeRequestInput, O as OrgClaimRequestInput, h as OrgProfileUpdateRequestInput, d as OrgDomainVerifyRequestInput } from './org-settings-BShvhyFp.js';
6
7
 
@@ -736,6 +737,12 @@ interface SuggestionProfile {
736
737
  source: string;
737
738
  dismissed: boolean;
738
739
  blueskyVerified?: boolean;
740
+ /**
741
+ * Every verification the account holds, across all recognized providers
742
+ * (Bluesky and firehose-sourced ones like mu). Supersedes the Bluesky-only
743
+ * `blueskyVerified` pair for badge rendering. Absent on older API responses.
744
+ */
745
+ verificationBadges?: AccountVerification[];
739
746
  }
740
747
  interface SuggestionsResponse {
741
748
  onSifa: SuggestionProfile[];
@@ -984,6 +991,12 @@ interface FollowProfile {
984
991
  followedAt: string;
985
992
  blueskyVerified?: boolean;
986
993
  blueskyVerifiedAt?: string | null;
994
+ /**
995
+ * Every verification the account holds, across all recognized providers
996
+ * (Bluesky and firehose-sourced ones like mu). Supersedes the Bluesky-only
997
+ * `blueskyVerified` pair for badge rendering. Absent on older API responses.
998
+ */
999
+ verificationBadges?: AccountVerification[];
987
1000
  }
988
1001
  interface FollowingResponse {
989
1002
  follows: FollowProfile[];
@@ -1,4 +1,4 @@
1
- import { n as ProfileView } from './types-DHT7jcZc.cjs';
1
+ import { n as ProfileView } from './types-CYjcuKr4.cjs';
2
2
 
3
3
  /**
4
4
  * Compact professional summary derived from a {@link ProfileView}.
@@ -1,4 +1,4 @@
1
- import { n as ProfileView } from './types-jB67EFpw.js';
1
+ import { n as ProfileView } from './types-Bl8KYBSl.js';
2
2
 
3
3
  /**
4
4
  * Compact professional summary derived from a {@link ProfileView}.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/query/fetchers/discovery.ts"],"sourcesContent":["import { encodeIdentifier, apiFetch, type ApiFetchOptions, type SifaApiConfig } from '../client.js';\n\n/** Lightweight profile representation used by discovery endpoints. */\nexport interface SimilarProfile {\n did: string;\n handle: string;\n displayName?: string | null;\n avatar?: string | null;\n headline?: string | null;\n currentRole?: string | null;\n currentCompany?: string | null;\n industry?: string | null;\n domain?: string | null;\n}\n\nexport interface SuggestionProfile {\n did: string;\n handle: string;\n displayName?: string;\n headline?: string;\n avatarUrl?: string;\n source: string;\n dismissed: boolean;\n blueskyVerified?: boolean;\n}\n\nexport interface SuggestionsResponse {\n onSifa: SuggestionProfile[];\n notOnSifa: SuggestionProfile[];\n cursor?: string;\n}\n\nexport interface FeaturedProfile {\n did: string;\n handle: string;\n displayName?: string;\n avatar?: string;\n pronouns?: string;\n headline?: string;\n about?: string;\n currentRole?: string;\n currentCompany?: string;\n locationCountry?: string;\n locationRegion?: string;\n /** Legacy alias for `locationLocality`; emitted by sifa-api during the additive response window. */\n locationCity?: string;\n /** community.lexicon.location.address field name -- prefer over `locationCity`. */\n locationLocality?: string;\n countryCode?: string;\n location?: string;\n website?: string;\n openTo?: string[];\n preferredWorkplace?: string[];\n availableFromUtc?: number;\n availableToUtc?: number;\n followersCount?: number;\n atprotoFollowersCount?: number;\n pdsProvider?: { name: string; host: string } | null;\n claimed: boolean;\n featuredDate: string;\n}\n\n/** Profiles similar to the given DID (matchmaking). Returns `[]` on error. */\nexport async function fetchSimilarProfiles(\n config: SifaApiConfig,\n did: string,\n opts: { limit?: number } & ApiFetchOptions = {},\n): Promise<SimilarProfile[]> {\n const limit = opts.limit ?? 5;\n const path = `/api/discover/similar/${encodeIdentifier(did)}?limit=${limit}`;\n try {\n const data = await apiFetch<{ profiles?: SimilarProfile[] }>(config, path, {\n next: { revalidate: 300 },\n timeoutMs: 5000,\n ...opts,\n });\n return data.profiles ?? [];\n } catch {\n return [];\n }\n}\n\nexport interface FetchSuggestionsOptions extends ApiFetchOptions {\n source?: string;\n includeDismissed?: boolean;\n cursor?: string;\n limit?: number;\n /**\n * Pass the caller's `Cookie` header on Next.js RSC server-side calls.\n * `credentials: 'include'` does NOT propagate browser cookies in RSC,\n * so authenticated server fetches must forward the header explicitly.\n */\n cookieHeader?: string;\n}\n\n/** Discovery suggestions feed. Resolves to empty arrays on error. */\nexport async function fetchSuggestions(\n config: SifaApiConfig,\n opts: FetchSuggestionsOptions = {},\n): Promise<SuggestionsResponse> {\n const params = new URLSearchParams();\n if (opts.source) params.set('source', opts.source);\n if (opts.includeDismissed) params.set('include_dismissed', 'true');\n if (opts.cursor) params.set('cursor', opts.cursor);\n if (opts.limit) params.set('limit', String(opts.limit));\n\n const qs = params.toString();\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n\n try {\n return await apiFetch<SuggestionsResponse>(config, `/api/suggestions${qs ? `?${qs}` : ''}`, {\n credentials: 'include',\n cache: 'no-store',\n timeoutMs: 8000,\n ...opts,\n headers,\n });\n } catch {\n return { onSifa: [], notOnSifa: [] };\n }\n}\n\n/** Count of pending suggestions since an optional timestamp. */\nexport async function fetchSuggestionCount(\n config: SifaApiConfig,\n since?: string,\n options: ApiFetchOptions = {},\n): Promise<number> {\n const params = since ? `?since=${encodeURIComponent(since)}` : '';\n try {\n const data = await apiFetch<{ count?: number }>(config, `/api/suggestions/count${params}`, {\n credentials: 'include',\n cache: 'no-store',\n ...options,\n });\n return data.count ?? 0;\n } catch {\n return 0;\n }\n}\n\n/** Featured profile (rotated by sifa-api). Returns `null` when none. */\nexport async function fetchFeaturedProfile(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<FeaturedProfile | null> {\n try {\n return await apiFetch<FeaturedProfile>(config, '/api/featured-profile', {\n next: { revalidate: 900 },\n ...options,\n });\n } catch {\n return null;\n }\n}\n"],"mappings":";AAAA,SAAS,kBAAkB,gBAA0D;AA+DrF,eAAsB,qBACpB,QACA,KACA,OAA6C,CAAC,GACnB;AAC3B,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,OAAO,yBAAyB,iBAAiB,GAAG,CAAC,UAAU,KAAK;AAC1E,MAAI;AACF,UAAM,OAAO,MAAM,SAA0C,QAAQ,MAAM;AAAA,MACzE,MAAM,EAAE,YAAY,IAAI;AAAA,MACxB,WAAW;AAAA,MACX,GAAG;AAAA,IACL,CAAC;AACD,WAAO,KAAK,YAAY,CAAC;AAAA,EAC3B,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAgBA,eAAsB,iBACpB,QACA,OAAgC,CAAC,GACH;AAC9B,QAAM,SAAS,IAAI,gBAAgB;AACnC,MAAI,KAAK,OAAQ,QAAO,IAAI,UAAU,KAAK,MAAM;AACjD,MAAI,KAAK,iBAAkB,QAAO,IAAI,qBAAqB,MAAM;AACjE,MAAI,KAAK,OAAQ,QAAO,IAAI,UAAU,KAAK,MAAM;AACjD,MAAI,KAAK,MAAO,QAAO,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC;AAEtD,QAAM,KAAK,OAAO,SAAS;AAC3B,QAAM,UAAkC,EAAE,GAAI,KAAK,WAAW,CAAC,EAAG;AAClE,MAAI,KAAK,aAAc,SAAQ,SAAS,KAAK;AAE7C,MAAI;AACF,WAAO,MAAM,SAA8B,QAAQ,mBAAmB,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI;AAAA,MAC1F,aAAa;AAAA,MACb,OAAO;AAAA,MACP,WAAW;AAAA,MACX,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC,EAAE;AAAA,EACrC;AACF;AAGA,eAAsB,qBACpB,QACA,OACA,UAA2B,CAAC,GACX;AACjB,QAAM,SAAS,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAC/D,MAAI;AACF,UAAM,OAAO,MAAM,SAA6B,QAAQ,yBAAyB,MAAM,IAAI;AAAA,MACzF,aAAa;AAAA,MACb,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AACD,WAAO,KAAK,SAAS;AAAA,EACvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,qBACpB,QACA,UAA2B,CAAC,GACK;AACjC,MAAI;AACF,WAAO,MAAM,SAA0B,QAAQ,yBAAyB;AAAA,MACtE,MAAM,EAAE,YAAY,IAAI;AAAA,MACxB,GAAG;AAAA,IACL,CAAC;AAAA,EACH,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/query/fetchers/discovery.ts"],"sourcesContent":["import type { AccountVerification } from '../../taxonomy/verification-providers.js';\nimport { encodeIdentifier, apiFetch, type ApiFetchOptions, type SifaApiConfig } from '../client.js';\n\n/** Lightweight profile representation used by discovery endpoints. */\nexport interface SimilarProfile {\n did: string;\n handle: string;\n displayName?: string | null;\n avatar?: string | null;\n headline?: string | null;\n currentRole?: string | null;\n currentCompany?: string | null;\n industry?: string | null;\n domain?: string | null;\n}\n\nexport interface SuggestionProfile {\n did: string;\n handle: string;\n displayName?: string;\n headline?: string;\n avatarUrl?: string;\n source: string;\n dismissed: boolean;\n blueskyVerified?: boolean;\n /**\n * Every verification the account holds, across all recognized providers\n * (Bluesky and firehose-sourced ones like mu). Supersedes the Bluesky-only\n * `blueskyVerified` pair for badge rendering. Absent on older API responses.\n */\n verificationBadges?: AccountVerification[];\n}\n\nexport interface SuggestionsResponse {\n onSifa: SuggestionProfile[];\n notOnSifa: SuggestionProfile[];\n cursor?: string;\n}\n\nexport interface FeaturedProfile {\n did: string;\n handle: string;\n displayName?: string;\n avatar?: string;\n pronouns?: string;\n headline?: string;\n about?: string;\n currentRole?: string;\n currentCompany?: string;\n locationCountry?: string;\n locationRegion?: string;\n /** Legacy alias for `locationLocality`; emitted by sifa-api during the additive response window. */\n locationCity?: string;\n /** community.lexicon.location.address field name -- prefer over `locationCity`. */\n locationLocality?: string;\n countryCode?: string;\n location?: string;\n website?: string;\n openTo?: string[];\n preferredWorkplace?: string[];\n availableFromUtc?: number;\n availableToUtc?: number;\n followersCount?: number;\n atprotoFollowersCount?: number;\n pdsProvider?: { name: string; host: string } | null;\n claimed: boolean;\n featuredDate: string;\n}\n\n/** Profiles similar to the given DID (matchmaking). Returns `[]` on error. */\nexport async function fetchSimilarProfiles(\n config: SifaApiConfig,\n did: string,\n opts: { limit?: number } & ApiFetchOptions = {},\n): Promise<SimilarProfile[]> {\n const limit = opts.limit ?? 5;\n const path = `/api/discover/similar/${encodeIdentifier(did)}?limit=${limit}`;\n try {\n const data = await apiFetch<{ profiles?: SimilarProfile[] }>(config, path, {\n next: { revalidate: 300 },\n timeoutMs: 5000,\n ...opts,\n });\n return data.profiles ?? [];\n } catch {\n return [];\n }\n}\n\nexport interface FetchSuggestionsOptions extends ApiFetchOptions {\n source?: string;\n includeDismissed?: boolean;\n cursor?: string;\n limit?: number;\n /**\n * Pass the caller's `Cookie` header on Next.js RSC server-side calls.\n * `credentials: 'include'` does NOT propagate browser cookies in RSC,\n * so authenticated server fetches must forward the header explicitly.\n */\n cookieHeader?: string;\n}\n\n/** Discovery suggestions feed. Resolves to empty arrays on error. */\nexport async function fetchSuggestions(\n config: SifaApiConfig,\n opts: FetchSuggestionsOptions = {},\n): Promise<SuggestionsResponse> {\n const params = new URLSearchParams();\n if (opts.source) params.set('source', opts.source);\n if (opts.includeDismissed) params.set('include_dismissed', 'true');\n if (opts.cursor) params.set('cursor', opts.cursor);\n if (opts.limit) params.set('limit', String(opts.limit));\n\n const qs = params.toString();\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n\n try {\n return await apiFetch<SuggestionsResponse>(config, `/api/suggestions${qs ? `?${qs}` : ''}`, {\n credentials: 'include',\n cache: 'no-store',\n timeoutMs: 8000,\n ...opts,\n headers,\n });\n } catch {\n return { onSifa: [], notOnSifa: [] };\n }\n}\n\n/** Count of pending suggestions since an optional timestamp. */\nexport async function fetchSuggestionCount(\n config: SifaApiConfig,\n since?: string,\n options: ApiFetchOptions = {},\n): Promise<number> {\n const params = since ? `?since=${encodeURIComponent(since)}` : '';\n try {\n const data = await apiFetch<{ count?: number }>(config, `/api/suggestions/count${params}`, {\n credentials: 'include',\n cache: 'no-store',\n ...options,\n });\n return data.count ?? 0;\n } catch {\n return 0;\n }\n}\n\n/** Featured profile (rotated by sifa-api). Returns `null` when none. */\nexport async function fetchFeaturedProfile(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<FeaturedProfile | null> {\n try {\n return await apiFetch<FeaturedProfile>(config, '/api/featured-profile', {\n next: { revalidate: 900 },\n ...options,\n });\n } catch {\n return null;\n }\n}\n"],"mappings":";AACA,SAAS,kBAAkB,gBAA0D;AAqErF,eAAsB,qBACpB,QACA,KACA,OAA6C,CAAC,GACnB;AAC3B,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,OAAO,yBAAyB,iBAAiB,GAAG,CAAC,UAAU,KAAK;AAC1E,MAAI;AACF,UAAM,OAAO,MAAM,SAA0C,QAAQ,MAAM;AAAA,MACzE,MAAM,EAAE,YAAY,IAAI;AAAA,MACxB,WAAW;AAAA,MACX,GAAG;AAAA,IACL,CAAC;AACD,WAAO,KAAK,YAAY,CAAC;AAAA,EAC3B,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAgBA,eAAsB,iBACpB,QACA,OAAgC,CAAC,GACH;AAC9B,QAAM,SAAS,IAAI,gBAAgB;AACnC,MAAI,KAAK,OAAQ,QAAO,IAAI,UAAU,KAAK,MAAM;AACjD,MAAI,KAAK,iBAAkB,QAAO,IAAI,qBAAqB,MAAM;AACjE,MAAI,KAAK,OAAQ,QAAO,IAAI,UAAU,KAAK,MAAM;AACjD,MAAI,KAAK,MAAO,QAAO,IAAI,SAAS,OAAO,KAAK,KAAK,CAAC;AAEtD,QAAM,KAAK,OAAO,SAAS;AAC3B,QAAM,UAAkC,EAAE,GAAI,KAAK,WAAW,CAAC,EAAG;AAClE,MAAI,KAAK,aAAc,SAAQ,SAAS,KAAK;AAE7C,MAAI;AACF,WAAO,MAAM,SAA8B,QAAQ,mBAAmB,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI;AAAA,MAC1F,aAAa;AAAA,MACb,OAAO;AAAA,MACP,WAAW;AAAA,MACX,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC,EAAE;AAAA,EACrC;AACF;AAGA,eAAsB,qBACpB,QACA,OACA,UAA2B,CAAC,GACX;AACjB,QAAM,SAAS,QAAQ,UAAU,mBAAmB,KAAK,CAAC,KAAK;AAC/D,MAAI;AACF,UAAM,OAAO,MAAM,SAA6B,QAAQ,yBAAyB,MAAM,IAAI;AAAA,MACzF,aAAa;AAAA,MACb,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AACD,WAAO,KAAK,SAAS;AAAA,EACvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,qBACpB,QACA,UAA2B,CAAC,GACK;AACjC,MAAI;AACF,WAAO,MAAM,SAA0B,QAAQ,yBAAyB;AAAA,MACtE,MAAM,EAAE,YAAY,IAAI;AAAA,MACxB,GAAG;AAAA,IACL,CAAC;AAAA,EACH,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/query/fetchers/follow.ts"],"sourcesContent":["import {\n apiFetch,\n encodeIdentifier,\n apiWrite,\n type ApiFetchOptions,\n type SifaApiConfig,\n type WriteResult,\n} from '../client.js';\nimport type { ActivityFeedResponse } from './activity.js';\n\nexport interface FollowProfile {\n did: string;\n handle: string;\n displayName?: string;\n headline?: string;\n avatarUrl?: string;\n source: string;\n claimed: boolean;\n followedAt: string;\n blueskyVerified?: boolean;\n blueskyVerifiedAt?: string | null;\n}\n\nexport interface FollowingResponse {\n follows: FollowProfile[];\n cursor?: string;\n}\n\n/** People the authenticated user follows. Empty on error. */\nexport async function fetchFollowing(\n config: SifaApiConfig,\n opts: { source?: string; cursor?: string; limit?: number } & ApiFetchOptions = {},\n): Promise<FollowingResponse> {\n const params = new URLSearchParams();\n if (opts.source) params.set('source', opts.source);\n if (opts.cursor) params.set('cursor', opts.cursor);\n if (opts.limit) params.set('limit', String(opts.limit));\n const qs = params.toString();\n\n try {\n return await apiFetch<FollowingResponse>(config, `/api/following${qs ? `?${qs}` : ''}`, {\n credentials: 'include',\n cache: 'no-store',\n ...opts,\n });\n } catch {\n return { follows: [] };\n }\n}\n\n/**\n * Result of {@link followUser}. Extends {@link WriteResult} with the\n * follow `rkey` returned by sifa-api on success. Self-follow + invalid\n * handle surface as `success: false` with the server-provided message;\n * dup-follow is idempotent (sifa-api E7) and resolves as `success: true`.\n */\nexport type FollowUserResult = WriteResult<{\n rkey?: string;\n /** DID of the followed subject (server-resolved from the handle). */\n subjectDid?: string;\n}>;\n\n/**\n * Create an `id.sifa.graph.follow` record on the caller's PDS via the\n * AppView. Idempotent on duplicate (server catches the unique-violation\n * and returns 200, per sifa-api#673 E7).\n */\nexport function followUser(\n config: SifaApiConfig,\n handle: string,\n opts: { note?: string } & Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<FollowUserResult> {\n const { note, ...rest } = opts;\n return apiWrite<{ rkey?: string; subjectDid?: string }>(\n config,\n `/api/follow/${encodeIdentifier(handle)}`,\n 'POST',\n {\n body: note !== undefined ? { note } : undefined,\n ...rest,\n },\n );\n}\n\n/** Delete the authenticated viewer's `id.sifa.graph.follow` for `handle`. */\nexport function unfollowUser(\n config: SifaApiConfig,\n handle: string,\n opts: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult> {\n return apiWrite(config, `/api/follow/${encodeIdentifier(handle)}`, 'DELETE', opts);\n}\n\nexport interface FollowListPage {\n follows: FollowProfile[];\n cursor: string | null;\n}\n\nexport interface FetchFollowListOptions extends ApiFetchOptions {\n cursor?: string;\n limit?: number;\n /**\n * Pass the caller's `Cookie` header on Next.js RSC server-side calls\n * (mirrors {@link FetchActivityFeedOptions}; required for authenticated\n * server fetches because `credentials: 'include'` does not propagate\n * cookies from RSC).\n */\n cookieHeader?: string;\n}\n\nfunction buildListPath(prefix: string, opts: FetchFollowListOptions): string {\n const params = new URLSearchParams();\n if (opts.cursor) params.set('cursor', opts.cursor);\n if (opts.limit) params.set('limit', String(opts.limit));\n const qs = params.toString();\n return `${prefix}${qs ? `?${qs}` : ''}`;\n}\n\n/**\n * Paginated list of `handle`'s followers. Returns an empty page on error\n * so the UI can render a graceful \"no followers yet\" state.\n */\nexport async function getFollowers(\n config: SifaApiConfig,\n handle: string,\n opts: FetchFollowListOptions = {},\n): Promise<FollowListPage> {\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n try {\n const res = await apiFetch<{ follows: FollowProfile[]; cursor?: string | null }>(\n config,\n buildListPath(`/api/profile/${encodeIdentifier(handle)}/followers`, opts),\n { credentials: 'include', cache: 'no-store', ...opts, headers },\n );\n return { follows: res.follows, cursor: res.cursor ?? null };\n } catch {\n return { follows: [], cursor: null };\n }\n}\n\n/** Paginated list of who `handle` follows. */\nexport async function getFollowing(\n config: SifaApiConfig,\n handle: string,\n opts: FetchFollowListOptions = {},\n): Promise<FollowListPage> {\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n try {\n const res = await apiFetch<{ follows: FollowProfile[]; cursor?: string | null }>(\n config,\n buildListPath(`/api/profile/${encodeIdentifier(handle)}/following`, opts),\n { credentials: 'include', cache: 'no-store', ...opts, headers },\n );\n return { follows: res.follows, cursor: res.cursor ?? null };\n } catch {\n return { follows: [], cursor: null };\n }\n}\n\n/** The method binding for the following-feed service-auth token; MUST match the\n * sifa-api endpoint's `lxm`. */\nexport const FOLLOWING_FEED_LXM = 'id.sifa.feed.getFollowingFeed';\n\n/** One app the viewer's network is active on, for the feed's source tabs. */\nexport interface FollowingFeedApp {\n /** Registry app id, e.g. `tangled`. Pass back as {@link FetchFollowingFeedOptions.app}. */\n id: string;\n name: string;\n /** Summed recent activity across the network; the tab ordering. */\n count: number;\n}\n\n/**\n * Why a following-feed page came back empty. Lets a client say something true\n * per case instead of one catch-all sentence, and point at the right next step.\n */\nexport type FollowingFeedEmptyReason =\n | 'no_follows'\n | 'no_visible_follows'\n | 'no_cross_app_activity'\n | 'no_recent_records'\n | 'all_hidden'\n | 'nothing_renderable'\n | 'hydration_failed'\n /** The feed is still being built. Nothing is wrong: ask again shortly. */\n | 'building';\n\n/** Options for {@link fetchFollowingFeed}. */\nexport interface FetchFollowingFeedOptions extends ApiFetchOptions {\n limit?: number;\n /**\n * Opt in to the viewer's Bluesky activity too. Off by default: the point of\n * the feed is what connections do on OTHER apps.\n *\n * Ignored when {@link app} is set, since a source tab selects one app.\n */\n includeBluesky?: boolean;\n /**\n * Restrict the page to one app (a registry id from the response's `apps`).\n * This is what a source tab selects. `app: 'bluesky'` selects Bluesky even\n * though it is excluded from the default mixed view.\n */\n app?: string;\n /** Forward a `Cookie` header on Next.js RSC server-side calls (web). */\n cookieHeader?: string;\n}\n\n/** The following feed's response: an activity feed plus its tab metadata. */\nexport interface FollowingFeedResponse extends ActivityFeedResponse {\n /**\n * Apps the viewer's network is actually active on, most active first.\n * Present on empty pages too, so a client's tabs survive a quiet tab.\n */\n apps?: FollowingFeedApp[];\n /** Set only when `items` is empty. */\n reason?: FollowingFeedEmptyReason;\n /** When this feed was built (ISO 8601). Absent on a `building` answer. */\n builtAt?: string;\n /**\n * True when this is an older build, served while a newer one is built in\n * the background. Poll {@link fetchFollowingFeedVersion} to learn when the\n * newer one is ready.\n */\n stale?: boolean;\n}\n\n/** Query string and auth headers shared by the feed and its version check. */\nasync function followingFeedRequest(config: SifaApiConfig, opts: FetchFollowingFeedOptions) {\n const params = new URLSearchParams();\n if (opts.limit) params.set('limit', String(opts.limit));\n // A selected tab decides Bluesky on its own, so the flag is not also sent.\n if (opts.app) params.set('app', opts.app);\n else if (opts.includeBluesky) params.set('includeBluesky', 'true');\n const qs = params.toString();\n\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n if (config.getAuthToken) {\n const token = await config.getAuthToken(FOLLOWING_FEED_LXM);\n if (token) headers.Authorization = `Bearer ${token}`;\n }\n return { query: qs ? `?${qs}` : '', headers };\n}\n\n/**\n * The viewer's cross-app following feed: what OTHER apps their connections use\n * (Tangled, WhiteWind, Smoke Signal, ...) — Bluesky is excluded server-side by\n * default, as it is the least interesting part and other apps already surface\n * it. Pass `includeBluesky: true` to bring it back in.\n *\n * Auth is identity-only server-side, so the NATIVE app supplies\n * `config.getAuthToken` to mint a service-auth Bearer, while WEB relies on its\n * session cookie (`credentials: 'include'`). Returns `null` on error. v1 is a\n * finite first page (no cursor yet).\n */\nexport async function fetchFollowingFeed(\n config: SifaApiConfig,\n opts: FetchFollowingFeedOptions = {},\n): Promise<FollowingFeedResponse | null> {\n const { query, headers } = await followingFeedRequest(config, opts);\n try {\n return await apiFetch<FollowingFeedResponse>(config, `/api/following/feed${query}`, {\n credentials: 'include',\n cache: 'no-store',\n ...opts,\n headers,\n });\n } catch {\n return null;\n }\n}\n\n/** When the cached following feed for a query was built. */\nexport interface FollowingFeedVersion {\n /** ISO 8601, or null when nothing is cached for this query. */\n builtAt: string | null;\n}\n\n/**\n * When the cached following feed for the same query was built. Cheap: it never\n * builds a feed. A client showing a `stale` feed polls this and offers the\n * newer one once {@link isNewerFollowingFeed} says so. Returns `null` on error.\n */\nexport async function fetchFollowingFeedVersion(\n config: SifaApiConfig,\n opts: FetchFollowingFeedOptions = {},\n): Promise<FollowingFeedVersion | null> {\n const { query, headers } = await followingFeedRequest(config, opts);\n try {\n return await apiFetch<FollowingFeedVersion>(config, `/api/following/feed/version${query}`, {\n credentials: 'include',\n cache: 'no-store',\n ...opts,\n headers,\n });\n } catch {\n return null;\n }\n}\n\n/** True when `latestBuiltAt` is a newer build than the one shown (`shownBuiltAt`). */\nexport function isNewerFollowingFeed(\n shownBuiltAt: string | null | undefined,\n latestBuiltAt: string | null | undefined,\n): boolean {\n if (!shownBuiltAt || !latestBuiltAt) return false;\n return Date.parse(latestBuiltAt) > Date.parse(shownBuiltAt);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/query/fetchers/follow.ts"],"sourcesContent":["import {\n apiFetch,\n encodeIdentifier,\n apiWrite,\n type ApiFetchOptions,\n type SifaApiConfig,\n type WriteResult,\n} from '../client.js';\nimport type { AccountVerification } from '../../taxonomy/verification-providers.js';\nimport type { ActivityFeedResponse } from './activity.js';\n\nexport interface FollowProfile {\n did: string;\n handle: string;\n displayName?: string;\n headline?: string;\n avatarUrl?: string;\n source: string;\n claimed: boolean;\n followedAt: string;\n blueskyVerified?: boolean;\n blueskyVerifiedAt?: string | null;\n /**\n * Every verification the account holds, across all recognized providers\n * (Bluesky and firehose-sourced ones like mu). Supersedes the Bluesky-only\n * `blueskyVerified` pair for badge rendering. Absent on older API responses.\n */\n verificationBadges?: AccountVerification[];\n}\n\nexport interface FollowingResponse {\n follows: FollowProfile[];\n cursor?: string;\n}\n\n/** People the authenticated user follows. Empty on error. */\nexport async function fetchFollowing(\n config: SifaApiConfig,\n opts: { source?: string; cursor?: string; limit?: number } & ApiFetchOptions = {},\n): Promise<FollowingResponse> {\n const params = new URLSearchParams();\n if (opts.source) params.set('source', opts.source);\n if (opts.cursor) params.set('cursor', opts.cursor);\n if (opts.limit) params.set('limit', String(opts.limit));\n const qs = params.toString();\n\n try {\n return await apiFetch<FollowingResponse>(config, `/api/following${qs ? `?${qs}` : ''}`, {\n credentials: 'include',\n cache: 'no-store',\n ...opts,\n });\n } catch {\n return { follows: [] };\n }\n}\n\n/**\n * Result of {@link followUser}. Extends {@link WriteResult} with the\n * follow `rkey` returned by sifa-api on success. Self-follow + invalid\n * handle surface as `success: false` with the server-provided message;\n * dup-follow is idempotent (sifa-api E7) and resolves as `success: true`.\n */\nexport type FollowUserResult = WriteResult<{\n rkey?: string;\n /** DID of the followed subject (server-resolved from the handle). */\n subjectDid?: string;\n}>;\n\n/**\n * Create an `id.sifa.graph.follow` record on the caller's PDS via the\n * AppView. Idempotent on duplicate (server catches the unique-violation\n * and returns 200, per sifa-api#673 E7).\n */\nexport function followUser(\n config: SifaApiConfig,\n handle: string,\n opts: { note?: string } & Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<FollowUserResult> {\n const { note, ...rest } = opts;\n return apiWrite<{ rkey?: string; subjectDid?: string }>(\n config,\n `/api/follow/${encodeIdentifier(handle)}`,\n 'POST',\n {\n body: note !== undefined ? { note } : undefined,\n ...rest,\n },\n );\n}\n\n/** Delete the authenticated viewer's `id.sifa.graph.follow` for `handle`. */\nexport function unfollowUser(\n config: SifaApiConfig,\n handle: string,\n opts: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult> {\n return apiWrite(config, `/api/follow/${encodeIdentifier(handle)}`, 'DELETE', opts);\n}\n\nexport interface FollowListPage {\n follows: FollowProfile[];\n cursor: string | null;\n}\n\nexport interface FetchFollowListOptions extends ApiFetchOptions {\n cursor?: string;\n limit?: number;\n /**\n * Pass the caller's `Cookie` header on Next.js RSC server-side calls\n * (mirrors {@link FetchActivityFeedOptions}; required for authenticated\n * server fetches because `credentials: 'include'` does not propagate\n * cookies from RSC).\n */\n cookieHeader?: string;\n}\n\nfunction buildListPath(prefix: string, opts: FetchFollowListOptions): string {\n const params = new URLSearchParams();\n if (opts.cursor) params.set('cursor', opts.cursor);\n if (opts.limit) params.set('limit', String(opts.limit));\n const qs = params.toString();\n return `${prefix}${qs ? `?${qs}` : ''}`;\n}\n\n/**\n * Paginated list of `handle`'s followers. Returns an empty page on error\n * so the UI can render a graceful \"no followers yet\" state.\n */\nexport async function getFollowers(\n config: SifaApiConfig,\n handle: string,\n opts: FetchFollowListOptions = {},\n): Promise<FollowListPage> {\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n try {\n const res = await apiFetch<{ follows: FollowProfile[]; cursor?: string | null }>(\n config,\n buildListPath(`/api/profile/${encodeIdentifier(handle)}/followers`, opts),\n { credentials: 'include', cache: 'no-store', ...opts, headers },\n );\n return { follows: res.follows, cursor: res.cursor ?? null };\n } catch {\n return { follows: [], cursor: null };\n }\n}\n\n/** Paginated list of who `handle` follows. */\nexport async function getFollowing(\n config: SifaApiConfig,\n handle: string,\n opts: FetchFollowListOptions = {},\n): Promise<FollowListPage> {\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n try {\n const res = await apiFetch<{ follows: FollowProfile[]; cursor?: string | null }>(\n config,\n buildListPath(`/api/profile/${encodeIdentifier(handle)}/following`, opts),\n { credentials: 'include', cache: 'no-store', ...opts, headers },\n );\n return { follows: res.follows, cursor: res.cursor ?? null };\n } catch {\n return { follows: [], cursor: null };\n }\n}\n\n/** The method binding for the following-feed service-auth token; MUST match the\n * sifa-api endpoint's `lxm`. */\nexport const FOLLOWING_FEED_LXM = 'id.sifa.feed.getFollowingFeed';\n\n/** One app the viewer's network is active on, for the feed's source tabs. */\nexport interface FollowingFeedApp {\n /** Registry app id, e.g. `tangled`. Pass back as {@link FetchFollowingFeedOptions.app}. */\n id: string;\n name: string;\n /** Summed recent activity across the network; the tab ordering. */\n count: number;\n}\n\n/**\n * Why a following-feed page came back empty. Lets a client say something true\n * per case instead of one catch-all sentence, and point at the right next step.\n */\nexport type FollowingFeedEmptyReason =\n | 'no_follows'\n | 'no_visible_follows'\n | 'no_cross_app_activity'\n | 'no_recent_records'\n | 'all_hidden'\n | 'nothing_renderable'\n | 'hydration_failed'\n /** The feed is still being built. Nothing is wrong: ask again shortly. */\n | 'building';\n\n/** Options for {@link fetchFollowingFeed}. */\nexport interface FetchFollowingFeedOptions extends ApiFetchOptions {\n limit?: number;\n /**\n * Opt in to the viewer's Bluesky activity too. Off by default: the point of\n * the feed is what connections do on OTHER apps.\n *\n * Ignored when {@link app} is set, since a source tab selects one app.\n */\n includeBluesky?: boolean;\n /**\n * Restrict the page to one app (a registry id from the response's `apps`).\n * This is what a source tab selects. `app: 'bluesky'` selects Bluesky even\n * though it is excluded from the default mixed view.\n */\n app?: string;\n /** Forward a `Cookie` header on Next.js RSC server-side calls (web). */\n cookieHeader?: string;\n}\n\n/** The following feed's response: an activity feed plus its tab metadata. */\nexport interface FollowingFeedResponse extends ActivityFeedResponse {\n /**\n * Apps the viewer's network is actually active on, most active first.\n * Present on empty pages too, so a client's tabs survive a quiet tab.\n */\n apps?: FollowingFeedApp[];\n /** Set only when `items` is empty. */\n reason?: FollowingFeedEmptyReason;\n /** When this feed was built (ISO 8601). Absent on a `building` answer. */\n builtAt?: string;\n /**\n * True when this is an older build, served while a newer one is built in\n * the background. Poll {@link fetchFollowingFeedVersion} to learn when the\n * newer one is ready.\n */\n stale?: boolean;\n}\n\n/** Query string and auth headers shared by the feed and its version check. */\nasync function followingFeedRequest(config: SifaApiConfig, opts: FetchFollowingFeedOptions) {\n const params = new URLSearchParams();\n if (opts.limit) params.set('limit', String(opts.limit));\n // A selected tab decides Bluesky on its own, so the flag is not also sent.\n if (opts.app) params.set('app', opts.app);\n else if (opts.includeBluesky) params.set('includeBluesky', 'true');\n const qs = params.toString();\n\n const headers: Record<string, string> = { ...(opts.headers ?? {}) };\n if (opts.cookieHeader) headers.cookie = opts.cookieHeader;\n if (config.getAuthToken) {\n const token = await config.getAuthToken(FOLLOWING_FEED_LXM);\n if (token) headers.Authorization = `Bearer ${token}`;\n }\n return { query: qs ? `?${qs}` : '', headers };\n}\n\n/**\n * The viewer's cross-app following feed: what OTHER apps their connections use\n * (Tangled, WhiteWind, Smoke Signal, ...) — Bluesky is excluded server-side by\n * default, as it is the least interesting part and other apps already surface\n * it. Pass `includeBluesky: true` to bring it back in.\n *\n * Auth is identity-only server-side, so the NATIVE app supplies\n * `config.getAuthToken` to mint a service-auth Bearer, while WEB relies on its\n * session cookie (`credentials: 'include'`). Returns `null` on error. v1 is a\n * finite first page (no cursor yet).\n */\nexport async function fetchFollowingFeed(\n config: SifaApiConfig,\n opts: FetchFollowingFeedOptions = {},\n): Promise<FollowingFeedResponse | null> {\n const { query, headers } = await followingFeedRequest(config, opts);\n try {\n return await apiFetch<FollowingFeedResponse>(config, `/api/following/feed${query}`, {\n credentials: 'include',\n cache: 'no-store',\n ...opts,\n headers,\n });\n } catch {\n return null;\n }\n}\n\n/** When the cached following feed for a query was built. */\nexport interface FollowingFeedVersion {\n /** ISO 8601, or null when nothing is cached for this query. */\n builtAt: string | null;\n}\n\n/**\n * When the cached following feed for the same query was built. Cheap: it never\n * builds a feed. A client showing a `stale` feed polls this and offers the\n * newer one once {@link isNewerFollowingFeed} says so. Returns `null` on error.\n */\nexport async function fetchFollowingFeedVersion(\n config: SifaApiConfig,\n opts: FetchFollowingFeedOptions = {},\n): Promise<FollowingFeedVersion | null> {\n const { query, headers } = await followingFeedRequest(config, opts);\n try {\n return await apiFetch<FollowingFeedVersion>(config, `/api/following/feed/version${query}`, {\n credentials: 'include',\n cache: 'no-store',\n ...opts,\n headers,\n });\n } catch {\n return null;\n }\n}\n\n/** True when `latestBuiltAt` is a newer build than the one shown (`shownBuiltAt`). */\nexport function isNewerFollowingFeed(\n shownBuiltAt: string | null | undefined,\n latestBuiltAt: string | null | undefined,\n): boolean {\n if (!shownBuiltAt || !latestBuiltAt) return false;\n return Date.parse(latestBuiltAt) > Date.parse(shownBuiltAt);\n}\n"],"mappings":"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","names":[]}