@singi-labs/sifa-sdk 0.12.14 → 0.12.16

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
@@ -158,15 +158,6 @@ declare const PLATFORM_LABELS: {
158
158
  readonly keyoxide: "Keyoxide";
159
159
  };
160
160
  type PlatformId = keyof typeof PLATFORM_LABELS;
161
- /**
162
- * Normalize a platform value to the short code used throughout the app (the
163
- * editor, the API `VALID_PLATFORMS` enum, the DB, and {@link PLATFORM_LABELS}).
164
- *
165
- * External-account records may carry `platform` as the raw lexicon knownValue
166
- * token (`id.sifa.defs#platformLinkedin`) instead of the short code — written by
167
- * some third-party apps. This maps the token to its lowercase suffix
168
- * (`linkedin`) and passes short codes / unknown values through unchanged.
169
- */
170
161
  declare function normalizePlatformId(platform: string): string;
171
162
  declare function isKnownPlatform(platform: string): platform is PlatformId;
172
163
  declare function getPlatformLabel(platform: string): string;
@@ -1191,6 +1182,13 @@ interface ActivityItem {
1191
1182
  rkey: string;
1192
1183
  /** The raw record from the PDS / AppView. Parsed defensively by the transform. */
1193
1184
  record: unknown;
1185
+ /**
1186
+ * The record author's handle, injected by the AppView. The activity snapshot
1187
+ * is per-author, so the api sets this per item (and per `subject` item) to let
1188
+ * handle-keyed apps (Bluesky, Popfeed, Tangled, ...) resolve a `sourceUrl`.
1189
+ * Absent when the handle is unknown; the transform then relies on the DID.
1190
+ */
1191
+ authorHandle?: string;
1194
1192
  /** App id from the app registry, e.g. `bluesky`. */
1195
1193
  appId: string;
1196
1194
  /** Human app name from the app registry, e.g. `Bluesky`. */
@@ -1487,6 +1485,13 @@ interface StreamCardVM {
1487
1485
  timestamp: string;
1488
1486
  /** Human sentence fragment, verb-aware. */
1489
1487
  title: string;
1488
+ /**
1489
+ * Canonical http(s) permalink to this record on its source app (e.g. a
1490
+ * Bluesky post's `bsky.app` URL). Absent when no linkable URL is available —
1491
+ * see {@link resolveCardUrl}, which keys some apps on the author handle the
1492
+ * transform may not have. Consumers use this to make the card click through.
1493
+ */
1494
+ sourceUrl?: string;
1490
1495
  body?: StreamCardBody;
1491
1496
  media?: StreamMedia[];
1492
1497
  externalLink?: StreamExternalLink;
package/dist/index.d.ts CHANGED
@@ -158,15 +158,6 @@ declare const PLATFORM_LABELS: {
158
158
  readonly keyoxide: "Keyoxide";
159
159
  };
160
160
  type PlatformId = keyof typeof PLATFORM_LABELS;
161
- /**
162
- * Normalize a platform value to the short code used throughout the app (the
163
- * editor, the API `VALID_PLATFORMS` enum, the DB, and {@link PLATFORM_LABELS}).
164
- *
165
- * External-account records may carry `platform` as the raw lexicon knownValue
166
- * token (`id.sifa.defs#platformLinkedin`) instead of the short code — written by
167
- * some third-party apps. This maps the token to its lowercase suffix
168
- * (`linkedin`) and passes short codes / unknown values through unchanged.
169
- */
170
161
  declare function normalizePlatformId(platform: string): string;
171
162
  declare function isKnownPlatform(platform: string): platform is PlatformId;
172
163
  declare function getPlatformLabel(platform: string): string;
@@ -1191,6 +1182,13 @@ interface ActivityItem {
1191
1182
  rkey: string;
1192
1183
  /** The raw record from the PDS / AppView. Parsed defensively by the transform. */
1193
1184
  record: unknown;
1185
+ /**
1186
+ * The record author's handle, injected by the AppView. The activity snapshot
1187
+ * is per-author, so the api sets this per item (and per `subject` item) to let
1188
+ * handle-keyed apps (Bluesky, Popfeed, Tangled, ...) resolve a `sourceUrl`.
1189
+ * Absent when the handle is unknown; the transform then relies on the DID.
1190
+ */
1191
+ authorHandle?: string;
1194
1192
  /** App id from the app registry, e.g. `bluesky`. */
1195
1193
  appId: string;
1196
1194
  /** Human app name from the app registry, e.g. `Bluesky`. */
@@ -1487,6 +1485,13 @@ interface StreamCardVM {
1487
1485
  timestamp: string;
1488
1486
  /** Human sentence fragment, verb-aware. */
1489
1487
  title: string;
1488
+ /**
1489
+ * Canonical http(s) permalink to this record on its source app (e.g. a
1490
+ * Bluesky post's `bsky.app` URL). Absent when no linkable URL is available —
1491
+ * see {@link resolveCardUrl}, which keys some apps on the author handle the
1492
+ * transform may not have. Consumers use this to make the card click through.
1493
+ */
1494
+ sourceUrl?: string;
1490
1495
  body?: StreamCardBody;
1491
1496
  media?: StreamMedia[];
1492
1497
  externalLink?: StreamExternalLink;
package/dist/index.js CHANGED
@@ -803,11 +803,13 @@ var PLATFORM_LABELS = {
803
803
  keyoxide: "Keyoxide"
804
804
  };
805
805
  var PLATFORM_TOKEN_PREFIX = "id.sifa.defs#platform";
806
+ var PLATFORM_ALIASES = {
807
+ activitypub: "fediverse",
808
+ mastodon: "fediverse"
809
+ };
806
810
  function normalizePlatformId(platform) {
807
- if (platform.startsWith(PLATFORM_TOKEN_PREFIX)) {
808
- return platform.slice(PLATFORM_TOKEN_PREFIX.length).toLowerCase();
809
- }
810
- return platform;
811
+ const code = platform.startsWith(PLATFORM_TOKEN_PREFIX) ? platform.slice(PLATFORM_TOKEN_PREFIX.length).toLowerCase() : platform;
812
+ return PLATFORM_ALIASES[code.toLowerCase()] ?? code;
811
813
  }
812
814
  function isKnownPlatform(platform) {
813
815
  return platform in PLATFORM_LABELS;
@@ -3009,6 +3011,7 @@ var streamCardVMSchema = z.lazy(
3009
3011
  tier: z.enum(["creation", "action", "filtered"]),
3010
3012
  timestamp: z.string(),
3011
3013
  title: z.string(),
3014
+ sourceUrl: z.string().optional(),
3012
3015
  body: streamCardBodySchema.optional(),
3013
3016
  media: z.array(streamMediaSchema).optional(),
3014
3017
  externalLink: streamExternalLinkSchema.optional(),
@@ -3184,6 +3187,20 @@ var TITLE_BY_VERB = {
3184
3187
  function buildTitle(verb, label) {
3185
3188
  return TITLE_BY_VERB[verb](label);
3186
3189
  }
3190
+ function resolveSourceUrl(item, record) {
3191
+ const authorDid = didFromUri(item.uri);
3192
+ if (!authorDid) return void 0;
3193
+ const authorHandle = asNonEmptyString(item.authorHandle) ?? asNonEmptyString(record.handle);
3194
+ const url = resolveCardUrl({
3195
+ collection: item.collection,
3196
+ record,
3197
+ uri: item.uri,
3198
+ rkey: item.rkey,
3199
+ authorDid,
3200
+ ...authorHandle ? { authorHandle } : {}
3201
+ });
3202
+ return url && /^https?:\/\//i.test(url) ? url : void 0;
3203
+ }
3187
3204
  function readTheme(record) {
3188
3205
  const theme = asRecord(record?.publicationTheme ?? record?.theme);
3189
3206
  if (!theme) return void 0;
@@ -3681,6 +3698,10 @@ function toStreamCardVM(item, options = {}) {
3681
3698
  };
3682
3699
  const theme = readTheme(record);
3683
3700
  if (theme) vm.theme = theme;
3701
+ if (record) {
3702
+ const sourceUrl = resolveSourceUrl(item, record);
3703
+ if (sourceUrl) vm.sourceUrl = sourceUrl;
3704
+ }
3684
3705
  if (item.subject) {
3685
3706
  vm.subject = { kind: "post", post: toStreamCardVM(item.subject, options) };
3686
3707
  }
@@ -4542,7 +4563,7 @@ var ProfileVolunteeringRecordSchema = z.object({
4542
4563
  });
4543
4564
 
4544
4565
  // src/index.ts
4545
- var SIFA_SDK_VERSION = "0.12.14";
4566
+ var SIFA_SDK_VERSION = "0.12.16";
4546
4567
 
4547
4568
  export { ACTIVITY_TIERS, ACTIVITY_VERBS, ACTIVITY_VISIBILITY_RULES, ADULT_CONTENT_LABELS, ALL_SECTIONS, APP_CATEGORIES, APP_CATEGORY_IDS, APP_CATEGORY_MAP, APP_URL_PATTERNS, ARTIFACT_LINK_KIND_LABELS, ARTIFACT_LINK_KIND_OPTIONS, ArtifactLinkSchema, AtmosphereFeedItemSchema, BlobRefSchema, CALENDAR_EVENT_MODE_LABELS, CALENDAR_EVENT_STATUS_LABELS, CATEGORY_LABELS, CATEGORY_ORDER, COLLECTION_TO_APP, COMPANY_OPTIONAL_EMPLOYMENT_TYPES, COMPANY_PAGE_MIN_FIRMOGRAPHIC_FIELDS, COMPLETENESS_MAX_SCORE, CONTINENTS, COUNTRIES, DIMENSIONS_MAX_SCORE, EMPLOYMENT_TYPE_GROUPS, EMPLOYMENT_TYPE_LABELS, ENTITY_REF_ANCHORS, EndorsementConfirmationRecordSchema, EndorsementRecordSchema, EntityImportSearchResponseSchema, EntityMintDomainResponseSchema, EntityResolveDomainRequestSchema, EntityResolveDomainResponseSchema, EntitySearchResponseSchema, EntitySearchResultSchema, EntitySelectRequestSchema, EntitySelectResponseSchema, FEATURE_FLAGS, FeatureAllowlistEntrySchema, FeedActorSchema, FollowFeedItemSchema, FollowFeedPageSchema, FollowProfilePageSchema, FollowProfileSchema, GraphFollowRecordSchema, INDUSTRY_OPTIONS, INVOLVEMENT_HEADING_ORDER, INVOLVEMENT_KIND_HEADINGS, INVOLVEMENT_KIND_LABELS, INVOLVEMENT_KIND_OPTIONS, MIN_SKILLS, OPEN_TO_OPTIONS, OPEN_TO_TOKENS, OPEN_TO_TOKEN_TO_VALUE, OPEN_TO_VALUE_TO_TOKEN, OrgEmploymentAttestationRecordSchema, OrgProfileRecordSchema, PLATFORM_LABELS, PLATFORM_OPTIONS, PRESENTATION_LINK_TYPE_LABELS, PRESENTATION_LINK_TYPE_OPTIONS, PRESENTATION_ROLE_LABELS, PRESENTATION_ROLE_OPTIONS, PROFILE_INVOLVEMENT_NSID, PUBLISHERS, PresentationDurationSchema, PresentationLinkSchema, ProfileCertificationRecordSchema, ProfileCourseRecordSchema, ProfileEducationRecordSchema, ProfileExternalAccountRecordSchema, ProfileHonorRecordSchema, ProfileInvolvementRecordSchema, ProfileLanguageRecordSchema, ProfilePositionRecordSchema, ProfilePresentationDeliveryRecordSchema, ProfilePresentationRecordSchema, ProfileProjectRecordSchema, ProfilePublicationRecordSchema, ProfileSelfRecordSchema, ProfileSkillRecordSchema, ProfileVolunteeringRecordSchema, PublicationAuthorSchema, SECTION_GROUPS, SECTION_LABELS, SIFA_SDK_VERSION, SKILL_CATEGORIES, STANDARD_PUBLISHER_ID, STREAM_VERBS, SifaFeedItemSchema, VERIFICATION_PROVIDERS, WORKPLACE_TYPE_LABELS, WORKPLACE_TYPE_OPTIONS, atUriSchema, buildTalkSlug, categoryForApp, certDateExtractor, cidSchema, classifyEntityRef, completenessPercent, completenessScore, contrastRatio, countFilledDimensions, countryCodeToFlag, dateRangeExtractor, datetimeSchema, decodeFeedCursor, dedupeSkills, detectPdsProvider, didSchema, dimensionsFromInputs, durationFromMinutes, encodeFeedCursor, entityDisambiguationLabel, entityResultKey, externalRecordRefSchema, filterHidden, findIndustry, formatCompanyName, formatDateRange, formatDistanceToNow, formatLocation, formatPresentationDuration, formatRelativeTime, formatTimelineDate, getActivityTaxonomyVersion, getActivityTier, getActivityVerbsVersion, getAppCategoryIcon, getAppIdForCollection, getArtifactLinkKindLabel, getCalendarEventModeLabel, getCalendarEventStatusLabel, getContinent, getDisplayLabel, getEmploymentTypeLabel, getFaviconUrl, getFilledDimensionsMap, getHandleStem, getIndustryLabelKey, getInvolvementKindHeading, getInvolvementKindLabel, getLexiconEntry, getOpenToLabelKey, getPdsDisplayName, getPlatformLabel, getPresentationLinkTypeLabel, getPresentationRoleLabel, getPublisherByHost, getPublisherById, getPublisherFromSiteUrl, getTierMeta, getVerificationProvider, getVisibleSectionIds, getWorkplaceTypeLabel, groupInvolvementByHeading, groupSkillsByCategory, hasAdultContent, hoistPrimary, isAppCategory, isCompanyPageIndexable, isCompanyRequired, isKnownAppId, isKnownPlatform, isKnownVerificationProvider, isLinked, isPseudoEmployer, isRegistrableDomainHandle, isSectionPopulated, isValidRgbColor, isVisibleActivityItem, languageTagSchema, lexiconDateExtractor, limitCombiningMarks, looksLikeDomain, makeGraphFollowRecordSchema, maxGraphemes, meetsContrastAA, normalizeCompanyKey, normalizeLegalForm, normalizeOpenTo, normalizePlatformId, normalizePresentationMode, normalizePresentationRole, normalizeWorkplaceTypes, openToTokenToValue, openToValueToToken, parseIntendedAudiences, parseLocationString, parsePresentationDuration, parseTalkRkey, partialDateSchema, pdsProviderFromApi, pickPrimaryPosition, presentationCsvRowToRecord, presentationDeliveryCsvRowToRecord, primaryVerification, profileToDimensionInputs, qualifiesAsOrg, relativeLuminance, resolveCardHealth, resolveCardUrl, resolveEmbed, resolveVerifierProvider, rgbToString, sanitizeDisplayText, sanitizeHandleInput, searchResultDisambiguation, selfLabelsSchema, singleDateExtractor, slugifyTitle, sortByActiveDateRange, sortByDateDesc, sortCertifications, sortEducation, sortHonors, sortLanguages, sortLanguagesByProficiency, sortPositions, sortProjects, sortPublications, streamAddressSchema, streamCardBodySchema, streamCardSubjectSchema, streamCardVMSchema, streamExternalLinkSchema, streamGeoSchema, streamMediaSchema, streamRichSegmentSchema, streamSourceSchema, streamThemeSchema, streamVerbSchema, stripHtmlToText, strongRefSchema, summarizePresentationDeliveries, toStreamCardVM, toStreamCardVMs, truncateGraphemes, uriSchema, verbForCollection, visibleItems, youtubeThumbnailUrl, youtubeVideoId };
4548
4569
  //# sourceMappingURL=index.js.map