@singi-labs/sifa-sdk 0.11.4 → 0.11.5

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.d.cts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { P as ProfileSkill, L as LocationValue, b as PdsProviderInfo, c as Profile } from './adult-content-Bwr392Yu.cjs';
2
2
  export { d as ADULT_CONTENT_LABELS, e as ActiveApp, a as ActivityLabel, A as AdultContentLabel, f as Endorsement, g as EndorsementData, E as ExternalAccount, h as ExternalAccountKeytraceClaim, F as FeedItem, i as LanguageProficiency, j as PresentationLinkView, k as ProfileCertification, l as ProfileCourse, m as ProfileEducation, n as ProfileHonor, o as ProfileIndustry, p as ProfileLanguage, q as ProfileLocation, r as ProfileOverrideSource, s as ProfilePosition, t as ProfilePresentation, u as ProfilePresentationDelivery, v as ProfileProject, w as ProfilePublication, x as ProfileVolunteering, y as PublicationContributor, z as SkillRef, S as SkillSuggestion, T as TrustStat, V as VerifiedAccount, B as hasAdultContent } from './adult-content-Bwr392Yu.cjs';
3
- export { EndorsementConfirmationRecord, EndorsementConfirmationRecordSchema, EndorsementRecord, EndorsementRecordSchema, GraphFollowRecord, GraphFollowRecordSchema, PresentationDuration, PresentationDurationSchema, PresentationLink, PresentationLinkSchema, ProfileCertificationRecord, ProfileCertificationRecordSchema, ProfileCourseRecord, ProfileCourseRecordSchema, ProfileEducationRecord, ProfileEducationRecordSchema, ProfileExternalAccountRecord, ProfileExternalAccountRecordSchema, ProfileHonorRecord, ProfileHonorRecordSchema, ProfileLanguageRecord, ProfileLanguageRecordSchema, ProfilePositionRecord, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecord, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecord, ProfilePresentationRecordSchema, ProfileProjectRecord, ProfileProjectRecordSchema, ProfilePublicationRecord, ProfilePublicationRecordSchema, ProfileSelfRecord, ProfileSelfRecordSchema, ProfileSkillRecord, ProfileSkillRecordSchema, ProfileVolunteeringRecord, ProfileVolunteeringRecordSchema, PublicationAuthor, PublicationAuthorSchema, atUriSchema, cidSchema, datetimeSchema, didSchema, externalRecordRefSchema, languageTagSchema, makeGraphFollowRecordSchema, maxGraphemes, selfLabelsSchema, strongRefSchema, uriSchema } from './schemas/index.cjs';
3
+ import { PresentationDuration, ProfilePresentationDeliveryRecord, ProfilePresentationRecord } from './schemas/index.cjs';
4
+ export { EndorsementConfirmationRecord, EndorsementConfirmationRecordSchema, EndorsementRecord, EndorsementRecordSchema, GraphFollowRecord, GraphFollowRecordSchema, PresentationDurationSchema, PresentationLink, PresentationLinkSchema, ProfileCertificationRecord, ProfileCertificationRecordSchema, ProfileCourseRecord, ProfileCourseRecordSchema, ProfileEducationRecord, ProfileEducationRecordSchema, ProfileExternalAccountRecord, ProfileExternalAccountRecordSchema, ProfileHonorRecord, ProfileHonorRecordSchema, ProfileLanguageRecord, ProfileLanguageRecordSchema, ProfilePositionRecord, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecordSchema, ProfileProjectRecord, ProfileProjectRecordSchema, ProfilePublicationRecord, ProfilePublicationRecordSchema, ProfileSelfRecord, ProfileSelfRecordSchema, ProfileSkillRecord, ProfileSkillRecordSchema, ProfileVolunteeringRecord, ProfileVolunteeringRecordSchema, PublicationAuthor, PublicationAuthorSchema, atUriSchema, cidSchema, datetimeSchema, didSchema, externalRecordRefSchema, languageTagSchema, makeGraphFollowRecordSchema, maxGraphemes, selfLabelsSchema, strongRefSchema, uriSchema } from './schemas/index.cjs';
4
5
  export { A as AtmosphereFeedItem, d as AtmosphereFeedItemSchema, e as FEATURE_FLAGS, b as FeatureAllowlistEntry, f as FeatureAllowlistEntrySchema, c as FeatureFlag, g as FeedActor, h as FeedActorSchema, i as FeedCursor, j as FollowFeedItem, k as FollowFeedItemSchema, F as FollowFeedPage, l as FollowFeedPageSchema, a as FollowProfileItem, m as FollowProfilePage, n as FollowProfilePageSchema, o as FollowProfileSchema, S as SifaFeedItem, p as SifaFeedItemSchema, q as decodeFeedCursor, r as encodeFeedCursor } from './feed-DHTy7fUN.cjs';
