@singi-labs/sifa-sdk 0.19.44 → 0.19.46

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 (582) hide show
  1. package/dist/atproto/index.js +9 -3
  2. package/dist/atproto/index.js.map +1 -1
  3. package/dist/badge/index.cjs.map +1 -1
  4. package/dist/badge/index.js +5 -141
  5. package/dist/badge/index.js.map +1 -1
  6. package/dist/cards/adult-content.js +14 -0
  7. package/dist/cards/adult-content.js.map +1 -0
  8. package/dist/cards/app-url-patterns.js +369 -0
  9. package/dist/cards/app-url-patterns.js.map +1 -0
  10. package/dist/cards/index.js +24 -0
  11. package/dist/cards/index.js.map +1 -0
  12. package/dist/cards/resolve-card-url.js +198 -0
  13. package/dist/cards/resolve-card-url.js.map +1 -0
  14. package/dist/cards/visibility.js +45 -0
  15. package/dist/cards/visibility.js.map +1 -0
  16. package/dist/flags/index.js +4 -3
  17. package/dist/flags/index.js.map +1 -1
  18. package/dist/format/collapse-contributors.js +19 -0
  19. package/dist/format/collapse-contributors.js.map +1 -0
  20. package/dist/format/company-name.js +61 -0
  21. package/dist/format/company-name.js.map +1 -0
  22. package/dist/format/compare-text.js +9 -0
  23. package/dist/format/compare-text.js.map +1 -0
  24. package/dist/format/doi.js +8 -0
  25. package/dist/format/doi.js.map +1 -0
  26. package/dist/format/embed.js +131 -0
  27. package/dist/format/embed.js.map +1 -0
  28. package/dist/format/endorsement-context.js +35 -0
  29. package/dist/format/endorsement-context.js.map +1 -0
  30. package/dist/format/format-display-url.js +42 -0
  31. package/dist/format/format-display-url.js.map +1 -0
  32. package/dist/format/format-duration.js +13 -0
  33. package/dist/format/format-duration.js.map +1 -0
  34. package/dist/format/format-time.js +30 -0
  35. package/dist/format/format-time.js.map +1 -0
  36. package/dist/format/handle-utils.js +19 -0
  37. package/dist/format/handle-utils.js.map +1 -0
  38. package/dist/format/index.js +106 -0
  39. package/dist/format/index.js.map +1 -0
  40. package/dist/format/location-segments.js +29 -0
  41. package/dist/format/location-segments.js.map +1 -0
  42. package/dist/format/location-utils.js +42 -0
  43. package/dist/format/location-utils.js.map +1 -0
  44. package/dist/format/meta-description.js +35 -0
  45. package/dist/format/meta-description.js.map +1 -0
  46. package/dist/format/normalize-company-key.js +12 -0
  47. package/dist/format/normalize-company-key.js.map +1 -0
  48. package/dist/format/normalize-legal-form.js +71 -0
  49. package/dist/format/normalize-legal-form.js.map +1 -0
  50. package/dist/format/pds-utils.js +73 -0
  51. package/dist/format/pds-utils.js.map +1 -0
  52. package/dist/format/sort-by-date.js +39 -0
  53. package/dist/format/sort-by-date.js.map +1 -0
  54. package/dist/format/summarize-deliveries.js +37 -0
  55. package/dist/format/summarize-deliveries.js.map +1 -0
  56. package/dist/format/talk-slug.js +21 -0
  57. package/dist/format/talk-slug.js.map +1 -0
  58. package/dist/format/text-sanitize.js +29 -0
  59. package/dist/format/text-sanitize.js.map +1 -0
  60. package/dist/format/text-truncate.js +14 -0
  61. package/dist/format/text-truncate.js.map +1 -0
  62. package/dist/format/time-utils.js +19 -0
  63. package/dist/format/time-utils.js.map +1 -0
  64. package/dist/format/timeline.js +33 -0
  65. package/dist/format/timeline.js.map +1 -0
  66. package/dist/format/wcag-contrast.js +34 -0
  67. package/dist/format/wcag-contrast.js.map +1 -0
  68. package/dist/import/index.js +22 -0
  69. package/dist/import/index.js.map +1 -0
  70. package/dist/import/presentation-csv.js +116 -0
  71. package/dist/import/presentation-csv.js.map +1 -0
  72. package/dist/index.cjs +7 -1
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +8 -1
  75. package/dist/index.d.ts +8 -1
  76. package/dist/index.js +677 -7086
  77. package/dist/index.js.map +1 -1
  78. package/dist/jev/index.js +18 -5
  79. package/dist/jev/index.js.map +1 -1
  80. package/dist/jsonld/index.cjs.map +1 -1
  81. package/dist/jsonld/index.js +30 -987
  82. package/dist/jsonld/index.js.map +1 -1
  83. package/dist/jsonld/profile.js +222 -0
  84. package/dist/jsonld/profile.js.map +1 -0
  85. package/dist/jsonld/terms.js +496 -0
  86. package/dist/jsonld/terms.js.map +1 -0
  87. package/dist/jsonld/url.js +17 -0
  88. package/dist/jsonld/url.js.map +1 -0
  89. package/dist/jsonld/works-graph.js +41 -0
  90. package/dist/jsonld/works-graph.js.map +1 -0
  91. package/dist/jsonld/works.js +178 -0
  92. package/dist/jsonld/works.js.map +1 -0
  93. package/dist/logic/actor-identity.js +8 -0
  94. package/dist/logic/actor-identity.js.map +1 -0
  95. package/dist/logic/agent-ref.js +24 -0
  96. package/dist/logic/agent-ref.js.map +1 -0
  97. package/dist/logic/company-page-indexable.js +23 -0
  98. package/dist/logic/company-page-indexable.js.map +1 -0
  99. package/dist/logic/date-lookahead.js +33 -0
  100. package/dist/logic/date-lookahead.js.map +1 -0
  101. package/dist/logic/domain-detect.js +43 -0
  102. package/dist/logic/domain-detect.js.map +1 -0
  103. package/dist/logic/entity-disambiguation.js +24 -0
  104. package/dist/logic/entity-disambiguation.js.map +1 -0
  105. package/dist/logic/entity-ref-anchor.js +33 -0
  106. package/dist/logic/entity-ref-anchor.js.map +1 -0
  107. package/dist/logic/index.js +91 -0
  108. package/dist/logic/index.js.map +1 -0
  109. package/dist/logic/org-floor.js +66 -0
  110. package/dist/logic/org-floor.js.map +1 -0
  111. package/dist/logic/primary-item.js +9 -0
  112. package/dist/logic/primary-item.js.map +1 -0
  113. package/dist/logic/primary-position.js +16 -0
  114. package/dist/logic/primary-position.js.map +1 -0
  115. package/dist/logic/profile-completeness.js +21 -0
  116. package/dist/logic/profile-completeness.js.map +1 -0
  117. package/dist/logic/profile-dimensions.js +50 -0
  118. package/dist/logic/profile-dimensions.js.map +1 -0
  119. package/dist/logic/profile-summary.js +23 -0
  120. package/dist/logic/profile-summary.js.map +1 -0
  121. package/dist/logic/pseudo-employer.js +34 -0
  122. package/dist/logic/pseudo-employer.js.map +1 -0
  123. package/dist/logic/recent-activity.js +10 -0
  124. package/dist/logic/recent-activity.js.map +1 -0
  125. package/dist/logic/self-app.js +10 -0
  126. package/dist/logic/self-app.js.map +1 -0
  127. package/dist/{org-BCrvebcf.d.ts → org-CxTEjjrm.d.ts} +1 -1
  128. package/dist/{org-settings-C73Sin5E.d.ts → org-settings-BShvhyFp.d.ts} +1 -1
  129. package/dist/profile/headline-role-dedupe.js +12 -0
  130. package/dist/profile/headline-role-dedupe.js.map +1 -0
  131. package/dist/profile/highlights.js +200 -0
  132. package/dist/profile/highlights.js.map +1 -0
  133. package/dist/profile/index.js +66 -0
  134. package/dist/profile/index.js.map +1 -0
  135. package/dist/profile/involvement-grouping.js +31 -0
  136. package/dist/profile/involvement-grouping.js.map +1 -0
  137. package/dist/profile/language-sort.js +24 -0
  138. package/dist/profile/language-sort.js.map +1 -0
  139. package/dist/profile/publication-versions.js +98 -0
  140. package/dist/profile/publication-versions.js.map +1 -0
  141. package/dist/profile/range-sort.js +14 -0
  142. package/dist/profile/range-sort.js.map +1 -0
  143. package/dist/profile/section-model.js +122 -0
  144. package/dist/profile/section-model.js.map +1 -0
  145. package/dist/profile/section-sorts.js +33 -0
  146. package/dist/profile/section-sorts.js.map +1 -0
  147. package/dist/publishers/index.js +16 -0
  148. package/dist/publishers/index.js.map +1 -0
  149. package/dist/publishers/registry.js +87 -0
  150. package/dist/publishers/registry.js.map +1 -0
  151. package/dist/publishing/index.js +46 -184
  152. package/dist/publishing/index.js.map +1 -1
  153. package/dist/publishing/linkblog.js +42 -0
  154. package/dist/publishing/linkblog.js.map +1 -0
  155. package/dist/publishing/registry.js +32 -0
  156. package/dist/publishing/registry.js.map +1 -0
  157. package/dist/publishing/schemas.js +74 -0
  158. package/dist/publishing/schemas.js.map +1 -0
  159. package/dist/publishing/types.js +32 -0
  160. package/dist/publishing/types.js.map +1 -0
  161. package/dist/query/client.js +119 -0
  162. package/dist/query/client.js.map +1 -0
  163. package/dist/query/config.js +23 -0
  164. package/dist/query/config.js.map +1 -0
  165. package/dist/query/fetchers/accounts.js +29 -0
  166. package/dist/query/fetchers/accounts.js.map +1 -0
  167. package/dist/query/fetchers/activity-items-hide.js +31 -0
  168. package/dist/query/fetchers/activity-items-hide.js.map +1 -0
  169. package/dist/query/fetchers/activity.js +61 -0
  170. package/dist/query/fetchers/activity.js.map +1 -0
  171. package/dist/query/fetchers/actor.js +30 -0
  172. package/dist/query/fetchers/actor.js.map +1 -0
  173. package/dist/query/fetchers/admin-feature-allowlists.js +41 -0
  174. package/dist/query/fetchers/admin-feature-allowlists.js.map +1 -0
  175. package/dist/query/fetchers/admin-review-queues.js +30 -0
  176. package/dist/query/fetchers/admin-review-queues.js.map +1 -0
  177. package/dist/query/fetchers/apps.js +31 -0
  178. package/dist/query/fetchers/apps.js.map +1 -0
  179. package/dist/query/fetchers/bsky-preferences.js +55 -0
  180. package/dist/query/fetchers/bsky-preferences.js.map +1 -0
  181. package/dist/query/fetchers/confirmations.js +55 -0
  182. package/dist/query/fetchers/confirmations.js.map +1 -0
  183. package/dist/query/fetchers/destructive.js +34 -0
  184. package/dist/query/fetchers/destructive.js.map +1 -0
  185. package/dist/query/fetchers/discovery.js +67 -0
  186. package/dist/query/fetchers/discovery.js.map +1 -0
  187. package/dist/query/fetchers/education.js +23 -0
  188. package/dist/query/fetchers/education.js.map +1 -0
  189. package/dist/query/fetchers/endorsement-inbox.js +36 -0
  190. package/dist/query/fetchers/endorsement-inbox.js.map +1 -0
  191. package/dist/query/fetchers/endorsement.js +23 -0
  192. package/dist/query/fetchers/endorsement.js.map +1 -0
  193. package/dist/query/fetchers/endorsements.js +20 -0
  194. package/dist/query/fetchers/endorsements.js.map +1 -0
  195. package/dist/query/fetchers/entities.js +65 -0
  196. package/dist/query/fetchers/entities.js.map +1 -0
  197. package/dist/query/fetchers/external-accounts.js +74 -0
  198. package/dist/query/fetchers/external-accounts.js.map +1 -0
  199. package/dist/query/fetchers/follow-extras.js +38 -0
  200. package/dist/query/fetchers/follow-extras.js.map +1 -0
  201. package/dist/query/fetchers/follow.js +105 -0
  202. package/dist/query/fetchers/follow.js.map +1 -0
  203. package/dist/query/fetchers/get-profile-view.js +21 -0
  204. package/dist/query/fetchers/get-profile-view.js.map +1 -0
  205. package/dist/query/fetchers/github-prs.js +45 -0
  206. package/dist/query/fetchers/github-prs.js.map +1 -0
  207. package/dist/query/fetchers/inbox.js +29 -0
  208. package/dist/query/fetchers/inbox.js.map +1 -0
  209. package/dist/query/fetchers/index.cjs.map +1 -1
  210. package/dist/query/fetchers/index.d.ts +2 -2
  211. package/dist/query/fetchers/index.js +360 -2045
  212. package/dist/query/fetchers/index.js.map +1 -1
  213. package/dist/query/fetchers/investments.js +18 -0
  214. package/dist/query/fetchers/investments.js.map +1 -0
  215. package/dist/query/fetchers/keytrace-claims.js +23 -0
  216. package/dist/query/fetchers/keytrace-claims.js.map +1 -0
  217. package/dist/query/fetchers/marque-domains.js +23 -0
  218. package/dist/query/fetchers/marque-domains.js.map +1 -0
  219. package/dist/query/fetchers/network-map.js +36 -0
  220. package/dist/query/fetchers/network-map.js.map +1 -0
  221. package/dist/query/fetchers/org.js +48 -0
  222. package/dist/query/fetchers/org.js.map +1 -0
  223. package/dist/query/fetchers/positions.js +77 -0
  224. package/dist/query/fetchers/positions.js.map +1 -0
  225. package/dist/query/fetchers/profile-completeness.js +45 -0
  226. package/dist/query/fetchers/profile-completeness.js.map +1 -0
  227. package/dist/query/fetchers/profile-items-hide.js +36 -0
  228. package/dist/query/fetchers/profile-items-hide.js.map +1 -0
  229. package/dist/query/fetchers/profile-locations.js +23 -0
  230. package/dist/query/fetchers/profile-locations.js.map +1 -0
  231. package/dist/query/fetchers/profile-mutations.js +82 -0
  232. package/dist/query/fetchers/profile-mutations.js.map +1 -0
  233. package/dist/query/fetchers/profile-summary.js +14 -0
  234. package/dist/query/fetchers/profile-summary.js.map +1 -0
  235. package/dist/query/fetchers/profile.js +31 -0
  236. package/dist/query/fetchers/profile.js.map +1 -0
  237. package/dist/query/fetchers/publications.js +66 -0
  238. package/dist/query/fetchers/publications.js.map +1 -0
  239. package/dist/query/fetchers/quoted-posts.js +40 -0
  240. package/dist/query/fetchers/quoted-posts.js.map +1 -0
  241. package/dist/query/fetchers/reactions.js +85 -0
  242. package/dist/query/fetchers/reactions.js.map +1 -0
  243. package/dist/query/fetchers/received-endorsements.js +20 -0
  244. package/dist/query/fetchers/received-endorsements.js.map +1 -0
  245. package/dist/query/fetchers/reciprocity.js +23 -0
  246. package/dist/query/fetchers/reciprocity.js.map +1 -0
  247. package/dist/query/fetchers/records.js +27 -0
  248. package/dist/query/fetchers/records.js.map +1 -0
  249. package/dist/query/fetchers/repo-inventory.js +23 -0
  250. package/dist/query/fetchers/repo-inventory.js.map +1 -0
  251. package/dist/query/fetchers/roadmap.js +73 -0
  252. package/dist/query/fetchers/roadmap.js.map +1 -0
  253. package/dist/query/fetchers/rpg.js +36 -0
  254. package/dist/query/fetchers/rpg.js.map +1 -0
  255. package/dist/query/fetchers/search.js +78 -0
  256. package/dist/query/fetchers/search.js.map +1 -0
  257. package/dist/query/fetchers/section-primary.js +23 -0
  258. package/dist/query/fetchers/section-primary.js.map +1 -0
  259. package/dist/query/fetchers/skills.js +30 -0
  260. package/dist/query/fetchers/skills.js.map +1 -0
  261. package/dist/query/fetchers/speakers.js +42 -0
  262. package/dist/query/fetchers/speakers.js.map +1 -0
  263. package/dist/query/fetchers/stats.js +16 -0
  264. package/dist/query/fetchers/stats.js.map +1 -0
  265. package/dist/query/fetchers/stream.js +30 -0
  266. package/dist/query/fetchers/stream.js.map +1 -0
  267. package/dist/query/fetchers/unlinked-positions.js +30 -0
  268. package/dist/query/fetchers/unlinked-positions.js.map +1 -0
  269. package/dist/query/hooks/index.d.ts +3 -3
  270. package/dist/query/hooks/index.js +283 -3555
  271. package/dist/query/hooks/index.js.map +1 -1
  272. package/dist/query/hooks/use-accounts.js +19 -0
  273. package/dist/query/hooks/use-accounts.js.map +1 -0
  274. package/dist/query/hooks/use-activity-items-hide.js +52 -0
  275. package/dist/query/hooks/use-activity-items-hide.js.map +1 -0
  276. package/dist/query/hooks/use-activity.js +44 -0
  277. package/dist/query/hooks/use-activity.js.map +1 -0
  278. package/dist/query/hooks/use-admin-review-queues.js +21 -0
  279. package/dist/query/hooks/use-admin-review-queues.js.map +1 -0
  280. package/dist/query/hooks/use-apps.js +31 -0
  281. package/dist/query/hooks/use-apps.js.map +1 -0
  282. package/dist/query/hooks/use-bsky-content-prefs.js +45 -0
  283. package/dist/query/hooks/use-bsky-content-prefs.js.map +1 -0
  284. package/dist/query/hooks/use-confirmations.js +121 -0
  285. package/dist/query/hooks/use-confirmations.js.map +1 -0
  286. package/dist/query/hooks/use-create-position.js +28 -0
  287. package/dist/query/hooks/use-create-position.js.map +1 -0
  288. package/dist/query/hooks/use-destructive.js +63 -0
  289. package/dist/query/hooks/use-destructive.js.map +1 -0
  290. package/dist/query/hooks/use-discovery.js +53 -0
  291. package/dist/query/hooks/use-discovery.js.map +1 -0
  292. package/dist/query/hooks/use-education-mutations.js +67 -0
  293. package/dist/query/hooks/use-education-mutations.js.map +1 -0
  294. package/dist/query/hooks/use-endorsement-inbox.js +80 -0
  295. package/dist/query/hooks/use-endorsement-inbox.js.map +1 -0
  296. package/dist/query/hooks/use-endorsement-mutations.js +33 -0
  297. package/dist/query/hooks/use-endorsement-mutations.js.map +1 -0
  298. package/dist/query/hooks/use-endorsement.js +20 -0
  299. package/dist/query/hooks/use-endorsement.js.map +1 -0
  300. package/dist/query/hooks/use-entity-search.js +73 -0
  301. package/dist/query/hooks/use-entity-search.js.map +1 -0
  302. package/dist/query/hooks/use-external-accounts.js +143 -0
  303. package/dist/query/hooks/use-external-accounts.js.map +1 -0
  304. package/dist/query/hooks/use-feature-allowlist.js +104 -0
  305. package/dist/query/hooks/use-feature-allowlist.js.map +1 -0
  306. package/dist/query/hooks/use-follow-extras.js +38 -0
  307. package/dist/query/hooks/use-follow-extras.js.map +1 -0
  308. package/dist/query/hooks/use-follow.js +113 -0
  309. package/dist/query/hooks/use-follow.js.map +1 -0
  310. package/dist/query/hooks/use-get-profile-view.js +20 -0
  311. package/dist/query/hooks/use-get-profile-view.js.map +1 -0
  312. package/dist/query/hooks/use-github-prs.js +21 -0
  313. package/dist/query/hooks/use-github-prs.js.map +1 -0
  314. package/dist/query/hooks/use-inbox.js +19 -0
  315. package/dist/query/hooks/use-inbox.js.map +1 -0
  316. package/dist/query/hooks/use-investment-mutations.js +65 -0
  317. package/dist/query/hooks/use-investment-mutations.js.map +1 -0
  318. package/dist/query/hooks/use-keytrace-claims.js +50 -0
  319. package/dist/query/hooks/use-keytrace-claims.js.map +1 -0
  320. package/dist/query/hooks/use-location-mutations.js +71 -0
  321. package/dist/query/hooks/use-location-mutations.js.map +1 -0
  322. package/dist/query/hooks/use-marque-domains.js +50 -0
  323. package/dist/query/hooks/use-marque-domains.js.map +1 -0
  324. package/dist/query/hooks/use-org-claim.js +29 -0
  325. package/dist/query/hooks/use-org-claim.js.map +1 -0
  326. package/dist/query/hooks/use-org-domains.js +28 -0
  327. package/dist/query/hooks/use-org-domains.js.map +1 -0
  328. package/dist/query/hooks/use-org-notification-emails.js +28 -0
  329. package/dist/query/hooks/use-org-notification-emails.js.map +1 -0
  330. package/dist/query/hooks/use-org-profile-settings.js +29 -0
  331. package/dist/query/hooks/use-org-profile-settings.js.map +1 -0
  332. package/dist/query/hooks/use-org-profile.js +21 -0
  333. package/dist/query/hooks/use-org-profile.js.map +1 -0
  334. package/dist/query/hooks/use-position-mutations.js +128 -0
  335. package/dist/query/hooks/use-position-mutations.js.map +1 -0
  336. package/dist/query/hooks/use-profile-completeness.js +21 -0
  337. package/dist/query/hooks/use-profile-completeness.js.map +1 -0
  338. package/dist/query/hooks/use-profile-items-hide.js +53 -0
  339. package/dist/query/hooks/use-profile-items-hide.js.map +1 -0
  340. package/dist/query/hooks/use-profile-mutations.js +143 -0
  341. package/dist/query/hooks/use-profile-mutations.js.map +1 -0
  342. package/dist/query/hooks/use-profile.js +30 -0
  343. package/dist/query/hooks/use-profile.js.map +1 -0
  344. package/dist/query/hooks/use-publication-mutations.js +90 -0
  345. package/dist/query/hooks/use-publication-mutations.js.map +1 -0
  346. package/dist/query/hooks/use-reaction-mutations.js +48 -0
  347. package/dist/query/hooks/use-reaction-mutations.js.map +1 -0
  348. package/dist/query/hooks/use-reactions.js +32 -0
  349. package/dist/query/hooks/use-reactions.js.map +1 -0
  350. package/dist/query/hooks/use-received-endorsements.js +23 -0
  351. package/dist/query/hooks/use-received-endorsements.js.map +1 -0
  352. package/dist/query/hooks/use-reciprocity.js +19 -0
  353. package/dist/query/hooks/use-reciprocity.js.map +1 -0
  354. package/dist/query/hooks/use-record-mutations.js +67 -0
  355. package/dist/query/hooks/use-record-mutations.js.map +1 -0
  356. package/dist/query/hooks/use-repo-inventory.js +43 -0
  357. package/dist/query/hooks/use-repo-inventory.js.map +1 -0
  358. package/dist/query/hooks/use-roadmap-mutations.js +51 -0
  359. package/dist/query/hooks/use-roadmap-mutations.js.map +1 -0
  360. package/dist/query/hooks/use-roadmap.js +31 -0
  361. package/dist/query/hooks/use-roadmap.js.map +1 -0
  362. package/dist/query/hooks/use-search.js +63 -0
  363. package/dist/query/hooks/use-search.js.map +1 -0
  364. package/dist/query/hooks/use-section-primary-mutations.js +53 -0
  365. package/dist/query/hooks/use-section-primary-mutations.js.map +1 -0
  366. package/dist/query/hooks/use-skill-mutations.js +91 -0
  367. package/dist/query/hooks/use-skill-mutations.js.map +1 -0
  368. package/dist/query/hooks/use-stats.js +19 -0
  369. package/dist/query/hooks/use-stats.js.map +1 -0
  370. package/dist/query/hooks/use-stream.js +20 -0
  371. package/dist/query/hooks/use-stream.js.map +1 -0
  372. package/dist/query/hooks/use-unlinked-positions.js +45 -0
  373. package/dist/query/hooks/use-unlinked-positions.js.map +1 -0
  374. package/dist/query/index.cjs.map +1 -1
  375. package/dist/query/index.d.ts +4 -4
  376. package/dist/query/index.js +685 -3744
  377. package/dist/query/index.js.map +1 -1
  378. package/dist/query/keys.js +138 -0
  379. package/dist/query/keys.js.map +1 -0
  380. package/dist/repo/groups.js +81 -0
  381. package/dist/repo/groups.js.map +1 -0
  382. package/dist/repo/index.js +9 -0
  383. package/dist/repo/index.js.map +1 -0
  384. package/dist/repo/labels.js +121 -0
  385. package/dist/repo/labels.js.map +1 -0
  386. package/dist/repo/types.js +1 -0
  387. package/dist/repo/types.js.map +1 -0
  388. package/dist/resume/index.js +5 -179
  389. package/dist/resume/index.js.map +1 -1
  390. package/dist/resume/json-resume.js +153 -0
  391. package/dist/resume/json-resume.js.map +1 -0
  392. package/dist/roadmap/index.js +101 -0
  393. package/dist/roadmap/index.js.map +1 -0
  394. package/dist/rpg/catalog.js +101 -0
  395. package/dist/rpg/catalog.js.map +1 -0
  396. package/dist/rpg/index.js +13 -116
  397. package/dist/rpg/index.js.map +1 -1
  398. package/dist/rpg/unlocks.js +21 -0
  399. package/dist/rpg/unlocks.js.map +1 -0
  400. package/dist/schemas/blob-ref.js +12 -0
  401. package/dist/schemas/blob-ref.js.map +1 -0
  402. package/dist/schemas/confirmation.js +23 -0
  403. package/dist/schemas/confirmation.js.map +1 -0
  404. package/dist/schemas/endorsement-confirmation.js +18 -0
  405. package/dist/schemas/endorsement-confirmation.js.map +1 -0
  406. package/dist/schemas/endorsement.js +19 -0
  407. package/dist/schemas/endorsement.js.map +1 -0
  408. package/dist/schemas/entity.js +74 -0
  409. package/dist/schemas/entity.js.map +1 -0
  410. package/dist/schemas/feed.js +73 -0
  411. package/dist/schemas/feed.js.map +1 -0
  412. package/dist/schemas/follow-profile.js +32 -0
  413. package/dist/schemas/follow-profile.js.map +1 -0
  414. package/dist/schemas/graph-follow.js +19 -0
  415. package/dist/schemas/graph-follow.js.map +1 -0
  416. package/dist/schemas/index.js +164 -629
  417. package/dist/schemas/index.js.map +1 -1
  418. package/dist/schemas/org-employment-attestation.js +28 -0
  419. package/dist/schemas/org-employment-attestation.js.map +1 -0
  420. package/dist/schemas/org-profile.js +64 -0
  421. package/dist/schemas/org-profile.js.map +1 -0
  422. package/dist/schemas/profile-certification.js +28 -0
  423. package/dist/schemas/profile-certification.js.map +1 -0
  424. package/dist/schemas/profile-course.js +32 -0
  425. package/dist/schemas/profile-course.js.map +1 -0
  426. package/dist/schemas/profile-education.js +33 -0
  427. package/dist/schemas/profile-education.js.map +1 -0
  428. package/dist/schemas/profile-external-account.js +15 -0
  429. package/dist/schemas/profile-external-account.js.map +1 -0
  430. package/dist/schemas/profile-honor.js +18 -0
  431. package/dist/schemas/profile-honor.js.map +1 -0
  432. package/dist/schemas/profile-investment.js +48 -0
  433. package/dist/schemas/profile-investment.js.map +1 -0
  434. package/dist/schemas/profile-involvement.js +47 -0
  435. package/dist/schemas/profile-involvement.js.map +1 -0
  436. package/dist/schemas/profile-language.js +12 -0
  437. package/dist/schemas/profile-language.js.map +1 -0
  438. package/dist/schemas/profile-position.js +42 -0
  439. package/dist/schemas/profile-position.js.map +1 -0
  440. package/dist/schemas/profile-presentation-delivery.js +38 -0
  441. package/dist/schemas/profile-presentation-delivery.js.map +1 -0
  442. package/dist/schemas/profile-presentation.js +36 -0
  443. package/dist/schemas/profile-presentation.js.map +1 -0
  444. package/dist/schemas/profile-project.js +48 -0
  445. package/dist/schemas/profile-project.js.map +1 -0
  446. package/dist/schemas/profile-publication.js +30 -0
  447. package/dist/schemas/profile-publication.js.map +1 -0
  448. package/dist/schemas/profile-self.js +22 -0
  449. package/dist/schemas/profile-self.js.map +1 -0
  450. package/dist/schemas/profile-skill.js +13 -0
  451. package/dist/schemas/profile-skill.js.map +1 -0
  452. package/dist/schemas/profile-volunteering.js +20 -0
  453. package/dist/schemas/profile-volunteering.js.map +1 -0
  454. package/dist/schemas/shared.js +56 -0
  455. package/dist/schemas/shared.js.map +1 -0
  456. package/dist/schemas/write/certification.js +16 -0
  457. package/dist/schemas/write/certification.js.map +1 -0
  458. package/dist/schemas/write/course.js +36 -0
  459. package/dist/schemas/write/course.js.map +1 -0
  460. package/dist/schemas/write/education.js +18 -0
  461. package/dist/schemas/write/education.js.map +1 -0
  462. package/dist/schemas/write/external-account.js +13 -0
  463. package/dist/schemas/write/external-account.js.map +1 -0
  464. package/dist/schemas/write/honor.js +14 -0
  465. package/dist/schemas/write/honor.js.map +1 -0
  466. package/dist/schemas/write/index.d.ts +1 -1
  467. package/dist/schemas/write/index.js +89 -593
  468. package/dist/schemas/write/index.js.map +1 -1
  469. package/dist/schemas/write/investment.js +32 -0
  470. package/dist/schemas/write/investment.js.map +1 -0
  471. package/dist/schemas/write/involvement.js +34 -0
  472. package/dist/schemas/write/involvement.js.map +1 -0
  473. package/dist/schemas/write/language.js +10 -0
  474. package/dist/schemas/write/language.js.map +1 -0
  475. package/dist/schemas/write/org-claim.js +56 -0
  476. package/dist/schemas/write/org-claim.js.map +1 -0
  477. package/dist/schemas/write/org-employment-attestation.js +19 -0
  478. package/dist/schemas/write/org-employment-attestation.js.map +1 -0
  479. package/dist/schemas/write/org-profile.js +54 -0
  480. package/dist/schemas/write/org-profile.js.map +1 -0
  481. package/dist/schemas/write/org-settings.js +81 -0
  482. package/dist/schemas/write/org-settings.js.map +1 -0
  483. package/dist/schemas/write/position.js +24 -0
  484. package/dist/schemas/write/position.js.map +1 -0
  485. package/dist/schemas/write/presentation-delivery.js +34 -0
  486. package/dist/schemas/write/presentation-delivery.js.map +1 -0
  487. package/dist/schemas/write/presentation.js +23 -0
  488. package/dist/schemas/write/presentation.js.map +1 -0
  489. package/dist/schemas/write/profile-location.js +21 -0
  490. package/dist/schemas/write/profile-location.js.map +1 -0
  491. package/dist/schemas/write/profile-self.js +27 -0
  492. package/dist/schemas/write/profile-self.js.map +1 -0
  493. package/dist/schemas/write/project.js +27 -0
  494. package/dist/schemas/write/project.js.map +1 -0
  495. package/dist/schemas/write/publication.js +41 -0
  496. package/dist/schemas/write/publication.js.map +1 -0
  497. package/dist/schemas/write/shared.js +96 -0
  498. package/dist/schemas/write/shared.js.map +1 -0
  499. package/dist/schemas/write/skill.js +18 -0
  500. package/dist/schemas/write/skill.js.map +1 -0
  501. package/dist/schemas/write/volunteering.js +16 -0
  502. package/dist/schemas/write/volunteering.js.map +1 -0
  503. package/dist/stream/activity-item.js +1 -0
  504. package/dist/stream/activity-item.js.map +1 -0
  505. package/dist/stream/index.js +49 -0
  506. package/dist/stream/index.js.map +1 -0
  507. package/dist/stream/stream-card-vm-schema.js +265 -0
  508. package/dist/stream/stream-card-vm-schema.js.map +1 -0
  509. package/dist/stream/stream-card-vm.js +1 -0
  510. package/dist/stream/stream-card-vm.js.map +1 -0
  511. package/dist/stream/to-stream-card-vm.js +793 -0
  512. package/dist/stream/to-stream-card-vm.js.map +1 -0
  513. package/dist/stream/two-tier.js +30 -0
  514. package/dist/stream/two-tier.js.map +1 -0
  515. package/dist/stream/verbs.js +120 -0
  516. package/dist/stream/verbs.js.map +1 -0
  517. package/dist/taxonomy/activity-tiers.js +956 -0
  518. package/dist/taxonomy/activity-tiers.js.map +1 -0
  519. package/dist/taxonomy/app-categories.js +42 -0
  520. package/dist/taxonomy/app-categories.js.map +1 -0
  521. package/dist/taxonomy/app-category-map.js +166 -0
  522. package/dist/taxonomy/app-category-map.js.map +1 -0
  523. package/dist/taxonomy/artifact-link-kind.js +29 -0
  524. package/dist/taxonomy/artifact-link-kind.js.map +1 -0
  525. package/dist/taxonomy/calendar-event.js +28 -0
  526. package/dist/taxonomy/calendar-event.js.map +1 -0
  527. package/dist/taxonomy/continents.js +215 -0
  528. package/dist/taxonomy/continents.js.map +1 -0
  529. package/dist/taxonomy/countries.js +203 -0
  530. package/dist/taxonomy/countries.js.map +1 -0
  531. package/dist/taxonomy/course-role.js +37 -0
  532. package/dist/taxonomy/course-role.js.map +1 -0
  533. package/dist/taxonomy/employment-type.js +82 -0
  534. package/dist/taxonomy/employment-type.js.map +1 -0
  535. package/dist/taxonomy/eqf-level.js +59 -0
  536. package/dist/taxonomy/eqf-level.js.map +1 -0
  537. package/dist/taxonomy/index.js +263 -0
  538. package/dist/taxonomy/index.js.map +1 -0
  539. package/dist/taxonomy/industry-taxonomy.js +281 -0
  540. package/dist/taxonomy/industry-taxonomy.js.map +1 -0
  541. package/dist/taxonomy/investment.js +54 -0
  542. package/dist/taxonomy/investment.js.map +1 -0
  543. package/dist/taxonomy/involvement-kind.js +30 -0
  544. package/dist/taxonomy/involvement-kind.js.map +1 -0
  545. package/dist/taxonomy/open-to.js +128 -0
  546. package/dist/taxonomy/open-to.js.map +1 -0
  547. package/dist/taxonomy/platforms.js +56 -0
  548. package/dist/taxonomy/platforms.js.map +1 -0
  549. package/dist/taxonomy/presentation-link-type.js +22 -0
  550. package/dist/taxonomy/presentation-link-type.js.map +1 -0
  551. package/dist/taxonomy/presentation-role.js +21 -0
  552. package/dist/taxonomy/presentation-role.js.map +1 -0
  553. package/dist/taxonomy/publication-type.js +54 -0
  554. package/dist/taxonomy/publication-type.js.map +1 -0
  555. package/dist/taxonomy/relational.js +25 -0
  556. package/dist/taxonomy/relational.js.map +1 -0
  557. package/dist/taxonomy/search-filter-defs.js +66 -0
  558. package/dist/taxonomy/search-filter-defs.js.map +1 -0
  559. package/dist/taxonomy/skill-categories.js +28 -0
  560. package/dist/taxonomy/skill-categories.js.map +1 -0
  561. package/dist/taxonomy/skill-display-groups.js +12 -0
  562. package/dist/taxonomy/skill-display-groups.js.map +1 -0
  563. package/dist/taxonomy/skill-grouping.js +90 -0
  564. package/dist/taxonomy/skill-grouping.js.map +1 -0
  565. package/dist/taxonomy/verification-providers.js +69 -0
  566. package/dist/taxonomy/verification-providers.js.map +1 -0
  567. package/dist/taxonomy/workplace-type.js +38 -0
  568. package/dist/taxonomy/workplace-type.js.map +1 -0
  569. package/dist/tokens/colors.js +11 -0
  570. package/dist/tokens/colors.js.map +1 -0
  571. package/dist/tokens/icons.js +15 -0
  572. package/dist/tokens/icons.js.map +1 -0
  573. package/dist/tokens/index.js +10 -39
  574. package/dist/tokens/index.js.map +1 -1
  575. package/dist/tokens/typography.js +23 -0
  576. package/dist/tokens/typography.js.map +1 -0
  577. package/dist/types/index.js +10 -0
  578. package/dist/types/index.js.map +1 -0
  579. package/dist/types/profile-view.js +1 -0
  580. package/dist/types/profile-view.js.map +1 -0
  581. package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts} +2 -2
  582. package/package.json +4 -3
