@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.
- package/dist/atproto/index.js +9 -3
- package/dist/atproto/index.js.map +1 -1
- package/dist/badge/index.cjs.map +1 -1
- package/dist/badge/index.js +5 -141
- package/dist/badge/index.js.map +1 -1
- package/dist/cards/adult-content.js +14 -0
- package/dist/cards/adult-content.js.map +1 -0
- package/dist/cards/app-url-patterns.js +369 -0
- package/dist/cards/app-url-patterns.js.map +1 -0
- package/dist/cards/index.js +24 -0
- package/dist/cards/index.js.map +1 -0
- package/dist/cards/resolve-card-url.js +198 -0
- package/dist/cards/resolve-card-url.js.map +1 -0
- package/dist/cards/visibility.js +45 -0
- package/dist/cards/visibility.js.map +1 -0
- package/dist/flags/index.js +4 -3
- package/dist/flags/index.js.map +1 -1
- package/dist/format/collapse-contributors.js +19 -0
- package/dist/format/collapse-contributors.js.map +1 -0
- package/dist/format/company-name.js +61 -0
- package/dist/format/company-name.js.map +1 -0
- package/dist/format/compare-text.js +9 -0
- package/dist/format/compare-text.js.map +1 -0
- package/dist/format/doi.js +8 -0
- package/dist/format/doi.js.map +1 -0
- package/dist/format/embed.js +131 -0
- package/dist/format/embed.js.map +1 -0
- package/dist/format/endorsement-context.js +35 -0
- package/dist/format/endorsement-context.js.map +1 -0
- package/dist/format/format-display-url.js +42 -0
- package/dist/format/format-display-url.js.map +1 -0
- package/dist/format/format-duration.js +13 -0
- package/dist/format/format-duration.js.map +1 -0
- package/dist/format/format-time.js +30 -0
- package/dist/format/format-time.js.map +1 -0
- package/dist/format/handle-utils.js +19 -0
- package/dist/format/handle-utils.js.map +1 -0
- package/dist/format/index.js +106 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/location-segments.js +29 -0
- package/dist/format/location-segments.js.map +1 -0
- package/dist/format/location-utils.js +42 -0
- package/dist/format/location-utils.js.map +1 -0
- package/dist/format/meta-description.js +35 -0
- package/dist/format/meta-description.js.map +1 -0
- package/dist/format/normalize-company-key.js +12 -0
- package/dist/format/normalize-company-key.js.map +1 -0
- package/dist/format/normalize-legal-form.js +71 -0
- package/dist/format/normalize-legal-form.js.map +1 -0
- package/dist/format/pds-utils.js +73 -0
- package/dist/format/pds-utils.js.map +1 -0
- package/dist/format/sort-by-date.js +39 -0
- package/dist/format/sort-by-date.js.map +1 -0
- package/dist/format/summarize-deliveries.js +37 -0
- package/dist/format/summarize-deliveries.js.map +1 -0
- package/dist/format/talk-slug.js +21 -0
- package/dist/format/talk-slug.js.map +1 -0
- package/dist/format/text-sanitize.js +29 -0
- package/dist/format/text-sanitize.js.map +1 -0
- package/dist/format/text-truncate.js +14 -0
- package/dist/format/text-truncate.js.map +1 -0
- package/dist/format/time-utils.js +19 -0
- package/dist/format/time-utils.js.map +1 -0
- package/dist/format/timeline.js +33 -0
- package/dist/format/timeline.js.map +1 -0
- package/dist/format/wcag-contrast.js +34 -0
- package/dist/format/wcag-contrast.js.map +1 -0
- package/dist/import/index.js +22 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/presentation-csv.js +116 -0
- package/dist/import/presentation-csv.js.map +1 -0
- package/dist/index.cjs +7 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +677 -7086
- package/dist/index.js.map +1 -1
- package/dist/jev/index.js +18 -5
- package/dist/jev/index.js.map +1 -1
- package/dist/jsonld/index.cjs.map +1 -1
- package/dist/jsonld/index.js +30 -987
- package/dist/jsonld/index.js.map +1 -1
- package/dist/jsonld/profile.js +222 -0
- package/dist/jsonld/profile.js.map +1 -0
- package/dist/jsonld/terms.js +496 -0
- package/dist/jsonld/terms.js.map +1 -0
- package/dist/jsonld/url.js +17 -0
- package/dist/jsonld/url.js.map +1 -0
- package/dist/jsonld/works-graph.js +41 -0
- package/dist/jsonld/works-graph.js.map +1 -0
- package/dist/jsonld/works.js +178 -0
- package/dist/jsonld/works.js.map +1 -0
- package/dist/logic/actor-identity.js +8 -0
- package/dist/logic/actor-identity.js.map +1 -0
- package/dist/logic/agent-ref.js +24 -0
- package/dist/logic/agent-ref.js.map +1 -0
- package/dist/logic/company-page-indexable.js +23 -0
- package/dist/logic/company-page-indexable.js.map +1 -0
- package/dist/logic/date-lookahead.js +33 -0
- package/dist/logic/date-lookahead.js.map +1 -0
- package/dist/logic/domain-detect.js +43 -0
- package/dist/logic/domain-detect.js.map +1 -0
- package/dist/logic/entity-disambiguation.js +24 -0
- package/dist/logic/entity-disambiguation.js.map +1 -0
- package/dist/logic/entity-ref-anchor.js +33 -0
- package/dist/logic/entity-ref-anchor.js.map +1 -0
- package/dist/logic/index.js +91 -0
- package/dist/logic/index.js.map +1 -0
- package/dist/logic/org-floor.js +66 -0
- package/dist/logic/org-floor.js.map +1 -0
- package/dist/logic/primary-item.js +9 -0
- package/dist/logic/primary-item.js.map +1 -0
- package/dist/logic/primary-position.js +16 -0
- package/dist/logic/primary-position.js.map +1 -0
- package/dist/logic/profile-completeness.js +21 -0
- package/dist/logic/profile-completeness.js.map +1 -0
- package/dist/logic/profile-dimensions.js +50 -0
- package/dist/logic/profile-dimensions.js.map +1 -0
- package/dist/logic/profile-summary.js +23 -0
- package/dist/logic/profile-summary.js.map +1 -0
- package/dist/logic/pseudo-employer.js +34 -0
- package/dist/logic/pseudo-employer.js.map +1 -0
- package/dist/logic/recent-activity.js +10 -0
- package/dist/logic/recent-activity.js.map +1 -0
- package/dist/logic/self-app.js +10 -0
- package/dist/logic/self-app.js.map +1 -0
- package/dist/{org-BCrvebcf.d.ts → org-CxTEjjrm.d.ts} +1 -1
- package/dist/{org-settings-C73Sin5E.d.ts → org-settings-BShvhyFp.d.ts} +1 -1
- package/dist/profile/headline-role-dedupe.js +12 -0
- package/dist/profile/headline-role-dedupe.js.map +1 -0
- package/dist/profile/highlights.js +200 -0
- package/dist/profile/highlights.js.map +1 -0
- package/dist/profile/index.js +66 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/involvement-grouping.js +31 -0
- package/dist/profile/involvement-grouping.js.map +1 -0
- package/dist/profile/language-sort.js +24 -0
- package/dist/profile/language-sort.js.map +1 -0
- package/dist/profile/publication-versions.js +98 -0
- package/dist/profile/publication-versions.js.map +1 -0
- package/dist/profile/range-sort.js +14 -0
- package/dist/profile/range-sort.js.map +1 -0
- package/dist/profile/section-model.js +122 -0
- package/dist/profile/section-model.js.map +1 -0
- package/dist/profile/section-sorts.js +33 -0
- package/dist/profile/section-sorts.js.map +1 -0
- package/dist/publishers/index.js +16 -0
- package/dist/publishers/index.js.map +1 -0
- package/dist/publishers/registry.js +87 -0
- package/dist/publishers/registry.js.map +1 -0
- package/dist/publishing/index.js +46 -184
- package/dist/publishing/index.js.map +1 -1
- package/dist/publishing/linkblog.js +42 -0
- package/dist/publishing/linkblog.js.map +1 -0
- package/dist/publishing/registry.js +32 -0
- package/dist/publishing/registry.js.map +1 -0
- package/dist/publishing/schemas.js +74 -0
- package/dist/publishing/schemas.js.map +1 -0
- package/dist/publishing/types.js +32 -0
- package/dist/publishing/types.js.map +1 -0
- package/dist/query/client.js +119 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/config.js +23 -0
- package/dist/query/config.js.map +1 -0
- package/dist/query/fetchers/accounts.js +29 -0
- package/dist/query/fetchers/accounts.js.map +1 -0
- package/dist/query/fetchers/activity-items-hide.js +31 -0
- package/dist/query/fetchers/activity-items-hide.js.map +1 -0
- package/dist/query/fetchers/activity.js +61 -0
- package/dist/query/fetchers/activity.js.map +1 -0
- package/dist/query/fetchers/actor.js +30 -0
- package/dist/query/fetchers/actor.js.map +1 -0
- package/dist/query/fetchers/admin-feature-allowlists.js +41 -0
- package/dist/query/fetchers/admin-feature-allowlists.js.map +1 -0
- package/dist/query/fetchers/admin-review-queues.js +30 -0
- package/dist/query/fetchers/admin-review-queues.js.map +1 -0
- package/dist/query/fetchers/apps.js +31 -0
- package/dist/query/fetchers/apps.js.map +1 -0
- package/dist/query/fetchers/bsky-preferences.js +55 -0
- package/dist/query/fetchers/bsky-preferences.js.map +1 -0
- package/dist/query/fetchers/confirmations.js +55 -0
- package/dist/query/fetchers/confirmations.js.map +1 -0
- package/dist/query/fetchers/destructive.js +34 -0
- package/dist/query/fetchers/destructive.js.map +1 -0
- package/dist/query/fetchers/discovery.js +67 -0
- package/dist/query/fetchers/discovery.js.map +1 -0
- package/dist/query/fetchers/education.js +23 -0
- package/dist/query/fetchers/education.js.map +1 -0
- package/dist/query/fetchers/endorsement-inbox.js +36 -0
- package/dist/query/fetchers/endorsement-inbox.js.map +1 -0
- package/dist/query/fetchers/endorsement.js +23 -0
- package/dist/query/fetchers/endorsement.js.map +1 -0
- package/dist/query/fetchers/endorsements.js +20 -0
- package/dist/query/fetchers/endorsements.js.map +1 -0
- package/dist/query/fetchers/entities.js +65 -0
- package/dist/query/fetchers/entities.js.map +1 -0
- package/dist/query/fetchers/external-accounts.js +74 -0
- package/dist/query/fetchers/external-accounts.js.map +1 -0
- package/dist/query/fetchers/follow-extras.js +38 -0
- package/dist/query/fetchers/follow-extras.js.map +1 -0
- package/dist/query/fetchers/follow.js +105 -0
- package/dist/query/fetchers/follow.js.map +1 -0
- package/dist/query/fetchers/get-profile-view.js +21 -0
- package/dist/query/fetchers/get-profile-view.js.map +1 -0
- package/dist/query/fetchers/github-prs.js +45 -0
- package/dist/query/fetchers/github-prs.js.map +1 -0
- package/dist/query/fetchers/inbox.js +29 -0
- package/dist/query/fetchers/inbox.js.map +1 -0
- package/dist/query/fetchers/index.cjs.map +1 -1
- package/dist/query/fetchers/index.d.ts +2 -2
- package/dist/query/fetchers/index.js +360 -2045
- package/dist/query/fetchers/index.js.map +1 -1
- package/dist/query/fetchers/investments.js +18 -0
- package/dist/query/fetchers/investments.js.map +1 -0
- package/dist/query/fetchers/keytrace-claims.js +23 -0
- package/dist/query/fetchers/keytrace-claims.js.map +1 -0
- package/dist/query/fetchers/marque-domains.js +23 -0
- package/dist/query/fetchers/marque-domains.js.map +1 -0
- package/dist/query/fetchers/network-map.js +36 -0
- package/dist/query/fetchers/network-map.js.map +1 -0
- package/dist/query/fetchers/org.js +48 -0
- package/dist/query/fetchers/org.js.map +1 -0
- package/dist/query/fetchers/positions.js +77 -0
- package/dist/query/fetchers/positions.js.map +1 -0
- package/dist/query/fetchers/profile-completeness.js +45 -0
- package/dist/query/fetchers/profile-completeness.js.map +1 -0
- package/dist/query/fetchers/profile-items-hide.js +36 -0
- package/dist/query/fetchers/profile-items-hide.js.map +1 -0
- package/dist/query/fetchers/profile-locations.js +23 -0
- package/dist/query/fetchers/profile-locations.js.map +1 -0
- package/dist/query/fetchers/profile-mutations.js +82 -0
- package/dist/query/fetchers/profile-mutations.js.map +1 -0
- package/dist/query/fetchers/profile-summary.js +14 -0
- package/dist/query/fetchers/profile-summary.js.map +1 -0
- package/dist/query/fetchers/profile.js +31 -0
- package/dist/query/fetchers/profile.js.map +1 -0
- package/dist/query/fetchers/publications.js +66 -0
- package/dist/query/fetchers/publications.js.map +1 -0
- package/dist/query/fetchers/quoted-posts.js +40 -0
- package/dist/query/fetchers/quoted-posts.js.map +1 -0
- package/dist/query/fetchers/reactions.js +85 -0
- package/dist/query/fetchers/reactions.js.map +1 -0
- package/dist/query/fetchers/received-endorsements.js +20 -0
- package/dist/query/fetchers/received-endorsements.js.map +1 -0
- package/dist/query/fetchers/reciprocity.js +23 -0
- package/dist/query/fetchers/reciprocity.js.map +1 -0
- package/dist/query/fetchers/records.js +27 -0
- package/dist/query/fetchers/records.js.map +1 -0
- package/dist/query/fetchers/repo-inventory.js +23 -0
- package/dist/query/fetchers/repo-inventory.js.map +1 -0
- package/dist/query/fetchers/roadmap.js +73 -0
- package/dist/query/fetchers/roadmap.js.map +1 -0
- package/dist/query/fetchers/rpg.js +36 -0
- package/dist/query/fetchers/rpg.js.map +1 -0
- package/dist/query/fetchers/search.js +78 -0
- package/dist/query/fetchers/search.js.map +1 -0
- package/dist/query/fetchers/section-primary.js +23 -0
- package/dist/query/fetchers/section-primary.js.map +1 -0
- package/dist/query/fetchers/skills.js +30 -0
- package/dist/query/fetchers/skills.js.map +1 -0
- package/dist/query/fetchers/speakers.js +42 -0
- package/dist/query/fetchers/speakers.js.map +1 -0
- package/dist/query/fetchers/stats.js +16 -0
- package/dist/query/fetchers/stats.js.map +1 -0
- package/dist/query/fetchers/stream.js +30 -0
- package/dist/query/fetchers/stream.js.map +1 -0
- package/dist/query/fetchers/unlinked-positions.js +30 -0
- package/dist/query/fetchers/unlinked-positions.js.map +1 -0
- package/dist/query/hooks/index.d.ts +3 -3
- package/dist/query/hooks/index.js +283 -3555
- package/dist/query/hooks/index.js.map +1 -1
- package/dist/query/hooks/use-accounts.js +19 -0
- package/dist/query/hooks/use-accounts.js.map +1 -0
- package/dist/query/hooks/use-activity-items-hide.js +52 -0
- package/dist/query/hooks/use-activity-items-hide.js.map +1 -0
- package/dist/query/hooks/use-activity.js +44 -0
- package/dist/query/hooks/use-activity.js.map +1 -0
- package/dist/query/hooks/use-admin-review-queues.js +21 -0
- package/dist/query/hooks/use-admin-review-queues.js.map +1 -0
- package/dist/query/hooks/use-apps.js +31 -0
- package/dist/query/hooks/use-apps.js.map +1 -0
- package/dist/query/hooks/use-bsky-content-prefs.js +45 -0
- package/dist/query/hooks/use-bsky-content-prefs.js.map +1 -0
- package/dist/query/hooks/use-confirmations.js +121 -0
- package/dist/query/hooks/use-confirmations.js.map +1 -0
- package/dist/query/hooks/use-create-position.js +28 -0
- package/dist/query/hooks/use-create-position.js.map +1 -0
- package/dist/query/hooks/use-destructive.js +63 -0
- package/dist/query/hooks/use-destructive.js.map +1 -0
- package/dist/query/hooks/use-discovery.js +53 -0
- package/dist/query/hooks/use-discovery.js.map +1 -0
- package/dist/query/hooks/use-education-mutations.js +67 -0
- package/dist/query/hooks/use-education-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement-inbox.js +80 -0
- package/dist/query/hooks/use-endorsement-inbox.js.map +1 -0
- package/dist/query/hooks/use-endorsement-mutations.js +33 -0
- package/dist/query/hooks/use-endorsement-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement.js +20 -0
- package/dist/query/hooks/use-endorsement.js.map +1 -0
- package/dist/query/hooks/use-entity-search.js +73 -0
- package/dist/query/hooks/use-entity-search.js.map +1 -0
- package/dist/query/hooks/use-external-accounts.js +143 -0
- package/dist/query/hooks/use-external-accounts.js.map +1 -0
- package/dist/query/hooks/use-feature-allowlist.js +104 -0
- package/dist/query/hooks/use-feature-allowlist.js.map +1 -0
- package/dist/query/hooks/use-follow-extras.js +38 -0
- package/dist/query/hooks/use-follow-extras.js.map +1 -0
- package/dist/query/hooks/use-follow.js +113 -0
- package/dist/query/hooks/use-follow.js.map +1 -0
- package/dist/query/hooks/use-get-profile-view.js +20 -0
- package/dist/query/hooks/use-get-profile-view.js.map +1 -0
- package/dist/query/hooks/use-github-prs.js +21 -0
- package/dist/query/hooks/use-github-prs.js.map +1 -0
- package/dist/query/hooks/use-inbox.js +19 -0
- package/dist/query/hooks/use-inbox.js.map +1 -0
- package/dist/query/hooks/use-investment-mutations.js +65 -0
- package/dist/query/hooks/use-investment-mutations.js.map +1 -0
- package/dist/query/hooks/use-keytrace-claims.js +50 -0
- package/dist/query/hooks/use-keytrace-claims.js.map +1 -0
- package/dist/query/hooks/use-location-mutations.js +71 -0
- package/dist/query/hooks/use-location-mutations.js.map +1 -0
- package/dist/query/hooks/use-marque-domains.js +50 -0
- package/dist/query/hooks/use-marque-domains.js.map +1 -0
- package/dist/query/hooks/use-org-claim.js +29 -0
- package/dist/query/hooks/use-org-claim.js.map +1 -0
- package/dist/query/hooks/use-org-domains.js +28 -0
- package/dist/query/hooks/use-org-domains.js.map +1 -0
- package/dist/query/hooks/use-org-notification-emails.js +28 -0
- package/dist/query/hooks/use-org-notification-emails.js.map +1 -0
- package/dist/query/hooks/use-org-profile-settings.js +29 -0
- package/dist/query/hooks/use-org-profile-settings.js.map +1 -0
- package/dist/query/hooks/use-org-profile.js +21 -0
- package/dist/query/hooks/use-org-profile.js.map +1 -0
- package/dist/query/hooks/use-position-mutations.js +128 -0
- package/dist/query/hooks/use-position-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile-completeness.js +21 -0
- package/dist/query/hooks/use-profile-completeness.js.map +1 -0
- package/dist/query/hooks/use-profile-items-hide.js +53 -0
- package/dist/query/hooks/use-profile-items-hide.js.map +1 -0
- package/dist/query/hooks/use-profile-mutations.js +143 -0
- package/dist/query/hooks/use-profile-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile.js +30 -0
- package/dist/query/hooks/use-profile.js.map +1 -0
- package/dist/query/hooks/use-publication-mutations.js +90 -0
- package/dist/query/hooks/use-publication-mutations.js.map +1 -0
- package/dist/query/hooks/use-reaction-mutations.js +48 -0
- package/dist/query/hooks/use-reaction-mutations.js.map +1 -0
- package/dist/query/hooks/use-reactions.js +32 -0
- package/dist/query/hooks/use-reactions.js.map +1 -0
- package/dist/query/hooks/use-received-endorsements.js +23 -0
- package/dist/query/hooks/use-received-endorsements.js.map +1 -0
- package/dist/query/hooks/use-reciprocity.js +19 -0
- package/dist/query/hooks/use-reciprocity.js.map +1 -0
- package/dist/query/hooks/use-record-mutations.js +67 -0
- package/dist/query/hooks/use-record-mutations.js.map +1 -0
- package/dist/query/hooks/use-repo-inventory.js +43 -0
- package/dist/query/hooks/use-repo-inventory.js.map +1 -0
- package/dist/query/hooks/use-roadmap-mutations.js +51 -0
- package/dist/query/hooks/use-roadmap-mutations.js.map +1 -0
- package/dist/query/hooks/use-roadmap.js +31 -0
- package/dist/query/hooks/use-roadmap.js.map +1 -0
- package/dist/query/hooks/use-search.js +63 -0
- package/dist/query/hooks/use-search.js.map +1 -0
- package/dist/query/hooks/use-section-primary-mutations.js +53 -0
- package/dist/query/hooks/use-section-primary-mutations.js.map +1 -0
- package/dist/query/hooks/use-skill-mutations.js +91 -0
- package/dist/query/hooks/use-skill-mutations.js.map +1 -0
- package/dist/query/hooks/use-stats.js +19 -0
- package/dist/query/hooks/use-stats.js.map +1 -0
- package/dist/query/hooks/use-stream.js +20 -0
- package/dist/query/hooks/use-stream.js.map +1 -0
- package/dist/query/hooks/use-unlinked-positions.js +45 -0
- package/dist/query/hooks/use-unlinked-positions.js.map +1 -0
- package/dist/query/index.cjs.map +1 -1
- package/dist/query/index.d.ts +4 -4
- package/dist/query/index.js +685 -3744
- package/dist/query/index.js.map +1 -1
- package/dist/query/keys.js +138 -0
- package/dist/query/keys.js.map +1 -0
- package/dist/repo/groups.js +81 -0
- package/dist/repo/groups.js.map +1 -0
- package/dist/repo/index.js +9 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/labels.js +121 -0
- package/dist/repo/labels.js.map +1 -0
- package/dist/repo/types.js +1 -0
- package/dist/repo/types.js.map +1 -0
- package/dist/resume/index.js +5 -179
- package/dist/resume/index.js.map +1 -1
- package/dist/resume/json-resume.js +153 -0
- package/dist/resume/json-resume.js.map +1 -0
- package/dist/roadmap/index.js +101 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/rpg/catalog.js +101 -0
- package/dist/rpg/catalog.js.map +1 -0
- package/dist/rpg/index.js +13 -116
- package/dist/rpg/index.js.map +1 -1
- package/dist/rpg/unlocks.js +21 -0
- package/dist/rpg/unlocks.js.map +1 -0
- package/dist/schemas/blob-ref.js +12 -0
- package/dist/schemas/blob-ref.js.map +1 -0
- package/dist/schemas/confirmation.js +23 -0
- package/dist/schemas/confirmation.js.map +1 -0
- package/dist/schemas/endorsement-confirmation.js +18 -0
- package/dist/schemas/endorsement-confirmation.js.map +1 -0
- package/dist/schemas/endorsement.js +19 -0
- package/dist/schemas/endorsement.js.map +1 -0
- package/dist/schemas/entity.js +74 -0
- package/dist/schemas/entity.js.map +1 -0
- package/dist/schemas/feed.js +73 -0
- package/dist/schemas/feed.js.map +1 -0
- package/dist/schemas/follow-profile.js +32 -0
- package/dist/schemas/follow-profile.js.map +1 -0
- package/dist/schemas/graph-follow.js +19 -0
- package/dist/schemas/graph-follow.js.map +1 -0
- package/dist/schemas/index.js +164 -629
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/org-employment-attestation.js +28 -0
- package/dist/schemas/org-employment-attestation.js.map +1 -0
- package/dist/schemas/org-profile.js +64 -0
- package/dist/schemas/org-profile.js.map +1 -0
- package/dist/schemas/profile-certification.js +28 -0
- package/dist/schemas/profile-certification.js.map +1 -0
- package/dist/schemas/profile-course.js +32 -0
- package/dist/schemas/profile-course.js.map +1 -0
- package/dist/schemas/profile-education.js +33 -0
- package/dist/schemas/profile-education.js.map +1 -0
- package/dist/schemas/profile-external-account.js +15 -0
- package/dist/schemas/profile-external-account.js.map +1 -0
- package/dist/schemas/profile-honor.js +18 -0
- package/dist/schemas/profile-honor.js.map +1 -0
- package/dist/schemas/profile-investment.js +48 -0
- package/dist/schemas/profile-investment.js.map +1 -0
- package/dist/schemas/profile-involvement.js +47 -0
- package/dist/schemas/profile-involvement.js.map +1 -0
- package/dist/schemas/profile-language.js +12 -0
- package/dist/schemas/profile-language.js.map +1 -0
- package/dist/schemas/profile-position.js +42 -0
- package/dist/schemas/profile-position.js.map +1 -0
- package/dist/schemas/profile-presentation-delivery.js +38 -0
- package/dist/schemas/profile-presentation-delivery.js.map +1 -0
- package/dist/schemas/profile-presentation.js +36 -0
- package/dist/schemas/profile-presentation.js.map +1 -0
- package/dist/schemas/profile-project.js +48 -0
- package/dist/schemas/profile-project.js.map +1 -0
- package/dist/schemas/profile-publication.js +30 -0
- package/dist/schemas/profile-publication.js.map +1 -0
- package/dist/schemas/profile-self.js +22 -0
- package/dist/schemas/profile-self.js.map +1 -0
- package/dist/schemas/profile-skill.js +13 -0
- package/dist/schemas/profile-skill.js.map +1 -0
- package/dist/schemas/profile-volunteering.js +20 -0
- package/dist/schemas/profile-volunteering.js.map +1 -0
- package/dist/schemas/shared.js +56 -0
- package/dist/schemas/shared.js.map +1 -0
- package/dist/schemas/write/certification.js +16 -0
- package/dist/schemas/write/certification.js.map +1 -0
- package/dist/schemas/write/course.js +36 -0
- package/dist/schemas/write/course.js.map +1 -0
- package/dist/schemas/write/education.js +18 -0
- package/dist/schemas/write/education.js.map +1 -0
- package/dist/schemas/write/external-account.js +13 -0
- package/dist/schemas/write/external-account.js.map +1 -0
- package/dist/schemas/write/honor.js +14 -0
- package/dist/schemas/write/honor.js.map +1 -0
- package/dist/schemas/write/index.d.ts +1 -1
- package/dist/schemas/write/index.js +89 -593
- package/dist/schemas/write/index.js.map +1 -1
- package/dist/schemas/write/investment.js +32 -0
- package/dist/schemas/write/investment.js.map +1 -0
- package/dist/schemas/write/involvement.js +34 -0
- package/dist/schemas/write/involvement.js.map +1 -0
- package/dist/schemas/write/language.js +10 -0
- package/dist/schemas/write/language.js.map +1 -0
- package/dist/schemas/write/org-claim.js +56 -0
- package/dist/schemas/write/org-claim.js.map +1 -0
- package/dist/schemas/write/org-employment-attestation.js +19 -0
- package/dist/schemas/write/org-employment-attestation.js.map +1 -0
- package/dist/schemas/write/org-profile.js +54 -0
- package/dist/schemas/write/org-profile.js.map +1 -0
- package/dist/schemas/write/org-settings.js +81 -0
- package/dist/schemas/write/org-settings.js.map +1 -0
- package/dist/schemas/write/position.js +24 -0
- package/dist/schemas/write/position.js.map +1 -0
- package/dist/schemas/write/presentation-delivery.js +34 -0
- package/dist/schemas/write/presentation-delivery.js.map +1 -0
- package/dist/schemas/write/presentation.js +23 -0
- package/dist/schemas/write/presentation.js.map +1 -0
- package/dist/schemas/write/profile-location.js +21 -0
- package/dist/schemas/write/profile-location.js.map +1 -0
- package/dist/schemas/write/profile-self.js +27 -0
- package/dist/schemas/write/profile-self.js.map +1 -0
- package/dist/schemas/write/project.js +27 -0
- package/dist/schemas/write/project.js.map +1 -0
- package/dist/schemas/write/publication.js +41 -0
- package/dist/schemas/write/publication.js.map +1 -0
- package/dist/schemas/write/shared.js +96 -0
- package/dist/schemas/write/shared.js.map +1 -0
- package/dist/schemas/write/skill.js +18 -0
- package/dist/schemas/write/skill.js.map +1 -0
- package/dist/schemas/write/volunteering.js +16 -0
- package/dist/schemas/write/volunteering.js.map +1 -0
- package/dist/stream/activity-item.js +1 -0
- package/dist/stream/activity-item.js.map +1 -0
- package/dist/stream/index.js +49 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/stream-card-vm-schema.js +265 -0
- package/dist/stream/stream-card-vm-schema.js.map +1 -0
- package/dist/stream/stream-card-vm.js +1 -0
- package/dist/stream/stream-card-vm.js.map +1 -0
- package/dist/stream/to-stream-card-vm.js +793 -0
- package/dist/stream/to-stream-card-vm.js.map +1 -0
- package/dist/stream/two-tier.js +30 -0
- package/dist/stream/two-tier.js.map +1 -0
- package/dist/stream/verbs.js +120 -0
- package/dist/stream/verbs.js.map +1 -0
- package/dist/taxonomy/activity-tiers.js +956 -0
- package/dist/taxonomy/activity-tiers.js.map +1 -0
- package/dist/taxonomy/app-categories.js +42 -0
- package/dist/taxonomy/app-categories.js.map +1 -0
- package/dist/taxonomy/app-category-map.js +166 -0
- package/dist/taxonomy/app-category-map.js.map +1 -0
- package/dist/taxonomy/artifact-link-kind.js +29 -0
- package/dist/taxonomy/artifact-link-kind.js.map +1 -0
- package/dist/taxonomy/calendar-event.js +28 -0
- package/dist/taxonomy/calendar-event.js.map +1 -0
- package/dist/taxonomy/continents.js +215 -0
- package/dist/taxonomy/continents.js.map +1 -0
- package/dist/taxonomy/countries.js +203 -0
- package/dist/taxonomy/countries.js.map +1 -0
- package/dist/taxonomy/course-role.js +37 -0
- package/dist/taxonomy/course-role.js.map +1 -0
- package/dist/taxonomy/employment-type.js +82 -0
- package/dist/taxonomy/employment-type.js.map +1 -0
- package/dist/taxonomy/eqf-level.js +59 -0
- package/dist/taxonomy/eqf-level.js.map +1 -0
- package/dist/taxonomy/index.js +263 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/industry-taxonomy.js +281 -0
- package/dist/taxonomy/industry-taxonomy.js.map +1 -0
- package/dist/taxonomy/investment.js +54 -0
- package/dist/taxonomy/investment.js.map +1 -0
- package/dist/taxonomy/involvement-kind.js +30 -0
- package/dist/taxonomy/involvement-kind.js.map +1 -0
- package/dist/taxonomy/open-to.js +128 -0
- package/dist/taxonomy/open-to.js.map +1 -0
- package/dist/taxonomy/platforms.js +56 -0
- package/dist/taxonomy/platforms.js.map +1 -0
- package/dist/taxonomy/presentation-link-type.js +22 -0
- package/dist/taxonomy/presentation-link-type.js.map +1 -0
- package/dist/taxonomy/presentation-role.js +21 -0
- package/dist/taxonomy/presentation-role.js.map +1 -0
- package/dist/taxonomy/publication-type.js +54 -0
- package/dist/taxonomy/publication-type.js.map +1 -0
- package/dist/taxonomy/relational.js +25 -0
- package/dist/taxonomy/relational.js.map +1 -0
- package/dist/taxonomy/search-filter-defs.js +66 -0
- package/dist/taxonomy/search-filter-defs.js.map +1 -0
- package/dist/taxonomy/skill-categories.js +28 -0
- package/dist/taxonomy/skill-categories.js.map +1 -0
- package/dist/taxonomy/skill-display-groups.js +12 -0
- package/dist/taxonomy/skill-display-groups.js.map +1 -0
- package/dist/taxonomy/skill-grouping.js +90 -0
- package/dist/taxonomy/skill-grouping.js.map +1 -0
- package/dist/taxonomy/verification-providers.js +69 -0
- package/dist/taxonomy/verification-providers.js.map +1 -0
- package/dist/taxonomy/workplace-type.js +38 -0
- package/dist/taxonomy/workplace-type.js.map +1 -0
- package/dist/tokens/colors.js +11 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/icons.js +15 -0
- package/dist/tokens/icons.js.map +1 -0
- package/dist/tokens/index.js +10 -39
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/typography.js +23 -0
- package/dist/tokens/typography.js.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/profile-view.js +1 -0
- package/dist/types/profile-view.js.map +1 -0
- package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts} +2 -2
- 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":[]}
|