@singi-labs/sifa-sdk 0.19.44 → 0.19.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/dist/atproto/index.js +9 -3
  2. package/dist/atproto/index.js.map +1 -1
  3. package/dist/badge/index.js +5 -141
  4. package/dist/badge/index.js.map +1 -1
  5. package/dist/cards/adult-content.js +14 -0
  6. package/dist/cards/adult-content.js.map +1 -0
  7. package/dist/cards/app-url-patterns.js +369 -0
  8. package/dist/cards/app-url-patterns.js.map +1 -0
  9. package/dist/cards/index.js +24 -0
  10. package/dist/cards/index.js.map +1 -0
  11. package/dist/cards/resolve-card-url.js +198 -0
  12. package/dist/cards/resolve-card-url.js.map +1 -0
  13. package/dist/cards/visibility.js +45 -0
  14. package/dist/cards/visibility.js.map +1 -0
  15. package/dist/flags/index.js +4 -3
  16. package/dist/flags/index.js.map +1 -1
  17. package/dist/format/collapse-contributors.js +19 -0
  18. package/dist/format/collapse-contributors.js.map +1 -0
  19. package/dist/format/company-name.js +61 -0
  20. package/dist/format/company-name.js.map +1 -0
  21. package/dist/format/compare-text.js +9 -0
  22. package/dist/format/compare-text.js.map +1 -0
  23. package/dist/format/doi.js +8 -0
  24. package/dist/format/doi.js.map +1 -0
  25. package/dist/format/embed.js +131 -0
  26. package/dist/format/embed.js.map +1 -0
  27. package/dist/format/endorsement-context.js +35 -0
  28. package/dist/format/endorsement-context.js.map +1 -0
  29. package/dist/format/format-display-url.js +42 -0
  30. package/dist/format/format-display-url.js.map +1 -0
  31. package/dist/format/format-duration.js +13 -0
  32. package/dist/format/format-duration.js.map +1 -0
  33. package/dist/format/format-time.js +30 -0
  34. package/dist/format/format-time.js.map +1 -0
  35. package/dist/format/handle-utils.js +19 -0
  36. package/dist/format/handle-utils.js.map +1 -0
  37. package/dist/format/index.js +100 -0
  38. package/dist/format/index.js.map +1 -0
  39. package/dist/format/location-segments.js +29 -0
  40. package/dist/format/location-segments.js.map +1 -0
  41. package/dist/format/location-utils.js +42 -0
  42. package/dist/format/location-utils.js.map +1 -0
  43. package/dist/format/meta-description.js +35 -0
  44. package/dist/format/meta-description.js.map +1 -0
  45. package/dist/format/normalize-company-key.js +12 -0
  46. package/dist/format/normalize-company-key.js.map +1 -0
  47. package/dist/format/normalize-legal-form.js +71 -0
  48. package/dist/format/normalize-legal-form.js.map +1 -0
  49. package/dist/format/pds-utils.js +73 -0
  50. package/dist/format/pds-utils.js.map +1 -0
  51. package/dist/format/sort-by-date.js +39 -0
  52. package/dist/format/sort-by-date.js.map +1 -0
  53. package/dist/format/summarize-deliveries.js +37 -0
  54. package/dist/format/summarize-deliveries.js.map +1 -0
  55. package/dist/format/talk-slug.js +21 -0
  56. package/dist/format/talk-slug.js.map +1 -0
  57. package/dist/format/text-sanitize.js +29 -0
  58. package/dist/format/text-sanitize.js.map +1 -0
  59. package/dist/format/text-truncate.js +14 -0
  60. package/dist/format/text-truncate.js.map +1 -0
  61. package/dist/format/time-utils.js +19 -0
  62. package/dist/format/time-utils.js.map +1 -0
  63. package/dist/format/timeline.js +29 -0
  64. package/dist/format/timeline.js.map +1 -0
  65. package/dist/format/wcag-contrast.js +34 -0
  66. package/dist/format/wcag-contrast.js.map +1 -0
  67. package/dist/import/index.js +22 -0
  68. package/dist/import/index.js.map +1 -0
  69. package/dist/import/presentation-csv.js +116 -0
  70. package/dist/import/presentation-csv.js.map +1 -0
  71. package/dist/index.cjs +1 -1
  72. package/dist/index.js +675 -7086
  73. package/dist/index.js.map +1 -1
  74. package/dist/jev/index.js +18 -5
  75. package/dist/jev/index.js.map +1 -1
  76. package/dist/jsonld/index.js +30 -987
  77. package/dist/jsonld/index.js.map +1 -1
  78. package/dist/jsonld/profile.js +222 -0
  79. package/dist/jsonld/profile.js.map +1 -0
  80. package/dist/jsonld/terms.js +496 -0
  81. package/dist/jsonld/terms.js.map +1 -0
  82. package/dist/jsonld/url.js +17 -0
  83. package/dist/jsonld/url.js.map +1 -0
  84. package/dist/jsonld/works-graph.js +41 -0
  85. package/dist/jsonld/works-graph.js.map +1 -0
  86. package/dist/jsonld/works.js +178 -0
  87. package/dist/jsonld/works.js.map +1 -0
  88. package/dist/logic/actor-identity.js +8 -0
  89. package/dist/logic/actor-identity.js.map +1 -0
  90. package/dist/logic/agent-ref.js +24 -0
  91. package/dist/logic/agent-ref.js.map +1 -0
  92. package/dist/logic/company-page-indexable.js +23 -0
  93. package/dist/logic/company-page-indexable.js.map +1 -0
  94. package/dist/logic/date-lookahead.js +31 -0
  95. package/dist/logic/date-lookahead.js.map +1 -0
  96. package/dist/logic/domain-detect.js +43 -0
  97. package/dist/logic/domain-detect.js.map +1 -0
  98. package/dist/logic/entity-disambiguation.js +24 -0
  99. package/dist/logic/entity-disambiguation.js.map +1 -0
  100. package/dist/logic/entity-ref-anchor.js +33 -0
  101. package/dist/logic/entity-ref-anchor.js.map +1 -0
  102. package/dist/logic/index.js +91 -0
  103. package/dist/logic/index.js.map +1 -0
  104. package/dist/logic/org-floor.js +66 -0
  105. package/dist/logic/org-floor.js.map +1 -0
  106. package/dist/logic/primary-item.js +9 -0
  107. package/dist/logic/primary-item.js.map +1 -0
  108. package/dist/logic/primary-position.js +16 -0
  109. package/dist/logic/primary-position.js.map +1 -0
  110. package/dist/logic/profile-completeness.js +21 -0
  111. package/dist/logic/profile-completeness.js.map +1 -0
  112. package/dist/logic/profile-dimensions.js +50 -0
  113. package/dist/logic/profile-dimensions.js.map +1 -0
  114. package/dist/logic/profile-summary.js +23 -0
  115. package/dist/logic/profile-summary.js.map +1 -0
  116. package/dist/logic/pseudo-employer.js +34 -0
  117. package/dist/logic/pseudo-employer.js.map +1 -0
  118. package/dist/logic/recent-activity.js +10 -0
  119. package/dist/logic/recent-activity.js.map +1 -0
  120. package/dist/logic/self-app.js +10 -0
  121. package/dist/logic/self-app.js.map +1 -0
  122. package/dist/{org-BCrvebcf.d.ts → org-CxTEjjrm.d.ts} +1 -1
  123. package/dist/{org-settings-C73Sin5E.d.ts → org-settings-BShvhyFp.d.ts} +1 -1
  124. package/dist/profile/headline-role-dedupe.js +12 -0
  125. package/dist/profile/headline-role-dedupe.js.map +1 -0
  126. package/dist/profile/highlights.js +200 -0
  127. package/dist/profile/highlights.js.map +1 -0
  128. package/dist/profile/index.js +66 -0
  129. package/dist/profile/index.js.map +1 -0
  130. package/dist/profile/involvement-grouping.js +31 -0
  131. package/dist/profile/involvement-grouping.js.map +1 -0
  132. package/dist/profile/language-sort.js +24 -0
  133. package/dist/profile/language-sort.js.map +1 -0
  134. package/dist/profile/publication-versions.js +98 -0
  135. package/dist/profile/publication-versions.js.map +1 -0
  136. package/dist/profile/range-sort.js +14 -0
  137. package/dist/profile/range-sort.js.map +1 -0
  138. package/dist/profile/section-model.js +122 -0
  139. package/dist/profile/section-model.js.map +1 -0
  140. package/dist/profile/section-sorts.js +33 -0
  141. package/dist/profile/section-sorts.js.map +1 -0
  142. package/dist/publishers/index.js +16 -0
  143. package/dist/publishers/index.js.map +1 -0
  144. package/dist/publishers/registry.js +87 -0
  145. package/dist/publishers/registry.js.map +1 -0
  146. package/dist/publishing/index.js +46 -184
  147. package/dist/publishing/index.js.map +1 -1
  148. package/dist/publishing/linkblog.js +42 -0
  149. package/dist/publishing/linkblog.js.map +1 -0
  150. package/dist/publishing/registry.js +32 -0
  151. package/dist/publishing/registry.js.map +1 -0
  152. package/dist/publishing/schemas.js +74 -0
  153. package/dist/publishing/schemas.js.map +1 -0
  154. package/dist/publishing/types.js +32 -0
  155. package/dist/publishing/types.js.map +1 -0
  156. package/dist/query/client.js +119 -0
  157. package/dist/query/client.js.map +1 -0
  158. package/dist/query/config.js +23 -0
  159. package/dist/query/config.js.map +1 -0
  160. package/dist/query/fetchers/accounts.js +29 -0
  161. package/dist/query/fetchers/accounts.js.map +1 -0
  162. package/dist/query/fetchers/activity-items-hide.js +31 -0
  163. package/dist/query/fetchers/activity-items-hide.js.map +1 -0
  164. package/dist/query/fetchers/activity.js +61 -0
  165. package/dist/query/fetchers/activity.js.map +1 -0
  166. package/dist/query/fetchers/actor.js +30 -0
  167. package/dist/query/fetchers/actor.js.map +1 -0
  168. package/dist/query/fetchers/admin-feature-allowlists.js +41 -0
  169. package/dist/query/fetchers/admin-feature-allowlists.js.map +1 -0
  170. package/dist/query/fetchers/admin-review-queues.js +30 -0
  171. package/dist/query/fetchers/admin-review-queues.js.map +1 -0
  172. package/dist/query/fetchers/apps.js +31 -0
  173. package/dist/query/fetchers/apps.js.map +1 -0
  174. package/dist/query/fetchers/bsky-preferences.js +55 -0
  175. package/dist/query/fetchers/bsky-preferences.js.map +1 -0
  176. package/dist/query/fetchers/confirmations.js +55 -0
  177. package/dist/query/fetchers/confirmations.js.map +1 -0
  178. package/dist/query/fetchers/destructive.js +34 -0
  179. package/dist/query/fetchers/destructive.js.map +1 -0
  180. package/dist/query/fetchers/discovery.js +67 -0
  181. package/dist/query/fetchers/discovery.js.map +1 -0
  182. package/dist/query/fetchers/education.js +23 -0
  183. package/dist/query/fetchers/education.js.map +1 -0
  184. package/dist/query/fetchers/endorsement-inbox.js +36 -0
  185. package/dist/query/fetchers/endorsement-inbox.js.map +1 -0
  186. package/dist/query/fetchers/endorsement.js +23 -0
  187. package/dist/query/fetchers/endorsement.js.map +1 -0
  188. package/dist/query/fetchers/endorsements.js +20 -0
  189. package/dist/query/fetchers/endorsements.js.map +1 -0
  190. package/dist/query/fetchers/entities.js +65 -0
  191. package/dist/query/fetchers/entities.js.map +1 -0
  192. package/dist/query/fetchers/external-accounts.js +74 -0
  193. package/dist/query/fetchers/external-accounts.js.map +1 -0
  194. package/dist/query/fetchers/follow-extras.js +38 -0
  195. package/dist/query/fetchers/follow-extras.js.map +1 -0
  196. package/dist/query/fetchers/follow.js +105 -0
  197. package/dist/query/fetchers/follow.js.map +1 -0
  198. package/dist/query/fetchers/get-profile-view.js +21 -0
  199. package/dist/query/fetchers/get-profile-view.js.map +1 -0
  200. package/dist/query/fetchers/github-prs.js +45 -0
  201. package/dist/query/fetchers/github-prs.js.map +1 -0
  202. package/dist/query/fetchers/inbox.js +29 -0
  203. package/dist/query/fetchers/inbox.js.map +1 -0
  204. package/dist/query/fetchers/index.d.ts +2 -2
  205. package/dist/query/fetchers/index.js +360 -2045
  206. package/dist/query/fetchers/index.js.map +1 -1
  207. package/dist/query/fetchers/investments.js +18 -0
  208. package/dist/query/fetchers/investments.js.map +1 -0
  209. package/dist/query/fetchers/keytrace-claims.js +23 -0
  210. package/dist/query/fetchers/keytrace-claims.js.map +1 -0
  211. package/dist/query/fetchers/marque-domains.js +23 -0
  212. package/dist/query/fetchers/marque-domains.js.map +1 -0
  213. package/dist/query/fetchers/network-map.js +36 -0
  214. package/dist/query/fetchers/network-map.js.map +1 -0
  215. package/dist/query/fetchers/org.js +48 -0
  216. package/dist/query/fetchers/org.js.map +1 -0
  217. package/dist/query/fetchers/positions.js +77 -0
  218. package/dist/query/fetchers/positions.js.map +1 -0
  219. package/dist/query/fetchers/profile-completeness.js +45 -0
  220. package/dist/query/fetchers/profile-completeness.js.map +1 -0
  221. package/dist/query/fetchers/profile-items-hide.js +36 -0
  222. package/dist/query/fetchers/profile-items-hide.js.map +1 -0
  223. package/dist/query/fetchers/profile-locations.js +23 -0
  224. package/dist/query/fetchers/profile-locations.js.map +1 -0
  225. package/dist/query/fetchers/profile-mutations.js +82 -0
  226. package/dist/query/fetchers/profile-mutations.js.map +1 -0
  227. package/dist/query/fetchers/profile-summary.js +14 -0
  228. package/dist/query/fetchers/profile-summary.js.map +1 -0
  229. package/dist/query/fetchers/profile.js +31 -0
  230. package/dist/query/fetchers/profile.js.map +1 -0
  231. package/dist/query/fetchers/publications.js +66 -0
  232. package/dist/query/fetchers/publications.js.map +1 -0
  233. package/dist/query/fetchers/quoted-posts.js +40 -0
  234. package/dist/query/fetchers/quoted-posts.js.map +1 -0
  235. package/dist/query/fetchers/reactions.js +85 -0
  236. package/dist/query/fetchers/reactions.js.map +1 -0
  237. package/dist/query/fetchers/received-endorsements.js +20 -0
  238. package/dist/query/fetchers/received-endorsements.js.map +1 -0
  239. package/dist/query/fetchers/reciprocity.js +23 -0
  240. package/dist/query/fetchers/reciprocity.js.map +1 -0
  241. package/dist/query/fetchers/records.js +27 -0
  242. package/dist/query/fetchers/records.js.map +1 -0
  243. package/dist/query/fetchers/repo-inventory.js +23 -0
  244. package/dist/query/fetchers/repo-inventory.js.map +1 -0
  245. package/dist/query/fetchers/roadmap.js +73 -0
  246. package/dist/query/fetchers/roadmap.js.map +1 -0
  247. package/dist/query/fetchers/rpg.js +36 -0
  248. package/dist/query/fetchers/rpg.js.map +1 -0
  249. package/dist/query/fetchers/search.js +78 -0
  250. package/dist/query/fetchers/search.js.map +1 -0
  251. package/dist/query/fetchers/section-primary.js +23 -0
  252. package/dist/query/fetchers/section-primary.js.map +1 -0
  253. package/dist/query/fetchers/skills.js +30 -0
  254. package/dist/query/fetchers/skills.js.map +1 -0
  255. package/dist/query/fetchers/speakers.js +42 -0
  256. package/dist/query/fetchers/speakers.js.map +1 -0
  257. package/dist/query/fetchers/stats.js +16 -0
  258. package/dist/query/fetchers/stats.js.map +1 -0
  259. package/dist/query/fetchers/stream.js +30 -0
  260. package/dist/query/fetchers/stream.js.map +1 -0
  261. package/dist/query/fetchers/unlinked-positions.js +30 -0
  262. package/dist/query/fetchers/unlinked-positions.js.map +1 -0
  263. package/dist/query/hooks/index.d.ts +3 -3
  264. package/dist/query/hooks/index.js +283 -3555
  265. package/dist/query/hooks/index.js.map +1 -1
  266. package/dist/query/hooks/use-accounts.js +19 -0
  267. package/dist/query/hooks/use-accounts.js.map +1 -0
  268. package/dist/query/hooks/use-activity-items-hide.js +52 -0
  269. package/dist/query/hooks/use-activity-items-hide.js.map +1 -0
  270. package/dist/query/hooks/use-activity.js +44 -0
  271. package/dist/query/hooks/use-activity.js.map +1 -0
  272. package/dist/query/hooks/use-admin-review-queues.js +21 -0
  273. package/dist/query/hooks/use-admin-review-queues.js.map +1 -0
  274. package/dist/query/hooks/use-apps.js +31 -0
  275. package/dist/query/hooks/use-apps.js.map +1 -0
  276. package/dist/query/hooks/use-bsky-content-prefs.js +45 -0
  277. package/dist/query/hooks/use-bsky-content-prefs.js.map +1 -0
  278. package/dist/query/hooks/use-confirmations.js +121 -0
  279. package/dist/query/hooks/use-confirmations.js.map +1 -0
  280. package/dist/query/hooks/use-create-position.js +28 -0
  281. package/dist/query/hooks/use-create-position.js.map +1 -0
  282. package/dist/query/hooks/use-destructive.js +63 -0
  283. package/dist/query/hooks/use-destructive.js.map +1 -0
  284. package/dist/query/hooks/use-discovery.js +53 -0
  285. package/dist/query/hooks/use-discovery.js.map +1 -0
  286. package/dist/query/hooks/use-education-mutations.js +67 -0
  287. package/dist/query/hooks/use-education-mutations.js.map +1 -0
  288. package/dist/query/hooks/use-endorsement-inbox.js +80 -0
  289. package/dist/query/hooks/use-endorsement-inbox.js.map +1 -0
  290. package/dist/query/hooks/use-endorsement-mutations.js +33 -0
  291. package/dist/query/hooks/use-endorsement-mutations.js.map +1 -0
  292. package/dist/query/hooks/use-endorsement.js +20 -0
  293. package/dist/query/hooks/use-endorsement.js.map +1 -0
  294. package/dist/query/hooks/use-entity-search.js +73 -0
  295. package/dist/query/hooks/use-entity-search.js.map +1 -0
  296. package/dist/query/hooks/use-external-accounts.js +143 -0
  297. package/dist/query/hooks/use-external-accounts.js.map +1 -0
  298. package/dist/query/hooks/use-feature-allowlist.js +104 -0
  299. package/dist/query/hooks/use-feature-allowlist.js.map +1 -0
  300. package/dist/query/hooks/use-follow-extras.js +38 -0
  301. package/dist/query/hooks/use-follow-extras.js.map +1 -0
  302. package/dist/query/hooks/use-follow.js +113 -0
  303. package/dist/query/hooks/use-follow.js.map +1 -0
  304. package/dist/query/hooks/use-get-profile-view.js +20 -0
  305. package/dist/query/hooks/use-get-profile-view.js.map +1 -0
  306. package/dist/query/hooks/use-github-prs.js +21 -0
  307. package/dist/query/hooks/use-github-prs.js.map +1 -0
  308. package/dist/query/hooks/use-inbox.js +19 -0
  309. package/dist/query/hooks/use-inbox.js.map +1 -0
  310. package/dist/query/hooks/use-investment-mutations.js +65 -0
  311. package/dist/query/hooks/use-investment-mutations.js.map +1 -0
  312. package/dist/query/hooks/use-keytrace-claims.js +50 -0
  313. package/dist/query/hooks/use-keytrace-claims.js.map +1 -0
  314. package/dist/query/hooks/use-location-mutations.js +71 -0
  315. package/dist/query/hooks/use-location-mutations.js.map +1 -0
  316. package/dist/query/hooks/use-marque-domains.js +50 -0
  317. package/dist/query/hooks/use-marque-domains.js.map +1 -0
  318. package/dist/query/hooks/use-org-claim.js +29 -0
  319. package/dist/query/hooks/use-org-claim.js.map +1 -0
  320. package/dist/query/hooks/use-org-domains.js +28 -0
  321. package/dist/query/hooks/use-org-domains.js.map +1 -0
  322. package/dist/query/hooks/use-org-notification-emails.js +28 -0
  323. package/dist/query/hooks/use-org-notification-emails.js.map +1 -0
  324. package/dist/query/hooks/use-org-profile-settings.js +29 -0
  325. package/dist/query/hooks/use-org-profile-settings.js.map +1 -0
  326. package/dist/query/hooks/use-org-profile.js +21 -0
  327. package/dist/query/hooks/use-org-profile.js.map +1 -0
  328. package/dist/query/hooks/use-position-mutations.js +128 -0
  329. package/dist/query/hooks/use-position-mutations.js.map +1 -0
  330. package/dist/query/hooks/use-profile-completeness.js +21 -0
  331. package/dist/query/hooks/use-profile-completeness.js.map +1 -0
  332. package/dist/query/hooks/use-profile-items-hide.js +53 -0
  333. package/dist/query/hooks/use-profile-items-hide.js.map +1 -0
  334. package/dist/query/hooks/use-profile-mutations.js +143 -0
  335. package/dist/query/hooks/use-profile-mutations.js.map +1 -0
  336. package/dist/query/hooks/use-profile.js +30 -0
  337. package/dist/query/hooks/use-profile.js.map +1 -0
  338. package/dist/query/hooks/use-publication-mutations.js +90 -0
  339. package/dist/query/hooks/use-publication-mutations.js.map +1 -0
  340. package/dist/query/hooks/use-reaction-mutations.js +48 -0
  341. package/dist/query/hooks/use-reaction-mutations.js.map +1 -0
  342. package/dist/query/hooks/use-reactions.js +32 -0
  343. package/dist/query/hooks/use-reactions.js.map +1 -0
  344. package/dist/query/hooks/use-received-endorsements.js +23 -0
  345. package/dist/query/hooks/use-received-endorsements.js.map +1 -0
  346. package/dist/query/hooks/use-reciprocity.js +19 -0
  347. package/dist/query/hooks/use-reciprocity.js.map +1 -0
  348. package/dist/query/hooks/use-record-mutations.js +67 -0
  349. package/dist/query/hooks/use-record-mutations.js.map +1 -0
  350. package/dist/query/hooks/use-repo-inventory.js +43 -0
  351. package/dist/query/hooks/use-repo-inventory.js.map +1 -0
  352. package/dist/query/hooks/use-roadmap-mutations.js +51 -0
  353. package/dist/query/hooks/use-roadmap-mutations.js.map +1 -0
  354. package/dist/query/hooks/use-roadmap.js +31 -0
  355. package/dist/query/hooks/use-roadmap.js.map +1 -0
  356. package/dist/query/hooks/use-search.js +63 -0
  357. package/dist/query/hooks/use-search.js.map +1 -0
  358. package/dist/query/hooks/use-section-primary-mutations.js +53 -0
  359. package/dist/query/hooks/use-section-primary-mutations.js.map +1 -0
  360. package/dist/query/hooks/use-skill-mutations.js +91 -0
  361. package/dist/query/hooks/use-skill-mutations.js.map +1 -0
  362. package/dist/query/hooks/use-stats.js +19 -0
  363. package/dist/query/hooks/use-stats.js.map +1 -0
  364. package/dist/query/hooks/use-stream.js +20 -0
  365. package/dist/query/hooks/use-stream.js.map +1 -0
  366. package/dist/query/hooks/use-unlinked-positions.js +45 -0
  367. package/dist/query/hooks/use-unlinked-positions.js.map +1 -0
  368. package/dist/query/index.d.ts +4 -4
  369. package/dist/query/index.js +685 -3744
  370. package/dist/query/index.js.map +1 -1
  371. package/dist/query/keys.js +138 -0
  372. package/dist/query/keys.js.map +1 -0
  373. package/dist/repo/groups.js +81 -0
  374. package/dist/repo/groups.js.map +1 -0
  375. package/dist/repo/index.js +9 -0
  376. package/dist/repo/index.js.map +1 -0
  377. package/dist/repo/labels.js +121 -0
  378. package/dist/repo/labels.js.map +1 -0
  379. package/dist/repo/types.js +1 -0
  380. package/dist/repo/types.js.map +1 -0
  381. package/dist/resume/index.js +5 -179
  382. package/dist/resume/index.js.map +1 -1
  383. package/dist/resume/json-resume.js +153 -0
  384. package/dist/resume/json-resume.js.map +1 -0
  385. package/dist/roadmap/index.js +101 -0
  386. package/dist/roadmap/index.js.map +1 -0
  387. package/dist/rpg/catalog.js +101 -0
  388. package/dist/rpg/catalog.js.map +1 -0
  389. package/dist/rpg/index.js +13 -116
  390. package/dist/rpg/index.js.map +1 -1
  391. package/dist/rpg/unlocks.js +21 -0
  392. package/dist/rpg/unlocks.js.map +1 -0
  393. package/dist/schemas/blob-ref.js +12 -0
  394. package/dist/schemas/blob-ref.js.map +1 -0
  395. package/dist/schemas/confirmation.js +23 -0
  396. package/dist/schemas/confirmation.js.map +1 -0
  397. package/dist/schemas/endorsement-confirmation.js +18 -0
  398. package/dist/schemas/endorsement-confirmation.js.map +1 -0
  399. package/dist/schemas/endorsement.js +19 -0
  400. package/dist/schemas/endorsement.js.map +1 -0
  401. package/dist/schemas/entity.js +74 -0
  402. package/dist/schemas/entity.js.map +1 -0
  403. package/dist/schemas/feed.js +73 -0
  404. package/dist/schemas/feed.js.map +1 -0
  405. package/dist/schemas/follow-profile.js +32 -0
  406. package/dist/schemas/follow-profile.js.map +1 -0
  407. package/dist/schemas/graph-follow.js +19 -0
  408. package/dist/schemas/graph-follow.js.map +1 -0
  409. package/dist/schemas/index.js +164 -629
  410. package/dist/schemas/index.js.map +1 -1
  411. package/dist/schemas/org-employment-attestation.js +28 -0
  412. package/dist/schemas/org-employment-attestation.js.map +1 -0
  413. package/dist/schemas/org-profile.js +64 -0
  414. package/dist/schemas/org-profile.js.map +1 -0
  415. package/dist/schemas/profile-certification.js +28 -0
  416. package/dist/schemas/profile-certification.js.map +1 -0
  417. package/dist/schemas/profile-course.js +32 -0
  418. package/dist/schemas/profile-course.js.map +1 -0
  419. package/dist/schemas/profile-education.js +33 -0
  420. package/dist/schemas/profile-education.js.map +1 -0
  421. package/dist/schemas/profile-external-account.js +15 -0
  422. package/dist/schemas/profile-external-account.js.map +1 -0
  423. package/dist/schemas/profile-honor.js +18 -0
  424. package/dist/schemas/profile-honor.js.map +1 -0
  425. package/dist/schemas/profile-investment.js +48 -0
  426. package/dist/schemas/profile-investment.js.map +1 -0
  427. package/dist/schemas/profile-involvement.js +47 -0
  428. package/dist/schemas/profile-involvement.js.map +1 -0
  429. package/dist/schemas/profile-language.js +12 -0
  430. package/dist/schemas/profile-language.js.map +1 -0
  431. package/dist/schemas/profile-position.js +42 -0
  432. package/dist/schemas/profile-position.js.map +1 -0
  433. package/dist/schemas/profile-presentation-delivery.js +38 -0
  434. package/dist/schemas/profile-presentation-delivery.js.map +1 -0
  435. package/dist/schemas/profile-presentation.js +36 -0
  436. package/dist/schemas/profile-presentation.js.map +1 -0
  437. package/dist/schemas/profile-project.js +48 -0
  438. package/dist/schemas/profile-project.js.map +1 -0
  439. package/dist/schemas/profile-publication.js +30 -0
  440. package/dist/schemas/profile-publication.js.map +1 -0
  441. package/dist/schemas/profile-self.js +22 -0
  442. package/dist/schemas/profile-self.js.map +1 -0
  443. package/dist/schemas/profile-skill.js +13 -0
  444. package/dist/schemas/profile-skill.js.map +1 -0
  445. package/dist/schemas/profile-volunteering.js +20 -0
  446. package/dist/schemas/profile-volunteering.js.map +1 -0
  447. package/dist/schemas/shared.js +56 -0
  448. package/dist/schemas/shared.js.map +1 -0
  449. package/dist/schemas/write/certification.js +16 -0
  450. package/dist/schemas/write/certification.js.map +1 -0
  451. package/dist/schemas/write/course.js +36 -0
  452. package/dist/schemas/write/course.js.map +1 -0
  453. package/dist/schemas/write/education.js +18 -0
  454. package/dist/schemas/write/education.js.map +1 -0
  455. package/dist/schemas/write/external-account.js +13 -0
  456. package/dist/schemas/write/external-account.js.map +1 -0
  457. package/dist/schemas/write/honor.js +14 -0
  458. package/dist/schemas/write/honor.js.map +1 -0
  459. package/dist/schemas/write/index.d.ts +1 -1
  460. package/dist/schemas/write/index.js +89 -593
  461. package/dist/schemas/write/index.js.map +1 -1
  462. package/dist/schemas/write/investment.js +32 -0
  463. package/dist/schemas/write/investment.js.map +1 -0
  464. package/dist/schemas/write/involvement.js +34 -0
  465. package/dist/schemas/write/involvement.js.map +1 -0
  466. package/dist/schemas/write/language.js +10 -0
  467. package/dist/schemas/write/language.js.map +1 -0
  468. package/dist/schemas/write/org-claim.js +56 -0
  469. package/dist/schemas/write/org-claim.js.map +1 -0
  470. package/dist/schemas/write/org-employment-attestation.js +19 -0
  471. package/dist/schemas/write/org-employment-attestation.js.map +1 -0
  472. package/dist/schemas/write/org-profile.js +54 -0
  473. package/dist/schemas/write/org-profile.js.map +1 -0
  474. package/dist/schemas/write/org-settings.js +81 -0
  475. package/dist/schemas/write/org-settings.js.map +1 -0
  476. package/dist/schemas/write/position.js +24 -0
  477. package/dist/schemas/write/position.js.map +1 -0
  478. package/dist/schemas/write/presentation-delivery.js +34 -0
  479. package/dist/schemas/write/presentation-delivery.js.map +1 -0
  480. package/dist/schemas/write/presentation.js +23 -0
  481. package/dist/schemas/write/presentation.js.map +1 -0
  482. package/dist/schemas/write/profile-location.js +21 -0
  483. package/dist/schemas/write/profile-location.js.map +1 -0
  484. package/dist/schemas/write/profile-self.js +27 -0
  485. package/dist/schemas/write/profile-self.js.map +1 -0
  486. package/dist/schemas/write/project.js +27 -0
  487. package/dist/schemas/write/project.js.map +1 -0
  488. package/dist/schemas/write/publication.js +41 -0
  489. package/dist/schemas/write/publication.js.map +1 -0
  490. package/dist/schemas/write/shared.js +96 -0
  491. package/dist/schemas/write/shared.js.map +1 -0
  492. package/dist/schemas/write/skill.js +18 -0
  493. package/dist/schemas/write/skill.js.map +1 -0
  494. package/dist/schemas/write/volunteering.js +16 -0
  495. package/dist/schemas/write/volunteering.js.map +1 -0
  496. package/dist/stream/activity-item.js +1 -0
  497. package/dist/stream/activity-item.js.map +1 -0
  498. package/dist/stream/index.js +49 -0
  499. package/dist/stream/index.js.map +1 -0
  500. package/dist/stream/stream-card-vm-schema.js +265 -0
  501. package/dist/stream/stream-card-vm-schema.js.map +1 -0
  502. package/dist/stream/stream-card-vm.js +1 -0
  503. package/dist/stream/stream-card-vm.js.map +1 -0
  504. package/dist/stream/to-stream-card-vm.js +793 -0
  505. package/dist/stream/to-stream-card-vm.js.map +1 -0
  506. package/dist/stream/two-tier.js +30 -0
  507. package/dist/stream/two-tier.js.map +1 -0
  508. package/dist/stream/verbs.js +120 -0
  509. package/dist/stream/verbs.js.map +1 -0
  510. package/dist/taxonomy/activity-tiers.js +956 -0
  511. package/dist/taxonomy/activity-tiers.js.map +1 -0
  512. package/dist/taxonomy/app-categories.js +42 -0
  513. package/dist/taxonomy/app-categories.js.map +1 -0
  514. package/dist/taxonomy/app-category-map.js +166 -0
  515. package/dist/taxonomy/app-category-map.js.map +1 -0
  516. package/dist/taxonomy/artifact-link-kind.js +29 -0
  517. package/dist/taxonomy/artifact-link-kind.js.map +1 -0
  518. package/dist/taxonomy/calendar-event.js +28 -0
  519. package/dist/taxonomy/calendar-event.js.map +1 -0
  520. package/dist/taxonomy/continents.js +215 -0
  521. package/dist/taxonomy/continents.js.map +1 -0
  522. package/dist/taxonomy/countries.js +203 -0
  523. package/dist/taxonomy/countries.js.map +1 -0
  524. package/dist/taxonomy/course-role.js +37 -0
  525. package/dist/taxonomy/course-role.js.map +1 -0
  526. package/dist/taxonomy/employment-type.js +82 -0
  527. package/dist/taxonomy/employment-type.js.map +1 -0
  528. package/dist/taxonomy/eqf-level.js +59 -0
  529. package/dist/taxonomy/eqf-level.js.map +1 -0
  530. package/dist/taxonomy/index.js +263 -0
  531. package/dist/taxonomy/index.js.map +1 -0
  532. package/dist/taxonomy/industry-taxonomy.js +281 -0
  533. package/dist/taxonomy/industry-taxonomy.js.map +1 -0
  534. package/dist/taxonomy/investment.js +54 -0
  535. package/dist/taxonomy/investment.js.map +1 -0
  536. package/dist/taxonomy/involvement-kind.js +30 -0
  537. package/dist/taxonomy/involvement-kind.js.map +1 -0
  538. package/dist/taxonomy/open-to.js +128 -0
  539. package/dist/taxonomy/open-to.js.map +1 -0
  540. package/dist/taxonomy/platforms.js +56 -0
  541. package/dist/taxonomy/platforms.js.map +1 -0
  542. package/dist/taxonomy/presentation-link-type.js +22 -0
  543. package/dist/taxonomy/presentation-link-type.js.map +1 -0
  544. package/dist/taxonomy/presentation-role.js +21 -0
  545. package/dist/taxonomy/presentation-role.js.map +1 -0
  546. package/dist/taxonomy/publication-type.js +54 -0
  547. package/dist/taxonomy/publication-type.js.map +1 -0
  548. package/dist/taxonomy/relational.js +25 -0
  549. package/dist/taxonomy/relational.js.map +1 -0
  550. package/dist/taxonomy/search-filter-defs.js +66 -0
  551. package/dist/taxonomy/search-filter-defs.js.map +1 -0
  552. package/dist/taxonomy/skill-categories.js +28 -0
  553. package/dist/taxonomy/skill-categories.js.map +1 -0
  554. package/dist/taxonomy/skill-display-groups.js +12 -0
  555. package/dist/taxonomy/skill-display-groups.js.map +1 -0
  556. package/dist/taxonomy/skill-grouping.js +90 -0
  557. package/dist/taxonomy/skill-grouping.js.map +1 -0
  558. package/dist/taxonomy/verification-providers.js +69 -0
  559. package/dist/taxonomy/verification-providers.js.map +1 -0
  560. package/dist/taxonomy/workplace-type.js +38 -0
  561. package/dist/taxonomy/workplace-type.js.map +1 -0
  562. package/dist/tokens/colors.js +11 -0
  563. package/dist/tokens/colors.js.map +1 -0
  564. package/dist/tokens/icons.js +15 -0
  565. package/dist/tokens/icons.js.map +1 -0
  566. package/dist/tokens/index.js +10 -39
  567. package/dist/tokens/index.js.map +1 -1
  568. package/dist/tokens/typography.js +23 -0
  569. package/dist/tokens/typography.js.map +1 -0
  570. package/dist/types/index.js +10 -0
  571. package/dist/types/index.js.map +1 -0
  572. package/dist/types/profile-view.js +1 -0
  573. package/dist/types/profile-view.js.map +1 -0
  574. package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts} +2 -2
  575. package/package.json +4 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cards/resolve-card-url.ts"],"sourcesContent":["import { APP_URL_PATTERNS, COLLECTION_TO_APP } from './app-url-patterns.js';\n\n/**\n * An activity item as consumed by the Sifa activity-card components and\n * the sifa-api external-URL health scanner. The shape mirrors the props\n * the cards already use, so the resolver returns the same URL the UI\n * renders.\n */\nexport interface ActivityItemForUrl {\n /** Collection NSID, e.g. \"sh.tangled.graph.repo\". */\n collection: string;\n /** The raw record from the PDS / API. */\n record: Record<string, unknown>;\n /** Full at-uri of the record (used by collections that derive URL from uri). */\n uri: string;\n /** Record key. */\n rkey: string;\n /** DID of the author of the record. */\n authorDid: string;\n /** Optional handle (cards prefer handle in URL paths when available). */\n authorHandle?: string;\n}\n\n/**\n * Map a collection NSID to its app id, mirroring the sifa-web prefix map.\n *\n * Falls back to the first two NSID segments (e.g. \"org.hyperboards\") when\n * the prefix is not registered, matching the existing card behaviour.\n */\nexport function getAppIdForCollection(collection: string): string {\n for (const [prefix, appId] of COLLECTION_TO_APP) {\n if (collection.startsWith(prefix)) return appId;\n }\n const parts = collection.split('.');\n if (parts.length >= 2) return `${parts[0]}.${parts[1]}`;\n return collection;\n}\n\n/**\n * How the activity-card health scanner should verify a card is still live.\n *\n * - `record`: the URL is a first-party permalink that renders THIS record\n * (e.g. a Bluesky post at bsky.app, a tangled repo, a smokesignal event).\n * The authoritative liveness check is \"does the record still exist on its\n * PDS\" — `com.atproto.repo.getRecord` on the item's own at-uri — NOT an\n * HTTP probe of the rendering app. Rendering apps (bsky.app, tangled.sh)\n * frequently answer HEAD with 404/405 while serving GET fine, which\n * false-positives every permalink as broken.\n * - `url`: the URL is a foreign or derived target — a bookmarked page, an\n * external publisher, a *different* record's page, or a profile page.\n * Its reachability is independent of this record, so probe the URL.\n * - `none`: the card has no clickable URL; nothing to check.\n */\nexport type CardHealthStrategy = 'record' | 'url' | 'none';\n\nexport interface CardHealth {\n /** The clickable URL the card renders. Null when non-clickable. */\n url: string | null;\n /** How the scanner should verify liveness. See {@link CardHealthStrategy}. */\n strategy: CardHealthStrategy;\n}\n\n/** Build a `url`-strategy result (foreign/derived/profile target). */\nfunction urlHealth(url: string | null): CardHealth {\n return url ? { url, strategy: 'url' } : { url: null, strategy: 'none' };\n}\n\n/** Build a `record`-strategy result (self-permalink of this record). */\nfunction recordHealth(url: string | null): CardHealth {\n return url ? { url, strategy: 'record' } : { url: null, strategy: 'none' };\n}\n\nfunction interpolate(pattern: string, vars: Record<string, string | undefined>): string | null {\n let result = pattern;\n for (const [key, value] of Object.entries(vars)) {\n if (result.includes(`{${key}}`)) {\n if (!value) return null;\n result = result.replaceAll(`{${key}}`, encodeURIComponent(value));\n }\n }\n return result;\n}\n\n/**\n * Whether the per-item `urlPattern` for `appId` is appropriate for `collection`.\n *\n * For bluesky, the per-item URL pattern only matches `app.bsky.feed.post` —\n * other `app.bsky.*` collections (`actor.status`, `graph.cancellation`, etc.)\n * use rkeys that would 404 at `bsky.app/profile/{handle}/post/{rkey}`. Fall\n * back to the profile URL for those. See sifa-web#1070 / sifa-web#1073.\n *\n * When `collection` is undefined we err on the safe side for bluesky and\n * prefer the profile URL.\n */\nfunction shouldUseItemPattern(appId: string, collection: string | undefined): boolean {\n if (appId === 'bluesky') {\n return collection === 'app.bsky.feed.post';\n }\n return true;\n}\n\n/**\n * Resolve a pattern-based URL, reporting which tier produced it:\n * - `item`: a per-item permalink (renders this specific record) -> record-checkable.\n * - `profile`: the app's profile page (not this record) -> url-checkable.\n * - `null`: no pattern applied.\n */\nfunction patternHealth(\n appId: string,\n vars: { handle?: string; did?: string; rkey?: string },\n collection?: string,\n): CardHealth {\n const patterns = APP_URL_PATTERNS[appId];\n if (!patterns) return { url: null, strategy: 'none' };\n\n if (patterns.urlPattern && shouldUseItemPattern(appId, collection)) {\n const url = interpolate(patterns.urlPattern, vars);\n if (url) return recordHealth(url);\n }\n if (patterns.profileUrlPattern) {\n const url = interpolate(patterns.profileUrlPattern, vars);\n if (url) return urlHealth(url);\n }\n return { url: null, strategy: 'none' };\n}\n\n/**\n * Valid tangled repo slug: alphanumeric, dot, dash, underscore. No whitespace,\n * slashes, or URL-encodable special characters. Multi-segment aggregate `name`\n * values produce 404 URLs, so callers fall back to the profile URL when\n * invalid. See sifa-web#1071 / sifa-web#1072.\n */\nconst TANGLED_REPO_SLUG = /^[a-zA-Z0-9._-]+$/;\n\nfunction stringOrNull(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\n// at://did:plc:xxx/community.lexicon.calendar.event/rkey\n// -> { did: \"did:plc:xxx\", rkey: \"rkey\" }\nfunction parseAtUri(atUri: string): { did: string; rkey: string } | null {\n const match = atUri.match(/^at:\\/\\/(did:[^/]+)\\/[^/]+\\/(.+)$/);\n if (!match || !match[1] || !match[2]) return null;\n return { did: match[1], rkey: match[2] };\n}\n\n/**\n * Resolve the canonical clickable URL for an activity item **and** how its\n * liveness should be checked — the single source of truth shared by:\n * - sifa-web activity cards (which render `.url`), and\n * - the sifa-api link-health scanner (which switches on `.strategy`: probe the\n * record's PDS for `record`-strategy cards, probe the URL for `url`).\n *\n * See {@link CardHealthStrategy} for why self-permalinks (bsky posts, etc.)\n * must be verified by record existence rather than an HTTP probe of the app.\n *\n * Resolution order:\n * 1. Per-collection bespoke logic (tangled, kipclip, margin, smokesignal\n * rsvp, standard documents). These mirror the inline logic in the\n * individual card components.\n * 2. Generic `record.url` field (used by hyperboards and similar).\n * 3. Pattern-based per-item / profile URL from the registry.\n */\nexport function resolveCardHealth(item: ActivityItemForUrl): CardHealth {\n const { collection, record, uri, rkey, authorDid, authorHandle } = item;\n const appId = getAppIdForCollection(collection);\n\n // --- Per-collection bespoke logic (mirrors the card components) ---\n\n // Tangled: prefer per-repo URL `https://tangled.sh/{handle}/{slug}`. The slug\n // is `record.name` (legacy format) or — when `name` is absent — the record's\n // rkey (newer repos use the slug as the rkey). The rkey fallback is scoped to\n // `sh.tangled.repo`; other tangled collections (e.g. feed.star) use TID rkeys\n // that are not repo slugs. Only when the slug is valid — multi-segment\n // aggregate names (whitespace, slashes, special chars) would 404. See\n // sifa-web#1071. The repo record itself is the card's subject, so it is\n // verified by the record's existence.\n if (collection.startsWith('sh.tangled.')) {\n const repoName = stringOrNull(record.name) ?? (collection === 'sh.tangled.repo' ? rkey : null);\n if (repoName && authorHandle && TANGLED_REPO_SLUG.test(repoName)) {\n return recordHealth(`https://tangled.sh/${authorHandle}/${repoName}`);\n }\n return patternHealth('tangled', { handle: authorHandle, did: authorDid, rkey }, collection);\n }\n\n // Kipclip / community.lexicon.bookmarks: the bookmark subject IS the URL —\n // a foreign page whose reachability is independent of the bookmark record.\n if (\n collection.startsWith('com.kipclip.') ||\n collection.startsWith('community.lexicon.bookmarks.')\n ) {\n const subject = stringOrNull(record.subject);\n if (subject) return urlHealth(subject);\n return patternHealth('kipclip', { handle: authorHandle, did: authorDid, rkey });\n }\n\n // Margin bookmark: card returns null entirely without record.source\n if (collection === 'at.margin.bookmark') {\n return urlHealth(stringOrNull(record.source));\n }\n\n // Margin note / annotation: both are W3C web annotations whose `target.source`\n // is the annotated page URL. Link to that source; fall back to the margin app.\n if (collection === 'at.margin.annotation' || collection === 'at.margin.note') {\n const target = record.target;\n if (target != null && typeof target === 'object') {\n const source = stringOrNull((target as Record<string, unknown>).source);\n if (source) return urlHealth(source);\n }\n return urlHealth(APP_URL_PATTERNS.margin?.profileUrlPattern ?? null);\n }\n\n // Community-calendar RSVP: parse the linked event uri. The URL points at a\n // *different* record (the event), so probe the URL, not this RSVP record.\n // Rendered via atmo.rsvp, which resolves any community.lexicon.calendar event\n // by did+rkey (Smoke Signal is decommissioned; its permalinks are retired).\n if (collection === 'community.lexicon.calendar.rsvp') {\n const subject = record.subject;\n if (subject != null && typeof subject === 'object') {\n const subjectUri = stringOrNull((subject as Record<string, unknown>).uri);\n if (subjectUri) {\n const parsed = parseAtUri(subjectUri);\n if (parsed) {\n return urlHealth(`https://atmo.rsvp/p/${parsed.did}/e/${parsed.rkey}`);\n }\n }\n }\n return { url: null, strategy: 'none' };\n }\n\n // Community-calendar event itself: use item's own uri -> self-permalink on\n // atmo.rsvp (same rationale as the RSVP block above).\n if (collection === 'community.lexicon.calendar.event') {\n const parsed = parseAtUri(uri);\n if (parsed) {\n return recordHealth(`https://atmo.rsvp/p/${parsed.did}/e/${parsed.rkey}`);\n }\n return { url: null, strategy: 'none' };\n }\n\n // atmo.rsvp event itself: use item's own uri -> self-permalink.\n if (collection === 'quest.atmo.event') {\n const parsed = parseAtUri(uri);\n if (parsed) {\n return recordHealth(`https://atmo.rsvp/p/${parsed.did}/e/${parsed.rkey}`);\n }\n return { url: null, strategy: 'none' };\n }\n\n // atmo.rsvp checkin: parse the linked event uri (record.event) and link to\n // that event's page (mirrors smokesignal rsvp). The URL points at a\n // *different* record (the event), so probe the URL. The checkin's own rkey is\n // not addressable, so without a valid event reference it's non-clickable.\n if (collection === 'quest.atmo.checkin') {\n const eventUri = stringOrNull(record.event);\n if (eventUri) {\n const parsed = parseAtUri(eventUri);\n if (parsed) {\n return urlHealth(`https://atmo.rsvp/p/${parsed.did}/e/${parsed.rkey}`);\n }\n }\n return { url: null, strategy: 'none' };\n }\n\n // atmoBB forum (atmobb.app): the universal viewer renders any thread at\n // /t/{thread-owner-did}/{thread-rkey}. A discussion reply has no own URL — it\n // lives inside its parent thread, so parse record.thread.uri and link there.\n // That URL points at a *different* record (the thread), so probe the URL.\n if (collection === 'app.atmobb.discussion.reply') {\n const thread = record.thread;\n if (thread != null && typeof thread === 'object') {\n const threadUri = stringOrNull((thread as Record<string, unknown>).uri);\n if (threadUri) {\n const parsed = parseAtUri(threadUri);\n if (parsed) {\n return urlHealth(`https://atmobb.app/t/${parsed.did}/${parsed.rkey}`);\n }\n }\n }\n return { url: null, strategy: 'none' };\n }\n\n // atmoBB thread itself: build the per-thread URL from the item's own uri — a\n // self-permalink for this record (record-checkable). Other app.atmobb.*\n // collections (actor.profile, forum.*) are excluded upstream by sifa-api and\n // never reach the resolver.\n if (collection === 'app.atmobb.discussion.thread') {\n const parsed = parseAtUri(uri);\n if (parsed) {\n return recordHealth(`https://atmobb.app/t/${parsed.did}/${parsed.rkey}`);\n }\n return { url: null, strategy: 'none' };\n }\n\n // Kut membership: a `social.kut.community.membership` record has no page of\n // its own. Link to the community it joined, parsed from record.community.uri.\n // Kut renders communities at /community/{slug}, where the slug is the\n // community-profile record's rkey (verified live). The community is a\n // *different* record, so probe the URL.\n if (collection === 'social.kut.community.membership') {\n const community = record.community;\n const communityUri =\n typeof community === 'string'\n ? community\n : // Narrow the object branch to read an optional `uri`. The membership\n // lexicon carries `community` as a bare at-uri string today; the cast\n // tolerates a future strongRef `{ uri, cid }` shape without assuming it.\n community != null && typeof community === 'object'\n ? stringOrNull((community as Record<string, unknown>).uri)\n : null;\n if (communityUri) {\n const parsed = parseAtUri(communityUri);\n if (parsed) {\n return urlHealth(`https://kut.social/community/${encodeURIComponent(parsed.rkey)}`);\n }\n }\n return urlHealth(APP_URL_PATTERNS.kut?.profileUrlPattern ?? null);\n }\n\n // atstore reviews: no per-review URL exists on atstore.fyi, and user profile\n // pages don't exist either. Deep-link to the reviewed product instead.\n // The slug comes from record.listingMeta (enriched by sifa-api from the\n // review's `subject` at-uri → fyi.atstore.listing.detail record). The product\n // page is a *different* subject, so probe the URL.\n if (collection === 'fyi.atstore.listing.review') {\n const listingMeta = record.listingMeta;\n if (listingMeta != null && typeof listingMeta === 'object') {\n const slug = stringOrNull((listingMeta as Record<string, unknown>).slug);\n if (slug) return urlHealth(`https://atstore.fyi/products/${encodeURIComponent(slug)}`);\n }\n return urlHealth(APP_URL_PATTERNS.atstore?.profileUrlPattern ?? null);\n }\n\n // Crate content: link to the canonical published location the maker\n // recorded (a YouTube/podcast/personal-site URL) — a foreign page. Crate is\n // an authoring dashboard with no public per-record viewer, so `note`\n // records — which carry no canonicalUrl — render non-clickable (null).\n if (collection === 'social.crate.content') {\n return urlHealth(stringOrNull(record.canonicalUrl));\n }\n if (collection === 'social.crate.note') {\n return { url: null, strategy: 'none' };\n }\n\n // Standard documents: siteUrl + path (or just siteUrl) — an external site.\n if (collection.startsWith('site.standard.')) {\n const siteUrl = stringOrNull(record.siteUrl);\n const path = stringOrNull(record.path);\n if (siteUrl && path) return urlHealth(`${siteUrl}${path}`);\n if (siteUrl) return urlHealth(siteUrl);\n // Fall through to generic record.url / patterns\n }\n\n // Kich recipe: always link to the Kich recipe page. record.url is the\n // *source* the recipe was imported from (a YouTube video, a blog), which the\n // card shows as secondary attribution — not the primary link. Must run before\n // the generic record.url fallback below, which would otherwise hijack it. The\n // recipe page is a first-party permalink for this record.\n if (collection === 'io.kich.recipe.recipe') {\n return patternHealth('kich', { handle: authorHandle, did: authorDid, rkey }, collection);\n }\n\n // recipe.exchange: same shape as Kich — the record's attribution.url points\n // at the original source (a blog/video), not the app. Always link to the\n // recipe.exchange page. Must run before the generic fallback below.\n if (collection === 'exchange.recipe.recipe') {\n return patternHealth('recipe', { handle: authorHandle, did: authorDid, rkey }, collection);\n }\n\n // atmob paste (atmob.in): the SPA viewer renders any paste by its full at-uri\n // via a `?uri=` query param (verified in the app's app.js). Both\n // paste.document and paste.bundle share that viewer, so build the URL from the\n // item's own uri — a self-permalink for this record (record-checkable).\n if (collection.startsWith('in.atmob.paste.')) {\n if (uri) return recordHealth(`https://atmob.in/?uri=${encodeURIComponent(uri)}`);\n return { url: null, strategy: 'none' };\n }\n\n // --- Generic fallbacks ---\n\n // record.url is a common ad-hoc per-item URL (hyperboards, etc.). It is an\n // arbitrary foreign URL, so probe it directly.\n const recordUrl = stringOrNull(record.url);\n if (recordUrl) return urlHealth(recordUrl);\n\n // Pattern-based fallback. Pass `collection` so app-specific guards (bluesky\n // restricting /post/{rkey} to app.bsky.feed.post) can apply. The tier\n // (per-item vs profile) decides record- vs url-strategy.\n return patternHealth(appId, { handle: authorHandle, did: authorDid, rkey }, collection);\n}\n\n/**\n * Resolve the canonical clickable URL for an activity item — the same URL\n * the activity-card UI in sifa-web renders. Thin wrapper over\n * {@link resolveCardHealth}; returns `null` when no link is appropriate.\n */\nexport function resolveCardUrl(item: ActivityItemForUrl): string | null {\n return resolveCardHealth(item).url;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,45 @@
1
+ // src/cards/visibility.ts
2
+ function isNonEmptyString(value) {
3
+ return typeof value === "string" && value.trim().length > 0;
4
+ }
5
+ function bookhiveHasOpinion(record) {
6
+ const review = typeof record.review === "string" ? record.review.trim() : "";
7
+ const stars = typeof record.stars === "number" ? record.stars : 0;
8
+ return review.length > 0 || stars > 0;
9
+ }
10
+ function beaconbitsHasContent(record) {
11
+ return isNonEmptyString(record.shout) || record.post != null;
12
+ }
13
+ function marginBookmarkHasSource(record) {
14
+ return isNonEmptyString(record.source);
15
+ }
16
+ function marginAnnotationHasBody(record) {
17
+ const body = record.body;
18
+ if (typeof body === "string") return body.trim().length > 0;
19
+ if (body != null && typeof body === "object") {
20
+ const value = body.value;
21
+ return typeof value === "string" && value.trim().length > 0;
22
+ }
23
+ return false;
24
+ }
25
+ function certifiedBadgeAccepted(record) {
26
+ return record.response === "accepted";
27
+ }
28
+ var ACTIVITY_VISIBILITY_RULES = Object.freeze({
29
+ "buzz.bookhive.book": bookhiveHasOpinion,
30
+ "app.beaconbits.beacon": beaconbitsHasContent,
31
+ "at.margin.bookmark": marginBookmarkHasSource,
32
+ "at.margin.annotation": marginAnnotationHasBody,
33
+ "app.certified.badge.response": certifiedBadgeAccepted
34
+ });
35
+ function isVisibleActivityItem(collection, record) {
36
+ if (record === null || typeof record !== "object") return false;
37
+ const rule = ACTIVITY_VISIBILITY_RULES[collection];
38
+ if (!rule) return true;
39
+ return rule(record);
40
+ }
41
+ export {
42
+ ACTIVITY_VISIBILITY_RULES,
43
+ isVisibleActivityItem
44
+ };
45
+ //# sourceMappingURL=visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cards/visibility.ts"],"sourcesContent":["/**\n * Per-collection visibility rules for activity items.\n *\n * These rules express \"this record has nothing meaningful to render as a card\"\n * — e.g. a BookHive shelf-add with no review/stars, or a BeaconBits pin with\n * no shout. They are a UX/card concern, distinct from the api-side blocklists\n * in sifa-api/atproto-app-registry that exclude whole collections (likes,\n * follows, games) or filter spammy record shapes (empty quote posts).\n *\n * Used in two places:\n * - sifa-api's activity feed pagination, so a page-of-N returns N visible\n * items rather than silently-dropped placeholders.\n * - sifa-web's activity-feed component (and as defense-in-depth in the card\n * components themselves), so the client never relies on a stale api.\n *\n * Adding a new rule = one PR to this file. Unknown collections default to\n * visible, so the rule set is purely additive — adding a rule can only ever\n * hide more, never expose what was hidden before.\n */\n\ntype VisibilityPredicate = (record: Record<string, unknown>) => boolean;\n\nfunction isNonEmptyString(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction bookhiveHasOpinion(record: Record<string, unknown>): boolean {\n const review = typeof record.review === 'string' ? record.review.trim() : '';\n const stars = typeof record.stars === 'number' ? record.stars : 0;\n return review.length > 0 || stars > 0;\n}\n\nfunction beaconbitsHasContent(record: Record<string, unknown>): boolean {\n return isNonEmptyString(record.shout) || record.post != null;\n}\n\nfunction marginBookmarkHasSource(record: Record<string, unknown>): boolean {\n return isNonEmptyString(record.source);\n}\n\nfunction marginAnnotationHasBody(record: Record<string, unknown>): boolean {\n const body = record.body;\n if (typeof body === 'string') return body.trim().length > 0;\n if (body != null && typeof body === 'object') {\n const value = (body as Record<string, unknown>).value;\n return typeof value === 'string' && value.trim().length > 0;\n }\n return false;\n}\n\n/**\n * A badge response is the recipient's own accept/decline of a badge someone\n * else awarded them. An accepted one is a credential the person holds and is\n * worth surfacing; a rejected one is not, and publishing someone's declined\n * badges would be a poor call. Anything other than \"accepted\" stays hidden.\n */\nfunction certifiedBadgeAccepted(record: Record<string, unknown>): boolean {\n return record.response === 'accepted';\n}\n\nexport const ACTIVITY_VISIBILITY_RULES: Readonly<Record<string, VisibilityPredicate>> =\n Object.freeze({\n 'buzz.bookhive.book': bookhiveHasOpinion,\n 'app.beaconbits.beacon': beaconbitsHasContent,\n 'at.margin.bookmark': marginBookmarkHasSource,\n 'at.margin.annotation': marginAnnotationHasBody,\n 'app.certified.badge.response': certifiedBadgeAccepted,\n });\n\n/**\n * Return true if the activity item should render a card in the timeline.\n * Records that fail the rule for their collection are dropped silently —\n * they exist in the user's PDS but carry no card-worthy content.\n *\n * Unknown collections (no registered rule) default to visible.\n */\nexport function isVisibleActivityItem(collection: string, record: unknown): boolean {\n if (record === null || typeof record !== 'object') return false;\n const rule = ACTIVITY_VISIBILITY_RULES[collection];\n if (!rule) return true;\n return rule(record as Record<string, unknown>);\n}\n"],"mappings":";AAsBA,SAAS,iBAAiB,OAAyB;AACjD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAC5D;AAEA,SAAS,mBAAmB,QAA0C;AACpE,QAAM,SAAS,OAAO,OAAO,WAAW,WAAW,OAAO,OAAO,KAAK,IAAI;AAC1E,QAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAChE,SAAO,OAAO,SAAS,KAAK,QAAQ;AACtC;AAEA,SAAS,qBAAqB,QAA0C;AACtE,SAAO,iBAAiB,OAAO,KAAK,KAAK,OAAO,QAAQ;AAC1D;AAEA,SAAS,wBAAwB,QAA0C;AACzE,SAAO,iBAAiB,OAAO,MAAM;AACvC;AAEA,SAAS,wBAAwB,QAA0C;AACzE,QAAM,OAAO,OAAO;AACpB,MAAI,OAAO,SAAS,SAAU,QAAO,KAAK,KAAK,EAAE,SAAS;AAC1D,MAAI,QAAQ,QAAQ,OAAO,SAAS,UAAU;AAC5C,UAAM,QAAS,KAAiC;AAChD,WAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAAA,EAC5D;AACA,SAAO;AACT;AAQA,SAAS,uBAAuB,QAA0C;AACxE,SAAO,OAAO,aAAa;AAC7B;AAEO,IAAM,4BACX,OAAO,OAAO;AAAA,EACZ,sBAAsB;AAAA,EACtB,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,gCAAgC;AAClC,CAAC;AASI,SAAS,sBAAsB,YAAoB,QAA0B;AAClF,MAAI,WAAW,QAAQ,OAAO,WAAW,SAAU,QAAO;AAC1D,QAAM,OAAO,0BAA0B,UAAU;AACjD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,MAAiC;AAC/C;","names":[]}
@@ -11,7 +11,8 @@ function getFlagSvg(cc) {
11
11
  function listSupportedCountryCodes() {
12
12
  return Object.keys(flags).sort();
13
13
  }
14
-
15
- export { getFlagSvg, listSupportedCountryCodes };
16
- //# sourceMappingURL=index.js.map
14
+ export {
15
+ getFlagSvg,
16
+ listSupportedCountryCodes
17
+ };
17
18
  //# sourceMappingURL=index.js.map