@singi-labs/sifa-sdk 0.19.100 → 0.19.102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +57 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/jev/index.cjs +0 -2
- package/dist/jev/index.cjs.map +1 -1
- package/dist/jev/index.d.cts +4 -0
- package/dist/jev/index.d.ts +4 -0
- package/dist/jev/index.js +0 -2
- package/dist/jev/index.js.map +1 -1
- package/dist/jev/issue.cjs.map +1 -1
- package/dist/logic/index.js +10 -0
- package/dist/logic/index.js.map +1 -1
- package/dist/logic/registry-org-type.js +58 -0
- package/dist/logic/registry-org-type.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -2878,6 +2878,36 @@ declare function actorShowsIdentity(actor: {
|
|
|
2878
2878
|
claimed?: boolean;
|
|
2879
2879
|
}): boolean;
|
|
2880
2880
|
|
|
2881
|
+
/**
|
|
2882
|
+
* Organisation type from public registries, as an org-type token (the same
|
|
2883
|
+
* tokens as the Jev `ORG_TYPE_TAXONOMY` and the owner `companyType`).
|
|
2884
|
+
*
|
|
2885
|
+
* A registry type is recorded data, so it outranks a Jev guess. ROR records an
|
|
2886
|
+
* explicit `types` list per organisation; Wikidata records what an item is an
|
|
2887
|
+
* instance of (P31), which sifa-api resolves against the classes below through
|
|
2888
|
+
* the subclass hierarchy (P279*).
|
|
2889
|
+
*/
|
|
2890
|
+
/** The org type for an organisation's ROR `types`, or null when none is mapped. */
|
|
2891
|
+
declare function orgTypeFromRorTypes(types: readonly string[] | null | undefined): string | null;
|
|
2892
|
+
/**
|
|
2893
|
+
* Wikidata classes per org type, in priority order. Through P279* an item
|
|
2894
|
+
* matches many classes at once (MIT is a university, a nonprofit, a research
|
|
2895
|
+
* institute and a business), so the first matching entry wins. Classes are
|
|
2896
|
+
* deliberately narrow: a broad class such as "medical organization" would pull
|
|
2897
|
+
* pharmaceutical companies into `healthcare_provider`.
|
|
2898
|
+
*/
|
|
2899
|
+
declare const WIKIDATA_ORG_TYPE_CLASSES: ReadonlyArray<{
|
|
2900
|
+
orgType: string;
|
|
2901
|
+
qids: readonly string[];
|
|
2902
|
+
}>;
|
|
2903
|
+
/** Every class QID above, for building the SPARQL `VALUES` list. */
|
|
2904
|
+
declare const WIKIDATA_ORG_TYPE_CLASS_QIDS: readonly string[];
|
|
2905
|
+
/**
|
|
2906
|
+
* The org type for the set of classes a Wikidata item matched, or null when
|
|
2907
|
+
* none of them is mapped.
|
|
2908
|
+
*/
|
|
2909
|
+
declare function orgTypeFromWikidataClasses(matchedQids: readonly string[]): string | null;
|
|
2910
|
+
|
|
2881
2911
|
/**
|
|
2882
2912
|
* Shared, single-source-of-truth model for which profile sections render, in
|
|
2883
2913
|
* what order, their nav grouping, and which items a given viewer may see.
|
|
@@ -3227,4 +3257,4 @@ declare function roadmapIssueUrl(issue: number): string;
|
|
|
3227
3257
|
*/
|
|
3228
3258
|
declare const SIFA_SDK_VERSION: string;
|
|
3229
3259
|
|
|
3230
|
-
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 BlobProxyVariant, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_DESCRIPTION_LENGTH, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPANY_PAGE_ROSTER_MIN_MEMBERS, 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 CompanyHqFacts, 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, OPTIONAL_COMPLETENESS_SIGNALS, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_MODE_VALUES, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PRESENTATION_ROLE_VALUES, 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 TalksImportIssue, type TalksImportIssueCode, type TalksImportValidation, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, type VersionablePublication, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, blobProxyUrl, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, companyPageRichness, 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, isOptionalCompletenessSignal, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openAlexWorkUrl, 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, validateTalksImport, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
|
|
3260
|
+
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 BlobProxyVariant, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_DESCRIPTION_LENGTH, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPANY_PAGE_ROSTER_MIN_MEMBERS, 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 CompanyHqFacts, 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, OPTIONAL_COMPLETENESS_SIGNALS, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_MODE_VALUES, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PRESENTATION_ROLE_VALUES, 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 TalksImportIssue, type TalksImportIssueCode, type TalksImportValidation, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, type VersionablePublication, WIKIDATA_ORG_TYPE_CLASSES, WIKIDATA_ORG_TYPE_CLASS_QIDS, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, blobProxyUrl, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, companyPageRichness, 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, isOptionalCompletenessSignal, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openAlexWorkUrl, openToTokenToValue, openToValueToToken, orgTypeFromRorTypes, orgTypeFromWikidataClasses, 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, validateTalksImport, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
|
package/dist/index.d.ts
CHANGED
|
@@ -2878,6 +2878,36 @@ declare function actorShowsIdentity(actor: {
|
|
|
2878
2878
|
claimed?: boolean;
|
|
2879
2879
|
}): boolean;
|
|
2880
2880
|
|
|
2881
|
+
/**
|
|
2882
|
+
* Organisation type from public registries, as an org-type token (the same
|
|
2883
|
+
* tokens as the Jev `ORG_TYPE_TAXONOMY` and the owner `companyType`).
|
|
2884
|
+
*
|
|
2885
|
+
* A registry type is recorded data, so it outranks a Jev guess. ROR records an
|
|
2886
|
+
* explicit `types` list per organisation; Wikidata records what an item is an
|
|
2887
|
+
* instance of (P31), which sifa-api resolves against the classes below through
|
|
2888
|
+
* the subclass hierarchy (P279*).
|
|
2889
|
+
*/
|
|
2890
|
+
/** The org type for an organisation's ROR `types`, or null when none is mapped. */
|
|
2891
|
+
declare function orgTypeFromRorTypes(types: readonly string[] | null | undefined): string | null;
|
|
2892
|
+
/**
|
|
2893
|
+
* Wikidata classes per org type, in priority order. Through P279* an item
|
|
2894
|
+
* matches many classes at once (MIT is a university, a nonprofit, a research
|
|
2895
|
+
* institute and a business), so the first matching entry wins. Classes are
|
|
2896
|
+
* deliberately narrow: a broad class such as "medical organization" would pull
|
|
2897
|
+
* pharmaceutical companies into `healthcare_provider`.
|
|
2898
|
+
*/
|
|
2899
|
+
declare const WIKIDATA_ORG_TYPE_CLASSES: ReadonlyArray<{
|
|
2900
|
+
orgType: string;
|
|
2901
|
+
qids: readonly string[];
|
|
2902
|
+
}>;
|
|
2903
|
+
/** Every class QID above, for building the SPARQL `VALUES` list. */
|
|
2904
|
+
declare const WIKIDATA_ORG_TYPE_CLASS_QIDS: readonly string[];
|
|
2905
|
+
/**
|
|
2906
|
+
* The org type for the set of classes a Wikidata item matched, or null when
|
|
2907
|
+
* none of them is mapped.
|
|
2908
|
+
*/
|
|
2909
|
+
declare function orgTypeFromWikidataClasses(matchedQids: readonly string[]): string | null;
|
|
2910
|
+
|
|
2881
2911
|
/**
|
|
2882
2912
|
* Shared, single-source-of-truth model for which profile sections render, in
|
|
2883
2913
|
* what order, their nav grouping, and which items a given viewer may see.
|
|
@@ -3227,4 +3257,4 @@ declare function roadmapIssueUrl(issue: number): string;
|
|
|
3227
3257
|
*/
|
|
3228
3258
|
declare const SIFA_SDK_VERSION: string;
|
|
3229
3259
|
|
|
3230
|
-
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 BlobProxyVariant, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_DESCRIPTION_LENGTH, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPANY_PAGE_ROSTER_MIN_MEMBERS, 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 CompanyHqFacts, 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, OPTIONAL_COMPLETENESS_SIGNALS, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_MODE_VALUES, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PRESENTATION_ROLE_VALUES, 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 TalksImportIssue, type TalksImportIssueCode, type TalksImportValidation, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, type VersionablePublication, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, blobProxyUrl, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, companyPageRichness, 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, isOptionalCompletenessSignal, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openAlexWorkUrl, 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, validateTalksImport, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
|
|
3260
|
+
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 BlobProxyVariant, type BuildProfileHighlightsOptions, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_DESCRIPTION_LENGTH, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPANY_PAGE_ROSTER_MIN_MEMBERS, 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 CompanyHqFacts, 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, OPTIONAL_COMPLETENESS_SIGNALS, type OpenToGroup, type OpenToOption, OrgProfileRecord, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_MODE_VALUES, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PRESENTATION_ROLE_VALUES, 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 TalksImportIssue, type TalksImportIssueCode, type TalksImportValidation, type TierMeta, type ToStreamCardVMOptions, type UrlPathPolicy, type VersionablePublication, WIKIDATA_ORG_TYPE_CLASSES, WIKIDATA_ORG_TYPE_CLASS_QIDS, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, actorShowsIdentity, blobProxyUrl, buildMetaDescription, buildProfileHighlights, buildTalkSlug, categoryForApp, certDateExtractor, classifyEntityRef, collapseContributors, companyPageRichness, 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, isOptionalCompletenessSignal, isPseudoEmployer, isRegistrableDomainHandle, isRelationalActivity, isRoleLineRedundant, isSectionPopulated, isSelfAuthoredRich, isTeachingCourse, isUpcomingStart, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, locationSegments, looksLikeDomain, meetsContrastAA, normalizeCompanyKey, normalizeDoi, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeSkillCategory, normalizeWorkplaceTypes, openAlexWorkUrl, openToTokenToValue, openToValueToToken, orgTypeFromRorTypes, orgTypeFromWikidataClasses, 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, validateTalksImport, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
|
package/dist/index.js
CHANGED
|
@@ -272,7 +272,11 @@ import {
|
|
|
272
272
|
matchesSiteActivityPreset,
|
|
273
273
|
siteActivityPresetSchema,
|
|
274
274
|
siteActivityPresetUpdateSchema,
|
|
275
|
-
resolveAgentRef
|
|
275
|
+
resolveAgentRef,
|
|
276
|
+
WIKIDATA_ORG_TYPE_CLASSES,
|
|
277
|
+
WIKIDATA_ORG_TYPE_CLASS_QIDS,
|
|
278
|
+
orgTypeFromRorTypes,
|
|
279
|
+
orgTypeFromWikidataClasses
|
|
276
280
|
} from "./logic/index.js";
|
|
277
281
|
import {
|
|
278
282
|
ALL_SECTIONS,
|
|
@@ -379,7 +383,7 @@ import {
|
|
|
379
383
|
roadmapIssueUrl
|
|
380
384
|
} from "./roadmap/index.js";
|
|
381
385
|
import { SIFA_REPO_GROUPS, describeSifaRecord, repoGroupForCollection } from "./repo/index.js";
|
|
382
|
-
var SIFA_SDK_VERSION = "0.19.
|
|
386
|
+
var SIFA_SDK_VERSION = "0.19.102";
|
|
383
387
|
export {
|
|
384
388
|
ACTIVITY_TIERS,
|
|
385
389
|
ACTIVITY_VERBS,
|
|
@@ -515,6 +519,8 @@ export {
|
|
|
515
519
|
SifaFeedItemSchema,
|
|
516
520
|
VERIFICATION_METHOD_TOKENS,
|
|
517
521
|
VERIFICATION_PROVIDERS,
|
|
522
|
+
WIKIDATA_ORG_TYPE_CLASSES,
|
|
523
|
+
WIKIDATA_ORG_TYPE_CLASS_QIDS,
|
|
518
524
|
WORKPLACE_TYPE_LABELS,
|
|
519
525
|
WORKPLACE_TYPE_OPTIONS,
|
|
520
526
|
actorShowsIdentity,
|
|
@@ -659,6 +665,8 @@ export {
|
|
|
659
665
|
openAlexWorkUrl,
|
|
660
666
|
openToTokenToValue,
|
|
661
667
|
openToValueToToken,
|
|
668
|
+
orgTypeFromRorTypes,
|
|
669
|
+
orgTypeFromWikidataClasses,
|
|
662
670
|
parseEndorsementComment,
|
|
663
671
|
parseIntendedAudiences,
|
|
664
672
|
parseLocationString,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Sifa SDK -- public client library for the Sifa AppView on AT Protocol.\n *\n * Pre-1.0: the public API is unstable and may change in any minor release.\n *\n * @see https://github.com/singi-labs/sifa-sdk\n */\n\ndeclare const __SIFA_SDK_VERSION__: string;\n\nexport const SIFA_SDK_VERSION: string = __SIFA_SDK_VERSION__;\n\nexport type {\n ActiveApp,\n Endorsement,\n EndorsementData,\n ExternalAccount,\n ExternalAccountKeytraceClaim,\n FeedItem,\n LanguageProficiency,\n LocationValue,\n OrgAddressView,\n OrgFloorVerdict,\n OrgLinkView,\n OrgProfileView,\n RecognizedEntity,\n PdsProviderInfo,\n PresentationLinkView,\n Profile,\n ProfileCertification,\n ProfileCourse,\n ProfileEducation,\n ProfileHonor,\n ProfileIndustry,\n ProfileInvestment,\n ProfileInvestmentLink,\n ProfileInvolvement,\n ProfileInvolvementLink,\n ProfileLanguage,\n ProfileLocation,\n ProfileOverrideSource,\n ProfilePosition,\n PositionConfirmations,\n PositionViewerConfirmation,\n PositionOrgVerification,\n PositionEmailVerification,\n PositionPeerVerification,\n ProfilePresentation,\n CoSpeaker,\n ActorCard,\n AuthorSuggestion,\n ProjectMemberCard,\n ProjectRole,\n ProfilePresentationDelivery,\n ProfileProject,\n ProjectEventView,\n ProfilePublication,\n ProfileSkill,\n ProfileVolunteering,\n PublicationContributor,\n RelatedIdentifier,\n SkillRef,\n SkillSuggestion,\n TrustStat,\n VerifiedAccount,\n AccountFacetMode,\n} from './types/index.js';\n\n// Aggregated public profile view (`id.sifa.getProfileView` XRPC query).\nexport type {\n ProfileView,\n IndustryDomain,\n ProfileLocationView,\n PositionView,\n EducationView,\n SkillView,\n CertificationView,\n ProjectView,\n VolunteeringView,\n InvolvementView,\n InvolvementLinkView,\n PublicationView,\n ContributorView,\n CourseView,\n DurationView,\n CoSpeakerView,\n ProjectMemberView,\n PresentationDeliveryView,\n PresentationView,\n HonorView,\n LanguageView,\n ExternalAccountView,\n ActiveAppView,\n AtfundLinkView,\n} from './types/profile-view.js';\n\nexport { PROJECT_ROLES } from './types/index.js';\n\nexport {\n ACTIVITY_TIERS,\n APP_CATEGORIES,\n APP_CATEGORY_IDS,\n APP_CATEGORY_MAP,\n CATEGORY_LABELS,\n normalizeSkillCategory,\n CATEGORY_ORDER,\n CONTINENTS,\n COMPANY_OPTIONAL_EMPLOYMENT_TYPES,\n COUNTRIES,\n CALENDAR_EVENT_MODE_LABELS,\n CALENDAR_EVENT_STATUS_LABELS,\n PRESENTATION_LINK_TYPE_LABELS,\n PRESENTATION_LINK_TYPE_OPTIONS,\n PRESENTATION_ROLE_LABELS,\n PRESENTATION_ROLE_OPTIONS,\n PUBLICATION_TYPE_LABELS,\n PUBLICATION_TYPE_OPTIONS,\n EMPLOYMENT_TYPE_GROUPS,\n INVESTMENT_ROLE_OPTIONS,\n INVESTMENT_ROLE_LABELS,\n INVESTMENT_STAGE_OPTIONS,\n INVESTMENT_STAGE_LABELS,\n INVESTMENT_STATUS_OPTIONS,\n INVESTMENT_STATUS_LABELS,\n ON_BEHALF_OF_EMPLOYMENT_TYPES,\n EMPLOYMENT_TYPE_LABELS,\n INDUSTRY_OPTIONS,\n INDUSTRY_LABELS,\n getIndustryLabel,\n SEARCH_FILTER_DEFS,\n OPEN_TO_OPTIONS,\n OPEN_TO_TOKEN_LABELS,\n OPEN_TO_GROUP_LABELS,\n OPEN_TO_TOKENS,\n OPEN_TO_TOKEN_TO_VALUE,\n OPEN_TO_VALUE_TO_TOKEN,\n categoryForApp,\n findIndustry,\n getActivityTaxonomyVersion,\n getActivityTier,\n isRelationalActivity,\n getCalendarEventModeLabel,\n getCalendarEventStatusLabel,\n getPresentationLinkTypeLabel,\n getPresentationRoleLabel,\n getPublicationTypeLabel,\n getAppCategoryIcon,\n getEmploymentTypeLabel,\n isCompanyRequired,\n getInvestmentRoleLabel,\n getInvestmentStageLabel,\n getInvestmentStatusLabel,\n isOnBehalfOfApplicable,\n getIndustryLabelKey,\n getLexiconEntry,\n getOpenToLabelKey,\n normalizeOpenTo,\n openToTokenToValue,\n openToValueToToken,\n getTierMeta,\n getWorkplaceTypeLabel,\n normalizeWorkplaceTypes,\n isAppCategory,\n isKnownAppId,\n PLATFORM_LABELS,\n PLATFORM_OPTIONS,\n SKILL_CATEGORIES,\n WORKPLACE_TYPE_LABELS,\n WORKPLACE_TYPE_OPTIONS,\n dedupeSkills,\n getContinent,\n getFaviconUrl,\n getPlatformLabel,\n groupSkillsByCategory,\n groupSkillsBySubCategory,\n groupSkillsForDisplay,\n isKnownPlatform,\n normalizePlatformId,\n type ActivityTaxonomy,\n type ActivityTier,\n type AppCategoryId,\n type ContinentCode,\n type EmploymentTypeGroup,\n type EmploymentTypeOption,\n type InvestmentOption,\n type IndustryOption,\n type KnownAppId,\n type LexiconEntry,\n type MergedProfileSkill,\n type PresentationLinkTypeOption,\n type PresentationRoleOption,\n type PublicationTypeOption,\n INVOLVEMENT_KIND_OPTIONS,\n INVOLVEMENT_KIND_LABELS,\n INVOLVEMENT_KIND_HEADINGS,\n getInvolvementKindHeading,\n getInvolvementKindLabel,\n COURSE_ROLE_OPTIONS,\n COURSE_ROLE_LABELS,\n COURSE_ROLE_TAKEN,\n COURSE_ROLE_TAUGHT,\n COURSE_ROLE_TEACHING_ASSISTANT,\n getCourseRoleLabel,\n isTeachingCourse,\n splitCoursesByRole,\n type CourseRoleOption,\n EQF_LEVEL_LABELS,\n EQF_LEVEL_OPTIONS,\n getEducationLevelDisplay,\n getEqfLevelLabel,\n readEqfLevel,\n suggestEqfLevelFromDegree,\n type EqfLevel,\n type EqfLevelOption,\n ARTIFACT_LINK_KIND_OPTIONS,\n ARTIFACT_LINK_KIND_LABELS,\n getArtifactLinkKindLabel,\n VERIFICATION_PROVIDERS,\n getVerificationProvider,\n isKnownVerificationProvider,\n resolveVerifierProvider,\n buildVerifierListMembers,\n primaryVerification,\n resolveVerificationBadges,\n verificationLabel,\n type AccountVerification,\n type VerifierListItem,\n type VerificationProvider,\n type VerificationProviderId,\n type VerificationSource,\n type InvolvementKindOption,\n type ArtifactLinkKindOption,\n type OpenToGroup,\n type OpenToOption,\n type PlatformId,\n type SearchFilterControl,\n type SearchFilterDef,\n type SearchFilterOptionSource,\n type SkillCategory,\n type TierMeta,\n type WorkplaceTypeOption,\n} from './taxonomy/index.js';\n\nexport {\n certDateExtractor,\n contrastRatio,\n countryCodeToFlag,\n dateRangeExtractor,\n detectPdsProvider,\n formatCompanyName,\n formatCredentialDateRange,\n formatDateRange,\n formatPositionDateRange,\n formatDisplayUrl,\n formatDistanceToNow,\n formatIsoTitle,\n formatLocation,\n formatPresentationDuration,\n formatRelativeTime,\n formatTimelineDate,\n getDisplayLabel,\n getHandleStem,\n getPdsDisplayName,\n isValidRgbColor,\n lexiconDateExtractor,\n limitCombiningMarks,\n locationSegments,\n meetsContrastAA,\n normalizeCompanyKey,\n normalizeLegalForm,\n parseLocationString,\n parseTalkRkey,\n pdsProviderFromApi,\n relativeLuminance,\n resolveEmbed,\n youtubeVideoId,\n youtubeThumbnailUrl,\n rgbToString,\n sanitizeDisplayText,\n normalizeDoi,\n openAlexWorkUrl,\n blobProxyUrl,\n type BlobProxyVariant,\n formatRelationship,\n parseEndorsementComment,\n sanitizeHandleInput,\n singleDateExtractor,\n slugifyTitle,\n buildMetaDescription,\n buildTalkSlug,\n sortByDateDesc,\n summarizePresentationDeliveries,\n truncateGraphemes,\n collapseContributors,\n type CollapseContributorsOptions,\n type CollapsedContributors,\n type EmbedResult,\n type ParsedEndorsementComment,\n type PdsProvider,\n type PresentationDeliverySummary,\n type RgbColor,\n} from './format/index.js';\n\nexport {\n parsePresentationDuration,\n durationFromMinutes,\n parseIntendedAudiences,\n stripHtmlToText,\n normalizePresentationRole,\n normalizePresentationMode,\n presentationCsvRowToRecord,\n presentationDeliveryCsvRowToRecord,\n PRESENTATION_ROLE_VALUES,\n PRESENTATION_MODE_VALUES,\n type CsvRow,\n type ParsedPresentation,\n type ParsedDelivery,\n validateTalksImport,\n type TalksImportIssue,\n type TalksImportIssueCode,\n type TalksImportValidation,\n} from './import/index.js';\n\nexport {\n ACTIVITY_VISIBILITY_RULES,\n ADULT_CONTENT_LABELS,\n APP_URL_PATTERNS,\n COLLECTION_TO_APP,\n getAppIdForCollection,\n hasAdultContent,\n isVisibleActivityItem,\n resolveCardHealth,\n resolveCardUrl,\n type ActivityItemForUrl,\n type ActivityLabel,\n type AdultContentLabel,\n type AppUrlPatterns,\n type CardHealth,\n type CardHealthStrategy,\n} from './cards/index.js';\n\nexport {\n PUBLISHERS,\n STANDARD_PUBLISHER_ID,\n getPublisherById,\n getPublisherByHost,\n getPublisherFromSiteUrl,\n type Publisher,\n} from './publishers/index.js';\n\n// Shared activity-stream view-model: the normalized, framework-free feed both\n// sifa-web (React cards) and page.sifa.id (string-HTML renderer) consume.\nexport {\n ACTIVITY_VERBS,\n STREAM_VERBS,\n getActivityVerbsVersion,\n streamVerbSchema,\n verbForCollection,\n streamAddressSchema,\n streamAuthorSchema,\n streamCardBodySchema,\n streamCardSubjectSchema,\n streamCardVMSchema,\n streamExternalLinkSchema,\n streamGeoSchema,\n streamMediaSchema,\n streamRichSegmentSchema,\n streamSourceSchema,\n streamThemeSchema,\n isSelfAuthoredRich,\n renderAsLine,\n streamCardBodyContent,\n streamCardContent,\n streamCardSubjectText,\n toStreamCardVM,\n toStreamCardVMs,\n type ActivityItem,\n type StreamCardContent,\n type ActivityVerbMap,\n type StreamAddress,\n type StreamAuthor,\n type StreamCardBody,\n type StreamCardSubject,\n type StreamCardVM,\n type StreamExternalLink,\n type StreamGeo,\n type StreamMedia,\n type StreamMediaBase,\n type StreamMediaBlob,\n type StreamMediaResolved,\n type StreamRichSegment,\n type StreamSource,\n type StreamTheme,\n type StreamVerb,\n type ToStreamCardVMOptions,\n} from './stream/index.js';\n\nexport {\n COMPLETENESS_MAX_SCORE,\n completenessPercent,\n completenessScore,\n isOptionalCompletenessSignal,\n OPTIONAL_COMPLETENESS_SIGNALS,\n DIMENSIONS_MAX_SCORE,\n MIN_SKILLS,\n countFilledDimensions,\n dimensionsFromInputs,\n getFilledDimensionsMap,\n pickPrimaryPosition,\n DATE_LOOKAHEAD_MONTHS,\n isBeyondLookahead,\n isUpcomingStart,\n type DateLookaheadKind,\n pickPrimaryFlagged,\n summarizeProfileView,\n profileToDimensionInputs,\n isPseudoEmployer,\n looksLikeDomain,\n entityDisambiguationLabel,\n searchResultDisambiguation,\n entityResultKey,\n classifyEntityRef,\n isLinked,\n ENTITY_REF_ANCHORS,\n qualifiesAsOrg,\n isRegistrableDomainHandle,\n hasPersonalProfileContent,\n rendersPersonalProfile,\n rendersCompanyProfile,\n resolveAccountFacetMode,\n isCompanyPageIndexable,\n companyPageRichness,\n COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS,\n COMPANY_PAGE_MIN_DESCRIPTION_LENGTH,\n COMPANY_PAGE_ROSTER_MIN_MEMBERS,\n countRecentActivity,\n followingFeedFallbackApp,\n SELF_APP_ID,\n excludeSelfApp,\n actorShowsIdentity,\n EMPTY_SITE_ACTIVITY_PRESET,\n SITE_PRESET_TAG_CATEGORY,\n SITE_PRESET_MAX_TAGS,\n SITE_PRESET_MAX_TAG_LENGTH,\n normalizeSitePresetTag,\n parseSitePresetTags,\n isSiteActivityPresetActive,\n recordTags,\n matchesSitePresetTags,\n matchesSiteActivityPreset,\n siteActivityPresetSchema,\n siteActivityPresetUpdateSchema,\n type SiteActivityPreset,\n type DailyActivityCount,\n type AppWithId,\n type DimensionKey,\n type DimensionMap,\n type PrimaryPositionCandidate,\n type PrimaryFlagCandidate,\n type ProfileSummary,\n type SummarizeProfileViewOptions,\n type ProfileCompletion,\n type ProfileDimensionInputs,\n type DisambiguationFields,\n type EntityRefAnchor,\n type CompanyFirmographics,\n type CompanyHqFacts,\n type PersonalFacetContent,\n resolveAgentRef,\n type AgentRefFlat,\n} from './logic/index.js';\n\n// Profile section model: which sections render, in what order, their nav\n// grouping, per-section sorts, and involvement grouping. Shared by the HTML\n// profile page, the Markdown/DOCX/print exports, and the personal-site renderer.\nexport {\n ALL_SECTIONS,\n INVOLVEMENT_HEADING_ORDER,\n SECTION_GROUPS,\n SECTION_LABELS,\n filterHidden,\n getVisibleSectionIds,\n groupInvolvementByHeading,\n groupPublicationVersions,\n type GroupPublicationVersionsOptions,\n type PublicationVersionGroup,\n type VersionablePublication,\n hoistPrimary,\n isRoleLineRedundant,\n isSectionPopulated,\n sortByActiveDateRange,\n sortCertifications,\n sortEducation,\n sortHonors,\n sortLanguages,\n sortLanguagesByProficiency,\n sortPositions,\n sortProjects,\n sortPublications,\n visibleItems,\n type InvolvementGroup,\n type SectionGroupId,\n type SectionId,\n} from './profile/index.js';\n\n// Profile \"Highlights\" block: selection + labeling of the one ongoing (or\n// most-recent) record per section. Shared by the sifa-web profile page and the\n// personal-site renderer so the two surfaces never diverge on what's featured.\nexport {\n buildProfileHighlights,\n shouldRenderHighlights,\n formatSpanDate,\n formatSingleDate,\n formatEventDate,\n type ProfileHighlightsInput,\n type ProfileHighlightSection,\n type ProfileHighlightStatus,\n type ProfileHighlightTile,\n type BuildProfileHighlightsOptions,\n} from './profile/index.js';\n\nexport {\n AtmosphereFeedItemSchema,\n BlobRefSchema,\n EndorsementConfirmationRecordSchema,\n EndorsementRecordSchema,\n OrgProfileRecordSchema,\n OrgEmploymentAttestationRecordSchema,\n EmploymentVerificationRecordSchema,\n EMPLOYMENT_STATUS_TOKENS,\n VERIFICATION_METHOD_TOKENS,\n resolveEmploymentVerification,\n EntitySearchResultSchema,\n EntitySearchResponseSchema,\n EntitySelectRequestSchema,\n EntitySelectResponseSchema,\n EntityImportSearchResponseSchema,\n EntityResolveDomainRequestSchema,\n EntityResolveDomainResponseSchema,\n EntityMintDomainResponseSchema,\n FEATURE_FLAGS,\n FeatureAllowlistEntrySchema,\n FeedActorSchema,\n FollowFeedItemSchema,\n FollowFeedPageSchema,\n FollowProfilePageSchema,\n FollowProfileSchema,\n GraphFollowRecordSchema,\n PresentationDurationSchema,\n PresentationLinkSchema,\n ProfileCertificationRecordSchema,\n ProfileCourseRecordSchema,\n ProfileEducationRecordSchema,\n ProfileExternalAccountRecordSchema,\n ProfileHonorRecordSchema,\n ProfileInvestmentRecordSchema,\n InvestmentAmountSchema,\n PROFILE_INVESTMENT_NSID,\n ProfileInvolvementRecordSchema,\n ArtifactLinkSchema,\n PROFILE_INVOLVEMENT_NSID,\n ProfileLanguageRecordSchema,\n ProfilePositionRecordSchema,\n ProfilePresentationDeliveryRecordSchema,\n ProfilePresentationRecordSchema,\n ProfileProjectRecordSchema,\n ProfilePublicationRecordSchema,\n RelatedIdentifierSchema,\n ProfileSelfRecordSchema,\n ProfileSkillRecordSchema,\n ProfileVolunteeringRecordSchema,\n PublicationAuthorSchema,\n SifaFeedItemSchema,\n atUriSchema,\n cidSchema,\n datetimeSchema,\n decodeFeedCursor,\n didSchema,\n encodeFeedCursor,\n externalRecordRefSchema,\n languageTagSchema,\n makeGraphFollowRecordSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n skillRefSchema,\n strongRefSchema,\n uriSchema,\n type AtmosphereFeedItem,\n type BlobRef,\n type EndorsementConfirmationRecord,\n type EndorsementRecord,\n type OrgProfileRecord,\n type OrgEmploymentAttestationRecord,\n type EmploymentVerificationRecord,\n type EmploymentVerificationResolution,\n type ResolveEmploymentVerificationOptions,\n type EntitySearchResult,\n type EntitySearchResponse,\n type EntitySelectRequest,\n type EntitySelectResponse,\n type EntityImportSearchResponse,\n type EntityResolveDomainRequest,\n type EntityResolveDomainResponse,\n type EntityMintDomainResponse,\n type FeatureAllowlistEntry,\n type FeatureFlag,\n type FeedActor,\n type FeedCursor,\n type FollowFeedItem,\n type FollowFeedPage,\n type FollowProfileItem,\n type FollowProfilePage,\n type GraphFollowRecord,\n type SifaFeedItem,\n type ProfileCertificationRecord,\n type ProfileCourseRecord,\n type ProfileEducationRecord,\n type ProfileExternalAccountRecord,\n type ProfileHonorRecord,\n type ProfileInvolvementRecord,\n type ArtifactLink,\n type ProfileLanguageRecord,\n type PresentationDuration,\n type PresentationLink,\n type ProfilePositionRecord,\n type ProfilePresentationDeliveryRecord,\n type ProfilePresentationRecord,\n type ProfileProjectRecord,\n type ProfilePublicationRecord,\n type ProfileSelfRecord,\n type ProfileSkillRecord,\n type ProfileVolunteeringRecord,\n type PublicationAuthor,\n agentRefSchema,\n type AgentRef,\n} from './schemas/index.js';\n\nexport {\n ROADMAP_ITEM_META,\n ROADMAP_ISSUES_REPO,\n roadmapIssueUrl,\n type RoadmapItemMeta,\n} from './roadmap/index.js';\n\nexport type {\n LocationSegment,\n LocationSegmentKind,\n LocationSegmentsOptions,\n} from './format/index.js';\n\nexport type { DisplayUrl, FormatDisplayUrlOptions, UrlPathPolicy } from './format/index.js';\n\nexport { SIFA_REPO_GROUPS, describeSifaRecord, repoGroupForCollection } from './repo/index.js';\nexport type {\n RepoCollectionGroup,\n RepoDeleteOutcome,\n RepoDeleteRecordResult,\n RepoDeleteResult,\n RepoGroupDefinition,\n RepoGroupId,\n RepoInventory,\n RepoRecordLabel,\n RepoRecordSummary,\n} from './repo/index.js';\n"],"mappings":";AAgGA,SAAS,qBAAqB;AAE9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAeA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAiBK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Sifa SDK -- public client library for the Sifa AppView on AT Protocol.\n *\n * Pre-1.0: the public API is unstable and may change in any minor release.\n *\n * @see https://github.com/singi-labs/sifa-sdk\n */\n\ndeclare const __SIFA_SDK_VERSION__: string;\n\nexport const SIFA_SDK_VERSION: string = __SIFA_SDK_VERSION__;\n\nexport type {\n ActiveApp,\n Endorsement,\n EndorsementData,\n ExternalAccount,\n ExternalAccountKeytraceClaim,\n FeedItem,\n LanguageProficiency,\n LocationValue,\n OrgAddressView,\n OrgFloorVerdict,\n OrgLinkView,\n OrgProfileView,\n RecognizedEntity,\n PdsProviderInfo,\n PresentationLinkView,\n Profile,\n ProfileCertification,\n ProfileCourse,\n ProfileEducation,\n ProfileHonor,\n ProfileIndustry,\n ProfileInvestment,\n ProfileInvestmentLink,\n ProfileInvolvement,\n ProfileInvolvementLink,\n ProfileLanguage,\n ProfileLocation,\n ProfileOverrideSource,\n ProfilePosition,\n PositionConfirmations,\n PositionViewerConfirmation,\n PositionOrgVerification,\n PositionEmailVerification,\n PositionPeerVerification,\n ProfilePresentation,\n CoSpeaker,\n ActorCard,\n AuthorSuggestion,\n ProjectMemberCard,\n ProjectRole,\n ProfilePresentationDelivery,\n ProfileProject,\n ProjectEventView,\n ProfilePublication,\n ProfileSkill,\n ProfileVolunteering,\n PublicationContributor,\n RelatedIdentifier,\n SkillRef,\n SkillSuggestion,\n TrustStat,\n VerifiedAccount,\n AccountFacetMode,\n} from './types/index.js';\n\n// Aggregated public profile view (`id.sifa.getProfileView` XRPC query).\nexport type {\n ProfileView,\n IndustryDomain,\n ProfileLocationView,\n PositionView,\n EducationView,\n SkillView,\n CertificationView,\n ProjectView,\n VolunteeringView,\n InvolvementView,\n InvolvementLinkView,\n PublicationView,\n ContributorView,\n CourseView,\n DurationView,\n CoSpeakerView,\n ProjectMemberView,\n PresentationDeliveryView,\n PresentationView,\n HonorView,\n LanguageView,\n ExternalAccountView,\n ActiveAppView,\n AtfundLinkView,\n} from './types/profile-view.js';\n\nexport { PROJECT_ROLES } from './types/index.js';\n\nexport {\n ACTIVITY_TIERS,\n APP_CATEGORIES,\n APP_CATEGORY_IDS,\n APP_CATEGORY_MAP,\n CATEGORY_LABELS,\n normalizeSkillCategory,\n CATEGORY_ORDER,\n CONTINENTS,\n COMPANY_OPTIONAL_EMPLOYMENT_TYPES,\n COUNTRIES,\n CALENDAR_EVENT_MODE_LABELS,\n CALENDAR_EVENT_STATUS_LABELS,\n PRESENTATION_LINK_TYPE_LABELS,\n PRESENTATION_LINK_TYPE_OPTIONS,\n PRESENTATION_ROLE_LABELS,\n PRESENTATION_ROLE_OPTIONS,\n PUBLICATION_TYPE_LABELS,\n PUBLICATION_TYPE_OPTIONS,\n EMPLOYMENT_TYPE_GROUPS,\n INVESTMENT_ROLE_OPTIONS,\n INVESTMENT_ROLE_LABELS,\n INVESTMENT_STAGE_OPTIONS,\n INVESTMENT_STAGE_LABELS,\n INVESTMENT_STATUS_OPTIONS,\n INVESTMENT_STATUS_LABELS,\n ON_BEHALF_OF_EMPLOYMENT_TYPES,\n EMPLOYMENT_TYPE_LABELS,\n INDUSTRY_OPTIONS,\n INDUSTRY_LABELS,\n getIndustryLabel,\n SEARCH_FILTER_DEFS,\n OPEN_TO_OPTIONS,\n OPEN_TO_TOKEN_LABELS,\n OPEN_TO_GROUP_LABELS,\n OPEN_TO_TOKENS,\n OPEN_TO_TOKEN_TO_VALUE,\n OPEN_TO_VALUE_TO_TOKEN,\n categoryForApp,\n findIndustry,\n getActivityTaxonomyVersion,\n getActivityTier,\n isRelationalActivity,\n getCalendarEventModeLabel,\n getCalendarEventStatusLabel,\n getPresentationLinkTypeLabel,\n getPresentationRoleLabel,\n getPublicationTypeLabel,\n getAppCategoryIcon,\n getEmploymentTypeLabel,\n isCompanyRequired,\n getInvestmentRoleLabel,\n getInvestmentStageLabel,\n getInvestmentStatusLabel,\n isOnBehalfOfApplicable,\n getIndustryLabelKey,\n getLexiconEntry,\n getOpenToLabelKey,\n normalizeOpenTo,\n openToTokenToValue,\n openToValueToToken,\n getTierMeta,\n getWorkplaceTypeLabel,\n normalizeWorkplaceTypes,\n isAppCategory,\n isKnownAppId,\n PLATFORM_LABELS,\n PLATFORM_OPTIONS,\n SKILL_CATEGORIES,\n WORKPLACE_TYPE_LABELS,\n WORKPLACE_TYPE_OPTIONS,\n dedupeSkills,\n getContinent,\n getFaviconUrl,\n getPlatformLabel,\n groupSkillsByCategory,\n groupSkillsBySubCategory,\n groupSkillsForDisplay,\n isKnownPlatform,\n normalizePlatformId,\n type ActivityTaxonomy,\n type ActivityTier,\n type AppCategoryId,\n type ContinentCode,\n type EmploymentTypeGroup,\n type EmploymentTypeOption,\n type InvestmentOption,\n type IndustryOption,\n type KnownAppId,\n type LexiconEntry,\n type MergedProfileSkill,\n type PresentationLinkTypeOption,\n type PresentationRoleOption,\n type PublicationTypeOption,\n INVOLVEMENT_KIND_OPTIONS,\n INVOLVEMENT_KIND_LABELS,\n INVOLVEMENT_KIND_HEADINGS,\n getInvolvementKindHeading,\n getInvolvementKindLabel,\n COURSE_ROLE_OPTIONS,\n COURSE_ROLE_LABELS,\n COURSE_ROLE_TAKEN,\n COURSE_ROLE_TAUGHT,\n COURSE_ROLE_TEACHING_ASSISTANT,\n getCourseRoleLabel,\n isTeachingCourse,\n splitCoursesByRole,\n type CourseRoleOption,\n EQF_LEVEL_LABELS,\n EQF_LEVEL_OPTIONS,\n getEducationLevelDisplay,\n getEqfLevelLabel,\n readEqfLevel,\n suggestEqfLevelFromDegree,\n type EqfLevel,\n type EqfLevelOption,\n ARTIFACT_LINK_KIND_OPTIONS,\n ARTIFACT_LINK_KIND_LABELS,\n getArtifactLinkKindLabel,\n VERIFICATION_PROVIDERS,\n getVerificationProvider,\n isKnownVerificationProvider,\n resolveVerifierProvider,\n buildVerifierListMembers,\n primaryVerification,\n resolveVerificationBadges,\n verificationLabel,\n type AccountVerification,\n type VerifierListItem,\n type VerificationProvider,\n type VerificationProviderId,\n type VerificationSource,\n type InvolvementKindOption,\n type ArtifactLinkKindOption,\n type OpenToGroup,\n type OpenToOption,\n type PlatformId,\n type SearchFilterControl,\n type SearchFilterDef,\n type SearchFilterOptionSource,\n type SkillCategory,\n type TierMeta,\n type WorkplaceTypeOption,\n} from './taxonomy/index.js';\n\nexport {\n certDateExtractor,\n contrastRatio,\n countryCodeToFlag,\n dateRangeExtractor,\n detectPdsProvider,\n formatCompanyName,\n formatCredentialDateRange,\n formatDateRange,\n formatPositionDateRange,\n formatDisplayUrl,\n formatDistanceToNow,\n formatIsoTitle,\n formatLocation,\n formatPresentationDuration,\n formatRelativeTime,\n formatTimelineDate,\n getDisplayLabel,\n getHandleStem,\n getPdsDisplayName,\n isValidRgbColor,\n lexiconDateExtractor,\n limitCombiningMarks,\n locationSegments,\n meetsContrastAA,\n normalizeCompanyKey,\n normalizeLegalForm,\n parseLocationString,\n parseTalkRkey,\n pdsProviderFromApi,\n relativeLuminance,\n resolveEmbed,\n youtubeVideoId,\n youtubeThumbnailUrl,\n rgbToString,\n sanitizeDisplayText,\n normalizeDoi,\n openAlexWorkUrl,\n blobProxyUrl,\n type BlobProxyVariant,\n formatRelationship,\n parseEndorsementComment,\n sanitizeHandleInput,\n singleDateExtractor,\n slugifyTitle,\n buildMetaDescription,\n buildTalkSlug,\n sortByDateDesc,\n summarizePresentationDeliveries,\n truncateGraphemes,\n collapseContributors,\n type CollapseContributorsOptions,\n type CollapsedContributors,\n type EmbedResult,\n type ParsedEndorsementComment,\n type PdsProvider,\n type PresentationDeliverySummary,\n type RgbColor,\n} from './format/index.js';\n\nexport {\n parsePresentationDuration,\n durationFromMinutes,\n parseIntendedAudiences,\n stripHtmlToText,\n normalizePresentationRole,\n normalizePresentationMode,\n presentationCsvRowToRecord,\n presentationDeliveryCsvRowToRecord,\n PRESENTATION_ROLE_VALUES,\n PRESENTATION_MODE_VALUES,\n type CsvRow,\n type ParsedPresentation,\n type ParsedDelivery,\n validateTalksImport,\n type TalksImportIssue,\n type TalksImportIssueCode,\n type TalksImportValidation,\n} from './import/index.js';\n\nexport {\n ACTIVITY_VISIBILITY_RULES,\n ADULT_CONTENT_LABELS,\n APP_URL_PATTERNS,\n COLLECTION_TO_APP,\n getAppIdForCollection,\n hasAdultContent,\n isVisibleActivityItem,\n resolveCardHealth,\n resolveCardUrl,\n type ActivityItemForUrl,\n type ActivityLabel,\n type AdultContentLabel,\n type AppUrlPatterns,\n type CardHealth,\n type CardHealthStrategy,\n} from './cards/index.js';\n\nexport {\n PUBLISHERS,\n STANDARD_PUBLISHER_ID,\n getPublisherById,\n getPublisherByHost,\n getPublisherFromSiteUrl,\n type Publisher,\n} from './publishers/index.js';\n\n// Shared activity-stream view-model: the normalized, framework-free feed both\n// sifa-web (React cards) and page.sifa.id (string-HTML renderer) consume.\nexport {\n ACTIVITY_VERBS,\n STREAM_VERBS,\n getActivityVerbsVersion,\n streamVerbSchema,\n verbForCollection,\n streamAddressSchema,\n streamAuthorSchema,\n streamCardBodySchema,\n streamCardSubjectSchema,\n streamCardVMSchema,\n streamExternalLinkSchema,\n streamGeoSchema,\n streamMediaSchema,\n streamRichSegmentSchema,\n streamSourceSchema,\n streamThemeSchema,\n isSelfAuthoredRich,\n renderAsLine,\n streamCardBodyContent,\n streamCardContent,\n streamCardSubjectText,\n toStreamCardVM,\n toStreamCardVMs,\n type ActivityItem,\n type StreamCardContent,\n type ActivityVerbMap,\n type StreamAddress,\n type StreamAuthor,\n type StreamCardBody,\n type StreamCardSubject,\n type StreamCardVM,\n type StreamExternalLink,\n type StreamGeo,\n type StreamMedia,\n type StreamMediaBase,\n type StreamMediaBlob,\n type StreamMediaResolved,\n type StreamRichSegment,\n type StreamSource,\n type StreamTheme,\n type StreamVerb,\n type ToStreamCardVMOptions,\n} from './stream/index.js';\n\nexport {\n COMPLETENESS_MAX_SCORE,\n completenessPercent,\n completenessScore,\n isOptionalCompletenessSignal,\n OPTIONAL_COMPLETENESS_SIGNALS,\n DIMENSIONS_MAX_SCORE,\n MIN_SKILLS,\n countFilledDimensions,\n dimensionsFromInputs,\n getFilledDimensionsMap,\n pickPrimaryPosition,\n DATE_LOOKAHEAD_MONTHS,\n isBeyondLookahead,\n isUpcomingStart,\n type DateLookaheadKind,\n pickPrimaryFlagged,\n summarizeProfileView,\n profileToDimensionInputs,\n isPseudoEmployer,\n looksLikeDomain,\n entityDisambiguationLabel,\n searchResultDisambiguation,\n entityResultKey,\n classifyEntityRef,\n isLinked,\n ENTITY_REF_ANCHORS,\n qualifiesAsOrg,\n isRegistrableDomainHandle,\n hasPersonalProfileContent,\n rendersPersonalProfile,\n rendersCompanyProfile,\n resolveAccountFacetMode,\n isCompanyPageIndexable,\n companyPageRichness,\n COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS,\n COMPANY_PAGE_MIN_DESCRIPTION_LENGTH,\n COMPANY_PAGE_ROSTER_MIN_MEMBERS,\n countRecentActivity,\n followingFeedFallbackApp,\n SELF_APP_ID,\n excludeSelfApp,\n actorShowsIdentity,\n EMPTY_SITE_ACTIVITY_PRESET,\n SITE_PRESET_TAG_CATEGORY,\n SITE_PRESET_MAX_TAGS,\n SITE_PRESET_MAX_TAG_LENGTH,\n normalizeSitePresetTag,\n parseSitePresetTags,\n isSiteActivityPresetActive,\n recordTags,\n matchesSitePresetTags,\n matchesSiteActivityPreset,\n siteActivityPresetSchema,\n siteActivityPresetUpdateSchema,\n type SiteActivityPreset,\n type DailyActivityCount,\n type AppWithId,\n type DimensionKey,\n type DimensionMap,\n type PrimaryPositionCandidate,\n type PrimaryFlagCandidate,\n type ProfileSummary,\n type SummarizeProfileViewOptions,\n type ProfileCompletion,\n type ProfileDimensionInputs,\n type DisambiguationFields,\n type EntityRefAnchor,\n type CompanyFirmographics,\n type CompanyHqFacts,\n type PersonalFacetContent,\n resolveAgentRef,\n type AgentRefFlat,\n WIKIDATA_ORG_TYPE_CLASSES,\n WIKIDATA_ORG_TYPE_CLASS_QIDS,\n orgTypeFromRorTypes,\n orgTypeFromWikidataClasses,\n} from './logic/index.js';\n\n// Profile section model: which sections render, in what order, their nav\n// grouping, per-section sorts, and involvement grouping. Shared by the HTML\n// profile page, the Markdown/DOCX/print exports, and the personal-site renderer.\nexport {\n ALL_SECTIONS,\n INVOLVEMENT_HEADING_ORDER,\n SECTION_GROUPS,\n SECTION_LABELS,\n filterHidden,\n getVisibleSectionIds,\n groupInvolvementByHeading,\n groupPublicationVersions,\n type GroupPublicationVersionsOptions,\n type PublicationVersionGroup,\n type VersionablePublication,\n hoistPrimary,\n isRoleLineRedundant,\n isSectionPopulated,\n sortByActiveDateRange,\n sortCertifications,\n sortEducation,\n sortHonors,\n sortLanguages,\n sortLanguagesByProficiency,\n sortPositions,\n sortProjects,\n sortPublications,\n visibleItems,\n type InvolvementGroup,\n type SectionGroupId,\n type SectionId,\n} from './profile/index.js';\n\n// Profile \"Highlights\" block: selection + labeling of the one ongoing (or\n// most-recent) record per section. Shared by the sifa-web profile page and the\n// personal-site renderer so the two surfaces never diverge on what's featured.\nexport {\n buildProfileHighlights,\n shouldRenderHighlights,\n formatSpanDate,\n formatSingleDate,\n formatEventDate,\n type ProfileHighlightsInput,\n type ProfileHighlightSection,\n type ProfileHighlightStatus,\n type ProfileHighlightTile,\n type BuildProfileHighlightsOptions,\n} from './profile/index.js';\n\nexport {\n AtmosphereFeedItemSchema,\n BlobRefSchema,\n EndorsementConfirmationRecordSchema,\n EndorsementRecordSchema,\n OrgProfileRecordSchema,\n OrgEmploymentAttestationRecordSchema,\n EmploymentVerificationRecordSchema,\n EMPLOYMENT_STATUS_TOKENS,\n VERIFICATION_METHOD_TOKENS,\n resolveEmploymentVerification,\n EntitySearchResultSchema,\n EntitySearchResponseSchema,\n EntitySelectRequestSchema,\n EntitySelectResponseSchema,\n EntityImportSearchResponseSchema,\n EntityResolveDomainRequestSchema,\n EntityResolveDomainResponseSchema,\n EntityMintDomainResponseSchema,\n FEATURE_FLAGS,\n FeatureAllowlistEntrySchema,\n FeedActorSchema,\n FollowFeedItemSchema,\n FollowFeedPageSchema,\n FollowProfilePageSchema,\n FollowProfileSchema,\n GraphFollowRecordSchema,\n PresentationDurationSchema,\n PresentationLinkSchema,\n ProfileCertificationRecordSchema,\n ProfileCourseRecordSchema,\n ProfileEducationRecordSchema,\n ProfileExternalAccountRecordSchema,\n ProfileHonorRecordSchema,\n ProfileInvestmentRecordSchema,\n InvestmentAmountSchema,\n PROFILE_INVESTMENT_NSID,\n ProfileInvolvementRecordSchema,\n ArtifactLinkSchema,\n PROFILE_INVOLVEMENT_NSID,\n ProfileLanguageRecordSchema,\n ProfilePositionRecordSchema,\n ProfilePresentationDeliveryRecordSchema,\n ProfilePresentationRecordSchema,\n ProfileProjectRecordSchema,\n ProfilePublicationRecordSchema,\n RelatedIdentifierSchema,\n ProfileSelfRecordSchema,\n ProfileSkillRecordSchema,\n ProfileVolunteeringRecordSchema,\n PublicationAuthorSchema,\n SifaFeedItemSchema,\n atUriSchema,\n cidSchema,\n datetimeSchema,\n decodeFeedCursor,\n didSchema,\n encodeFeedCursor,\n externalRecordRefSchema,\n languageTagSchema,\n makeGraphFollowRecordSchema,\n maxGraphemes,\n partialDateSchema,\n selfLabelsSchema,\n skillRefSchema,\n strongRefSchema,\n uriSchema,\n type AtmosphereFeedItem,\n type BlobRef,\n type EndorsementConfirmationRecord,\n type EndorsementRecord,\n type OrgProfileRecord,\n type OrgEmploymentAttestationRecord,\n type EmploymentVerificationRecord,\n type EmploymentVerificationResolution,\n type ResolveEmploymentVerificationOptions,\n type EntitySearchResult,\n type EntitySearchResponse,\n type EntitySelectRequest,\n type EntitySelectResponse,\n type EntityImportSearchResponse,\n type EntityResolveDomainRequest,\n type EntityResolveDomainResponse,\n type EntityMintDomainResponse,\n type FeatureAllowlistEntry,\n type FeatureFlag,\n type FeedActor,\n type FeedCursor,\n type FollowFeedItem,\n type FollowFeedPage,\n type FollowProfileItem,\n type FollowProfilePage,\n type GraphFollowRecord,\n type SifaFeedItem,\n type ProfileCertificationRecord,\n type ProfileCourseRecord,\n type ProfileEducationRecord,\n type ProfileExternalAccountRecord,\n type ProfileHonorRecord,\n type ProfileInvolvementRecord,\n type ArtifactLink,\n type ProfileLanguageRecord,\n type PresentationDuration,\n type PresentationLink,\n type ProfilePositionRecord,\n type ProfilePresentationDeliveryRecord,\n type ProfilePresentationRecord,\n type ProfileProjectRecord,\n type ProfilePublicationRecord,\n type ProfileSelfRecord,\n type ProfileSkillRecord,\n type ProfileVolunteeringRecord,\n type PublicationAuthor,\n agentRefSchema,\n type AgentRef,\n} from './schemas/index.js';\n\nexport {\n ROADMAP_ITEM_META,\n ROADMAP_ISSUES_REPO,\n roadmapIssueUrl,\n type RoadmapItemMeta,\n} from './roadmap/index.js';\n\nexport type {\n LocationSegment,\n LocationSegmentKind,\n LocationSegmentsOptions,\n} from './format/index.js';\n\nexport type { DisplayUrl, FormatDisplayUrlOptions, UrlPathPolicy } from './format/index.js';\n\nexport { SIFA_REPO_GROUPS, describeSifaRecord, repoGroupForCollection } from './repo/index.js';\nexport type {\n RepoCollectionGroup,\n RepoDeleteOutcome,\n RepoDeleteRecordResult,\n RepoDeleteResult,\n RepoGroupDefinition,\n RepoGroupId,\n RepoInventory,\n RepoRecordLabel,\n RepoRecordSummary,\n} from './repo/index.js';\n"],"mappings":";AAgGA,SAAS,qBAAqB;AAE9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAeA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAiBK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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","names":[]}
|
package/dist/jev/index.cjs
CHANGED
|
@@ -71,8 +71,6 @@ var ORG_TYPE_TAXONOMY = {
|
|
|
71
71
|
var SECTOR_ORG_TYPE_INDUSTRY_HINTS = {
|
|
72
72
|
healthcare_provider: ["health", "hospital", "medical", "clinic", "nursing", "dental"],
|
|
73
73
|
educational: ["educat", "school", "universit", "college", "academ"],
|
|
74
|
-
government: ["government", "public_sector", "public sector", "public administration", "defen"],
|
|
75
|
-
research_institute: ["research", "scien", "laborator", "educat"],
|
|
76
74
|
religious: ["relig", "church", "faith", "nonprofit"],
|
|
77
75
|
political: ["politic", "nonprofit"]
|
|
78
76
|
};
|
package/dist/jev/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/jev/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * `@singi-labs/sifa-sdk/jev` -- TypeSafe System One (Jev) question builders,\n * taxonomies, result schemas, and threshold predicates for Sifa's organisation\n * intelligence.\n *\n * This subpath is pure: it defines the typed *questions* to ask Jev, validates\n * the *answers*, and holds the policy constants (thresholds, taxonomies) that\n * turn a raw judgment into a decision. It performs no network calls and needs\n * no API key, so it is safe to import anywhere. The actual `systemOne` call\n * lives server-side in sifa-api, which passes an API key that must never reach\n * the browser.\n *\n * Judgment shapes:\n * - Duplicate-org detection: a single Noul over a candidate pair.\n * - Firmographic classification: independent Choice questions (industry, type,\n * size) asked together over one org's state.\n *\n * See docs.typesafe.ai for the wire contract. Typed output guarantees the\n * interface, not truth: validate thresholds on labelled Sifa data before\n * enabling any write.\n */\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Wire question types\n// ---------------------------------------------------------------------------\n\n/** A yes/no judgment. `criteria` clarifies what true vs false means. */\nexport interface NoulQuestion {\n type: 'noul';\n instructions: string;\n criteria?: { true: string; false: string };\n}\n\n/** A single-selection judgment. `criteria` maps each option to its description. */\nexport interface ChoiceQuestion {\n type: 'choice';\n instructions: string;\n criteria: Record<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Answer schemas (validate Jev's response before code trusts it)\n// ---------------------------------------------------------------------------\n\n/** Jev's Noul answer: `noul` is the probability that the answer is yes (0..1). */\nexport const noulAnswerSchema = z.object({\n type: z.literal('noul'),\n noul: z.number().min(0).max(1),\n});\nexport type NoulAnswer = z.infer<typeof noulAnswerSchema>;\n\n/**\n * Jev's Choice answer: `choice` is the highest-probability option, `confidence`\n * summarises how concentrated the distribution is, `probabilities` sums to 1.\n */\nexport const choiceAnswerSchema = z.object({\n type: z.literal('choice'),\n choice: z.string(),\n confidence: z.number().min(0).max(1),\n probabilities: z.record(z.string(), z.number()),\n});\nexport type ChoiceAnswer = z.infer<typeof choiceAnswerSchema>;\n\n// ---------------------------------------------------------------------------\n// Duplicate-org detection (Noul) -- ticket #560\n// ---------------------------------------------------------------------------\n\n/** Public, non-user fields we compare when judging whether two orgs are the same. */\nexport interface OrgRecordInput {\n name: string;\n domain?: string;\n location?: string;\n description?: string;\n}\n\n/** Build a plain object with only the defined keys (Jev sees no `undefined`). */\nfunction compact<T extends object>(obj: T): Partial<T> {\n const out: Partial<T> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined && v !== null && v !== '') out[k as keyof T] = v as T[keyof T];\n }\n return out;\n}\n\n/**\n * State for the org-pair judgment. Both records live under stable named fields\n * so the question can reference them unambiguously.\n */\nexport function buildOrgPairState(\n a: OrgRecordInput,\n b: OrgRecordInput,\n): { orgA: Partial<OrgRecordInput>; orgB: Partial<OrgRecordInput> } {\n return { orgA: compact(a), orgB: compact(b) };\n}\n\n/** Static Noul question paired with {@link buildOrgPairState}. */\nexport const ORG_PAIR_NOUL_QUESTION: NoulQuestion = {\n type: 'noul',\n instructions:\n 'The state holds two organisation records, orgA and orgB. Do they refer to the same real-world organisation?',\n criteria: {\n true: 'Same organisation, e.g. a legal-suffix or abbreviation variant of the same name, or the same primary domain.',\n false:\n 'Distinct organisations, e.g. a shared word in the name but different domains, locations, or lines of business.',\n },\n};\n\n/**\n * Threshold favouring precision: a wrong merge is worse than a missed one.\n * Validate on labelled pairs (ticket #560) before enabling merges in prod.\n */\nexport const SAME_ORG_THRESHOLD = 0.85;\n\n/** True when the Noul probability clears the merge threshold. */\nexport function isLikelySameOrg(noul: number, threshold: number = SAME_ORG_THRESHOLD): boolean {\n return noul >= threshold;\n}\n\n// ---------------------------------------------------------------------------\n// Firmographic classification (Choice) -- ticket #561\n// ---------------------------------------------------------------------------\n\n/** Industry taxonomy. Single source of truth; `other` is the no-match option. */\nexport const INDUSTRY_TAXONOMY: Record<string, string> = {\n technology: 'Software, IT services, internet, hardware, telecoms',\n finance: 'Banking, insurance, investment, fintech, accounting',\n healthcare: 'Medical care, pharma, biotech, health services',\n education: 'Schools, universities, training, edtech',\n manufacturing: 'Industrial production, hardware, materials, automotive',\n retail: 'Retail, ecommerce, consumer goods, hospitality, food',\n media: 'Media, publishing, entertainment, marketing, advertising',\n energy: 'Energy, utilities, oil and gas, renewables',\n construction: 'Construction, real estate, architecture, engineering',\n transport: 'Transport, logistics, shipping, aviation',\n professional_services: 'Legal, consulting, HR, business services',\n public_sector: 'Government, defence, public administration',\n nonprofit: 'Charities, NGOs, foundations, associations',\n agriculture: 'Agriculture, farming, fishing, forestry',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Organisation type (the org's FORM, not its sector -- a hospital's type is\n * healthcare_provider while its industry is healthcare). `other` is the no-match\n * option. Prefer the registry `legalForm` where it already encodes the form.\n */\nexport const ORG_TYPE_TAXONOMY: Record<string, string> = {\n company: 'For-profit company or corporation',\n cooperative: 'Member-owned co-operative (e.g. eG, SCOP, mutual, credit union)',\n nonprofit: 'Nonprofit, charity, or NGO',\n foundation: 'Grant-making or endowed foundation (e.g. Stiftung, fonds)',\n government: 'Government body, agency, or public-sector authority',\n educational: 'School, college, or university',\n research_institute: 'Independent research institute or laboratory',\n healthcare_provider: 'Hospital, clinic, or healthcare provider',\n professional_association: 'Professional association, trade body, or trade union',\n agency: 'Agency, consultancy, or professional-services firm',\n religious: 'Religious organisation',\n political: 'Political party or organisation',\n self_employed: 'Sole proprietor, freelancer, or self-employed individual',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Org types that also imply a sector. Jev can pick one that contradicts the\n * org's industry (a software company typed `healthcare_provider`), especially\n * from thin, description-less input. Each maps to lowercase substrings, one of\n * which the org's industry must contain for the inferred type to be shown.\n * Industry values are free text (Jev tokens like `public_sector`, or registry\n * labels like \"Hospital & Health Care\"), hence substring hints. Types not listed\n * here describe a legal or organisational form only and need no sector match.\n */\nexport const SECTOR_ORG_TYPE_INDUSTRY_HINTS: Record<string, readonly string[]> = {\n healthcare_provider: ['health', 'hospital', 'medical', 'clinic', 'nursing', 'dental'],\n educational: ['educat', 'school', 'universit', 'college', 'academ'],\n government: ['government', 'public_sector', 'public sector', 'public administration', 'defen'],\n research_institute: ['research', 'scien', 'laborator', 'educat'],\n religious: ['relig', 'church', 'faith', 'nonprofit'],\n political: ['politic', 'nonprofit'],\n};\n\n/**\n * Whether a Jev-inferred org type is plausible enough to store or show.\n *\n * - The no-match option and unknown tokens are never plausible.\n * - Form types (company, nonprofit, ...) are always plausible.\n * - Sector-bound types need an org description (thin input is where Jev\n * guesses wrong) AND an industry that matches the type's sector.\n */\nexport function isInferredOrgTypePlausible(\n orgType: string,\n ctx: { industry?: string | null; hasDescription: boolean },\n): boolean {\n if (orgType === 'other' || !Object.hasOwn(ORG_TYPE_TAXONOMY, orgType)) return false;\n const hints = SECTOR_ORG_TYPE_INDUSTRY_HINTS[orgType];\n if (!hints) return true;\n if (!ctx.hasDescription || !ctx.industry) return false;\n const industry = ctx.industry.toLowerCase();\n return hints.some((hint) => industry.includes(hint));\n}\n\n/**\n * Jev-inferred company facts a signed-in visitor can dispute (mark as wrong).\n * A dispute hides the inferred value; it never touches registry or owner data.\n */\nexport const INFERRED_FACT_FIELDS = ['industry', 'sizeBand', 'orgType'] as const;\nexport type InferredFactField = (typeof INFERRED_FACT_FIELDS)[number];\n\n/** Ordered employee-size bands; `unknown` is the no-match option. */\nexport const SIZE_BAND_TAXONOMY: Record<string, string> = {\n solo: '1 person',\n small: '2 to 10 people',\n medium: '11 to 50 people',\n large: '51 to 250 people',\n enterprise: 'More than 250 people',\n unknown: 'Not enough information to decide',\n};\n\nfunction choiceQuestion(instructions: string, criteria: Record<string, string>): ChoiceQuestion {\n return { type: 'choice', instructions, criteria };\n}\n\nexport const INDUSTRY_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single industry best describes this organisation?',\n INDUSTRY_TAXONOMY,\n);\n\nexport const ORG_TYPE_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single organisation type (its form, not its industry sector) best describes this organisation?',\n ORG_TYPE_TAXONOMY,\n);\n\nexport const SIZE_BAND_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which employee-size band best fits this organisation?',\n SIZE_BAND_TAXONOMY,\n);\n\n/**\n * Input for firmographic classification. `enrichmentText` (the org's description)\n * is the strongest evidence, but it is optional: many registry orgs have only a\n * name, domain, country, or link set. Passing those lets Jev classify from the\n * signal we hold rather than skipping the org for want of a description. A bare\n * name alone rarely suffices; a name plus a domain or country often does.\n */\nexport interface FirmographicInput {\n name: string;\n domain?: string;\n country?: string;\n /** Featured/external link labels or hosts (e.g. 'linkedin', 'wikipedia'). */\n links?: string[];\n /** An already-known industry, when set (helps disambiguate type/size). */\n industry?: string;\n enrichmentText?: string;\n}\n\n/**\n * State for the firmographic questions. Drops absent/empty fields (including\n * empty arrays) so Jev never sees a null or `[]` it would have to reason about.\n */\nexport function buildFirmographicState(org: FirmographicInput): Partial<FirmographicInput> {\n const compacted = compact(org);\n if (compacted.links && compacted.links.length === 0) delete compacted.links;\n return compacted;\n}\n\n/**\n * Below this confidence a firmographic field is left unset rather than guessed.\n * Validate per field on labelled orgs (ticket #561).\n */\nexport const FIRMOGRAPHIC_CONFIDENCE_FLOOR = 0.6;\n\n/**\n * Select the classified option, or `null` to leave the field unset. Returns\n * null when confidence is below the floor, or when the selected option is the\n * taxonomy's no-match option.\n */\nexport function pickChoiceAboveFloor(\n answer: ChoiceAnswer,\n opts: { floor?: number; noMatch?: string } = {},\n): string | null {\n const floor = opts.floor ?? FIRMOGRAPHIC_CONFIDENCE_FLOOR;\n if (answer.confidence < floor) return null;\n if (opts.noMatch !== undefined && answer.choice === opts.noMatch) return null;\n return answer.choice;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/jev/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * `@singi-labs/sifa-sdk/jev` -- TypeSafe System One (Jev) question builders,\n * taxonomies, result schemas, and threshold predicates for Sifa's organisation\n * intelligence.\n *\n * This subpath is pure: it defines the typed *questions* to ask Jev, validates\n * the *answers*, and holds the policy constants (thresholds, taxonomies) that\n * turn a raw judgment into a decision. It performs no network calls and needs\n * no API key, so it is safe to import anywhere. The actual `systemOne` call\n * lives server-side in sifa-api, which passes an API key that must never reach\n * the browser.\n *\n * Judgment shapes:\n * - Duplicate-org detection: a single Noul over a candidate pair.\n * - Firmographic classification: independent Choice questions (industry, type,\n * size) asked together over one org's state.\n *\n * See docs.typesafe.ai for the wire contract. Typed output guarantees the\n * interface, not truth: validate thresholds on labelled Sifa data before\n * enabling any write.\n */\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Wire question types\n// ---------------------------------------------------------------------------\n\n/** A yes/no judgment. `criteria` clarifies what true vs false means. */\nexport interface NoulQuestion {\n type: 'noul';\n instructions: string;\n criteria?: { true: string; false: string };\n}\n\n/** A single-selection judgment. `criteria` maps each option to its description. */\nexport interface ChoiceQuestion {\n type: 'choice';\n instructions: string;\n criteria: Record<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Answer schemas (validate Jev's response before code trusts it)\n// ---------------------------------------------------------------------------\n\n/** Jev's Noul answer: `noul` is the probability that the answer is yes (0..1). */\nexport const noulAnswerSchema = z.object({\n type: z.literal('noul'),\n noul: z.number().min(0).max(1),\n});\nexport type NoulAnswer = z.infer<typeof noulAnswerSchema>;\n\n/**\n * Jev's Choice answer: `choice` is the highest-probability option, `confidence`\n * summarises how concentrated the distribution is, `probabilities` sums to 1.\n */\nexport const choiceAnswerSchema = z.object({\n type: z.literal('choice'),\n choice: z.string(),\n confidence: z.number().min(0).max(1),\n probabilities: z.record(z.string(), z.number()),\n});\nexport type ChoiceAnswer = z.infer<typeof choiceAnswerSchema>;\n\n// ---------------------------------------------------------------------------\n// Duplicate-org detection (Noul) -- ticket #560\n// ---------------------------------------------------------------------------\n\n/** Public, non-user fields we compare when judging whether two orgs are the same. */\nexport interface OrgRecordInput {\n name: string;\n domain?: string;\n location?: string;\n description?: string;\n}\n\n/** Build a plain object with only the defined keys (Jev sees no `undefined`). */\nfunction compact<T extends object>(obj: T): Partial<T> {\n const out: Partial<T> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined && v !== null && v !== '') out[k as keyof T] = v as T[keyof T];\n }\n return out;\n}\n\n/**\n * State for the org-pair judgment. Both records live under stable named fields\n * so the question can reference them unambiguously.\n */\nexport function buildOrgPairState(\n a: OrgRecordInput,\n b: OrgRecordInput,\n): { orgA: Partial<OrgRecordInput>; orgB: Partial<OrgRecordInput> } {\n return { orgA: compact(a), orgB: compact(b) };\n}\n\n/** Static Noul question paired with {@link buildOrgPairState}. */\nexport const ORG_PAIR_NOUL_QUESTION: NoulQuestion = {\n type: 'noul',\n instructions:\n 'The state holds two organisation records, orgA and orgB. Do they refer to the same real-world organisation?',\n criteria: {\n true: 'Same organisation, e.g. a legal-suffix or abbreviation variant of the same name, or the same primary domain.',\n false:\n 'Distinct organisations, e.g. a shared word in the name but different domains, locations, or lines of business.',\n },\n};\n\n/**\n * Threshold favouring precision: a wrong merge is worse than a missed one.\n * Validate on labelled pairs (ticket #560) before enabling merges in prod.\n */\nexport const SAME_ORG_THRESHOLD = 0.85;\n\n/** True when the Noul probability clears the merge threshold. */\nexport function isLikelySameOrg(noul: number, threshold: number = SAME_ORG_THRESHOLD): boolean {\n return noul >= threshold;\n}\n\n// ---------------------------------------------------------------------------\n// Firmographic classification (Choice) -- ticket #561\n// ---------------------------------------------------------------------------\n\n/** Industry taxonomy. Single source of truth; `other` is the no-match option. */\nexport const INDUSTRY_TAXONOMY: Record<string, string> = {\n technology: 'Software, IT services, internet, hardware, telecoms',\n finance: 'Banking, insurance, investment, fintech, accounting',\n healthcare: 'Medical care, pharma, biotech, health services',\n education: 'Schools, universities, training, edtech',\n manufacturing: 'Industrial production, hardware, materials, automotive',\n retail: 'Retail, ecommerce, consumer goods, hospitality, food',\n media: 'Media, publishing, entertainment, marketing, advertising',\n energy: 'Energy, utilities, oil and gas, renewables',\n construction: 'Construction, real estate, architecture, engineering',\n transport: 'Transport, logistics, shipping, aviation',\n professional_services: 'Legal, consulting, HR, business services',\n public_sector: 'Government, defence, public administration',\n nonprofit: 'Charities, NGOs, foundations, associations',\n agriculture: 'Agriculture, farming, fishing, forestry',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Organisation type (the org's FORM, not its sector -- a hospital's type is\n * healthcare_provider while its industry is healthcare). `other` is the no-match\n * option. Prefer the registry `legalForm` where it already encodes the form.\n */\nexport const ORG_TYPE_TAXONOMY: Record<string, string> = {\n company: 'For-profit company or corporation',\n cooperative: 'Member-owned co-operative (e.g. eG, SCOP, mutual, credit union)',\n nonprofit: 'Nonprofit, charity, or NGO',\n foundation: 'Grant-making or endowed foundation (e.g. Stiftung, fonds)',\n government: 'Government body, agency, or public-sector authority',\n educational: 'School, college, or university',\n research_institute: 'Independent research institute or laboratory',\n healthcare_provider: 'Hospital, clinic, or healthcare provider',\n professional_association: 'Professional association, trade body, or trade union',\n agency: 'Agency, consultancy, or professional-services firm',\n religious: 'Religious organisation',\n political: 'Political party or organisation',\n self_employed: 'Sole proprietor, freelancer, or self-employed individual',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Org types that also imply a sector. Jev can pick one that contradicts the\n * org's industry (a software company typed `healthcare_provider`), especially\n * from thin, description-less input. Each maps to lowercase substrings, one of\n * which the org's industry must contain for the inferred type to be shown.\n * Industry values are free text (Jev tokens like `public_sector`, or registry\n * labels like \"Hospital & Health Care\"), hence substring hints. Types not listed\n * here describe a legal or organisational form only and need no sector match.\n * `government` and `research_institute` are deliberately absent: public bodies\n * and research institutes exist in every sector (an energy utility, a rail\n * operator, a heart research institute), so an industry check rejects true\n * labels.\n */\nexport const SECTOR_ORG_TYPE_INDUSTRY_HINTS: Record<string, readonly string[]> = {\n healthcare_provider: ['health', 'hospital', 'medical', 'clinic', 'nursing', 'dental'],\n educational: ['educat', 'school', 'universit', 'college', 'academ'],\n religious: ['relig', 'church', 'faith', 'nonprofit'],\n political: ['politic', 'nonprofit'],\n};\n\n/**\n * Whether a Jev-inferred org type is plausible enough to store or show.\n *\n * - The no-match option and unknown tokens are never plausible.\n * - Form types (company, nonprofit, ...) are always plausible.\n * - Sector-bound types need an org description (thin input is where Jev\n * guesses wrong) AND an industry that matches the type's sector.\n */\nexport function isInferredOrgTypePlausible(\n orgType: string,\n ctx: { industry?: string | null; hasDescription: boolean },\n): boolean {\n if (orgType === 'other' || !Object.hasOwn(ORG_TYPE_TAXONOMY, orgType)) return false;\n const hints = SECTOR_ORG_TYPE_INDUSTRY_HINTS[orgType];\n if (!hints) return true;\n if (!ctx.hasDescription || !ctx.industry) return false;\n const industry = ctx.industry.toLowerCase();\n return hints.some((hint) => industry.includes(hint));\n}\n\n/**\n * Jev-inferred company facts a signed-in visitor can dispute (mark as wrong).\n * A dispute hides the inferred value; it never touches registry or owner data.\n */\nexport const INFERRED_FACT_FIELDS = ['industry', 'sizeBand', 'orgType'] as const;\nexport type InferredFactField = (typeof INFERRED_FACT_FIELDS)[number];\n\n/** Ordered employee-size bands; `unknown` is the no-match option. */\nexport const SIZE_BAND_TAXONOMY: Record<string, string> = {\n solo: '1 person',\n small: '2 to 10 people',\n medium: '11 to 50 people',\n large: '51 to 250 people',\n enterprise: 'More than 250 people',\n unknown: 'Not enough information to decide',\n};\n\nfunction choiceQuestion(instructions: string, criteria: Record<string, string>): ChoiceQuestion {\n return { type: 'choice', instructions, criteria };\n}\n\nexport const INDUSTRY_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single industry best describes this organisation?',\n INDUSTRY_TAXONOMY,\n);\n\nexport const ORG_TYPE_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single organisation type (its form, not its industry sector) best describes this organisation?',\n ORG_TYPE_TAXONOMY,\n);\n\nexport const SIZE_BAND_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which employee-size band best fits this organisation?',\n SIZE_BAND_TAXONOMY,\n);\n\n/**\n * Input for firmographic classification. `enrichmentText` (the org's description)\n * is the strongest evidence, but it is optional: many registry orgs have only a\n * name, domain, country, or link set. Passing those lets Jev classify from the\n * signal we hold rather than skipping the org for want of a description. A bare\n * name alone rarely suffices; a name plus a domain or country often does.\n */\nexport interface FirmographicInput {\n name: string;\n domain?: string;\n country?: string;\n /** Featured/external link labels or hosts (e.g. 'linkedin', 'wikipedia'). */\n links?: string[];\n /** An already-known industry, when set (helps disambiguate type/size). */\n industry?: string;\n enrichmentText?: string;\n}\n\n/**\n * State for the firmographic questions. Drops absent/empty fields (including\n * empty arrays) so Jev never sees a null or `[]` it would have to reason about.\n */\nexport function buildFirmographicState(org: FirmographicInput): Partial<FirmographicInput> {\n const compacted = compact(org);\n if (compacted.links && compacted.links.length === 0) delete compacted.links;\n return compacted;\n}\n\n/**\n * Below this confidence a firmographic field is left unset rather than guessed.\n * Validate per field on labelled orgs (ticket #561).\n */\nexport const FIRMOGRAPHIC_CONFIDENCE_FLOOR = 0.6;\n\n/**\n * Select the classified option, or `null` to leave the field unset. Returns\n * null when confidence is below the floor, or when the selected option is the\n * taxonomy's no-match option.\n */\nexport function pickChoiceAboveFloor(\n answer: ChoiceAnswer,\n opts: { floor?: number; noMatch?: string } = {},\n): string | null {\n const floor = opts.floor ?? FIRMOGRAPHIC_CONFIDENCE_FLOOR;\n if (answer.confidence < floor) return null;\n if (opts.noMatch !== undefined && answer.choice === opts.noMatch) return null;\n return answer.choice;\n}\n"]}
|
package/dist/jev/index.d.cts
CHANGED
|
@@ -94,6 +94,10 @@ declare const ORG_TYPE_TAXONOMY: Record<string, string>;
|
|
|
94
94
|
* Industry values are free text (Jev tokens like `public_sector`, or registry
|
|
95
95
|
* labels like "Hospital & Health Care"), hence substring hints. Types not listed
|
|
96
96
|
* here describe a legal or organisational form only and need no sector match.
|
|
97
|
+
* `government` and `research_institute` are deliberately absent: public bodies
|
|
98
|
+
* and research institutes exist in every sector (an energy utility, a rail
|
|
99
|
+
* operator, a heart research institute), so an industry check rejects true
|
|
100
|
+
* labels.
|
|
97
101
|
*/
|
|
98
102
|
declare const SECTOR_ORG_TYPE_INDUSTRY_HINTS: Record<string, readonly string[]>;
|
|
99
103
|
/**
|
package/dist/jev/index.d.ts
CHANGED
|
@@ -94,6 +94,10 @@ declare const ORG_TYPE_TAXONOMY: Record<string, string>;
|
|
|
94
94
|
* Industry values are free text (Jev tokens like `public_sector`, or registry
|
|
95
95
|
* labels like "Hospital & Health Care"), hence substring hints. Types not listed
|
|
96
96
|
* here describe a legal or organisational form only and need no sector match.
|
|
97
|
+
* `government` and `research_institute` are deliberately absent: public bodies
|
|
98
|
+
* and research institutes exist in every sector (an energy utility, a rail
|
|
99
|
+
* operator, a heart research institute), so an industry check rejects true
|
|
100
|
+
* labels.
|
|
97
101
|
*/
|
|
98
102
|
declare const SECTOR_ORG_TYPE_INDUSTRY_HINTS: Record<string, readonly string[]>;
|
|
99
103
|
/**
|
package/dist/jev/index.js
CHANGED
|
@@ -68,8 +68,6 @@ var ORG_TYPE_TAXONOMY = {
|
|
|
68
68
|
var SECTOR_ORG_TYPE_INDUSTRY_HINTS = {
|
|
69
69
|
healthcare_provider: ["health", "hospital", "medical", "clinic", "nursing", "dental"],
|
|
70
70
|
educational: ["educat", "school", "universit", "college", "academ"],
|
|
71
|
-
government: ["government", "public_sector", "public sector", "public administration", "defen"],
|
|
72
|
-
research_institute: ["research", "scien", "laborator", "educat"],
|
|
73
71
|
religious: ["relig", "church", "faith", "nonprofit"],
|
|
74
72
|
political: ["politic", "nonprofit"]
|
|
75
73
|
};
|
package/dist/jev/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/jev/index.ts"],"sourcesContent":["/**\n * `@singi-labs/sifa-sdk/jev` -- TypeSafe System One (Jev) question builders,\n * taxonomies, result schemas, and threshold predicates for Sifa's organisation\n * intelligence.\n *\n * This subpath is pure: it defines the typed *questions* to ask Jev, validates\n * the *answers*, and holds the policy constants (thresholds, taxonomies) that\n * turn a raw judgment into a decision. It performs no network calls and needs\n * no API key, so it is safe to import anywhere. The actual `systemOne` call\n * lives server-side in sifa-api, which passes an API key that must never reach\n * the browser.\n *\n * Judgment shapes:\n * - Duplicate-org detection: a single Noul over a candidate pair.\n * - Firmographic classification: independent Choice questions (industry, type,\n * size) asked together over one org's state.\n *\n * See docs.typesafe.ai for the wire contract. Typed output guarantees the\n * interface, not truth: validate thresholds on labelled Sifa data before\n * enabling any write.\n */\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Wire question types\n// ---------------------------------------------------------------------------\n\n/** A yes/no judgment. `criteria` clarifies what true vs false means. */\nexport interface NoulQuestion {\n type: 'noul';\n instructions: string;\n criteria?: { true: string; false: string };\n}\n\n/** A single-selection judgment. `criteria` maps each option to its description. */\nexport interface ChoiceQuestion {\n type: 'choice';\n instructions: string;\n criteria: Record<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Answer schemas (validate Jev's response before code trusts it)\n// ---------------------------------------------------------------------------\n\n/** Jev's Noul answer: `noul` is the probability that the answer is yes (0..1). */\nexport const noulAnswerSchema = z.object({\n type: z.literal('noul'),\n noul: z.number().min(0).max(1),\n});\nexport type NoulAnswer = z.infer<typeof noulAnswerSchema>;\n\n/**\n * Jev's Choice answer: `choice` is the highest-probability option, `confidence`\n * summarises how concentrated the distribution is, `probabilities` sums to 1.\n */\nexport const choiceAnswerSchema = z.object({\n type: z.literal('choice'),\n choice: z.string(),\n confidence: z.number().min(0).max(1),\n probabilities: z.record(z.string(), z.number()),\n});\nexport type ChoiceAnswer = z.infer<typeof choiceAnswerSchema>;\n\n// ---------------------------------------------------------------------------\n// Duplicate-org detection (Noul) -- ticket #560\n// ---------------------------------------------------------------------------\n\n/** Public, non-user fields we compare when judging whether two orgs are the same. */\nexport interface OrgRecordInput {\n name: string;\n domain?: string;\n location?: string;\n description?: string;\n}\n\n/** Build a plain object with only the defined keys (Jev sees no `undefined`). */\nfunction compact<T extends object>(obj: T): Partial<T> {\n const out: Partial<T> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined && v !== null && v !== '') out[k as keyof T] = v as T[keyof T];\n }\n return out;\n}\n\n/**\n * State for the org-pair judgment. Both records live under stable named fields\n * so the question can reference them unambiguously.\n */\nexport function buildOrgPairState(\n a: OrgRecordInput,\n b: OrgRecordInput,\n): { orgA: Partial<OrgRecordInput>; orgB: Partial<OrgRecordInput> } {\n return { orgA: compact(a), orgB: compact(b) };\n}\n\n/** Static Noul question paired with {@link buildOrgPairState}. */\nexport const ORG_PAIR_NOUL_QUESTION: NoulQuestion = {\n type: 'noul',\n instructions:\n 'The state holds two organisation records, orgA and orgB. Do they refer to the same real-world organisation?',\n criteria: {\n true: 'Same organisation, e.g. a legal-suffix or abbreviation variant of the same name, or the same primary domain.',\n false:\n 'Distinct organisations, e.g. a shared word in the name but different domains, locations, or lines of business.',\n },\n};\n\n/**\n * Threshold favouring precision: a wrong merge is worse than a missed one.\n * Validate on labelled pairs (ticket #560) before enabling merges in prod.\n */\nexport const SAME_ORG_THRESHOLD = 0.85;\n\n/** True when the Noul probability clears the merge threshold. */\nexport function isLikelySameOrg(noul: number, threshold: number = SAME_ORG_THRESHOLD): boolean {\n return noul >= threshold;\n}\n\n// ---------------------------------------------------------------------------\n// Firmographic classification (Choice) -- ticket #561\n// ---------------------------------------------------------------------------\n\n/** Industry taxonomy. Single source of truth; `other` is the no-match option. */\nexport const INDUSTRY_TAXONOMY: Record<string, string> = {\n technology: 'Software, IT services, internet, hardware, telecoms',\n finance: 'Banking, insurance, investment, fintech, accounting',\n healthcare: 'Medical care, pharma, biotech, health services',\n education: 'Schools, universities, training, edtech',\n manufacturing: 'Industrial production, hardware, materials, automotive',\n retail: 'Retail, ecommerce, consumer goods, hospitality, food',\n media: 'Media, publishing, entertainment, marketing, advertising',\n energy: 'Energy, utilities, oil and gas, renewables',\n construction: 'Construction, real estate, architecture, engineering',\n transport: 'Transport, logistics, shipping, aviation',\n professional_services: 'Legal, consulting, HR, business services',\n public_sector: 'Government, defence, public administration',\n nonprofit: 'Charities, NGOs, foundations, associations',\n agriculture: 'Agriculture, farming, fishing, forestry',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Organisation type (the org's FORM, not its sector -- a hospital's type is\n * healthcare_provider while its industry is healthcare). `other` is the no-match\n * option. Prefer the registry `legalForm` where it already encodes the form.\n */\nexport const ORG_TYPE_TAXONOMY: Record<string, string> = {\n company: 'For-profit company or corporation',\n cooperative: 'Member-owned co-operative (e.g. eG, SCOP, mutual, credit union)',\n nonprofit: 'Nonprofit, charity, or NGO',\n foundation: 'Grant-making or endowed foundation (e.g. Stiftung, fonds)',\n government: 'Government body, agency, or public-sector authority',\n educational: 'School, college, or university',\n research_institute: 'Independent research institute or laboratory',\n healthcare_provider: 'Hospital, clinic, or healthcare provider',\n professional_association: 'Professional association, trade body, or trade union',\n agency: 'Agency, consultancy, or professional-services firm',\n religious: 'Religious organisation',\n political: 'Political party or organisation',\n self_employed: 'Sole proprietor, freelancer, or self-employed individual',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Org types that also imply a sector. Jev can pick one that contradicts the\n * org's industry (a software company typed `healthcare_provider`), especially\n * from thin, description-less input. Each maps to lowercase substrings, one of\n * which the org's industry must contain for the inferred type to be shown.\n * Industry values are free text (Jev tokens like `public_sector`, or registry\n * labels like \"Hospital & Health Care\"), hence substring hints. Types not listed\n * here describe a legal or organisational form only and need no sector match.\n */\nexport const SECTOR_ORG_TYPE_INDUSTRY_HINTS: Record<string, readonly string[]> = {\n healthcare_provider: ['health', 'hospital', 'medical', 'clinic', 'nursing', 'dental'],\n educational: ['educat', 'school', 'universit', 'college', 'academ'],\n government: ['government', 'public_sector', 'public sector', 'public administration', 'defen'],\n research_institute: ['research', 'scien', 'laborator', 'educat'],\n religious: ['relig', 'church', 'faith', 'nonprofit'],\n political: ['politic', 'nonprofit'],\n};\n\n/**\n * Whether a Jev-inferred org type is plausible enough to store or show.\n *\n * - The no-match option and unknown tokens are never plausible.\n * - Form types (company, nonprofit, ...) are always plausible.\n * - Sector-bound types need an org description (thin input is where Jev\n * guesses wrong) AND an industry that matches the type's sector.\n */\nexport function isInferredOrgTypePlausible(\n orgType: string,\n ctx: { industry?: string | null; hasDescription: boolean },\n): boolean {\n if (orgType === 'other' || !Object.hasOwn(ORG_TYPE_TAXONOMY, orgType)) return false;\n const hints = SECTOR_ORG_TYPE_INDUSTRY_HINTS[orgType];\n if (!hints) return true;\n if (!ctx.hasDescription || !ctx.industry) return false;\n const industry = ctx.industry.toLowerCase();\n return hints.some((hint) => industry.includes(hint));\n}\n\n/**\n * Jev-inferred company facts a signed-in visitor can dispute (mark as wrong).\n * A dispute hides the inferred value; it never touches registry or owner data.\n */\nexport const INFERRED_FACT_FIELDS = ['industry', 'sizeBand', 'orgType'] as const;\nexport type InferredFactField = (typeof INFERRED_FACT_FIELDS)[number];\n\n/** Ordered employee-size bands; `unknown` is the no-match option. */\nexport const SIZE_BAND_TAXONOMY: Record<string, string> = {\n solo: '1 person',\n small: '2 to 10 people',\n medium: '11 to 50 people',\n large: '51 to 250 people',\n enterprise: 'More than 250 people',\n unknown: 'Not enough information to decide',\n};\n\nfunction choiceQuestion(instructions: string, criteria: Record<string, string>): ChoiceQuestion {\n return { type: 'choice', instructions, criteria };\n}\n\nexport const INDUSTRY_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single industry best describes this organisation?',\n INDUSTRY_TAXONOMY,\n);\n\nexport const ORG_TYPE_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single organisation type (its form, not its industry sector) best describes this organisation?',\n ORG_TYPE_TAXONOMY,\n);\n\nexport const SIZE_BAND_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which employee-size band best fits this organisation?',\n SIZE_BAND_TAXONOMY,\n);\n\n/**\n * Input for firmographic classification. `enrichmentText` (the org's description)\n * is the strongest evidence, but it is optional: many registry orgs have only a\n * name, domain, country, or link set. Passing those lets Jev classify from the\n * signal we hold rather than skipping the org for want of a description. A bare\n * name alone rarely suffices; a name plus a domain or country often does.\n */\nexport interface FirmographicInput {\n name: string;\n domain?: string;\n country?: string;\n /** Featured/external link labels or hosts (e.g. 'linkedin', 'wikipedia'). */\n links?: string[];\n /** An already-known industry, when set (helps disambiguate type/size). */\n industry?: string;\n enrichmentText?: string;\n}\n\n/**\n * State for the firmographic questions. Drops absent/empty fields (including\n * empty arrays) so Jev never sees a null or `[]` it would have to reason about.\n */\nexport function buildFirmographicState(org: FirmographicInput): Partial<FirmographicInput> {\n const compacted = compact(org);\n if (compacted.links && compacted.links.length === 0) delete compacted.links;\n return compacted;\n}\n\n/**\n * Below this confidence a firmographic field is left unset rather than guessed.\n * Validate per field on labelled orgs (ticket #561).\n */\nexport const FIRMOGRAPHIC_CONFIDENCE_FLOOR = 0.6;\n\n/**\n * Select the classified option, or `null` to leave the field unset. Returns\n * null when confidence is below the floor, or when the selected option is the\n * taxonomy's no-match option.\n */\nexport function pickChoiceAboveFloor(\n answer: ChoiceAnswer,\n opts: { floor?: number; noMatch?: string } = {},\n): string | null {\n const floor = opts.floor ?? FIRMOGRAPHIC_CONFIDENCE_FLOOR;\n if (answer.confidence < floor) return null;\n if (opts.noMatch !== undefined && answer.choice === opts.noMatch) return null;\n return answer.choice;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/jev/index.ts"],"sourcesContent":["/**\n * `@singi-labs/sifa-sdk/jev` -- TypeSafe System One (Jev) question builders,\n * taxonomies, result schemas, and threshold predicates for Sifa's organisation\n * intelligence.\n *\n * This subpath is pure: it defines the typed *questions* to ask Jev, validates\n * the *answers*, and holds the policy constants (thresholds, taxonomies) that\n * turn a raw judgment into a decision. It performs no network calls and needs\n * no API key, so it is safe to import anywhere. The actual `systemOne` call\n * lives server-side in sifa-api, which passes an API key that must never reach\n * the browser.\n *\n * Judgment shapes:\n * - Duplicate-org detection: a single Noul over a candidate pair.\n * - Firmographic classification: independent Choice questions (industry, type,\n * size) asked together over one org's state.\n *\n * See docs.typesafe.ai for the wire contract. Typed output guarantees the\n * interface, not truth: validate thresholds on labelled Sifa data before\n * enabling any write.\n */\n\nimport { z } from 'zod';\n\n// ---------------------------------------------------------------------------\n// Wire question types\n// ---------------------------------------------------------------------------\n\n/** A yes/no judgment. `criteria` clarifies what true vs false means. */\nexport interface NoulQuestion {\n type: 'noul';\n instructions: string;\n criteria?: { true: string; false: string };\n}\n\n/** A single-selection judgment. `criteria` maps each option to its description. */\nexport interface ChoiceQuestion {\n type: 'choice';\n instructions: string;\n criteria: Record<string, string>;\n}\n\n// ---------------------------------------------------------------------------\n// Answer schemas (validate Jev's response before code trusts it)\n// ---------------------------------------------------------------------------\n\n/** Jev's Noul answer: `noul` is the probability that the answer is yes (0..1). */\nexport const noulAnswerSchema = z.object({\n type: z.literal('noul'),\n noul: z.number().min(0).max(1),\n});\nexport type NoulAnswer = z.infer<typeof noulAnswerSchema>;\n\n/**\n * Jev's Choice answer: `choice` is the highest-probability option, `confidence`\n * summarises how concentrated the distribution is, `probabilities` sums to 1.\n */\nexport const choiceAnswerSchema = z.object({\n type: z.literal('choice'),\n choice: z.string(),\n confidence: z.number().min(0).max(1),\n probabilities: z.record(z.string(), z.number()),\n});\nexport type ChoiceAnswer = z.infer<typeof choiceAnswerSchema>;\n\n// ---------------------------------------------------------------------------\n// Duplicate-org detection (Noul) -- ticket #560\n// ---------------------------------------------------------------------------\n\n/** Public, non-user fields we compare when judging whether two orgs are the same. */\nexport interface OrgRecordInput {\n name: string;\n domain?: string;\n location?: string;\n description?: string;\n}\n\n/** Build a plain object with only the defined keys (Jev sees no `undefined`). */\nfunction compact<T extends object>(obj: T): Partial<T> {\n const out: Partial<T> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined && v !== null && v !== '') out[k as keyof T] = v as T[keyof T];\n }\n return out;\n}\n\n/**\n * State for the org-pair judgment. Both records live under stable named fields\n * so the question can reference them unambiguously.\n */\nexport function buildOrgPairState(\n a: OrgRecordInput,\n b: OrgRecordInput,\n): { orgA: Partial<OrgRecordInput>; orgB: Partial<OrgRecordInput> } {\n return { orgA: compact(a), orgB: compact(b) };\n}\n\n/** Static Noul question paired with {@link buildOrgPairState}. */\nexport const ORG_PAIR_NOUL_QUESTION: NoulQuestion = {\n type: 'noul',\n instructions:\n 'The state holds two organisation records, orgA and orgB. Do they refer to the same real-world organisation?',\n criteria: {\n true: 'Same organisation, e.g. a legal-suffix or abbreviation variant of the same name, or the same primary domain.',\n false:\n 'Distinct organisations, e.g. a shared word in the name but different domains, locations, or lines of business.',\n },\n};\n\n/**\n * Threshold favouring precision: a wrong merge is worse than a missed one.\n * Validate on labelled pairs (ticket #560) before enabling merges in prod.\n */\nexport const SAME_ORG_THRESHOLD = 0.85;\n\n/** True when the Noul probability clears the merge threshold. */\nexport function isLikelySameOrg(noul: number, threshold: number = SAME_ORG_THRESHOLD): boolean {\n return noul >= threshold;\n}\n\n// ---------------------------------------------------------------------------\n// Firmographic classification (Choice) -- ticket #561\n// ---------------------------------------------------------------------------\n\n/** Industry taxonomy. Single source of truth; `other` is the no-match option. */\nexport const INDUSTRY_TAXONOMY: Record<string, string> = {\n technology: 'Software, IT services, internet, hardware, telecoms',\n finance: 'Banking, insurance, investment, fintech, accounting',\n healthcare: 'Medical care, pharma, biotech, health services',\n education: 'Schools, universities, training, edtech',\n manufacturing: 'Industrial production, hardware, materials, automotive',\n retail: 'Retail, ecommerce, consumer goods, hospitality, food',\n media: 'Media, publishing, entertainment, marketing, advertising',\n energy: 'Energy, utilities, oil and gas, renewables',\n construction: 'Construction, real estate, architecture, engineering',\n transport: 'Transport, logistics, shipping, aviation',\n professional_services: 'Legal, consulting, HR, business services',\n public_sector: 'Government, defence, public administration',\n nonprofit: 'Charities, NGOs, foundations, associations',\n agriculture: 'Agriculture, farming, fishing, forestry',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Organisation type (the org's FORM, not its sector -- a hospital's type is\n * healthcare_provider while its industry is healthcare). `other` is the no-match\n * option. Prefer the registry `legalForm` where it already encodes the form.\n */\nexport const ORG_TYPE_TAXONOMY: Record<string, string> = {\n company: 'For-profit company or corporation',\n cooperative: 'Member-owned co-operative (e.g. eG, SCOP, mutual, credit union)',\n nonprofit: 'Nonprofit, charity, or NGO',\n foundation: 'Grant-making or endowed foundation (e.g. Stiftung, fonds)',\n government: 'Government body, agency, or public-sector authority',\n educational: 'School, college, or university',\n research_institute: 'Independent research institute or laboratory',\n healthcare_provider: 'Hospital, clinic, or healthcare provider',\n professional_association: 'Professional association, trade body, or trade union',\n agency: 'Agency, consultancy, or professional-services firm',\n religious: 'Religious organisation',\n political: 'Political party or organisation',\n self_employed: 'Sole proprietor, freelancer, or self-employed individual',\n other: 'None of the above, or not enough information to decide',\n};\n\n/**\n * Org types that also imply a sector. Jev can pick one that contradicts the\n * org's industry (a software company typed `healthcare_provider`), especially\n * from thin, description-less input. Each maps to lowercase substrings, one of\n * which the org's industry must contain for the inferred type to be shown.\n * Industry values are free text (Jev tokens like `public_sector`, or registry\n * labels like \"Hospital & Health Care\"), hence substring hints. Types not listed\n * here describe a legal or organisational form only and need no sector match.\n * `government` and `research_institute` are deliberately absent: public bodies\n * and research institutes exist in every sector (an energy utility, a rail\n * operator, a heart research institute), so an industry check rejects true\n * labels.\n */\nexport const SECTOR_ORG_TYPE_INDUSTRY_HINTS: Record<string, readonly string[]> = {\n healthcare_provider: ['health', 'hospital', 'medical', 'clinic', 'nursing', 'dental'],\n educational: ['educat', 'school', 'universit', 'college', 'academ'],\n religious: ['relig', 'church', 'faith', 'nonprofit'],\n political: ['politic', 'nonprofit'],\n};\n\n/**\n * Whether a Jev-inferred org type is plausible enough to store or show.\n *\n * - The no-match option and unknown tokens are never plausible.\n * - Form types (company, nonprofit, ...) are always plausible.\n * - Sector-bound types need an org description (thin input is where Jev\n * guesses wrong) AND an industry that matches the type's sector.\n */\nexport function isInferredOrgTypePlausible(\n orgType: string,\n ctx: { industry?: string | null; hasDescription: boolean },\n): boolean {\n if (orgType === 'other' || !Object.hasOwn(ORG_TYPE_TAXONOMY, orgType)) return false;\n const hints = SECTOR_ORG_TYPE_INDUSTRY_HINTS[orgType];\n if (!hints) return true;\n if (!ctx.hasDescription || !ctx.industry) return false;\n const industry = ctx.industry.toLowerCase();\n return hints.some((hint) => industry.includes(hint));\n}\n\n/**\n * Jev-inferred company facts a signed-in visitor can dispute (mark as wrong).\n * A dispute hides the inferred value; it never touches registry or owner data.\n */\nexport const INFERRED_FACT_FIELDS = ['industry', 'sizeBand', 'orgType'] as const;\nexport type InferredFactField = (typeof INFERRED_FACT_FIELDS)[number];\n\n/** Ordered employee-size bands; `unknown` is the no-match option. */\nexport const SIZE_BAND_TAXONOMY: Record<string, string> = {\n solo: '1 person',\n small: '2 to 10 people',\n medium: '11 to 50 people',\n large: '51 to 250 people',\n enterprise: 'More than 250 people',\n unknown: 'Not enough information to decide',\n};\n\nfunction choiceQuestion(instructions: string, criteria: Record<string, string>): ChoiceQuestion {\n return { type: 'choice', instructions, criteria };\n}\n\nexport const INDUSTRY_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single industry best describes this organisation?',\n INDUSTRY_TAXONOMY,\n);\n\nexport const ORG_TYPE_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which single organisation type (its form, not its industry sector) best describes this organisation?',\n ORG_TYPE_TAXONOMY,\n);\n\nexport const SIZE_BAND_CHOICE_QUESTION = choiceQuestion(\n 'Based on the org state, which employee-size band best fits this organisation?',\n SIZE_BAND_TAXONOMY,\n);\n\n/**\n * Input for firmographic classification. `enrichmentText` (the org's description)\n * is the strongest evidence, but it is optional: many registry orgs have only a\n * name, domain, country, or link set. Passing those lets Jev classify from the\n * signal we hold rather than skipping the org for want of a description. A bare\n * name alone rarely suffices; a name plus a domain or country often does.\n */\nexport interface FirmographicInput {\n name: string;\n domain?: string;\n country?: string;\n /** Featured/external link labels or hosts (e.g. 'linkedin', 'wikipedia'). */\n links?: string[];\n /** An already-known industry, when set (helps disambiguate type/size). */\n industry?: string;\n enrichmentText?: string;\n}\n\n/**\n * State for the firmographic questions. Drops absent/empty fields (including\n * empty arrays) so Jev never sees a null or `[]` it would have to reason about.\n */\nexport function buildFirmographicState(org: FirmographicInput): Partial<FirmographicInput> {\n const compacted = compact(org);\n if (compacted.links && compacted.links.length === 0) delete compacted.links;\n return compacted;\n}\n\n/**\n * Below this confidence a firmographic field is left unset rather than guessed.\n * Validate per field on labelled orgs (ticket #561).\n */\nexport const FIRMOGRAPHIC_CONFIDENCE_FLOOR = 0.6;\n\n/**\n * Select the classified option, or `null` to leave the field unset. Returns\n * null when confidence is below the floor, or when the selected option is the\n * taxonomy's no-match option.\n */\nexport function pickChoiceAboveFloor(\n answer: ChoiceAnswer,\n opts: { floor?: number; noMatch?: string } = {},\n): string | null {\n const floor = opts.floor ?? FIRMOGRAPHIC_CONFIDENCE_FLOOR;\n if (answer.confidence < floor) return null;\n if (opts.noMatch !== undefined && answer.choice === opts.noMatch) return null;\n return answer.choice;\n}\n"],"mappings":";AAsBA,SAAS,SAAS;AAyBX,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAC/B,CAAC;AAOM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,MAAM,EAAE,QAAQ,QAAQ;AAAA,EACxB,QAAQ,EAAE,OAAO;AAAA,EACjB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACnC,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAChD,CAAC;AAgBD,SAAS,QAA0B,KAAoB;AACrD,QAAM,MAAkB,CAAC;AACzB,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG,GAAG;AACxC,QAAI,MAAM,UAAa,MAAM,QAAQ,MAAM,GAAI,KAAI,CAAY,IAAI;AAAA,EACrE;AACA,SAAO;AACT;AAMO,SAAS,kBACd,GACA,GACkE;AAClE,SAAO,EAAE,MAAM,QAAQ,CAAC,GAAG,MAAM,QAAQ,CAAC,EAAE;AAC9C;AAGO,IAAM,yBAAuC;AAAA,EAClD,MAAM;AAAA,EACN,cACE;AAAA,EACF,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OACE;AAAA,EACJ;AACF;AAMO,IAAM,qBAAqB;AAG3B,SAAS,gBAAgB,MAAc,YAAoB,oBAA6B;AAC7F,SAAO,QAAQ;AACjB;AAOO,IAAM,oBAA4C;AAAA,EACvD,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AAAA,EACX,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,WAAW;AAAA,EACX,aAAa;AAAA,EACb,OAAO;AACT;AAOO,IAAM,oBAA4C;AAAA,EACvD,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,OAAO;AACT;AAeO,IAAM,iCAAoE;AAAA,EAC/E,qBAAqB,CAAC,UAAU,YAAY,WAAW,UAAU,WAAW,QAAQ;AAAA,EACpF,aAAa,CAAC,UAAU,UAAU,aAAa,WAAW,QAAQ;AAAA,EAClE,WAAW,CAAC,SAAS,UAAU,SAAS,WAAW;AAAA,EACnD,WAAW,CAAC,WAAW,WAAW;AACpC;AAUO,SAAS,2BACd,SACA,KACS;AACT,MAAI,YAAY,WAAW,CAAC,OAAO,OAAO,mBAAmB,OAAO,EAAG,QAAO;AAC9E,QAAM,QAAQ,+BAA+B,OAAO;AACpD,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,SAAU,QAAO;AACjD,QAAM,WAAW,IAAI,SAAS,YAAY;AAC1C,SAAO,MAAM,KAAK,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC;AACrD;AAMO,IAAM,uBAAuB,CAAC,YAAY,YAAY,SAAS;AAI/D,IAAM,qBAA6C;AAAA,EACxD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,SAAS,eAAe,cAAsB,UAAkD;AAC9F,SAAO,EAAE,MAAM,UAAU,cAAc,SAAS;AAClD;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AACF;AAEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AACF;AAwBO,SAAS,uBAAuB,KAAoD;AACzF,QAAM,YAAY,QAAQ,GAAG;AAC7B,MAAI,UAAU,SAAS,UAAU,MAAM,WAAW,EAAG,QAAO,UAAU;AACtE,SAAO;AACT;AAMO,IAAM,gCAAgC;AAOtC,SAAS,qBACd,QACA,OAA6C,CAAC,GAC/B;AACf,QAAM,QAAQ,KAAK,SAAS;AAC5B,MAAI,OAAO,aAAa,MAAO,QAAO;AACtC,MAAI,KAAK,YAAY,UAAa,OAAO,WAAW,KAAK,QAAS,QAAO;AACzE,SAAO,OAAO;AAChB;","names":[]}
|