@@ -0,0 +1,18 @@
1
+ // src/query/fetchers/investments.ts
2
+ import { PROFILE_INVESTMENT_NSID } from "../../schemas/profile-investment.js";
3
+ import { createRecord, updateRecord, deleteRecord } from "./records.js";
4
+ function createInvestment(config, data, options = {}) {
5
+ return createRecord(config, PROFILE_INVESTMENT_NSID, data, options);
6
+ }
7
+ function updateInvestment(config, rkey, data, options = {}) {
8
+ return updateRecord(config, PROFILE_INVESTMENT_NSID, rkey, data, options);
9
+ }
10
+ function deleteInvestment(config, rkey, options = {}) {
11
+ return deleteRecord(config, PROFILE_INVESTMENT_NSID, rkey, options);
12
+ }
13
+ export {
14
+ createInvestment,
15
+ deleteInvestment,
16
+ updateInvestment
17
+ };
18
+ //# sourceMappingURL=investments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/investments.ts"],"sourcesContent":["import { PROFILE_INVESTMENT_NSID } from '../../schemas/profile-investment.js';\nimport { createRecord, updateRecord, deleteRecord } from './records.js';\nimport type { ApiFetchOptions, CreateResult, SifaApiConfig, WriteResult } from '../client.js';\n\nexport type { CreateResult, WriteResult } from '../client.js';\n\n/**\n * Typed wrappers over the generic record routes for\n * `id.sifa.profile.investment`. sifa-api serves every collection without a\n * bespoke handler through `POST|PUT|DELETE /api/profile/records/<collection>`,\n * so these exist for call-site readability, not for a different endpoint.\n *\n * Never throw -- inspect `result.success` and use `result.error` /\n * `result.pdsHost` for UI messaging.\n */\nexport function createInvestment(\n config: SifaApiConfig,\n data: Record<string, unknown>,\n options: ApiFetchOptions = {},\n): Promise<CreateResult> {\n return createRecord(config, PROFILE_INVESTMENT_NSID, data, options);\n}\n\n/** Update an existing investment by `rkey`. */\nexport function updateInvestment(\n config: SifaApiConfig,\n rkey: string,\n data: Record<string, unknown>,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return updateRecord(config, PROFILE_INVESTMENT_NSID, rkey, data, options);\n}\n\n/** Delete an investment by `rkey`. */\nexport function deleteInvestment(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return deleteRecord(config, PROFILE_INVESTMENT_NSID, rkey, options);\n}\n"],"mappings":";AAAA,SAAS,+BAA+B;AACxC,SAAS,cAAc,cAAc,oBAAoB;AAclD,SAAS,iBACd,QACA,MACA,UAA2B,CAAC,GACL;AACvB,SAAO,aAAa,QAAQ,yBAAyB,MAAM,OAAO;AACpE;AAGO,SAAS,iBACd,QACA,MACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,aAAa,QAAQ,yBAAyB,MAAM,MAAM,OAAO;AAC1E;AAGO,SAAS,iBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,aAAa,QAAQ,yBAAyB,MAAM,OAAO;AACpE;","names":[]}
@@ -0,0 +1,23 @@
1
+ // src/query/fetchers/keytrace-claims.ts
2
+ import { apiWrite } from "../client.js";
3
+ function hideKeytraceClaim(config, rkey, options = {}) {
4
+ return apiWrite(
5
+ config,
6
+ `/api/profile/keytrace-claims/${encodeURIComponent(rkey)}/hide`,
7
+ "POST",
8
+ options
9
+ );
10
+ }
11
+ function unhideKeytraceClaim(config, rkey, options = {}) {
12
+ return apiWrite(
13
+ config,
14
+ `/api/profile/keytrace-claims/${encodeURIComponent(rkey)}/hide`,
15
+ "DELETE",
16
+ options
17
+ );
18
+ }
19
+ export {
20
+ hideKeytraceClaim,
21
+ unhideKeytraceClaim
22
+ };
23
+ //# sourceMappingURL=keytrace-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/keytrace-claims.ts"],"sourcesContent":["import { apiWrite, type ApiFetchOptions, type SifaApiConfig, type WriteResult } from '../client.js';\n\n/**\n * Hide a keytrace claim (verified-account claim discovered on the\n * user's external accounts) from the user's profile. The claim itself\n * stays in the index; only its display is suppressed.\n */\nexport function hideKeytraceClaim(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(\n config,\n `/api/profile/keytrace-claims/${encodeURIComponent(rkey)}/hide`,\n 'POST',\n options,\n );\n}\n\n/** Restore a previously-hidden keytrace claim. */\nexport function unhideKeytraceClaim(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(\n config,\n `/api/profile/keytrace-claims/${encodeURIComponent(rkey)}/hide`,\n 'DELETE',\n options,\n );\n}\n"],"mappings":";AAAA,SAAS,gBAA4E;AAO9E,SAAS,kBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO;AAAA,IACL;AAAA,IACA,gCAAgC,mBAAmB,IAAI,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,oBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO;AAAA,IACL;AAAA,IACA,gCAAgC,mBAAmB,IAAI,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,23 @@
1
+ // src/query/fetchers/marque-domains.ts
2
+ import { apiWrite } from "../client.js";
3
+ function revealMarqueDomain(config, domain, options = {}) {
4
+ return apiWrite(
5
+ config,
6
+ `/api/profile/marque-domains/${encodeURIComponent(domain)}/reveal`,
7
+ "POST",
8
+ options
9
+ );
10
+ }
11
+ function unrevealMarqueDomain(config, domain, options = {}) {
12
+ return apiWrite(
13
+ config,
14
+ `/api/profile/marque-domains/${encodeURIComponent(domain)}/reveal`,
15
+ "DELETE",
16
+ options
17
+ );
18
+ }
19
+ export {
20
+ revealMarqueDomain,
21
+ unrevealMarqueDomain
22
+ };
23
+ //# sourceMappingURL=marque-domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/marque-domains.ts"],"sourcesContent":["import { apiWrite, type ApiFetchOptions, type SifaApiConfig, type WriteResult } from '../client.js';\n\n/**\n * Make a Marque-registered domain public in the owner's Links section. Marque\n * domains are owner-only by default; this reveals one. `domain` is the\n * at.marque.domain rkey (the domain name itself).\n */\nexport function revealMarqueDomain(\n config: SifaApiConfig,\n domain: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(\n config,\n `/api/profile/marque-domains/${encodeURIComponent(domain)}/reveal`,\n 'POST',\n options,\n );\n}\n\n/** Make a previously-revealed Marque domain owner-only again. */\nexport function unrevealMarqueDomain(\n config: SifaApiConfig,\n domain: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(\n config,\n `/api/profile/marque-domains/${encodeURIComponent(domain)}/reveal`,\n 'DELETE',\n options,\n );\n}\n"],"mappings":";AAAA,SAAS,gBAA4E;AAO9E,SAAS,mBACd,QACA,QACA,UAA2B,CAAC,GACN;AACtB,SAAO;AAAA,IACL;AAAA,IACA,+BAA+B,mBAAmB,MAAM,CAAC;AAAA,IACzD;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,qBACd,QACA,QACA,UAA2B,CAAC,GACN;AACtB,SAAO;AAAA,IACL;AAAA,IACA,+BAA+B,mBAAmB,MAAM,CAAC;AAAA,IACzD;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,36 @@
1
+ // src/query/fetchers/network-map.ts
2
+ import { apiFetch, apiFetchOrNull } from "../client.js";
3
+ function isNetworkMapResponse(value) {
4
+ return "graph" in value;
5
+ }
6
+ async function initiateNetworkMapGeneration(config, options = {}) {
7
+ return apiFetch(config, "/api/network-map/generate", {
8
+ method: "POST",
9
+ credentials: "include",
10
+ ...options
11
+ });
12
+ }
13
+ async function checkNetworkMapJobStatus(config, jobId, options = {}) {
14
+ return apiFetch(
15
+ config,
16
+ `/api/network-map/status/${encodeURIComponent(jobId)}`,
17
+ {
18
+ credentials: "include",
19
+ ...options
20
+ }
21
+ );
22
+ }
23
+ async function fetchNetworkMap(config, options = {}) {
24
+ return apiFetchOrNull(config, "/api/network-map", {
25
+ credentials: "include",
26
+ cache: "no-store",
27
+ ...options
28
+ });
29
+ }
30
+ export {
31
+ checkNetworkMapJobStatus,
32
+ fetchNetworkMap,
33
+ initiateNetworkMapGeneration,
34
+ isNetworkMapResponse
35
+ };
36
+ //# sourceMappingURL=network-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/network-map.ts"],"sourcesContent":["import { apiFetch, apiFetchOrNull, type ApiFetchOptions, type SifaApiConfig } from '../client.js';\n\n/** A node in the personal network graph. */\nexport interface NetworkMapNode {\n did: string;\n handle: string;\n displayName: string;\n avatar: string | null;\n /** Number of edges this node participates in within the rendered graph. */\n degree: number;\n /** Phase 2: community detection cluster id. */\n cluster?: number;\n /** Phase 2: pre-computed layout coordinates. */\n x?: number;\n y?: number;\n}\n\n/** A directed edge in the personal network graph. */\nexport interface NetworkMapEdge {\n source: string;\n target: string;\n mutual: boolean;\n /** Networks this edge was observed in, e.g. `['sifa', 'bluesky']`. */\n sources: string[];\n}\n\n/** The graph payload itself, decoupled from response metadata. */\nexport interface NetworkMapGraphData {\n nodes: NetworkMapNode[];\n edges: NetworkMapEdge[];\n /** Phase 2: cluster metadata for legend rendering. */\n clusters?: Array<{ id: number; label: string; color: string }>;\n}\n\n/** Cached graph response. */\nexport interface NetworkMapResponse {\n generatedAt: string;\n expiresAt: string;\n graph: NetworkMapGraphData;\n stats: {\n totalNodes: number;\n totalEdges: number;\n mutualCount: number;\n sources: Record<string, number>;\n };\n}\n\n/** Async job tracking generation progress. */\nexport interface NetworkMapGenerationJob {\n jobId: string;\n did: string;\n status: 'pending' | 'complete' | 'failed';\n /** 0..100 */\n progress: number;\n createdAt: string;\n completedAt?: string;\n error?: string;\n /**\n * Queue position when the job is still pending and not yet picked up\n * by the worker. 0 = next to run. Absent for in-flight or terminal\n * jobs (and for any backend that doesn't yet report position).\n */\n position?: number;\n /**\n * Estimated remaining seconds, derived server-side from the median\n * historical duration for the user's follow-count bucket multiplied\n * by `position + 1`. Absent when no historical data exists yet.\n */\n etaSeconds?: number;\n}\n\n/** Returned by `initiateNetworkMapGeneration` when a new job was started or one was already running. */\nexport interface NetworkMapPendingJob {\n jobId: string;\n status: 'pending' | 'cached';\n}\n\n/** Discriminate the union returned by `initiateNetworkMapGeneration`. */\nexport function isNetworkMapResponse(\n value: NetworkMapPendingJob | NetworkMapResponse,\n): value is NetworkMapResponse {\n return 'graph' in value;\n}\n\n/**\n * Kick off a personal network-map computation. The backend returns the\n * cached map immediately when fresh, otherwise it returns a job id that\n * the caller polls via `checkNetworkMapJobStatus`.\n */\nexport async function initiateNetworkMapGeneration(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<NetworkMapPendingJob | NetworkMapResponse> {\n return apiFetch<NetworkMapPendingJob | NetworkMapResponse>(config, '/api/network-map/generate', {\n method: 'POST',\n credentials: 'include',\n ...options,\n });\n}\n\n/**\n * Poll the status of an in-flight generation job. Throws on 404 (unknown\n * or expired job) — callers may want to treat that as terminal failure.\n */\nexport async function checkNetworkMapJobStatus(\n config: SifaApiConfig,\n jobId: string,\n options: ApiFetchOptions = {},\n): Promise<NetworkMapGenerationJob> {\n return apiFetch<NetworkMapGenerationJob>(\n config,\n `/api/network-map/status/${encodeURIComponent(jobId)}`,\n {\n credentials: 'include',\n ...options,\n },\n );\n}\n\n/**\n * Fetch the most recent cached network map for the authenticated user.\n * Returns `null` when no map has ever been generated (404).\n */\nexport async function fetchNetworkMap(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<NetworkMapResponse | null> {\n return apiFetchOrNull<NetworkMapResponse>(config, '/api/network-map', {\n credentials: 'include',\n cache: 'no-store',\n ...options,\n });\n}\n"],"mappings":";AAAA,SAAS,UAAU,sBAAgE;AA8E5E,SAAS,qBACd,OAC6B;AAC7B,SAAO,WAAW;AACpB;AAOA,eAAsB,6BACpB,QACA,UAA2B,CAAC,GACwB;AACpD,SAAO,SAAoD,QAAQ,6BAA6B;AAAA,IAC9F,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,GAAG;AAAA,EACL,CAAC;AACH;AAMA,eAAsB,yBACpB,QACA,OACA,UAA2B,CAAC,GACM;AAClC,SAAO;AAAA,IACL;AAAA,IACA,2BAA2B,mBAAmB,KAAK,CAAC;AAAA,IACpD;AAAA,MACE,aAAa;AAAA,MACb,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAMA,eAAsB,gBACpB,QACA,UAA2B,CAAC,GACQ;AACpC,SAAO,eAAmC,QAAQ,oBAAoB;AAAA,IACpE,aAAa;AAAA,IACb,OAAO;AAAA,IACP,GAAG;AAAA,EACL,CAAC;AACH;","names":[]}
@@ -0,0 +1,48 @@
1
+ // src/query/fetchers/org.ts
2
+ import { apiWrite } from "../client.js";
3
+ function submitOrgClaim(config, body, options = {}) {
4
+ return apiWrite(config, "/api/org/claim", "POST", { body, ...options });
5
+ }
6
+ function updateOrgProfile(config, body, options = {}) {
7
+ return apiWrite(config, "/api/org/profile", "PUT", {
8
+ body,
9
+ ...options
10
+ });
11
+ }
12
+ function requestOrgDomainChallenge(config, body, options = {}) {
13
+ return apiWrite(config, "/api/org/domains/challenge", "POST", {
14
+ body,
15
+ ...options
16
+ });
17
+ }
18
+ function verifyOrgDomain(config, body, options = {}) {
19
+ return apiWrite(config, "/api/org/domains/verify", "POST", {
20
+ body,
21
+ ...options
22
+ });
23
+ }
24
+ function addOrgNotificationEmail(config, body, options = {}) {
25
+ return apiWrite(
26
+ config,
27
+ "/api/org/notification-emails",
28
+ "POST",
29
+ { body, ...options }
30
+ );
31
+ }
32
+ function removeOrgNotificationEmail(config, body, options = {}) {
33
+ return apiWrite(
34
+ config,
35
+ "/api/org/notification-emails",
36
+ "DELETE",
37
+ { body, ...options }
38
+ );
39
+ }
40
+ export {
41
+ addOrgNotificationEmail,
42
+ removeOrgNotificationEmail,
43
+ requestOrgDomainChallenge,
44
+ submitOrgClaim,
45
+ updateOrgProfile,
46
+ verifyOrgDomain
47
+ };
48
+ //# sourceMappingURL=org.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/org.ts"],"sourcesContent":["import { apiWrite, type ApiFetchOptions, type SifaApiConfig, type WriteResult } from '../client.js';\nimport type { OrgClaimRequestInput } from '../../schemas/write/org-claim.js';\nimport type {\n OrgDomainChallengeRequestInput,\n OrgDomainVerifyRequestInput,\n OrgNotificationEmailRequestInput,\n OrgProfileUpdateRequestInput,\n} from '../../schemas/write/org-settings.js';\n\n/** How a single entity binding was resolved during a claim. */\nexport interface OrgClaimBinding {\n entityId: number;\n entityRef: string;\n validatedBy: string | null;\n status: 'active' | 'pending';\n dissolved: boolean;\n}\n\n/** The public org-profile echo returned by claim / update endpoints (no `contact`). */\nexport interface OrgProfileEcho {\n name: string;\n description: string | null;\n website: string | null;\n entityRefs: string[];\n}\n\n/** Response body of `POST /api/org/claim`. */\nexport interface OrgClaimResult {\n orgDid: string;\n status: 'active' | 'review';\n bindings: OrgClaimBinding[];\n orgProfile: OrgProfileEcho;\n}\n\n/** Response body of `PUT /api/org/profile`. */\nexport interface OrgProfileUpdateResult {\n ok: boolean;\n orgProfile: OrgProfileEcho;\n}\n\n/** Response body of `POST /api/org/domains/challenge`. */\nexport interface OrgDomainChallengeResult {\n domain: string;\n txtRecordName: string;\n txtRecordValue: string;\n}\n\n/** Response body of `POST /api/org/domains/verify` (happy path). */\nexport interface OrgDomainVerifyResult {\n status: 'verified' | 'pending';\n domain: string;\n}\n\n/** Response body of `POST /api/org/notification-emails`. */\nexport interface OrgNotificationEmailAddResult {\n ok: boolean;\n status: string;\n}\n\n/** Response body of `DELETE /api/org/notification-emails`. */\nexport interface OrgNotificationEmailRemoveResult {\n ok: boolean;\n removed: number;\n}\n\n/**\n * Finalize an org profile claim (`POST /api/org/claim`). Auth-gated (org-claim\n * JIT scope) and floor-checked server-side. Never throws -- returns the\n * structured {@link OrgClaimResult} folded into a {@link WriteResult} on success,\n * or `{ success: false, error, pdsHost? }` on failure.\n */\nexport function submitOrgClaim(\n config: SifaApiConfig,\n body: OrgClaimRequestInput,\n options: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult & Partial<OrgClaimResult>> {\n return apiWrite<Partial<OrgClaimResult>>(config, '/api/org/claim', 'POST', { body, ...options });\n}\n\n/**\n * Edit the org record (`PUT /api/org/profile`). Fresh-from-body server-side PUT\n * (a cleared optional field is dropped, no spread-merge). Never throws.\n */\nexport function updateOrgProfile(\n config: SifaApiConfig,\n body: OrgProfileUpdateRequestInput,\n options: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult & Partial<OrgProfileUpdateResult>> {\n return apiWrite<Partial<OrgProfileUpdateResult>>(config, '/api/org/profile', 'PUT', {\n body,\n ...options,\n });\n}\n\n/**\n * Issue a one-time DNS TXT domain challenge (`POST /api/org/domains/challenge`).\n * Returns the TXT record name + value the org must publish. Never throws.\n */\nexport function requestOrgDomainChallenge(\n config: SifaApiConfig,\n body: OrgDomainChallengeRequestInput,\n options: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult & Partial<OrgDomainChallengeResult>> {\n return apiWrite<Partial<OrgDomainChallengeResult>>(config, '/api/org/domains/challenge', 'POST', {\n body,\n ...options,\n });\n}\n\n/**\n * Verify a DNS TXT domain challenge (`POST /api/org/domains/verify`). On success\n * `status` is `verified` or `pending`. Expired / confusable / not-found map to\n * non-2xx server responses and surface as `{ success: false, error }`. Never\n * throws.\n */\nexport function verifyOrgDomain(\n config: SifaApiConfig,\n body: OrgDomainVerifyRequestInput,\n options: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult & Partial<OrgDomainVerifyResult>> {\n return apiWrite<Partial<OrgDomainVerifyResult>>(config, '/api/org/domains/verify', 'POST', {\n body,\n ...options,\n });\n}\n\n/**\n * Add an org notification email (`POST /api/org/notification-emails`). The\n * address must use a domain the org controls (checked server-side). An\n * individual verification email is enqueued through the (dormant) sending\n * pipeline. Never throws.\n */\nexport function addOrgNotificationEmail(\n config: SifaApiConfig,\n body: OrgNotificationEmailRequestInput,\n options: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult & Partial<OrgNotificationEmailAddResult>> {\n return apiWrite<Partial<OrgNotificationEmailAddResult>>(\n config,\n '/api/org/notification-emails',\n 'POST',\n { body, ...options },\n );\n}\n\n/**\n * Remove an org notification email (`DELETE /api/org/notification-emails`).\n * Never throws.\n */\nexport function removeOrgNotificationEmail(\n config: SifaApiConfig,\n body: OrgNotificationEmailRequestInput,\n options: Omit<ApiFetchOptions, 'method' | 'body'> = {},\n): Promise<WriteResult & Partial<OrgNotificationEmailRemoveResult>> {\n return apiWrite<Partial<OrgNotificationEmailRemoveResult>>(\n config,\n '/api/org/notification-emails',\n 'DELETE',\n { body, ...options },\n );\n}\n"],"mappings":";AAAA,SAAS,gBAA4E;AAuE9E,SAAS,eACd,QACA,MACA,UAAoD,CAAC,GACL;AAChD,SAAO,SAAkC,QAAQ,kBAAkB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;AACjG;AAMO,SAAS,iBACd,QACA,MACA,UAAoD,CAAC,GACG;AACxD,SAAO,SAA0C,QAAQ,oBAAoB,OAAO;AAAA,IAClF;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;AAMO,SAAS,0BACd,QACA,MACA,UAAoD,CAAC,GACK;AAC1D,SAAO,SAA4C,QAAQ,8BAA8B,QAAQ;AAAA,IAC/F;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;AAQO,SAAS,gBACd,QACA,MACA,UAAoD,CAAC,GACE;AACvD,SAAO,SAAyC,QAAQ,2BAA2B,QAAQ;AAAA,IACzF;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;AAQO,SAAS,wBACd,QACA,MACA,UAAoD,CAAC,GACU;AAC/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,MAAM,GAAG,QAAQ;AAAA,EACrB;AACF;AAMO,SAAS,2BACd,QACA,MACA,UAAoD,CAAC,GACa;AAClE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,MAAM,GAAG,QAAQ;AAAA,EACrB;AACF;","names":[]}
@@ -0,0 +1,77 @@
1
+ // src/query/fetchers/positions.ts
2
+ import {
3
+ apiWrite,
4
+ apiWriteCreate
5
+ } from "../client.js";
6
+ function createPosition(config, data, options = {}) {
7
+ return apiWriteCreate(config, "/api/profile/position", data, options);
8
+ }
9
+ function updatePosition(config, rkey, data, options = {}) {
10
+ return apiWrite(config, `/api/profile/position/${encodeURIComponent(rkey)}`, "PUT", {
11
+ body: data,
12
+ ...options
13
+ });
14
+ }
15
+ function deletePosition(config, rkey, options = {}) {
16
+ return apiWrite(config, `/api/profile/position/${encodeURIComponent(rkey)}`, "DELETE", options);
17
+ }
18
+ function setPositionPrimary(config, rkey, options = {}) {
19
+ return apiWrite(
20
+ config,
21
+ `/api/profile/position/${encodeURIComponent(rkey)}/primary`,
22
+ "PUT",
23
+ options
24
+ );
25
+ }
26
+ function unsetPositionPrimary(config, rkey, options = {}) {
27
+ return apiWrite(
28
+ config,
29
+ `/api/profile/position/${encodeURIComponent(rkey)}/primary`,
30
+ "DELETE",
31
+ options
32
+ );
33
+ }
34
+ function buildPositionPayload(position, skills) {
35
+ return {
36
+ company: position.company,
37
+ title: position.title,
38
+ description: position.description,
39
+ startedAt: position.startedAt,
40
+ endedAt: position.endedAt,
41
+ location: position.location ?? void 0,
42
+ // Carry the form-controlled optional fields the AppView merge would
43
+ // otherwise clear when absent from the PUT body. Omitting them here made
44
+ // every link/unlink strip employmentType, workplaceType, and entityRef
45
+ // off the position (id.sifa.profile.position#skills round-trip).
46
+ employmentType: position.employmentType,
47
+ workplaceType: position.workplaceType,
48
+ entityRef: position.entityRef,
49
+ skills
50
+ };
51
+ }
52
+ function linkSkillToPosition(config, position, skillRef, options = {}) {
53
+ const currentSkills = position.skills ?? [];
54
+ if (currentSkills.some((s) => s.uri === skillRef.uri)) {
55
+ return Promise.resolve({ success: true });
56
+ }
57
+ return updatePosition(
58
+ config,
59
+ position.rkey,
60
+ buildPositionPayload(position, [...currentSkills, skillRef]),
61
+ options
62
+ );
63
+ }
64
+ function unlinkSkillFromPosition(config, position, skillRef, options = {}) {
65
+ const remaining = (position.skills ?? []).filter((s) => s.uri !== skillRef.uri);
66
+ return updatePosition(config, position.rkey, buildPositionPayload(position, remaining), options);
67
+ }
68
+ export {
69
+ createPosition,
70
+ deletePosition,
71
+ linkSkillToPosition,
72
+ setPositionPrimary,
73
+ unlinkSkillFromPosition,
74
+ unsetPositionPrimary,
75
+ updatePosition
76
+ };
77
+ //# sourceMappingURL=positions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/positions.ts"],"sourcesContent":["import type { ProfilePosition, SkillRef } from '../../types/index.js';\nimport {\n apiWrite,\n apiWriteCreate,\n type ApiFetchOptions,\n type CreateResult,\n type SifaApiConfig,\n type WriteResult,\n} from '../client.js';\n\nexport type { CreateResult, WriteResult } from '../client.js';\n\n/**\n * Create a new `id.sifa.profile.position` record on the authenticated\n * user's PDS. The AppView signs and writes via the user's OAuth session.\n *\n * `data` should be a lexicon-shaped position record (without `createdAt`\n * or `rkey`; the AppView fills both). Validate with\n * `ProfilePositionRecordSchema.omit({ createdAt: true })` before calling\n * if you want client-side guarantees.\n *\n * Never throws -- inspect `result.success` and use `result.error` /\n * `result.pdsHost` for UI messaging.\n */\nexport function createPosition(\n config: SifaApiConfig,\n data: Record<string, unknown>,\n options: ApiFetchOptions = {},\n): Promise<CreateResult> {\n return apiWriteCreate(config, '/api/profile/position', data, options);\n}\n\n/** Update an existing position by `rkey`. */\nexport function updatePosition(\n config: SifaApiConfig,\n rkey: string,\n data: Record<string, unknown>,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, `/api/profile/position/${encodeURIComponent(rkey)}`, 'PUT', {\n body: data,\n ...options,\n });\n}\n\n/** Delete a position by `rkey`. */\nexport function deletePosition(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, `/api/profile/position/${encodeURIComponent(rkey)}`, 'DELETE', options);\n}\n\n/** Mark a position as the user's primary (current) role. */\nexport function setPositionPrimary(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(\n config,\n `/api/profile/position/${encodeURIComponent(rkey)}/primary`,\n 'PUT',\n options,\n );\n}\n\n/** Clear the \"primary\" flag on a position. */\nexport function unsetPositionPrimary(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(\n config,\n `/api/profile/position/${encodeURIComponent(rkey)}/primary`,\n 'DELETE',\n options,\n );\n}\n\n/**\n * Build the PUT-body for a position update. Strips `null` `location`\n * (so JSON.stringify drops it) and includes the provided `skills` list.\n */\nfunction buildPositionPayload(\n position: ProfilePosition,\n skills: SkillRef[],\n): Record<string, unknown> {\n return {\n company: position.company,\n title: position.title,\n description: position.description,\n startedAt: position.startedAt,\n endedAt: position.endedAt,\n location: position.location ?? undefined,\n // Carry the form-controlled optional fields the AppView merge would\n // otherwise clear when absent from the PUT body. Omitting them here made\n // every link/unlink strip employmentType, workplaceType, and entityRef\n // off the position (id.sifa.profile.position#skills round-trip).\n employmentType: position.employmentType,\n workplaceType: position.workplaceType,\n entityRef: position.entityRef,\n skills,\n };\n}\n\n/**\n * Add a skill link to a position. Idempotent: if the skill is already\n * linked, resolves to `{ success: true }` without a network call.\n *\n * Implementation note: the AppView only exposes whole-record PUTs, so\n * this helper rebuilds the position body with the new skills list.\n */\nexport function linkSkillToPosition(\n config: SifaApiConfig,\n position: ProfilePosition,\n skillRef: SkillRef,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n const currentSkills = position.skills ?? [];\n if (currentSkills.some((s) => s.uri === skillRef.uri)) {\n return Promise.resolve({ success: true });\n }\n return updatePosition(\n config,\n position.rkey,\n buildPositionPayload(position, [...currentSkills, skillRef]),\n options,\n );\n}\n\n/** Remove a skill link from a position. */\nexport function unlinkSkillFromPosition(\n config: SifaApiConfig,\n position: ProfilePosition,\n skillRef: SkillRef,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n const remaining = (position.skills ?? []).filter((s) => s.uri !== skillRef.uri);\n return updatePosition(config, position.rkey, buildPositionPayload(position, remaining), options);\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AAgBA,SAAS,eACd,QACA,MACA,UAA2B,CAAC,GACL;AACvB,SAAO,eAAe,QAAQ,yBAAyB,MAAM,OAAO;AACtE;AAGO,SAAS,eACd,QACA,MACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,yBAAyB,mBAAmB,IAAI,CAAC,IAAI,OAAO;AAAA,IAClF,MAAM;AAAA,IACN,GAAG;AAAA,EACL,CAAC;AACH;AAGO,SAAS,eACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,yBAAyB,mBAAmB,IAAI,CAAC,IAAI,UAAU,OAAO;AAChG;AAGO,SAAS,mBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,mBAAmB,IAAI,CAAC;AAAA,IACjD;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,qBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,mBAAmB,IAAI,CAAC;AAAA,IACjD;AAAA,IACA;AAAA,EACF;AACF;AAMA,SAAS,qBACP,UACA,QACyB;AACzB,SAAO;AAAA,IACL,SAAS,SAAS;AAAA,IAClB,OAAO,SAAS;AAAA,IAChB,aAAa,SAAS;AAAA,IACtB,WAAW,SAAS;AAAA,IACpB,SAAS,SAAS;AAAA,IAClB,UAAU,SAAS,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAK/B,gBAAgB,SAAS;AAAA,IACzB,eAAe,SAAS;AAAA,IACxB,WAAW,SAAS;AAAA,IACpB;AAAA,EACF;AACF;AASO,SAAS,oBACd,QACA,UACA,UACA,UAA2B,CAAC,GACN;AACtB,QAAM,gBAAgB,SAAS,UAAU,CAAC;AAC1C,MAAI,cAAc,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS,GAAG,GAAG;AACrD,WAAO,QAAQ,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1C;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT,qBAAqB,UAAU,CAAC,GAAG,eAAe,QAAQ,CAAC;AAAA,IAC3D;AAAA,EACF;AACF;AAGO,SAAS,wBACd,QACA,UACA,UACA,UAA2B,CAAC,GACN;AACtB,QAAM,aAAa,SAAS,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,SAAS,GAAG;AAC9E,SAAO,eAAe,QAAQ,SAAS,MAAM,qBAAqB,UAAU,SAAS,GAAG,OAAO;AACjG;","names":[]}
@@ -0,0 +1,45 @@
1
+ // src/query/fetchers/profile-completeness.ts
2
+ import { apiFetch } from "../client.js";
3
+ var PROFILE_COMPLETENESS_SIGNALS = [
4
+ "headline",
5
+ "about",
6
+ "position",
7
+ "education",
8
+ "skill",
9
+ "certification"
10
+ ];
11
+ async function fetchProfileCompleteness(config, options = {}) {
12
+ const { cookieHeader, ...rest } = options;
13
+ const headers = { ...rest.headers ?? {} };
14
+ if (cookieHeader) headers.cookie = cookieHeader;
15
+ const empty = {
16
+ complete: true,
17
+ score: PROFILE_COMPLETENESS_SIGNALS.length,
18
+ total: PROFILE_COMPLETENESS_SIGNALS.length,
19
+ missing: []
20
+ };
21
+ try {
22
+ const data = await apiFetch(config, "/api/profile/completeness", {
23
+ cache: "no-store",
24
+ credentials: "include",
25
+ timeoutMs: 5e3,
26
+ ...rest,
27
+ headers
28
+ });
29
+ if (!data) return empty;
30
+ const missing = Array.isArray(data.missing) ? data.missing : [];
31
+ return {
32
+ complete: data.complete ?? missing.length === 0,
33
+ score: data.score ?? PROFILE_COMPLETENESS_SIGNALS.length - missing.length,
34
+ total: data.total ?? PROFILE_COMPLETENESS_SIGNALS.length,
35
+ missing
36
+ };
37
+ } catch {
38
+ return empty;
39
+ }
40
+ }
41
+ export {
42
+ PROFILE_COMPLETENESS_SIGNALS,
43
+ fetchProfileCompleteness
44
+ };
45
+ //# sourceMappingURL=profile-completeness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/profile-completeness.ts"],"sourcesContent":["import { apiFetch, type ApiFetchOptions, type SifaApiConfig } from '../client.js';\n\n/**\n * The binary profile-completeness signals the AppView tracks. Each maps to a\n * concrete \"add this to your profile\" step in the unified Inbox checklist.\n */\nexport const PROFILE_COMPLETENESS_SIGNALS = [\n 'headline',\n 'about',\n 'position',\n 'education',\n 'skill',\n 'certification',\n] as const;\n\nexport type ProfileCompletenessSignal = (typeof PROFILE_COMPLETENESS_SIGNALS)[number];\n\n/**\n * Completeness of the signed-in user's own profile: which of the tracked signals\n * are still missing. `missing.length === 0` means complete.\n */\nexport interface ProfileCompleteness {\n /** True when no tracked signal is missing. */\n complete: boolean;\n /** Signals present (of {@link PROFILE_COMPLETENESS_SIGNALS}). */\n score: number;\n /** Total tracked signals. */\n total: number;\n /** The signals still missing, for the checklist. */\n missing: ProfileCompletenessSignal[];\n}\n\nexport interface FetchProfileCompletenessOptions extends ApiFetchOptions {\n /**\n * Pass the caller's `Cookie` header on Next.js RSC server-side calls.\n * `credentials: 'include'` does NOT propagate browser cookies in RSC,\n * so authenticated server fetches must forward the header explicitly.\n */\n cookieHeader?: string;\n}\n\n/**\n * Completeness of the signed-in user's own profile, an \"open task\" surfaced in\n * the unified Inbox as a checklist. Requires credentials -- the AppView reads\n * the owner from the session. Returns a complete-looking result on any failure\n * (no missing signals) so a broken call degrades to \"nothing to do\" rather than\n * nagging the user with a phantom checklist.\n */\nexport async function fetchProfileCompleteness(\n config: SifaApiConfig,\n options: FetchProfileCompletenessOptions = {},\n): Promise<ProfileCompleteness> {\n const { cookieHeader, ...rest } = options;\n const headers: Record<string, string> = { ...(rest.headers ?? {}) };\n if (cookieHeader) headers.cookie = cookieHeader;\n\n const empty: ProfileCompleteness = {\n complete: true,\n score: PROFILE_COMPLETENESS_SIGNALS.length,\n total: PROFILE_COMPLETENESS_SIGNALS.length,\n missing: [],\n };\n\n try {\n const data = await apiFetch<ProfileCompleteness>(config, '/api/profile/completeness', {\n cache: 'no-store',\n credentials: 'include',\n timeoutMs: 5000,\n ...rest,\n headers,\n });\n if (!data) return empty;\n const missing = Array.isArray(data.missing) ? data.missing : [];\n return {\n complete: data.complete ?? missing.length === 0,\n score: data.score ?? PROFILE_COMPLETENESS_SIGNALS.length - missing.length,\n total: data.total ?? PROFILE_COMPLETENESS_SIGNALS.length,\n missing,\n };\n } catch {\n return empty;\n }\n}\n"],"mappings":";AAAA,SAAS,gBAA0D;AAM5D,IAAM,+BAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAmCA,eAAsB,yBACpB,QACA,UAA2C,CAAC,GACd;AAC9B,QAAM,EAAE,cAAc,GAAG,KAAK,IAAI;AAClC,QAAM,UAAkC,EAAE,GAAI,KAAK,WAAW,CAAC,EAAG;AAClE,MAAI,aAAc,SAAQ,SAAS;AAEnC,QAAM,QAA6B;AAAA,IACjC,UAAU;AAAA,IACV,OAAO,6BAA6B;AAAA,IACpC,OAAO,6BAA6B;AAAA,IACpC,SAAS,CAAC;AAAA,EACZ;AAEA,MAAI;AACF,UAAM,OAAO,MAAM,SAA8B,QAAQ,6BAA6B;AAAA,MACpF,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AACD,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,UAAU,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC;AAC9D,WAAO;AAAA,MACL,UAAU,KAAK,YAAY,QAAQ,WAAW;AAAA,MAC9C,OAAO,KAAK,SAAS,6BAA6B,SAAS,QAAQ;AAAA,MACnE,OAAO,KAAK,SAAS,6BAA6B;AAAA,MAClD;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,36 @@
1
+ // src/query/fetchers/profile-items-hide.ts
2
+ import { apiWrite } from "../client.js";
3
+ var HIDDEN_ITEM_TYPES = [
4
+ "position",
5
+ "education",
6
+ "certification",
7
+ "project",
8
+ "volunteering",
9
+ "publication",
10
+ "course",
11
+ "honor",
12
+ "language",
13
+ "externalAccount"
14
+ ];
15
+ var HIDDEN_ITEM_SOURCES = ["pds", "standard", "orcid"];
16
+ function hideProfileItem(config, input, options = {}) {
17
+ return apiWrite(config, "/api/profile/items/hide", "POST", { ...options, body: input });
18
+ }
19
+ function unhideProfileItem(config, input, options = {}) {
20
+ return apiWrite(config, "/api/profile/items/hide", "DELETE", { ...options, body: input });
21
+ }
22
+ function bulkHideProfileItems(config, input, options = {}) {
23
+ return apiWrite(config, "/api/profile/items/bulk-hide", "POST", { ...options, body: input });
24
+ }
25
+ function bulkUnhideProfileItems(config, input, options = {}) {
26
+ return apiWrite(config, "/api/profile/items/bulk-hide", "DELETE", { ...options, body: input });
27
+ }
28
+ export {
29
+ HIDDEN_ITEM_SOURCES,
30
+ HIDDEN_ITEM_TYPES,
31
+ bulkHideProfileItems,
32
+ bulkUnhideProfileItems,
33
+ hideProfileItem,
34
+ unhideProfileItem
35
+ };
36
+ //# sourceMappingURL=profile-items-hide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/profile-items-hide.ts"],"sourcesContent":["import { apiWrite, type ApiFetchOptions, type SifaApiConfig, type WriteResult } from '../client.js';\n\n/** Item types that can be hidden on the authenticated user's profile. */\nexport const HIDDEN_ITEM_TYPES = [\n 'position',\n 'education',\n 'certification',\n 'project',\n 'volunteering',\n 'publication',\n 'course',\n 'honor',\n 'language',\n 'externalAccount',\n] as const;\nexport type HiddenItemType = (typeof HIDDEN_ITEM_TYPES)[number];\n\n/** Source from which an item originates; disambiguates `item_id`. */\nexport const HIDDEN_ITEM_SOURCES = ['pds', 'standard', 'orcid'] as const;\nexport type HiddenItemSource = (typeof HIDDEN_ITEM_SOURCES)[number];\n\nexport interface HideProfileItemInput {\n itemType: HiddenItemType;\n source: HiddenItemSource;\n /** rkey for `pds`, AT-URI for `standard`, ORCID putCode as text for `orcid`. */\n itemId: string;\n}\n\nexport interface BulkHideProfileItemInput {\n itemType: HiddenItemType;\n source: HiddenItemSource;\n itemIds: string[];\n}\n\n/**\n * Hide one profile item. The underlying record stays on the user's PDS;\n * only its display on sifa.id is suppressed.\n */\nexport function hideProfileItem(\n config: SifaApiConfig,\n input: HideProfileItemInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/items/hide', 'POST', { ...options, body: input });\n}\n\n/** Restore a previously-hidden profile item. */\nexport function unhideProfileItem(\n config: SifaApiConfig,\n input: HideProfileItemInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/items/hide', 'DELETE', { ...options, body: input });\n}\n\n/** Bulk-hide profile items sharing the same `itemType` + `source`. */\nexport function bulkHideProfileItems(\n config: SifaApiConfig,\n input: BulkHideProfileItemInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/items/bulk-hide', 'POST', { ...options, body: input });\n}\n\n/** Bulk-unhide profile items sharing the same `itemType` + `source`. */\nexport function bulkUnhideProfileItems(\n config: SifaApiConfig,\n input: BulkHideProfileItemInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/items/bulk-hide', 'DELETE', { ...options, body: input });\n}\n"],"mappings":";AAAA,SAAS,gBAA4E;AAG9E,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,sBAAsB,CAAC,OAAO,YAAY,OAAO;AAoBvD,SAAS,gBACd,QACA,OACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,2BAA2B,QAAQ,EAAE,GAAG,SAAS,MAAM,MAAM,CAAC;AACxF;AAGO,SAAS,kBACd,QACA,OACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,2BAA2B,UAAU,EAAE,GAAG,SAAS,MAAM,MAAM,CAAC;AAC1F;AAGO,SAAS,qBACd,QACA,OACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,gCAAgC,QAAQ,EAAE,GAAG,SAAS,MAAM,MAAM,CAAC;AAC7F;AAGO,SAAS,uBACd,QACA,OACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,gCAAgC,UAAU,EAAE,GAAG,SAAS,MAAM,MAAM,CAAC;AAC/F;","names":[]}
@@ -0,0 +1,23 @@
1
+ // src/query/fetchers/profile-locations.ts
2
+ import {
3
+ apiWrite,
4
+ apiWriteCreate
5
+ } from "../client.js";
6
+ function createProfileLocation(config, data, options = {}) {
7
+ return apiWriteCreate(config, "/api/profile/location", data, options);
8
+ }
9
+ function updateProfileLocation(config, rkey, data, options = {}) {
10
+ return apiWrite(config, `/api/profile/location/${encodeURIComponent(rkey)}`, "PUT", {
11
+ body: data,
12
+ ...options
13
+ });
14
+ }
15
+ function deleteProfileLocation(config, rkey, options = {}) {
16
+ return apiWrite(config, `/api/profile/location/${encodeURIComponent(rkey)}`, "DELETE", options);
17
+ }
18
+ export {
19
+ createProfileLocation,
20
+ deleteProfileLocation,
21
+ updateProfileLocation
22
+ };
23
+ //# sourceMappingURL=profile-locations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/profile-locations.ts"],"sourcesContent":["import {\n apiWrite,\n apiWriteCreate,\n type ApiFetchOptions,\n type CreateResult,\n type SifaApiConfig,\n type WriteResult,\n} from '../client.js';\n\n/**\n * Address payload accepted by `/api/profile/location` endpoints.\n *\n * Accepts both shapes during the community.lexicon.location.address\n * migration. Prefer `country` + `locality` (new) over `countryCode` +\n * `city` (legacy). The API's `locationSchema` is a Zod union that\n * accepts either pair.\n */\nexport interface ProfileLocationAddress {\n /** Legacy alias for `country` (alpha-2). */\n countryCode?: string;\n /** community.lexicon.location.address field -- prefer over `countryCode`. */\n country?: string;\n region?: string;\n /** Legacy alias for `locality`. */\n city?: string;\n /** community.lexicon.location.address field -- prefer over `city`. */\n locality?: string;\n}\n\n/** Body accepted by {@link createProfileLocation} / {@link updateProfileLocation}. */\nexport interface ProfileLocationInput {\n address: ProfileLocationAddress;\n type: string;\n label?: string;\n isPrimary?: boolean;\n}\n\n/** Create a new profile location entry. */\nexport function createProfileLocation(\n config: SifaApiConfig,\n data: ProfileLocationInput,\n options: ApiFetchOptions = {},\n): Promise<CreateResult> {\n return apiWriteCreate(config, '/api/profile/location', data, options);\n}\n\n/** Update an existing profile location by `rkey`. */\nexport function updateProfileLocation(\n config: SifaApiConfig,\n rkey: string,\n data: ProfileLocationInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, `/api/profile/location/${encodeURIComponent(rkey)}`, 'PUT', {\n body: data,\n ...options,\n });\n}\n\n/** Delete a profile location by `rkey`. */\nexport function deleteProfileLocation(\n config: SifaApiConfig,\n rkey: string,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, `/api/profile/location/${encodeURIComponent(rkey)}`, 'DELETE', options);\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAKK;AA+BA,SAAS,sBACd,QACA,MACA,UAA2B,CAAC,GACL;AACvB,SAAO,eAAe,QAAQ,yBAAyB,MAAM,OAAO;AACtE;AAGO,SAAS,sBACd,QACA,MACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,yBAAyB,mBAAmB,IAAI,CAAC,IAAI,OAAO;AAAA,IAClF,MAAM;AAAA,IACN,GAAG;AAAA,EACL,CAAC;AACH;AAGO,SAAS,sBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,yBAAyB,mBAAmB,IAAI,CAAC,IAAI,UAAU,OAAO;AAChG;","names":[]}
@@ -0,0 +1,82 @@
1
+ // src/query/fetchers/profile-mutations.ts
2
+ import { apiWrite } from "../client.js";
3
+ function updateProfileSelf(config, data, options = {}) {
4
+ return apiWrite(config, "/api/profile/self", "PUT", { body: data, ...options });
5
+ }
6
+ function updateProfileOverride(config, data, options = {}) {
7
+ return apiWrite(config, "/api/profile/override", "PUT", { body: data, ...options });
8
+ }
9
+ function refreshPds(config, options = {}) {
10
+ return apiWrite(
11
+ config,
12
+ "/api/profile/refresh-pds",
13
+ "POST",
14
+ options
15
+ );
16
+ }
17
+ async function uploadAvatar(config, file, options = {}) {
18
+ const fetchFn = config.fetch ?? globalThis.fetch;
19
+ const url = `${config.baseUrl}/api/profile/avatar`;
20
+ const formData = new FormData();
21
+ formData.append("file", file);
22
+ try {
23
+ const res = await fetchFn(url, {
24
+ method: "POST",
25
+ credentials: options.credentials ?? "include",
26
+ body: formData,
27
+ signal: options.signal ?? AbortSignal.timeout(options.timeoutMs ?? 3e4),
28
+ headers: options.headers
29
+ });
30
+ if (!res.ok) {
31
+ const errBody = await res.json().catch(() => ({}));
32
+ const msg = errBody.message ?? `Request failed (${res.status})`;
33
+ const pdsHost = errBody.pdsHost;
34
+ return { success: false, error: msg, ...pdsHost ? { pdsHost } : {} };
35
+ }
36
+ const data = await res.json();
37
+ return { success: true, url: data.url };
38
+ } catch {
39
+ return { success: false, error: "Network error" };
40
+ }
41
+ }
42
+ function deleteAvatarOverride(config, options = {}) {
43
+ return apiWrite(config, "/api/profile/avatar", "DELETE", options);
44
+ }
45
+ async function uploadNamePronunciationAudio(config, file, options = {}) {
46
+ const fetchFn = config.fetch ?? globalThis.fetch;
47
+ const url = `${config.baseUrl}/api/profile/pronunciation-audio`;
48
+ const formData = new FormData();
49
+ formData.append("file", file);
50
+ try {
51
+ const res = await fetchFn(url, {
52
+ method: "POST",
53
+ credentials: options.credentials ?? "include",
54
+ body: formData,
55
+ signal: options.signal ?? AbortSignal.timeout(options.timeoutMs ?? 3e4),
56
+ headers: options.headers
57
+ });
58
+ if (!res.ok) {
59
+ const errBody = await res.json().catch(() => ({}));
60
+ const msg = errBody.message ?? `Request failed (${res.status})`;
61
+ const pdsHost = errBody.pdsHost;
62
+ return { success: false, error: msg, ...pdsHost ? { pdsHost } : {} };
63
+ }
64
+ const data = await res.json();
65
+ return { success: true, url: data.url };
66
+ } catch {
67
+ return { success: false, error: "Network error" };
68
+ }
69
+ }
70
+ function deleteNamePronunciationAudio(config, options = {}) {
71
+ return apiWrite(config, "/api/profile/pronunciation-audio", "DELETE", options);
72
+ }
73
+ export {
74
+ deleteAvatarOverride,
75
+ deleteNamePronunciationAudio,
76
+ refreshPds,
77
+ updateProfileOverride,
78
+ updateProfileSelf,
79
+ uploadAvatar,
80
+ uploadNamePronunciationAudio
81
+ };
82
+ //# sourceMappingURL=profile-mutations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/profile-mutations.ts"],"sourcesContent":["import { apiWrite, type ApiFetchOptions, type SifaApiConfig, type WriteResult } from '../client.js';\n\n/** Industry/domain entry on the profile self record. */\nexport interface ProfileIndustryInput {\n industry: string;\n domain?: string;\n}\n\n/**\n * Location payload accepted by `updateProfileSelf`.\n *\n * Accepts both shapes during the community.lexicon.location.address\n * migration. Prefer `locality` (new) over `city` (legacy) when sending.\n * The API's locationSchema is a Zod union that resolves either input.\n */\nexport interface ProfileSelfLocation {\n country: string;\n countryCode?: string;\n region?: string;\n city?: string;\n locality?: string;\n}\n\n/** Body accepted by {@link updateProfileSelf}. */\nexport interface UpdateProfileSelfInput {\n headline?: string;\n about?: string;\n /** Schema.org Person.givenName from id.sifa.profile.self.givenName. */\n givenName?: string;\n /** Schema.org Person.familyName from id.sifa.profile.self.familyName. */\n familyName?: string;\n /** Free-form phonetic respelling of the name from id.sifa.profile.self.namePronunciation. */\n namePronunciation?: string;\n industries?: ProfileIndustryInput[];\n location?: ProfileSelfLocation;\n website?: string;\n openTo?: string[];\n preferredWorkplace?: string[];\n availableFromUtc?: number;\n availableToUtc?: number;\n}\n\n/** Update the authenticated user's `id.sifa.profile.self` record. */\nexport function updateProfileSelf(\n config: SifaApiConfig,\n data: UpdateProfileSelfInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/self', 'PUT', { body: data, ...options });\n}\n\n/** Body accepted by {@link updateProfileOverride}. */\nexport interface UpdateProfileOverrideInput {\n headline?: string | null;\n about?: string | null;\n displayName?: string | null;\n pronouns?: string | null;\n}\n\n/**\n * Override aggregated profile fields with sifa-specific values. `null`\n * clears the override and falls back to the upstream PDS value.\n */\nexport function updateProfileOverride(\n config: SifaApiConfig,\n data: UpdateProfileOverrideInput,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/override', 'PUT', { body: data, ...options });\n}\n\n/** Extended result for {@link refreshPds}. */\nexport interface RefreshPdsResult extends WriteResult {\n displayName?: string | null;\n avatar?: string | null;\n}\n\n/**\n * Re-pull the authenticated user's `app.bsky.actor.profile` from their\n * PDS. Returns the freshly resolved `displayName` and `avatar` on\n * success so the UI can update without a full profile refetch.\n */\nexport function refreshPds(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<RefreshPdsResult> {\n return apiWrite<{ displayName?: string | null; avatar?: string | null }>(\n config,\n '/api/profile/refresh-pds',\n 'POST',\n options,\n );\n}\n\n/** Extended result for {@link uploadAvatar}. */\nexport interface UploadAvatarResult extends WriteResult {\n /** Publicly accessible URL of the newly uploaded avatar. */\n url?: string;\n}\n\n/**\n * Upload a new avatar via `multipart/form-data`. Pass either a `File`\n * (browser) or any `Blob` (Expo, node). The SDK leaves `Content-Type`\n * unset so the runtime can set the multipart boundary automatically.\n *\n * Never throws -- inspect `result.success` and `result.url`.\n */\nexport async function uploadAvatar(\n config: SifaApiConfig,\n file: Blob,\n options: ApiFetchOptions = {},\n): Promise<UploadAvatarResult> {\n const fetchFn = config.fetch ?? globalThis.fetch;\n const url = `${config.baseUrl}/api/profile/avatar`;\n const formData = new FormData();\n formData.append('file', file);\n\n try {\n const res = await fetchFn(url, {\n method: 'POST',\n credentials: options.credentials ?? 'include',\n body: formData,\n signal: options.signal ?? AbortSignal.timeout(options.timeoutMs ?? 30_000),\n headers: options.headers,\n });\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({}))) as {\n message?: string;\n pdsHost?: string;\n };\n const msg = errBody.message ?? `Request failed (${res.status})`;\n const pdsHost = errBody.pdsHost;\n return { success: false, error: msg, ...(pdsHost ? { pdsHost } : {}) };\n }\n const data = (await res.json()) as { url: string };\n return { success: true, url: data.url };\n } catch {\n return { success: false, error: 'Network error' };\n }\n}\n\n/** Delete the authenticated user's avatar override (revert to PDS avatar). */\nexport function deleteAvatarOverride(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/avatar', 'DELETE', options);\n}\n\n/** Extended result for {@link uploadNamePronunciationAudio}. */\nexport interface UploadPronunciationAudioResult extends WriteResult {\n /** Publicly accessible URL of the newly uploaded audio clip. */\n url?: string;\n}\n\n/**\n * Upload a name-pronunciation audio clip via `multipart/form-data`. Pass a\n * `File` (browser) or any `Blob` (Expo, node). The SDK leaves `Content-Type`\n * unset so the runtime sets the multipart boundary automatically.\n *\n * Never throws -- inspect `result.success` and `result.url`.\n */\nexport async function uploadNamePronunciationAudio(\n config: SifaApiConfig,\n file: Blob,\n options: ApiFetchOptions = {},\n): Promise<UploadPronunciationAudioResult> {\n const fetchFn = config.fetch ?? globalThis.fetch;\n const url = `${config.baseUrl}/api/profile/pronunciation-audio`;\n const formData = new FormData();\n formData.append('file', file);\n\n try {\n const res = await fetchFn(url, {\n method: 'POST',\n credentials: options.credentials ?? 'include',\n body: formData,\n signal: options.signal ?? AbortSignal.timeout(options.timeoutMs ?? 30_000),\n headers: options.headers,\n });\n if (!res.ok) {\n const errBody = (await res.json().catch(() => ({}))) as {\n message?: string;\n pdsHost?: string;\n };\n const msg = errBody.message ?? `Request failed (${res.status})`;\n const pdsHost = errBody.pdsHost;\n return { success: false, error: msg, ...(pdsHost ? { pdsHost } : {}) };\n }\n const data = (await res.json()) as { url: string };\n return { success: true, url: data.url };\n } catch {\n return { success: false, error: 'Network error' };\n }\n}\n\n/** Delete the name-pronunciation audio clip from the user's profile. */\nexport function deleteNamePronunciationAudio(\n config: SifaApiConfig,\n options: ApiFetchOptions = {},\n): Promise<WriteResult> {\n return apiWrite(config, '/api/profile/pronunciation-audio', 'DELETE', options);\n}\n"],"mappings":";AAAA,SAAS,gBAA4E;AA2C9E,SAAS,kBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,qBAAqB,OAAO,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC;AAChF;AAcO,SAAS,sBACd,QACA,MACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,yBAAyB,OAAO,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC;AACpF;AAaO,SAAS,WACd,QACA,UAA2B,CAAC,GACD;AAC3B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAeA,eAAsB,aACpB,QACA,MACA,UAA2B,CAAC,GACC;AAC7B,QAAM,UAAU,OAAO,SAAS,WAAW;AAC3C,QAAM,MAAM,GAAG,OAAO,OAAO;AAC7B,QAAM,WAAW,IAAI,SAAS;AAC9B,WAAS,OAAO,QAAQ,IAAI;AAE5B,MAAI;AACF,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR,aAAa,QAAQ,eAAe;AAAA,MACpC,MAAM;AAAA,MACN,QAAQ,QAAQ,UAAU,YAAY,QAAQ,QAAQ,aAAa,GAAM;AAAA,MACzE,SAAS,QAAQ;AAAA,IACnB,CAAC;AACD,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,UAAW,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAIlD,YAAM,MAAM,QAAQ,WAAW,mBAAmB,IAAI,MAAM;AAC5D,YAAM,UAAU,QAAQ;AACxB,aAAO,EAAE,SAAS,OAAO,OAAO,KAAK,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,EAAG;AAAA,IACvE;AACA,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,WAAO,EAAE,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,EACxC,QAAQ;AACN,WAAO,EAAE,SAAS,OAAO,OAAO,gBAAgB;AAAA,EAClD;AACF;AAGO,SAAS,qBACd,QACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,uBAAuB,UAAU,OAAO;AAClE;AAeA,eAAsB,6BACpB,QACA,MACA,UAA2B,CAAC,GACa;AACzC,QAAM,UAAU,OAAO,SAAS,WAAW;AAC3C,QAAM,MAAM,GAAG,OAAO,OAAO;AAC7B,QAAM,WAAW,IAAI,SAAS;AAC9B,WAAS,OAAO,QAAQ,IAAI;AAE5B,MAAI;AACF,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR,aAAa,QAAQ,eAAe;AAAA,MACpC,MAAM;AAAA,MACN,QAAQ,QAAQ,UAAU,YAAY,QAAQ,QAAQ,aAAa,GAAM;AAAA,MACzE,SAAS,QAAQ;AAAA,IACnB,CAAC;AACD,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,UAAW,MAAM,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAIlD,YAAM,MAAM,QAAQ,WAAW,mBAAmB,IAAI,MAAM;AAC5D,YAAM,UAAU,QAAQ;AACxB,aAAO,EAAE,SAAS,OAAO,OAAO,KAAK,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,EAAG;AAAA,IACvE;AACA,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,WAAO,EAAE,SAAS,MAAM,KAAK,KAAK,IAAI;AAAA,EACxC,QAAQ;AACN,WAAO,EAAE,SAAS,OAAO,OAAO,gBAAgB;AAAA,EAClD;AACF;AAGO,SAAS,6BACd,QACA,UAA2B,CAAC,GACN;AACtB,SAAO,SAAS,QAAQ,oCAAoC,UAAU,OAAO;AAC/E;","names":[]}
@@ -0,0 +1,14 @@
1
+ // src/query/fetchers/profile-summary.ts
2
+ import {
3
+ summarizeProfileView
4
+ } from "../../logic/profile-summary.js";
5
+ import { fetchGetProfileView } from "./get-profile-view.js";
6
+ async function fetchProfileSummary(config, actor, options = {}) {
7
+ const { maxSkills, ...fetchOptions } = options;
8
+ const view = await fetchGetProfileView(config, actor, fetchOptions);
9
+ return view ? summarizeProfileView(view, { maxSkills }) : null;
10
+ }
11
+ export {
12
+ fetchProfileSummary
13
+ };
14
+ //# sourceMappingURL=profile-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/profile-summary.ts"],"sourcesContent":["import {\n summarizeProfileView,\n type ProfileSummary,\n type SummarizeProfileViewOptions,\n} from '../../logic/profile-summary.js';\nimport { fetchGetProfileView } from './get-profile-view.js';\nimport type { ApiFetchOptions, SifaApiConfig } from '../client.js';\n\n/**\n * Fetch the aggregated public profile via `id.sifa.getProfileView` and reduce it\n * to a compact {@link ProfileSummary} (identity, headline, current role/employer,\n * top skills). Convenience over `fetchGetProfileView` + `summarizeProfileView`,\n * for third-party surfaces that only want the headline facts.\n *\n * Returns `null` when the AppView has no profile for the actor. Server-callable\n * (Next.js RSC) and client-callable (Expo, browser).\n */\nexport async function fetchProfileSummary(\n config: SifaApiConfig,\n actor: string,\n options: SummarizeProfileViewOptions & ApiFetchOptions = {},\n): Promise<ProfileSummary | null> {\n const { maxSkills, ...fetchOptions } = options;\n const view = await fetchGetProfileView(config, actor, fetchOptions);\n return view ? summarizeProfileView(view, { maxSkills }) : null;\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAGK;AACP,SAAS,2BAA2B;AAYpC,eAAsB,oBACpB,QACA,OACA,UAAyD,CAAC,GAC1B;AAChC,QAAM,EAAE,WAAW,GAAG,aAAa,IAAI;AACvC,QAAM,OAAO,MAAM,oBAAoB,QAAQ,OAAO,YAAY;AAClE,SAAO,OAAO,qBAAqB,MAAM,EAAE,UAAU,CAAC,IAAI;AAC5D;","names":[]}
@@ -0,0 +1,31 @@
1
+ // src/query/fetchers/profile.ts
2
+ import {
3
+ encodeIdentifier,
4
+ apiFetch,
5
+ apiFetchOrNull
6
+ } from "../client.js";
7
+ function fetchProfile(config, handleOrDid, options = {}) {
8
+ const path = `/api/profile/${encodeIdentifier(handleOrDid)}`;
9
+ return apiFetchOrNull(config, path, {
10
+ retryOn429: true,
11
+ ...options
12
+ });
13
+ }
14
+ async function fetchAtFundLink(config, did, options = {}) {
15
+ const path = `/api/profiles/${encodeIdentifier(did)}/at-fund-link`;
16
+ try {
17
+ const data = await apiFetch(config, path, {
18
+ next: { revalidate: 3600 },
19
+ timeoutMs: 5e3,
20
+ ...options
21
+ });
22
+ return typeof data.url === "string" ? data.url : null;
23
+ } catch {
24
+ return null;
25
+ }
26
+ }
27
+ export {
28
+ fetchAtFundLink,
29
+ fetchProfile
30
+ };
31
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/query/fetchers/profile.ts"],"sourcesContent":["import type { Profile } from '../../types/index.js';\nimport {\n encodeIdentifier,\n apiFetch,\n apiFetchOrNull,\n type ApiFetchOptions,\n type SifaApiConfig,\n} from '../client.js';\n\n/**\n * Read the aggregated profile for a handle or DID.\n *\n * Returns `null` when the AppView has no profile for the given identifier\n * (HTTP 404). Throws {@link ApiError} on other non-2xx responses.\n *\n * Server-callable (Next.js RSC) and client-callable (Expo, browser).\n */\nexport function fetchProfile(\n config: SifaApiConfig,\n handleOrDid: string,\n options: ApiFetchOptions = {},\n): Promise<Profile | null> {\n const path = `/api/profile/${encodeIdentifier(handleOrDid)}`;\n return apiFetchOrNull<Profile>(config, path, {\n retryOn429: true,\n ...options,\n });\n}\n\n/**\n * Public AT Fund link for a profile, if one is configured. Returns `null`\n * on any error or when the response payload's `url` field is missing or\n * non-string.\n */\nexport async function fetchAtFundLink(\n config: SifaApiConfig,\n did: string,\n options: ApiFetchOptions = {},\n): Promise<string | null> {\n const path = `/api/profiles/${encodeIdentifier(did)}/at-fund-link`;\n try {\n const data = await apiFetch<{ url?: unknown }>(config, path, {\n next: { revalidate: 3600 },\n timeoutMs: 5000,\n ...options,\n });\n return typeof data.url === 'string' ? data.url : null;\n } catch {\n return null;\n }\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAUA,SAAS,aACd,QACA,aACA,UAA2B,CAAC,GACH;AACzB,QAAM,OAAO,gBAAgB,iBAAiB,WAAW,CAAC;AAC1D,SAAO,eAAwB,QAAQ,MAAM;AAAA,IAC3C,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,CAAC;AACH;AAOA,eAAsB,gBACpB,QACA,KACA,UAA2B,CAAC,GACJ;AACxB,QAAM,OAAO,iBAAiB,iBAAiB,GAAG,CAAC;AACnD,MAAI;AACF,UAAM,OAAO,MAAM,SAA4B,QAAQ,MAAM;AAAA,MAC3D,MAAM,EAAE,YAAY,KAAK;AAAA,MACzB,WAAW;AAAA,MACX,GAAG;AAAA,IACL,CAAC;AACD,WAAO,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;AAAA,EACnD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}