5
6
  import 'zod';
6
7
 
@@ -449,6 +450,14 @@ declare function getCalendarEventStatusLabel(value: string | undefined | null):
449
450
  */
450
451
  declare function formatRelativeTime(dateString: string): string;
451
452
 
453
+ /**
454
+ * Format a presentation duration for display. A fixed length renders as
455
+ * "30 min"; a range renders as "20-30 min". Returns undefined when there is no
456
+ * duration. A range whose bounds are equal, or whose max is missing, renders as
457
+ * a single value.
458
+ */
459
+ declare function formatPresentationDuration(duration: PresentationDuration | undefined | null): string | undefined;
460
+
452
461
  /**
453
462
  * Sort profile section items from newest to oldest.
454
463
  *
@@ -604,6 +613,51 @@ declare function contrastRatio(color1: RgbColor, color2: RgbColor): number;
604
613
  */
605
614
  declare function meetsContrastAA(foreground: RgbColor, background: RgbColor): boolean;
606
615
 
616
+ /**
617
+ * CSV parsers for the Talks & sessions import (two templates joined by a
618
+ * presentation_key). The value parsers and row mappers are reusable and pure;
619
+ * the actual PDS writing (create a presentation, then write its deliveries with
620
+ * a presentationRef to it) is orchestrated by the consumer, which has the
621
+ * created record's AT-URI.
622
+ */
623
+ /** A CSV row as a header-keyed map. Missing cells may be undefined or empty. */
624
+ type CsvRow = Record<string, string | undefined>;
625
+ /**
626
+ * Parse a free-text duration into minutes: a single value ("30 min", "30
627
+ * minutes", "30") or a range ("20-30 min", "20 to 30 minutes", "20-30").
628
+ * Returns undefined when no usable number is present. A second number is used
629
+ * as the upper bound only when it is greater than or equal to the first.
630
+ */
631
+ declare function parsePresentationDuration(input: string | undefined): PresentationDuration | undefined;
632
+ /** Build a duration from explicit min/max minute columns. */
633
+ declare function durationFromMinutes(minRaw: string | undefined, maxRaw: string | undefined): PresentationDuration | undefined;
634
+ /** Split a delimited list into trimmed, non-empty values. Default delimiter ";". */
635
+ declare function parseIntendedAudiences(input: string | undefined, delimiter?: string): string[];
636
+ /**
637
+ * Strip HTML to plain text and decode the common entities, for descriptions
638
+ * exported as HTML (e.g. Webflow). The AppView re-sanitizes on write; this is
639
+ * only to produce readable text.
640
+ */
641
+ declare function stripHtmlToText(input: string | undefined): string;
642
+ /** Map a friendly role value to its token; passes through an existing token or an unknown value. */
643
+ declare function normalizePresentationRole(value: string | undefined): string | undefined;
644
+ /** Map a friendly mode value to the community calendar token; drops an unknown value. */
645
+ declare function normalizePresentationMode(value: string | undefined): string | undefined;
646
+ interface ParsedPresentation {
647
+ /** presentation_key used to link delivery rows to this presentation. */
648
+ key?: string;
649
+ record: Omit<ProfilePresentationRecord, 'createdAt'>;
650
+ }
651
+ /** Map a row of the presentations template to a presentation record (minus createdAt). */
652
+ declare function presentationCsvRowToRecord(row: CsvRow): ParsedPresentation;
653
+ interface ParsedDelivery {
654
+ /** presentation_key to resolve into a presentationRef once the presentation exists. */
655
+ presentationKey?: string;
656
+ record: Omit<ProfilePresentationDeliveryRecord, 'createdAt' | 'presentationRef'>;
657
+ }
658
+ /** Map a row of the deliveries template to a delivery record (minus createdAt and presentationRef). */
659
+ declare function presentationDeliveryCsvRowToRecord(row: CsvRow): ParsedDelivery;
660
+
607
661
  /**
608
662
  * URL patterns per app, mirroring the sifa-web registry.
609
663
  *
@@ -888,4 +942,4 @@ declare function pickPrimaryPosition<T extends PrimaryPositionCandidate>(positio
888
942
  */
889
943
  declare const SIFA_SDK_VERSION: string;
890
944
 
