@singi-labs/sifa-sdk 0.12.92 → 0.13.0

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.
@@ -1,4 +1,4 @@
1
- import { c as Profile, d as ProfilePosition, S as SkillRef } from './index-jNyd5QP7.js';
1
+ import { c as Profile, d as ProfilePosition, S as SkillRef, w as PresentationLinkView } from './index-jNyd5QP7.js';
2
2
  import { S as SifaApiConfig, A as ApiFetchOptions, C as CreateResult, W as WriteResult } from './org-zMZg_r7v.js';
3
3
  import { n as ProfileView } from './types-8JaS6abh.js';
4
4
  import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-8fapqzHv.js';
@@ -237,6 +237,98 @@ declare function revealMarqueDomain(config: SifaApiConfig, domain: string, optio
237
237
  /** Make a previously-revealed Marque domain owner-only again. */
238
238
  declare function unrevealMarqueDomain(config: SifaApiConfig, domain: string, options?: ApiFetchOptions): Promise<WriteResult>;
239
239
 
240
+ /**
241
+ * Which claim a listed speaker makes about a topic. Phase 1 has no confirmed
242
+ * data, so groups are named by the CLAIM, never a "proven" label:
243
+ * - `spoke_about_it` — has a topic-matching delivery (or, with a topic set,
244
+ * a matching presentation plus at least one delivery)
245
+ * - `skilled` — holds the matching canonical skill but has no matching talk
246
+ * (only appears when a topic is supplied)
247
+ * - `open_to_speaking` — opted in but has never delivered (only appears when
248
+ * no topic is supplied)
249
+ */
250
+ type SpeakerGroup = 'spoke_about_it' | 'skilled' | 'open_to_speaking';
251
+ /** One person in the speaker directory. Everyone listed has opted in. */
252
+ interface SpeakerCard {
253
+ did: string;
254
+ handle: string;
255
+ displayName: string | null;
256
+ avatar: string | null;
257
+ headline: string | null;
258
+ currentRole: string | null;
259
+ currentCompany: string | null;
260
+ deliveryCount: number;
261
+ group: SpeakerGroup;
262
+ matchedTopics: string[];
263
+ /**
264
+ * Self-reported event names from the speaker's own presentationDelivery
265
+ * records — unconfirmed in Phase 1. `eventsSelfReported` is always true;
266
+ * the web layer labels these as such.
267
+ */
268
+ recentEvents: string[];
269
+ eventsSelfReported: boolean;
270
+ }
271
+ interface SpeakersResponse {
272
+ speakers: SpeakerCard[];
273
+ }
274
+ /** The reusable talk, or a standalone delivery when it has no parent talk. */
275
+ interface TalkEvent {
276
+ eventName: string | null;
277
+ date: string | null;
278
+ }
279
+ /** Compact speaker card embedded in a talk row. */
280
+ interface TalkSpeaker {
281
+ did: string;
282
+ handle: string;
283
+ displayName: string | null;
284
+ avatar: string | null;
285
+ headline: string | null;
286
+ currentRole: string | null;
287
+ currentCompany: string | null;
288
+ }
289
+ interface TalkRow {
290
+ /**
291
+ * `presentation` = a reusable `id.sifa.profile.presentation` record.
292
+ * `delivery` = a standalone presentationDelivery with no parent presentation.
293
+ */
294
+ kind: 'presentation' | 'delivery';
295
+ rkey: string;
296
+ title: string | null;
297
+ snippet: string | null;
298
+ links: PresentationLinkView[];
299
+ writeupUri: string | null;
300
+ speaker: TalkSpeaker;
301
+ events: TalkEvent[];
302
+ eventsSelfReported: boolean;
303
+ deliveryCount: number;
304
+ matchedTopics: string[];
305
+ }
306
+ interface TalksResponse {
307
+ talks: TalkRow[];
308
+ }
309
+ interface SpeakerDirectoryFilters {
310
+ /** Free-text topic (canonical skill name/slug/alias, talk title, or event). */
311
+ topic?: string;
312
+ /** Max rows to return; the API caps this at 50. */
313
+ limit?: number;
314
+ }
315
+ /**
316
+ * Speaker directory (Phase 1, read-only POC). Everyone returned has opted in to
317
+ * speaking; past deliveries are a ranking signal, not an inclusion path. An
318
+ * optional `topic` filters to people who hold the matching canonical skill,
319
+ * have a matching presentation, or have a matching delivery. Results come
320
+ * grouped and ordered by the API.
321
+ *
322
+ * Returns an empty list on any error so callers can render a graceful state.
323
+ */
324
+ declare function fetchSpeakers(config: SifaApiConfig, filters?: SpeakerDirectoryFilters, options?: ApiFetchOptions): Promise<SpeakersResponse>;
325
+ /**
326
+ * Talk directory (Phase 1, read-only POC). Lists talks by opted-in speakers,
327
+ * delivered-first, then latest delivery date. Same optional `topic` filter as
328
+ * {@link fetchSpeakers}. Returns an empty list on any error.
329
+ */
330
+ declare function fetchTalks(config: SifaApiConfig, filters?: SpeakerDirectoryFilters, options?: ApiFetchOptions): Promise<TalksResponse>;
331
+
240
332
  /**
241
333
  * Organization typeahead. Returns curated entities first, then the PDL crawl,
242
334
  * deduped by domain. Empty input returns an empty result without a network call.
@@ -391,4 +483,4 @@ declare function checkNetworkMapJobStatus(config: SifaApiConfig, jobId: string,
391
483
  */
392
484
  declare function fetchNetworkMap(config: SifaApiConfig, options?: ApiFetchOptions): Promise<NetworkMapResponse | null>;
393
485
 
394
- export { fetchReceivedEndorsements as A, fetchReciprocityCandidate as B, hideKeytraceClaim as C, type DismissEndorsementInput as D, importSearchEntities as E, type FetchNetworkStreamCountOptions as F, initiateNetworkMapGeneration as G, isNetworkMapResponse as H, linkSkillToPosition as I, mintEntityDomain as J, resolveEntityDomain as K, revealMarqueDomain as L, selectEntity as M, type NetworkMapEdge as N, setPositionPrimary as O, type PendingEndorsementsPage as P, unhideKeytraceClaim as Q, type ReceivedEndorsementsPage as R, unlinkSkillFromPosition as S, unrevealMarqueDomain as T, unsetPositionPrimary as U, updateEducation as V, updatePosition as W, updateRecord as X, type ReciprocityCandidate as a, type NetworkMapGenerationJob as b, type NetworkMapGraphData as c, type NetworkMapNode as d, type NetworkMapPendingJob as e, type NetworkMapResponse as f, type PendingEndorsement as g, type ReceivedEndorsement as h, type ReciprocitySkill as i, checkNetworkMapJobStatus as j, createEducation as k, createPosition as l, createRecord as m, deleteEducation as n, deletePosition as o, deleteRecord as p, dismissEndorsement as q, fetchAtFundLink as r, fetchEndorsementCount as s, fetchEntitySearch as t, fetchGetProfileView as u, fetchNetworkMap as v, fetchNetworkStreamCount as w, fetchPendingEndorsements as x, fetchProfile as y, fetchProfileSummary as z };
486
+ export { unhideKeytraceClaim as $, fetchGetProfileView as A, fetchNetworkMap as B, fetchNetworkStreamCount as C, type DismissEndorsementInput as D, fetchPendingEndorsements as E, type FetchNetworkStreamCountOptions as F, fetchProfile as G, fetchProfileSummary as H, fetchReceivedEndorsements as I, fetchReciprocityCandidate as J, fetchSpeakers as K, fetchTalks as L, hideKeytraceClaim as M, type NetworkMapEdge as N, importSearchEntities as O, type PendingEndorsementsPage as P, initiateNetworkMapGeneration as Q, type ReceivedEndorsementsPage as R, type SpeakerCard as S, type TalkEvent as T, isNetworkMapResponse as U, linkSkillToPosition as V, mintEntityDomain as W, resolveEntityDomain as X, revealMarqueDomain as Y, selectEntity as Z, setPositionPrimary as _, type ReciprocityCandidate as a, unlinkSkillFromPosition as a0, unrevealMarqueDomain as a1, unsetPositionPrimary as a2, updateEducation as a3, updatePosition as a4, updateRecord as a5, type NetworkMapGenerationJob as b, type NetworkMapGraphData as c, type NetworkMapNode as d, type NetworkMapPendingJob as e, type NetworkMapResponse as f, type PendingEndorsement as g, type ReceivedEndorsement as h, type ReciprocitySkill as i, type SpeakerDirectoryFilters as j, type SpeakerGroup as k, type SpeakersResponse as l, type TalkRow as m, type TalkSpeaker as n, type TalksResponse as o, checkNetworkMapJobStatus as p, createEducation as q, createPosition as r, createRecord as s, deleteEducation as t, deletePosition as u, deleteRecord as v, dismissEndorsement as w, fetchAtFundLink as x, fetchEndorsementCount as y, fetchEntitySearch as z };
@@ -1,4 +1,4 @@
1
- import { c as Profile, d as ProfilePosition, S as SkillRef } from './index-jNyd5QP7.cjs';
1
+ import { c as Profile, d as ProfilePosition, S as SkillRef, w as PresentationLinkView } from './index-jNyd5QP7.cjs';
2
2
  import { S as SifaApiConfig, A as ApiFetchOptions, C as CreateResult, W as WriteResult } from './org-DCHb1xhw.cjs';
3
3
  import { n as ProfileView } from './types-8wAWvS-T.cjs';
4
4
  import { S as SummarizeProfileViewOptions, P as ProfileSummary } from './profile-summary-DY78IoL9.cjs';
@@ -237,6 +237,98 @@ declare function revealMarqueDomain(config: SifaApiConfig, domain: string, optio
237
237
  /** Make a previously-revealed Marque domain owner-only again. */
238
238
  declare function unrevealMarqueDomain(config: SifaApiConfig, domain: string, options?: ApiFetchOptions): Promise<WriteResult>;
239
239
 
240
+ /**
241
+ * Which claim a listed speaker makes about a topic. Phase 1 has no confirmed
242
+ * data, so groups are named by the CLAIM, never a "proven" label:
243
+ * - `spoke_about_it` — has a topic-matching delivery (or, with a topic set,
244
+ * a matching presentation plus at least one delivery)
245
+ * - `skilled` — holds the matching canonical skill but has no matching talk
246
+ * (only appears when a topic is supplied)
247
+ * - `open_to_speaking` — opted in but has never delivered (only appears when
248
+ * no topic is supplied)
249
+ */
250
+ type SpeakerGroup = 'spoke_about_it' | 'skilled' | 'open_to_speaking';
251
+ /** One person in the speaker directory. Everyone listed has opted in. */
252
+ interface SpeakerCard {
253
+ did: string;
254
+ handle: string;
255
+ displayName: string | null;
256
+ avatar: string | null;
257
+ headline: string | null;
258
+ currentRole: string | null;
259
+ currentCompany: string | null;
260
+ deliveryCount: number;
261
+ group: SpeakerGroup;
262
+ matchedTopics: string[];
263
+ /**
264
+ * Self-reported event names from the speaker's own presentationDelivery
265
+ * records — unconfirmed in Phase 1. `eventsSelfReported` is always true;
266
+ * the web layer labels these as such.
267
+ */
268
+ recentEvents: string[];
269
+ eventsSelfReported: boolean;
270
+ }
271
+ interface SpeakersResponse {
272
+ speakers: SpeakerCard[];
273
+ }
274
+ /** The reusable talk, or a standalone delivery when it has no parent talk. */
275
+ interface TalkEvent {
276
+ eventName: string | null;
277
+ date: string | null;
278
+ }
279
+ /** Compact speaker card embedded in a talk row. */
280
+ interface TalkSpeaker {
281
+ did: string;
282
+ handle: string;
283
+ displayName: string | null;
284
+ avatar: string | null;
285
+ headline: string | null;
286
+ currentRole: string | null;
287
+ currentCompany: string | null;
288
+ }
289
+ interface TalkRow {
290
+ /**
291
+ * `presentation` = a reusable `id.sifa.profile.presentation` record.
292
+ * `delivery` = a standalone presentationDelivery with no parent presentation.
293
+ */
294
+ kind: 'presentation' | 'delivery';
295
+ rkey: string;
296
+ title: string | null;
297
+ snippet: string | null;
298
+ links: PresentationLinkView[];
299
+ writeupUri: string | null;
300
+ speaker: TalkSpeaker;
301
+ events: TalkEvent[];
302
+ eventsSelfReported: boolean;
303
+ deliveryCount: number;
304
+ matchedTopics: string[];
305
+ }
306
+ interface TalksResponse {
307
+ talks: TalkRow[];
308
+ }
309
+ interface SpeakerDirectoryFilters {
310
+ /** Free-text topic (canonical skill name/slug/alias, talk title, or event). */
311
+ topic?: string;
312
+ /** Max rows to return; the API caps this at 50. */
313
+ limit?: number;
314
+ }
315
+ /**
316
+ * Speaker directory (Phase 1, read-only POC). Everyone returned has opted in to
317
+ * speaking; past deliveries are a ranking signal, not an inclusion path. An
318
+ * optional `topic` filters to people who hold the matching canonical skill,
319
+ * have a matching presentation, or have a matching delivery. Results come
320
+ * grouped and ordered by the API.
321
+ *
322
+ * Returns an empty list on any error so callers can render a graceful state.
323
+ */
324
+ declare function fetchSpeakers(config: SifaApiConfig, filters?: SpeakerDirectoryFilters, options?: ApiFetchOptions): Promise<SpeakersResponse>;
325
+ /**
326
+ * Talk directory (Phase 1, read-only POC). Lists talks by opted-in speakers,
327
+ * delivered-first, then latest delivery date. Same optional `topic` filter as
328
+ * {@link fetchSpeakers}. Returns an empty list on any error.
329
+ */
330
+ declare function fetchTalks(config: SifaApiConfig, filters?: SpeakerDirectoryFilters, options?: ApiFetchOptions): Promise<TalksResponse>;
331
+
240
332
  /**
241
333
  * Organization typeahead. Returns curated entities first, then the PDL crawl,
242
334
  * deduped by domain. Empty input returns an empty result without a network call.
@@ -391,4 +483,4 @@ declare function checkNetworkMapJobStatus(config: SifaApiConfig, jobId: string,
391
483
  */
392
484
  declare function fetchNetworkMap(config: SifaApiConfig, options?: ApiFetchOptions): Promise<NetworkMapResponse | null>;
393
485
 
394
- export { fetchReceivedEndorsements as A, fetchReciprocityCandidate as B, hideKeytraceClaim as C, type DismissEndorsementInput as D, importSearchEntities as E, type FetchNetworkStreamCountOptions as F, initiateNetworkMapGeneration as G, isNetworkMapResponse as H, linkSkillToPosition as I, mintEntityDomain as J, resolveEntityDomain as K, revealMarqueDomain as L, selectEntity as M, type NetworkMapEdge as N, setPositionPrimary as O, type PendingEndorsementsPage as P, unhideKeytraceClaim as Q, type ReceivedEndorsementsPage as R, unlinkSkillFromPosition as S, unrevealMarqueDomain as T, unsetPositionPrimary as U, updateEducation as V, updatePosition as W, updateRecord as X, type ReciprocityCandidate as a, type NetworkMapGenerationJob as b, type NetworkMapGraphData as c, type NetworkMapNode as d, type NetworkMapPendingJob as e, type NetworkMapResponse as f, type PendingEndorsement as g, type ReceivedEndorsement as h, type ReciprocitySkill as i, checkNetworkMapJobStatus as j, createEducation as k, createPosition as l, createRecord as m, deleteEducation as n, deletePosition as o, deleteRecord as p, dismissEndorsement as q, fetchAtFundLink as r, fetchEndorsementCount as s, fetchEntitySearch as t, fetchGetProfileView as u, fetchNetworkMap as v, fetchNetworkStreamCount as w, fetchPendingEndorsements as x, fetchProfile as y, fetchProfileSummary as z };
486
+ export { unhideKeytraceClaim as $, fetchGetProfileView as A, fetchNetworkMap as B, fetchNetworkStreamCount as C, type DismissEndorsementInput as D, fetchPendingEndorsements as E, type FetchNetworkStreamCountOptions as F, fetchProfile as G, fetchProfileSummary as H, fetchReceivedEndorsements as I, fetchReciprocityCandidate as J, fetchSpeakers as K, fetchTalks as L, hideKeytraceClaim as M, type NetworkMapEdge as N, importSearchEntities as O, type PendingEndorsementsPage as P, initiateNetworkMapGeneration as Q, type ReceivedEndorsementsPage as R, type SpeakerCard as S, type TalkEvent as T, isNetworkMapResponse as U, linkSkillToPosition as V, mintEntityDomain as W, resolveEntityDomain as X, revealMarqueDomain as Y, selectEntity as Z, setPositionPrimary as _, type ReciprocityCandidate as a, unlinkSkillFromPosition as a0, unrevealMarqueDomain as a1, unsetPositionPrimary as a2, updateEducation as a3, updatePosition as a4, updateRecord as a5, type NetworkMapGenerationJob as b, type NetworkMapGraphData as c, type NetworkMapNode as d, type NetworkMapPendingJob as e, type NetworkMapResponse as f, type PendingEndorsement as g, type ReceivedEndorsement as h, type ReciprocitySkill as i, type SpeakerDirectoryFilters as j, type SpeakerGroup as k, type SpeakersResponse as l, type TalkRow as m, type TalkSpeaker as n, type TalksResponse as o, checkNetworkMapJobStatus as p, createEducation as q, createPosition as r, createRecord as s, deleteEducation as t, deletePosition as u, deleteRecord as v, dismissEndorsement as w, fetchAtFundLink as x, fetchEndorsementCount as y, fetchEntitySearch as z };
@@ -755,6 +755,43 @@ async function searchSkills(config, query, limit = 10, options = {}) {
755
755
  }
756
756
  }
757
757
 
758
+ // src/query/fetchers/speakers.ts
759
+ var EMPTY_SPEAKERS = { speakers: [] };
760
+ var EMPTY_TALKS = { talks: [] };
761
+ function buildParams(filters) {
762
+ const params = new URLSearchParams();
763
+ const topic = filters.topic?.trim();
764
+ if (topic) params.set("topic", topic);
765
+ if (filters.limit !== void 0) params.set("limit", String(filters.limit));
766
+ return params;
767
+ }
768
+ async function fetchSpeakers(config, filters = {}, options = {}) {
769
+ const params = buildParams(filters);
770
+ const query = params.toString();
771
+ const path = query ? `/api/speakers?${query}` : "/api/speakers";
772
+ try {
773
+ return await apiFetch(config, path, {
774
+ cache: "no-store",
775
+ ...options
776
+ });
777
+ } catch {
778
+ return EMPTY_SPEAKERS;
779
+ }
780
+ }
781
+ async function fetchTalks(config, filters = {}, options = {}) {
782
+ const params = buildParams(filters);
783
+ const query = params.toString();
784
+ const path = query ? `/api/talks?${query}` : "/api/talks";
785
+ try {
786
+ return await apiFetch(config, path, {
787
+ cache: "no-store",
788
+ ...options
789
+ });
790
+ } catch {
791
+ return EMPTY_TALKS;
792
+ }
793
+ }
794
+
758
795
  // src/query/fetchers/discovery.ts
759
796
  async function fetchSimilarProfiles(config, did, opts = {}) {
760
797
  const limit = opts.limit ?? 5;
@@ -1869,9 +1906,11 @@ exports.fetchSearchFilters = fetchSearchFilters;
1869
1906
  exports.fetchSearchProfiles = fetchSearchProfiles;
1870
1907
  exports.fetchSimilarProfiles = fetchSimilarProfiles;
1871
1908
  exports.fetchSkillSuggestions = fetchSkillSuggestions;
1909
+ exports.fetchSpeakers = fetchSpeakers;
1872
1910
  exports.fetchStats = fetchStats;
1873
1911
  exports.fetchSuggestionCount = fetchSuggestionCount;
1874
1912
  exports.fetchSuggestions = fetchSuggestions;
1913
+ exports.fetchTalks = fetchTalks;
1875
1914
  exports.fetchWipePreview = fetchWipePreview;
1876
1915
  exports.followUser = followUser;
1877
1916
  exports.getAdminReviewQueues = getAdminReviewQueues;