891
- export { ACTIVITY_TIERS, ACTIVITY_VISIBILITY_RULES, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type AppCategoryId, type AppUrlPatterns, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, type ContinentCode, DIMENSIONS_MAX_SCORE, type DimensionKey, type DimensionMap, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, type EmploymentTypeGroup, type EmploymentTypeOption, INDUSTRY_OPTIONS, type IndustryOption, type KnownAppId, type LexiconEntry, LocationValue, MIN_SKILLS, type MergedProfileSkill, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLISHERS, type PdsProvider, PdsProviderInfo, type PlatformId, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryPositionCandidate, Profile, type ProfileCompletion, type ProfileDimensionInputs, ProfileSkill, type Publisher, type RgbColor, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, type SkillCategory, type TierMeta, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, categoryForApp, certDateExtractor, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, findIndustry, formatDistanceToNow, formatLocation, formatRelativeTime, getActivityTaxonomyVersion, getActivityTier, getAppCategoryIcon, getAppIdForCollection, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getWorkplaceTypeLabel, groupSkillsByCategory, isAppCategory, isCompanyRequired, isKnownAppId, isKnownPlatform, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, meetsContrastAA, normalizeOpenTo, normalizePlatformId, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseLocationString, pdsProviderFromApi, pickPrimaryPosition, profileToDimensionInputs, relativeLuminance, resolveCardUrl, rgbToString, sanitizeDisplayText, sanitizeHandleInput, singleDateExtractor, sortByDateDesc, truncateGraphemes };
945
+ export { ACTIVITY_TIERS, ACTIVITY_VISIBILITY_RULES, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type AppCategoryId, type AppUrlPatterns, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, type ContinentCode, type CsvRow, DIMENSIONS_MAX_SCORE, type DimensionKey, type DimensionMap, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, type EmploymentTypeGroup, type EmploymentTypeOption, INDUSTRY_OPTIONS, type IndustryOption, type KnownAppId, type LexiconEntry, LocationValue, MIN_SKILLS, type MergedProfileSkill, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLISHERS, type ParsedDelivery, type ParsedPresentation, type PdsProvider, PdsProviderInfo, type PlatformId, PresentationDuration, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryPositionCandidate, Profile, type ProfileCompletion, type ProfileDimensionInputs, ProfilePresentationDeliveryRecord, ProfilePresentationRecord, ProfileSkill, type Publisher, type RgbColor, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, type SkillCategory, type TierMeta, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, categoryForApp, certDateExtractor, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, durationFromMinutes, findIndustry, formatDistanceToNow, formatLocation, formatPresentationDuration, formatRelativeTime, getActivityTaxonomyVersion, getActivityTier, getAppCategoryIcon, getAppIdForCollection, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getWorkplaceTypeLabel, groupSkillsByCategory, isAppCategory, isCompanyRequired, isKnownAppId, isKnownPlatform, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, meetsContrastAA, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseIntendedAudiences, parseLocationString, parsePresentationDuration, pdsProviderFromApi, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, profileToDimensionInputs, relativeLuminance, resolveCardUrl, rgbToString, sanitizeDisplayText, sanitizeHandleInput, singleDateExtractor, sortByDateDesc, stripHtmlToText, truncateGraphemes };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { P as ProfileSkill, L as LocationValue, b as PdsProviderInfo, c as Profile } from './adult-content-Bwr392Yu.js';
2
2
  export { d as ADULT_CONTENT_LABELS, e as ActiveApp, a as ActivityLabel, A as AdultContentLabel, f as Endorsement, g as EndorsementData, E as ExternalAccount, h as ExternalAccountKeytraceClaim, F as FeedItem, i as LanguageProficiency, j as PresentationLinkView, k as ProfileCertification, l as ProfileCourse, m as ProfileEducation, n as ProfileHonor, o as ProfileIndustry, p as ProfileLanguage, q as ProfileLocation, r as ProfileOverrideSource, s as ProfilePosition, t as ProfilePresentation, u as ProfilePresentationDelivery, v as ProfileProject, w as ProfilePublication, x as ProfileVolunteering, y as PublicationContributor, z as SkillRef, S as SkillSuggestion, T as TrustStat, V as VerifiedAccount, B as hasAdultContent } from './adult-content-Bwr392Yu.js';
3
- export { EndorsementConfirmationRecord, EndorsementConfirmationRecordSchema, EndorsementRecord, EndorsementRecordSchema, GraphFollowRecord, GraphFollowRecordSchema, PresentationDuration, PresentationDurationSchema, PresentationLink, PresentationLinkSchema, ProfileCertificationRecord, ProfileCertificationRecordSchema, ProfileCourseRecord, ProfileCourseRecordSchema, ProfileEducationRecord, ProfileEducationRecordSchema, ProfileExternalAccountRecord, ProfileExternalAccountRecordSchema, ProfileHonorRecord, ProfileHonorRecordSchema, ProfileLanguageRecord, ProfileLanguageRecordSchema, ProfilePositionRecord, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecord, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecord, ProfilePresentationRecordSchema, ProfileProjectRecord, ProfileProjectRecordSchema, ProfilePublicationRecord, ProfilePublicationRecordSchema, ProfileSelfRecord, ProfileSelfRecordSchema, ProfileSkillRecord, ProfileSkillRecordSchema, ProfileVolunteeringRecord, ProfileVolunteeringRecordSchema, PublicationAuthor, PublicationAuthorSchema, atUriSchema, cidSchema, datetimeSchema, didSchema, externalRecordRefSchema, languageTagSchema, makeGraphFollowRecordSchema, maxGraphemes, selfLabelsSchema, strongRefSchema, uriSchema } from './schemas/index.js';
3
+ import { PresentationDuration, ProfilePresentationDeliveryRecord, ProfilePresentationRecord } from './schemas/index.js';
4
+ export { EndorsementConfirmationRecord, EndorsementConfirmationRecordSchema, EndorsementRecord, EndorsementRecordSchema, GraphFollowRecord, GraphFollowRecordSchema, PresentationDurationSchema, PresentationLink, PresentationLinkSchema, ProfileCertificationRecord, ProfileCertificationRecordSchema, ProfileCourseRecord, ProfileCourseRecordSchema, ProfileEducationRecord, ProfileEducationRecordSchema, ProfileExternalAccountRecord, ProfileExternalAccountRecordSchema, ProfileHonorRecord, ProfileHonorRecordSchema, ProfileLanguageRecord, ProfileLanguageRecordSchema, ProfilePositionRecord, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecordSchema, ProfileProjectRecord, ProfileProjectRecordSchema, ProfilePublicationRecord, ProfilePublicationRecordSchema, ProfileSelfRecord, ProfileSelfRecordSchema, ProfileSkillRecord, ProfileSkillRecordSchema, ProfileVolunteeringRecord, ProfileVolunteeringRecordSchema, PublicationAuthor, PublicationAuthorSchema, atUriSchema, cidSchema, datetimeSchema, didSchema, externalRecordRefSchema, languageTagSchema, makeGraphFollowRecordSchema, maxGraphemes, selfLabelsSchema, strongRefSchema, uriSchema } from './schemas/index.js';
4
5
  export { A as AtmosphereFeedItem, d as AtmosphereFeedItemSchema, e as FEATURE_FLAGS, b as FeatureAllowlistEntry, f as FeatureAllowlistEntrySchema, c as FeatureFlag, g as FeedActor, h as FeedActorSchema, i as FeedCursor, j as FollowFeedItem, k as FollowFeedItemSchema, F as FollowFeedPage, l as FollowFeedPageSchema, a as FollowProfileItem, m as FollowProfilePage, n as FollowProfilePageSchema, o as FollowProfileSchema, S as SifaFeedItem, p as SifaFeedItemSchema, q as decodeFeedCursor, r as encodeFeedCursor } from './feed-DHTy7fUN.js';
5
6
  import 'zod';
6
7
 
@@ -449,6 +450,14 @@ declare function getCalendarEventStatusLabel(value: string | undefined | null):
449
450
  */
450
451
  declare function formatRelativeTime(dateString: string): string;
451
452
 
453
+ /**
454
+ * Format a presentation duration for display. A fixed length renders as
455
+ * "30 min"; a range renders as "20-30 min". Returns undefined when there is no
456
+ * duration. A range whose bounds are equal, or whose max is missing, renders as
457
+ * a single value.
458
+ */
459
+ declare function formatPresentationDuration(duration: PresentationDuration | undefined | null): string | undefined;
460
+
452
461
  /**
453
462
  * Sort profile section items from newest to oldest.
454
463
  *
@@ -604,6 +613,51 @@ declare function contrastRatio(color1: RgbColor, color2: RgbColor): number;
604
613
  */
605
614
  declare function meetsContrastAA(foreground: RgbColor, background: RgbColor): boolean;
606
615
 
616
+ /**
617
+ * CSV parsers for the Talks & sessions import (two templates joined by a
618
+ * presentation_key). The value parsers and row mappers are reusable and pure;
619
+ * the actual PDS writing (create a presentation, then write its deliveries with
620
+ * a presentationRef to it) is orchestrated by the consumer, which has the
621
+ * created record's AT-URI.
622
+ */
623
+ /** A CSV row as a header-keyed map. Missing cells may be undefined or empty. */
624
+ type CsvRow = Record<string, string | undefined>;
625
+ /**
626
+ * Parse a free-text duration into minutes: a single value ("30 min", "30
627
+ * minutes", "30") or a range ("20-30 min", "20 to 30 minutes", "20-30").
628
+ * Returns undefined when no usable number is present. A second number is used
629
+ * as the upper bound only when it is greater than or equal to the first.
630
+ */
631
+ declare function parsePresentationDuration(input: string | undefined): PresentationDuration | undefined;
632
+ /** Build a duration from explicit min/max minute columns. */
633
+ declare function durationFromMinutes(minRaw: string | undefined, maxRaw: string | undefined): PresentationDuration | undefined;
634
+ /** Split a delimited list into trimmed, non-empty values. Default delimiter ";". */
635
+ declare function parseIntendedAudiences(input: string | undefined, delimiter?: string): string[];
636
+ /**
637
+ * Strip HTML to plain text and decode the common entities, for descriptions
638
+ * exported as HTML (e.g. Webflow). The AppView re-sanitizes on write; this is
639
+ * only to produce readable text.
640
+ */
641
+ declare function stripHtmlToText(input: string | undefined): string;
642
+ /** Map a friendly role value to its token; passes through an existing token or an unknown value. */
643
+ declare function normalizePresentationRole(value: string | undefined): string | undefined;
644
+ /** Map a friendly mode value to the community calendar token; drops an unknown value. */
645
+ declare function normalizePresentationMode(value: string | undefined): string | undefined;
646
+ interface ParsedPresentation {
647
+ /** presentation_key used to link delivery rows to this presentation. */
648
+ key?: string;
649
+ record: Omit<ProfilePresentationRecord, 'createdAt'>;
650
+ }
651
+ /** Map a row of the presentations template to a presentation record (minus createdAt). */
652
+ declare function presentationCsvRowToRecord(row: CsvRow): ParsedPresentation;
653
+ interface ParsedDelivery {
654
+ /** presentation_key to resolve into a presentationRef once the presentation exists. */
655
+ presentationKey?: string;
656
+ record: Omit<ProfilePresentationDeliveryRecord, 'createdAt' | 'presentationRef'>;
657
+ }
658
+ /** Map a row of the deliveries template to a delivery record (minus createdAt and presentationRef). */
659
+ declare function presentationDeliveryCsvRowToRecord(row: CsvRow): ParsedDelivery;
660
+
607
661
  /**
608
662
  * URL patterns per app, mirroring the sifa-web registry.
609
663
  *
@@ -888,4 +942,4 @@ declare function pickPrimaryPosition<T extends PrimaryPositionCandidate>(positio
888
942
  */
889
943
  declare const SIFA_SDK_VERSION: string;
890
944
 
891
- export { ACTIVITY_TIERS, ACTIVITY_VISIBILITY_RULES, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type AppCategoryId, type AppUrlPatterns, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, type ContinentCode, DIMENSIONS_MAX_SCORE, type DimensionKey, type DimensionMap, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, type EmploymentTypeGroup, type EmploymentTypeOption, INDUSTRY_OPTIONS, type IndustryOption, type KnownAppId, type LexiconEntry, LocationValue, MIN_SKILLS, type MergedProfileSkill, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLISHERS, type PdsProvider, PdsProviderInfo, type PlatformId, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryPositionCandidate, Profile, type ProfileCompletion, type ProfileDimensionInputs, ProfileSkill, type Publisher, type RgbColor, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, type SkillCategory, type TierMeta, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, categoryForApp, certDateExtractor, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, findIndustry, formatDistanceToNow, formatLocation, formatRelativeTime, getActivityTaxonomyVersion, getActivityTier, getAppCategoryIcon, getAppIdForCollection, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getWorkplaceTypeLabel, groupSkillsByCategory, isAppCategory, isCompanyRequired, isKnownAppId, isKnownPlatform, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, meetsContrastAA, normalizeOpenTo, normalizePlatformId, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseLocationString, pdsProviderFromApi, pickPrimaryPosition, profileToDimensionInputs, relativeLuminance, resolveCardUrl, rgbToString, sanitizeDisplayText, sanitizeHandleInput, singleDateExtractor, sortByDateDesc, truncateGraphemes };
945
+ export { ACTIVITY_TIERS, ACTIVITY_VISIBILITY_RULES, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, type ActivityItemForUrl, type ActivityTaxonomy, type ActivityTier, type AppCategoryId, type AppUrlPatterns, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, type ContinentCode, type CsvRow, DIMENSIONS_MAX_SCORE, type DimensionKey, type DimensionMap, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, type EmploymentTypeGroup, type EmploymentTypeOption, INDUSTRY_OPTIONS, type IndustryOption, type KnownAppId, type LexiconEntry, LocationValue, MIN_SKILLS, type MergedProfileSkill, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, type OpenToGroup, type OpenToOption, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLISHERS, type ParsedDelivery, type ParsedPresentation, type PdsProvider, PdsProviderInfo, type PlatformId, PresentationDuration, type PresentationLinkTypeOption, type PresentationRoleOption, type PrimaryPositionCandidate, Profile, type ProfileCompletion, type ProfileDimensionInputs, ProfilePresentationDeliveryRecord, ProfilePresentationRecord, ProfileSkill, type Publisher, type RgbColor, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, type SkillCategory, type TierMeta, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, type WorkplaceTypeOption, categoryForApp, certDateExtractor, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, dedupeSkills, detectPdsProvider, dimensionsFromInputs, durationFromMinutes, findIndustry, formatDistanceToNow, formatLocation, formatPresentationDuration, formatRelativeTime, getActivityTaxonomyVersion, getActivityTier, getAppCategoryIcon, getAppIdForCollection, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getWorkplaceTypeLabel, groupSkillsByCategory, isAppCategory, isCompanyRequired, isKnownAppId, isKnownPlatform, isValidRgbColor, isVisibleActivityItem, lexiconDateExtractor, limitCombiningMarks, meetsContrastAA, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseIntendedAudiences, parseLocationString, parsePresentationDuration, pdsProviderFromApi, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, profileToDimensionInputs, relativeLuminance, resolveCardUrl, rgbToString, sanitizeDisplayText, sanitizeHandleInput, singleDateExtractor, sortByDateDesc, stripHtmlToText, truncateGraphemes };
package/dist/index.js CHANGED
@@ -1402,6 +1402,16 @@ function formatRelativeTime(dateString) {
1402
1402
  return `${years}y ago`;
1403
1403
  }
1404
1404
 
1405
+ // src/format/format-duration.ts
1406
+ function formatPresentationDuration(duration) {
1407
+ if (!duration) return void 0;
1408
+ const { minMinutes, maxMinutes } = duration;
1409
+ if (maxMinutes != null && maxMinutes !== minMinutes) {
1410
+ return `${minMinutes}-${maxMinutes} min`;
1411
+ }
1412
+ return `${minMinutes} min`;
1413
+ }
1414
+
1405
1415
  // src/format/sort-by-date.ts
1406
1416
  var FAR_FUTURE = "9999-12-31";
1407
1417
  var FAR_PAST = "0000-01-01";
@@ -1625,6 +1635,102 @@ function meetsContrastAA(foreground, background) {
1625
1635
  return contrastRatio(foreground, background) >= 4.5;
1626
1636
  }
1627
1637
 
1638
+ // src/import/presentation-csv.ts
1639
+ function clean(value) {
1640
+ return (value ?? "").trim();
1641
+ }
1642
+ function parsePresentationDuration(input) {
1643
+ const numbers = (clean(input).match(/\d+/g) ?? []).map((n) => Number.parseInt(n, 10)).filter((n) => Number.isInteger(n) && n > 0);
1644
+ const min = numbers.at(0);
1645
+ if (min === void 0) return void 0;
1646
+ const max = numbers.at(1);
1647
+ return max !== void 0 && max >= min ? { minMinutes: min, maxMinutes: max } : { minMinutes: min };
1648
+ }
1649
+ function durationFromMinutes(minRaw, maxRaw) {
1650
+ const min = Number.parseInt(clean(minRaw), 10);
1651
+ if (!Number.isInteger(min) || min < 1) return void 0;
1652
+ const max = Number.parseInt(clean(maxRaw), 10);
1653
+ return Number.isInteger(max) && max >= min ? { minMinutes: min, maxMinutes: max } : { minMinutes: min };
1654
+ }
1655
+ function parseIntendedAudiences(input, delimiter = ";") {
1656
+ return clean(input).split(delimiter).map((s) => s.trim()).filter(Boolean);
1657
+ }
1658
+ function stripHtmlToText(input) {
1659
+ const text = clean(input).replace(/<\s*br\s*\/?>/gi, "\n").replace(/<\/\s*(p|div|li|h[1-6])\s*>/gi, "\n").replace(/<[^>]*>/g, "").replace(/&nbsp;/gi, " ").replace(/&amp;/gi, "&").replace(/&lt;/gi, "<").replace(/&gt;/gi, ">").replace(/&quot;/gi, '"').replace(/&#0*39;|&apos;/gi, "'");
1660
+ return text.replace(/[ \t]+/g, " ").replace(/ *\n */g, "\n").replace(/\n{3,}/g, "\n\n").trim();
1661
+ }
1662
+ var ROLE_TOKENS = {
1663
+ presenter: "id.sifa.defs#presenter",
1664
+ speaker: "id.sifa.defs#presenter",
1665
+ panelist: "id.sifa.defs#panelist",
1666
+ keynote: "id.sifa.defs#keynote",
1667
+ workshop: "id.sifa.defs#workshop",
1668
+ host: "id.sifa.defs#host"
1669
+ };
1670
+ function normalizePresentationRole(value) {
1671
+ const v = clean(value).toLowerCase();
1672
+ if (!v) return void 0;
1673
+ if (v.startsWith("id.sifa.defs#")) return v;
1674
+ return ROLE_TOKENS[v] ?? v;
1675
+ }
1676
+ var MODE_FRAGMENTS = {
1677
+ inperson: "#inperson",
1678
+ "in person": "#inperson",
1679
+ "in-person": "#inperson",
1680
+ virtual: "#virtual",
1681
+ online: "#virtual",
1682
+ remote: "#virtual",
1683
+ hybrid: "#hybrid"
1684
+ };
1685
+ function normalizePresentationMode(value) {
1686
+ const v = clean(value).toLowerCase();
1687
+ if (!v) return void 0;
1688
+ if (v.startsWith("community.lexicon.calendar.event#")) return v;
1689
+ const fragment = MODE_FRAGMENTS[v];
1690
+ return fragment ? `community.lexicon.calendar.event${fragment}` : void 0;
1691
+ }
1692
+ function link(uri, type) {
1693
+ const u = clean(uri);
1694
+ return u ? { uri: u, type } : void 0;
1695
+ }
1696
+ function presentationCsvRowToRecord(row) {
1697
+ const description = stripHtmlToText(row.description);
1698
+ const duration = parsePresentationDuration(row.duration) ?? durationFromMinutes(row.duration_min_minutes, row.duration_max_minutes);
1699
+ const intendedAudiences = parseIntendedAudiences(row.intended_audiences);
1700
+ const links = [
1701
+ link(row.slides_url, "id.sifa.defs#linkSlides"),
1702
+ link(row.recording_url, "id.sifa.defs#linkRecording"),
1703
+ link(row.writeup_url, "id.sifa.defs#linkWriteup")
1704
+ ].filter((l) => l !== void 0);
1705
+ const record = { title: clean(row.title) };
1706
+ if (description) record.description = description;
1707
+ if (duration) record.duration = duration;
1708
+ if (intendedAudiences.length) record.intendedAudiences = intendedAudiences;
1709
+ if (links.length) record.links = links;
1710
+ return { key: clean(row.presentation_key) || void 0, record };
1711
+ }
1712
+ function presentationDeliveryCsvRowToRecord(row) {
1713
+ const links = [
1714
+ link(row.event_url, "id.sifa.defs#linkEvent"),
1715
+ link(row.recording_url, "id.sifa.defs#linkRecording")
1716
+ ].filter((l) => l !== void 0);
1717
+ const record = {};
1718
+ const title = clean(row.title);
1719
+ const eventName = clean(row.event_name);
1720
+ const date = clean(row.date);
1721
+ const location = clean(row.location);
1722
+ const role = normalizePresentationRole(row.role);
1723
+ const mode = normalizePresentationMode(row.mode);
1724
+ if (title) record.title = title;
1725
+ if (role) record.role = role;
1726
+ if (eventName) record.eventName = eventName;
1727
+ if (date) record.date = date;
1728
+ if (location) record.location = location;
1729
+ if (mode) record.mode = mode;
1730
+ if (links.length) record.links = links;
1731
+ return { presentationKey: clean(row.presentation_key) || void 0, record };
1732
+ }
1733
+
1628
1734
  // src/cards/app-url-patterns.ts
1629
1735
  var APP_URL_PATTERNS = Object.freeze({
1630
1736
  bluesky: {
@@ -2442,8 +2548,8 @@ var ProfileVolunteeringRecordSchema = z.object({
2442
2548
  });
2443
2549
 
2444
2550
  // src/index.ts
2445
- var SIFA_SDK_VERSION = "0.11.4";
2551
+ var SIFA_SDK_VERSION = "0.11.5";
2446
2552
 
2447
- export { ACTIVITY_TIERS, ACTIVITY_VISIBILITY_RULES, ADULT_CONTENT_LABELS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, AtmosphereFeedItemSchema, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, DIMENSIONS_MAX_SCORE, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, EndorsementConfirmationRecordSchema, EndorsementRecordSchema, FEATURE_FLAGS, FeatureAllowlistEntrySchema, FeedActorSchema, FollowFeedItemSchema, FollowFeedPageSchema, FollowProfilePageSchema, FollowProfileSchema, GraphFollowRecordSchema, INDUSTRY_OPTIONS, MIN_SKILLS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLISHERS, PresentationDurationSchema, PresentationLinkSchema, ProfileCertificationRecordSchema, ProfileCourseRecordSchema, ProfileEducationRecordSchema, ProfileExternalAccountRecordSchema, ProfileHonorRecordSchema, ProfileLanguageRecordSchema, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecordSchema, ProfileProjectRecordSchema, ProfilePublicationRecordSchema, ProfileSelfRecordSchema, ProfileSkillRecordSchema, ProfileVolunteeringRecordSchema, PublicationAuthorSchema, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, SifaFeedItemSchema, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, atUriSchema, categoryForApp, certDateExtractor, cidSchema, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, datetimeSchema, decodeFeedCursor, dedupeSkills, detectPdsProvider, didSchema, dimensionsFromInputs, encodeFeedCursor, externalRecordRefSchema, findIndustry, formatDistanceToNow, formatLocation, formatRelativeTime, getActivityTaxonomyVersion, getActivityTier, getAppCategoryIcon, getAppIdForCollection, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getWorkplaceTypeLabel, groupSkillsByCategory, hasAdultContent, isAppCategory, isCompanyRequired, isKnownAppId, isKnownPlatform, isValidRgbColor, isVisibleActivityItem, languageTagSchema, lexiconDateExtractor, limitCombiningMarks, makeGraphFollowRecordSchema, maxGraphemes, meetsContrastAA, normalizeOpenTo, normalizePlatformId, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseLocationString, pdsProviderFromApi, pickPrimaryPosition, profileToDimensionInputs, relativeLuminance, resolveCardUrl, rgbToString, sanitizeDisplayText, sanitizeHandleInput, selfLabelsSchema, singleDateExtractor, sortByDateDesc, strongRefSchema, truncateGraphemes, uriSchema };
2553
+ export { ACTIVITY_TIERS, ACTIVITY_VISIBILITY_RULES, ADULT_CONTENT_LABELS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, AtmosphereFeedItemSchema, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, DIMENSIONS_MAX_SCORE, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, EndorsementConfirmationRecordSchema, EndorsementRecordSchema, FEATURE_FLAGS, FeatureAllowlistEntrySchema, FeedActorSchema, FollowFeedItemSchema, FollowFeedPageSchema, FollowProfilePageSchema, FollowProfileSchema, GraphFollowRecordSchema, INDUSTRY_OPTIONS, MIN_SKILLS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PUBLISHERS, PresentationDurationSchema, PresentationLinkSchema, ProfileCertificationRecordSchema, ProfileCourseRecordSchema, ProfileEducationRecordSchema, ProfileExternalAccountRecordSchema, ProfileHonorRecordSchema, ProfileLanguageRecordSchema, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecordSchema, ProfileProjectRecordSchema, ProfilePublicationRecordSchema, ProfileSelfRecordSchema, ProfileSkillRecordSchema, ProfileVolunteeringRecordSchema, PublicationAuthorSchema, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, SifaFeedItemSchema, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, atUriSchema, categoryForApp, certDateExtractor, cidSchema, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, datetimeSchema, decodeFeedCursor, dedupeSkills, detectPdsProvider, didSchema, dimensionsFromInputs, durationFromMinutes, encodeFeedCursor, externalRecordRefSchema, findIndustry, formatDistanceToNow, formatLocation, formatPresentationDuration, formatRelativeTime, getActivityTaxonomyVersion, getActivityTier, getAppCategoryIcon, getAppIdForCollection, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getWorkplaceTypeLabel, groupSkillsByCategory, hasAdultContent, isAppCategory, isCompanyRequired, isKnownAppId, isKnownPlatform, isValidRgbColor, isVisibleActivityItem, languageTagSchema, lexiconDateExtractor, limitCombiningMarks, makeGraphFollowRecordSchema, maxGraphemes, meetsContrastAA, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseIntendedAudiences, parseLocationString, parsePresentationDuration, pdsProviderFromApi, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, profileToDimensionInputs, relativeLuminance, resolveCardUrl, rgbToString, sanitizeDisplayText, sanitizeHandleInput, selfLabelsSchema, singleDateExtractor, sortByDateDesc, stripHtmlToText, strongRefSchema, truncateGraphemes, uriSchema };
2448
2554
  //# sourceMappingURL=index.js.map
2449
2555
  //# sourceMappingURL=index.js.map