@singi-labs/sifa-sdk 0.7.2 → 0.7.4

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.
@@ -75,6 +75,34 @@ async function apiFetchOrNull(config, path, options = {}) {
75
75
  throw e;
76
76
  }
77
77
  }
78
+ function extractWriteError(data, status) {
79
+ const body = data ?? {};
80
+ return {
81
+ error: body.message ?? `Request failed (${status})`,
82
+ ...body.pdsHost ? { pdsHost: body.pdsHost } : {}
83
+ };
84
+ }
85
+ async function apiWrite(config, path, method, options = {}) {
86
+ try {
87
+ const data = await apiFetch(config, path, {
88
+ method,
89
+ credentials: "include",
90
+ ...options
91
+ });
92
+ return { success: true, ...data ?? {} };
93
+ } catch (e) {
94
+ if (e instanceof ApiError) {
95
+ return { success: false, ...extractWriteError(e.body, e.status) };
96
+ }
97
+ return { success: false, error: "Network error" };
98
+ }
99
+ }
100
+ function apiWriteCreate(config, path, body, options = {}) {
101
+ return apiWrite(config, path, "POST", {
102
+ body,
103
+ ...options
104
+ });
105
+ }
78
106
  var SifaConfigContext = react.createContext(null);
79
107
  function SifaProvider({ config, children }) {
80
108
  return /* @__PURE__ */ jsxRuntime.jsx(SifaConfigContext.Provider, { value: config, children });
@@ -111,15 +139,303 @@ async function fetchAtFundLink(config, did, options = {}) {
111
139
  }
112
140
  }
113
141
 
142
+ // src/query/fetchers/profile-mutations.ts
143
+ function updateProfileSelf(config, data, options = {}) {
144
+ return apiWrite(config, "/api/profile/self", "PUT", { body: data, ...options });
145
+ }
146
+ function updateProfileOverride(config, data, options = {}) {
147
+ return apiWrite(config, "/api/profile/override", "PUT", { body: data, ...options });
148
+ }
149
+ function refreshPds(config, options = {}) {
150
+ return apiWrite(
151
+ config,
152
+ "/api/profile/refresh-pds",
153
+ "POST",
154
+ options
155
+ );
156
+ }
157
+ async function uploadAvatar(config, file, options = {}) {
158
+ const fetchFn = config.fetch ?? globalThis.fetch;
159
+ const url = `${config.baseUrl}/api/profile/avatar`;
160
+ const formData = new FormData();
161
+ formData.append("file", file);
162
+ try {
163
+ const res = await fetchFn(url, {
164
+ method: "POST",
165
+ credentials: options.credentials ?? "include",
166
+ body: formData,
167
+ signal: options.signal ?? AbortSignal.timeout(options.timeoutMs ?? 3e4),
168
+ headers: options.headers
169
+ });
170
+ if (!res.ok) {
171
+ const errBody = await res.json().catch(() => ({}));
172
+ const msg = errBody.message ?? `Request failed (${res.status})`;
173
+ const pdsHost = errBody.pdsHost;
174
+ return { success: false, error: msg, ...pdsHost ? { pdsHost } : {} };
175
+ }
176
+ const data = await res.json();
177
+ return { success: true, url: data.url };
178
+ } catch {
179
+ return { success: false, error: "Network error" };
180
+ }
181
+ }
182
+ function deleteAvatarOverride(config, options = {}) {
183
+ return apiWrite(config, "/api/profile/avatar", "DELETE", options);
184
+ }
185
+
114
186
  // src/query/fetchers/positions.ts
115
187
  function createPosition(config, data, options = {}) {
116
- return apiFetch(config, "/api/positions", {
117
- method: "POST",
188
+ return apiWriteCreate(config, "/api/profile/position", data, options);
189
+ }
190
+ function updatePosition(config, rkey, data, options = {}) {
191
+ return apiWrite(config, `/api/profile/position/${encodeURIComponent(rkey)}`, "PUT", {
192
+ body: data,
193
+ ...options
194
+ });
195
+ }
196
+ function deletePosition(config, rkey, options = {}) {
197
+ return apiWrite(config, `/api/profile/position/${encodeURIComponent(rkey)}`, "DELETE", options);
198
+ }
199
+ function setPositionPrimary(config, rkey, options = {}) {
200
+ return apiWrite(
201
+ config,
202
+ `/api/profile/position/${encodeURIComponent(rkey)}/primary`,
203
+ "PUT",
204
+ options
205
+ );
206
+ }
207
+ function unsetPositionPrimary(config, rkey, options = {}) {
208
+ return apiWrite(
209
+ config,
210
+ `/api/profile/position/${encodeURIComponent(rkey)}/primary`,
211
+ "DELETE",
212
+ options
213
+ );
214
+ }
215
+ function buildPositionPayload(position, skills) {
216
+ return {
217
+ company: position.company,
218
+ title: position.title,
219
+ description: position.description,
220
+ startedAt: position.startedAt,
221
+ endedAt: position.endedAt,
222
+ location: position.location ?? void 0,
223
+ skills
224
+ };
225
+ }
226
+ function linkSkillToPosition(config, position, skillRef, options = {}) {
227
+ const currentSkills = position.skills ?? [];
228
+ if (currentSkills.some((s) => s.uri === skillRef.uri)) {
229
+ return Promise.resolve({ success: true });
230
+ }
231
+ return updatePosition(
232
+ config,
233
+ position.rkey,
234
+ buildPositionPayload(position, [...currentSkills, skillRef]),
235
+ options
236
+ );
237
+ }
238
+ function unlinkSkillFromPosition(config, position, skillRef, options = {}) {
239
+ const remaining = (position.skills ?? []).filter((s) => s.uri !== skillRef.uri);
240
+ return updatePosition(config, position.rkey, buildPositionPayload(position, remaining), options);
241
+ }
242
+
243
+ // src/query/fetchers/education.ts
244
+ function createEducation(config, data, options = {}) {
245
+ return apiWriteCreate(config, "/api/profile/education", data, options);
246
+ }
247
+ function updateEducation(config, rkey, data, options = {}) {
248
+ return apiWrite(config, `/api/profile/education/${encodeURIComponent(rkey)}`, "PUT", {
249
+ body: data,
250
+ ...options
251
+ });
252
+ }
253
+ function deleteEducation(config, rkey, options = {}) {
254
+ return apiWrite(config, `/api/profile/education/${encodeURIComponent(rkey)}`, "DELETE", options);
255
+ }
256
+
257
+ // src/query/fetchers/skills.ts
258
+ function createSkill(config, data, options = {}) {
259
+ return apiWriteCreate(config, "/api/profile/skill", data, options);
260
+ }
261
+ function updateSkill(config, rkey, data, options = {}) {
262
+ return apiWrite(config, `/api/profile/skill/${encodeURIComponent(rkey)}`, "PUT", {
263
+ body: data,
264
+ ...options
265
+ });
266
+ }
267
+ function deleteSkill(config, rkey, options = {}) {
268
+ return apiWrite(config, `/api/profile/skill/${encodeURIComponent(rkey)}`, "DELETE", options);
269
+ }
270
+
271
+ // src/query/fetchers/records.ts
272
+ function createRecord(config, collection, data, options = {}) {
273
+ return apiWriteCreate(
274
+ config,
275
+ `/api/profile/records/${encodeURIComponent(collection)}`,
276
+ data,
277
+ options
278
+ );
279
+ }
280
+ function updateRecord(config, collection, rkey, data, options = {}) {
281
+ const path = `/api/profile/records/${encodeURIComponent(collection)}/${encodeURIComponent(rkey)}`;
282
+ return apiWrite(config, path, "PUT", { body: data, ...options });
283
+ }
284
+ function deleteRecord(config, collection, rkey, options = {}) {
285
+ const path = `/api/profile/records/${encodeURIComponent(collection)}/${encodeURIComponent(rkey)}`;
286
+ return apiWrite(config, path, "DELETE", options);
287
+ }
288
+
289
+ // src/query/fetchers/profile-locations.ts
290
+ function createProfileLocation(config, data, options = {}) {
291
+ return apiWriteCreate(config, "/api/profile/location", data, options);
292
+ }
293
+ function updateProfileLocation(config, rkey, data, options = {}) {
294
+ return apiWrite(config, `/api/profile/location/${encodeURIComponent(rkey)}`, "PUT", {
295
+ body: data,
296
+ ...options
297
+ });
298
+ }
299
+ function deleteProfileLocation(config, rkey, options = {}) {
300
+ return apiWrite(config, `/api/profile/location/${encodeURIComponent(rkey)}`, "DELETE", options);
301
+ }
302
+
303
+ // src/query/fetchers/external-accounts.ts
304
+ async function fetchExternalAccounts(config, handleOrDid, options = {}) {
305
+ const path = `/api/profile/${encodeURIComponent(handleOrDid)}/external-accounts`;
306
+ try {
307
+ const data = await apiFetch(config, path, {
308
+ credentials: "include",
309
+ ...options
310
+ });
311
+ return data.accounts ?? [];
312
+ } catch {
313
+ return [];
314
+ }
315
+ }
316
+ function createExternalAccount(config, data, options = {}) {
317
+ return apiWrite(
318
+ config,
319
+ "/api/profile/external-accounts",
320
+ "POST",
321
+ { body: data, ...options }
322
+ );
323
+ }
324
+ function updateExternalAccount(config, rkey, data, options = {}) {
325
+ return apiWrite(config, `/api/profile/external-accounts/${encodeURIComponent(rkey)}`, "PUT", {
118
326
  body: data,
119
- credentials: "include",
120
327
  ...options
121
328
  });
122
329
  }
330
+ function deleteExternalAccount(config, rkey, options = {}) {
331
+ return apiWrite(
332
+ config,
333
+ `/api/profile/external-accounts/${encodeURIComponent(rkey)}`,
334
+ "DELETE",
335
+ options
336
+ );
337
+ }
338
+ function setExternalAccountPrimary(config, rkey, options = {}) {
339
+ return apiWrite(
340
+ config,
341
+ `/api/profile/external-accounts/${encodeURIComponent(rkey)}/primary`,
342
+ "PUT",
343
+ options
344
+ );
345
+ }
346
+ function unsetExternalAccountPrimary(config, rkey, options = {}) {
347
+ return apiWrite(
348
+ config,
349
+ `/api/profile/external-accounts/${encodeURIComponent(rkey)}/primary`,
350
+ "DELETE",
351
+ options
352
+ );
353
+ }
354
+ function verifyExternalAccount(config, rkey, options = {}) {
355
+ return apiWrite(
356
+ config,
357
+ `/api/profile/external-accounts/${encodeURIComponent(rkey)}/verify`,
358
+ "POST",
359
+ { body: {}, ...options }
360
+ );
361
+ }
362
+
363
+ // src/query/fetchers/endorsements.ts
364
+ function createEndorsement(config, data, options = {}) {
365
+ return apiWriteCreate(config, "/api/endorsements", data, options);
366
+ }
367
+
368
+ // src/query/fetchers/keytrace-claims.ts
369
+ function hideKeytraceClaim(config, rkey, options = {}) {
370
+ return apiWrite(
371
+ config,
372
+ `/api/profile/keytrace-claims/${encodeURIComponent(rkey)}/hide`,
373
+ "POST",
374
+ options
375
+ );
376
+ }
377
+ function unhideKeytraceClaim(config, rkey, options = {}) {
378
+ return apiWrite(
379
+ config,
380
+ `/api/profile/keytrace-claims/${encodeURIComponent(rkey)}/hide`,
381
+ "DELETE",
382
+ options
383
+ );
384
+ }
385
+
386
+ // src/query/fetchers/publications.ts
387
+ function hideOrcidPublication(config, putCode, options = {}) {
388
+ return apiWrite(config, `/api/profile/orcid-publications/${putCode}/hide`, "POST", options);
389
+ }
390
+ function unhideOrcidPublication(config, putCode, options = {}) {
391
+ return apiWrite(config, `/api/profile/orcid-publications/${putCode}/hide`, "DELETE", options);
392
+ }
393
+ function hideStandardPublication(config, uri, options = {}) {
394
+ return apiWrite(
395
+ config,
396
+ `/api/profile/standard-publications/${encodeURIComponent(uri)}/hide`,
397
+ "POST",
398
+ options
399
+ );
400
+ }
401
+ function unhideStandardPublication(config, uri, options = {}) {
402
+ return apiWrite(
403
+ config,
404
+ `/api/profile/standard-publications/${encodeURIComponent(uri)}/hide`,
405
+ "DELETE",
406
+ options
407
+ );
408
+ }
409
+ function bulkHideStandardPublications(config, uris, options = {}) {
410
+ return apiWrite(config, "/api/profile/standard-publications/bulk-hide", "POST", {
411
+ body: { uris },
412
+ ...options
413
+ });
414
+ }
415
+ function bulkUnhideStandardPublications(config, uris, options = {}) {
416
+ return apiWrite(config, "/api/profile/standard-publications/bulk-hide", "DELETE", {
417
+ body: { uris },
418
+ ...options
419
+ });
420
+ }
421
+ function hideSifaPublication(config, rkey, options = {}) {
422
+ return apiWrite(config, `/api/profile/publications/${rkey}/hide`, "POST", options);
423
+ }
424
+ function unhideSifaPublication(config, rkey, options = {}) {
425
+ return apiWrite(config, `/api/profile/publications/${rkey}/hide`, "DELETE", options);
426
+ }
427
+ async function refreshOrcidPublications(config, options = {}) {
428
+ const result = await apiWrite(
429
+ config,
430
+ "/api/profile/orcid-publications/refresh",
431
+ "POST",
432
+ { body: {}, ...options }
433
+ );
434
+ if (result.success && result.error) {
435
+ return { success: false, error: result.error };
436
+ }
437
+ return result;
438
+ }
123
439
 
124
440
  // src/query/fetchers/stats.ts
125
441
  async function fetchStats(config, options = {}) {
@@ -197,6 +513,19 @@ async function fetchSearchFilters(config, options = {}) {
197
513
  return EMPTY_FILTERS;
198
514
  }
199
515
  }
516
+ async function searchSkills(config, query, limit = 10, options = {}) {
517
+ if (!query.trim()) return [];
518
+ const path = `/api/skills/search?q=${encodeURIComponent(query)}&limit=${limit}`;
519
+ try {
520
+ const data = await apiFetch(config, path, {
521
+ cache: "no-store",
522
+ ...options
523
+ });
524
+ return data.skills ?? [];
525
+ } catch {
526
+ return [];
527
+ }
528
+ }
200
529
 
201
530
  // src/query/fetchers/discovery.ts
202
531
  async function fetchSimilarProfiles(config, did, opts = {}) {
@@ -412,6 +741,44 @@ async function checkAppAccount(config, appId, options = {}) {
412
741
  return null;
413
742
  }
414
743
  }
744
+ async function createReaction(config, targetUri, appId, targetCid, options = {}) {
745
+ const fetchFn = config.fetch ?? globalThis.fetch;
746
+ const url = `${config.baseUrl}/api/reactions`;
747
+ try {
748
+ const res = await fetchFn(url, {
749
+ method: "POST",
750
+ headers: { "Content-Type": "application/json", ...options.headers ?? {} },
751
+ credentials: options.credentials ?? "include",
752
+ body: JSON.stringify({ targetUri, appId, targetCid }),
753
+ signal: options.signal ?? AbortSignal.timeout(options.timeoutMs ?? 1e4)
754
+ });
755
+ if (!res.ok) {
756
+ if (res.status === 403) {
757
+ try {
758
+ const body = await res.json();
759
+ if (body.error === "ScopeInsufficient") {
760
+ return {
761
+ ok: false,
762
+ error: { type: "scope_insufficient", requiredScope: body.requiredScope }
763
+ };
764
+ }
765
+ } catch {
766
+ }
767
+ }
768
+ return { ok: false, error: { type: "error" } };
769
+ }
770
+ const data = await res.json();
771
+ return { ok: true, data };
772
+ } catch {
773
+ return { ok: false, error: { type: "error" } };
774
+ }
775
+ }
776
+ function deleteReaction(config, targetUri, appId, options = {}) {
777
+ return apiWrite(config, "/api/reactions", "DELETE", {
778
+ body: { targetUri, appId },
779
+ ...options
780
+ });
781
+ }
415
782
 
416
783
  // src/query/fetchers/quoted-posts.ts
417
784
  var QUOTED_POSTS_BATCH_MAX = 20;
@@ -473,6 +840,26 @@ async function fetchMyRoadmapVotes(config, options = {}) {
473
840
  return [];
474
841
  }
475
842
  }
843
+ function castRoadmapVote(config, key, options = {}) {
844
+ return apiWrite(config, `/api/roadmap/votes/${encodeURIComponent(key)}`, "POST", options);
845
+ }
846
+ function retractRoadmapVote(config, key, options = {}) {
847
+ return apiWrite(config, `/api/roadmap/votes/${encodeURIComponent(key)}`, "DELETE", options);
848
+ }
849
+
850
+ // src/query/fetchers/destructive.ts
851
+ function resetProfile(config, deletePdsData, options = {}) {
852
+ return apiWrite(config, "/api/profile/reset", "DELETE", {
853
+ body: { deletePdsData },
854
+ ...options
855
+ });
856
+ }
857
+ function deleteAccount(config, deletePdsData, options = {}) {
858
+ return apiWrite(config, "/api/profile/account", "DELETE", {
859
+ body: { deletePdsData },
860
+ ...options
861
+ });
862
+ }
476
863
 
477
864
  // src/query/keys.ts
478
865
  var sifaQueryKeys = {
@@ -480,7 +867,8 @@ var sifaQueryKeys = {
480
867
  profile: {
481
868
  all: () => ["sifa", "profile"],
482
869
  byHandle: (handleOrDid) => ["sifa", "profile", handleOrDid],
483
- atFundLink: (did) => ["sifa", "profile", "at-fund-link", did]
870
+ atFundLink: (did) => ["sifa", "profile", "at-fund-link", did],
871
+ externalAccounts: (handleOrDid) => ["sifa", "profile", "external-accounts", handleOrDid]
484
872
  },
485
873
  position: {
486
874
  all: () => ["sifa", "position"],
@@ -490,6 +878,7 @@ var sifaQueryKeys = {
490
878
  all: () => ["sifa", "search"],
491
879
  profiles: (filters) => ["sifa", "search", "profiles", filters],
492
880
  skills: (query) => ["sifa", "search", "skills", query],
881
+ canonicalSkills: (query, limit) => ["sifa", "search", "canonical-skills", query, limit],
493
882
  filters: () => ["sifa", "search", "filters"]
494
883
  },
495
884
  discovery: {
@@ -557,93 +946,669 @@ function useAtFundLink(did, options) {
557
946
  ...options
558
947
  });
559
948
  }
560
- function useCreatePosition(ownerDid, options) {
949
+ async function invalidateProfile(queryClient, ownerHandleOrDid) {
950
+ await queryClient.invalidateQueries({
951
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
952
+ });
953
+ }
954
+ function useUpdateProfileSelf(ownerHandleOrDid, options) {
561
955
  const config = useSifaConfig();
562
956
  const queryClient = reactQuery.useQueryClient();
563
957
  return reactQuery.useMutation({
564
- mutationFn: (data) => createPosition(config, data),
958
+ mutationFn: (data) => updateProfileSelf(config, data),
565
959
  onSuccess: async (result, variables, onMutateResult, context) => {
566
960
  if (result.success) {
567
- await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.profile.byHandle(ownerDid) });
568
- await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.position.byOwner(ownerDid) });
961
+ await invalidateProfile(queryClient, ownerHandleOrDid);
569
962
  }
570
963
  await options?.onSuccess?.(result, variables, onMutateResult, context);
571
964
  },
572
965
  ...options
573
966
  });
574
967
  }
575
- function useStats(options) {
968
+ function useUpdateProfileOverride(ownerHandleOrDid, options) {
576
969
  const config = useSifaConfig();
577
- return reactQuery.useQuery({
578
- queryKey: sifaQueryKeys.stats.homepage(),
579
- queryFn: () => fetchStats(config),
970
+ const queryClient = reactQuery.useQueryClient();
971
+ return reactQuery.useMutation({
972
+ mutationFn: (data) => updateProfileOverride(config, data),
973
+ onSuccess: async (result, variables, onMutateResult, context) => {
974
+ if (result.success) {
975
+ await invalidateProfile(queryClient, ownerHandleOrDid);
976
+ }
977
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
978
+ },
580
979
  ...options
581
980
  });
582
981
  }
583
- function useAppsRegistry(options) {
982
+ function useRefreshPds(ownerHandleOrDid, options) {
584
983
  const config = useSifaConfig();
585
- return reactQuery.useQuery({
586
- queryKey: sifaQueryKeys.apps.registry(),
587
- queryFn: () => fetchAppsRegistry(config),
984
+ const queryClient = reactQuery.useQueryClient();
985
+ return reactQuery.useMutation({
986
+ mutationFn: () => refreshPds(config),
987
+ onSuccess: async (result, variables, onMutateResult, context) => {
988
+ if (result.success) {
989
+ await invalidateProfile(queryClient, ownerHandleOrDid);
990
+ }
991
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
992
+ },
588
993
  ...options
589
994
  });
590
995
  }
591
- function useHiddenApps(options) {
996
+ function useUploadAvatar(ownerHandleOrDid, options) {
592
997
  const config = useSifaConfig();
593
- return reactQuery.useQuery({
594
- queryKey: sifaQueryKeys.apps.hidden(),
595
- queryFn: () => fetchHiddenApps(config),
998
+ const queryClient = reactQuery.useQueryClient();
999
+ return reactQuery.useMutation({
1000
+ mutationFn: (file) => uploadAvatar(config, file),
1001
+ onSuccess: async (result, variables, onMutateResult, context) => {
1002
+ if (result.success) {
1003
+ await invalidateProfile(queryClient, ownerHandleOrDid);
1004
+ }
1005
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1006
+ },
596
1007
  ...options
597
1008
  });
598
1009
  }
599
- function useSearchProfiles(filters, options) {
1010
+ function useDeleteAvatarOverride(ownerHandleOrDid, options) {
600
1011
  const config = useSifaConfig();
601
- return reactQuery.useQuery({
602
- queryKey: sifaQueryKeys.search.profiles(filters),
603
- queryFn: () => fetchSearchProfiles(config, filters),
1012
+ const queryClient = reactQuery.useQueryClient();
1013
+ return reactQuery.useMutation({
1014
+ mutationFn: () => deleteAvatarOverride(config),
1015
+ onSuccess: async (result, variables, onMutateResult, context) => {
1016
+ if (result.success) {
1017
+ await invalidateProfile(queryClient, ownerHandleOrDid);
1018
+ }
1019
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1020
+ },
604
1021
  ...options
605
1022
  });
606
1023
  }
607
- function useSkillSuggestions(query, options) {
1024
+ function useCreatePosition(ownerDid, options) {
608
1025
  const config = useSifaConfig();
609
- return reactQuery.useQuery({
610
- queryKey: sifaQueryKeys.search.skills(query),
611
- queryFn: () => fetchSkillSuggestions(config, query),
612
- enabled: query.trim().length > 0 && (options?.enabled ?? true),
1026
+ const queryClient = reactQuery.useQueryClient();
1027
+ return reactQuery.useMutation({
1028
+ mutationFn: (data) => createPosition(config, data),
1029
+ onSuccess: async (result, variables, onMutateResult, context) => {
1030
+ if (result.success) {
1031
+ await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.profile.byHandle(ownerDid) });
1032
+ await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.position.byOwner(ownerDid) });
1033
+ }
1034
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1035
+ },
613
1036
  ...options
614
1037
  });
615
1038
  }
616
- function useSearchFilters(options) {
617
- const config = useSifaConfig();
618
- return reactQuery.useQuery({
619
- queryKey: sifaQueryKeys.search.filters(),
620
- queryFn: () => fetchSearchFilters(config),
621
- ...options
1039
+ async function invalidatePositionCaches(queryClient, ownerHandleOrDid) {
1040
+ await queryClient.invalidateQueries({
1041
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1042
+ });
1043
+ await queryClient.invalidateQueries({
1044
+ queryKey: sifaQueryKeys.position.byOwner(ownerHandleOrDid)
622
1045
  });
623
1046
  }
624
- function useSimilarProfiles(did, opts = {}, options) {
1047
+ function useUpdatePosition(ownerHandleOrDid, options) {
625
1048
  const config = useSifaConfig();
626
- const limit = opts.limit ?? 5;
627
- return reactQuery.useQuery({
628
- queryKey: sifaQueryKeys.discovery.similar(did ?? "", limit),
629
- queryFn: () => fetchSimilarProfiles(config, did ?? "", { limit }),
630
- enabled: Boolean(did) && (options?.enabled ?? true),
1049
+ const queryClient = reactQuery.useQueryClient();
1050
+ return reactQuery.useMutation({
1051
+ mutationFn: ({ rkey, data }) => updatePosition(config, rkey, data),
1052
+ onSuccess: async (result, variables, onMutateResult, context) => {
1053
+ if (result.success) {
1054
+ await invalidatePositionCaches(queryClient, ownerHandleOrDid);
1055
+ }
1056
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1057
+ },
631
1058
  ...options
632
1059
  });
633
1060
  }
634
- function useSuggestions(opts = {}, options) {
1061
+ function useDeletePosition(ownerHandleOrDid, options) {
635
1062
  const config = useSifaConfig();
636
- return reactQuery.useQuery({
637
- queryKey: sifaQueryKeys.discovery.suggestions(opts),
638
- queryFn: () => fetchSuggestions(config, opts),
1063
+ const queryClient = reactQuery.useQueryClient();
1064
+ return reactQuery.useMutation({
1065
+ mutationFn: (rkey) => deletePosition(config, rkey),
1066
+ onSuccess: async (result, variables, onMutateResult, context) => {
1067
+ if (result.success) {
1068
+ await invalidatePositionCaches(queryClient, ownerHandleOrDid);
1069
+ }
1070
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1071
+ },
639
1072
  ...options
640
1073
  });
641
1074
  }
642
- function useSuggestionCount(since, options) {
1075
+ function useSetPositionPrimary(ownerHandleOrDid, options) {
643
1076
  const config = useSifaConfig();
644
- return reactQuery.useQuery({
645
- queryKey: sifaQueryKeys.discovery.suggestionCount(since),
646
- queryFn: () => fetchSuggestionCount(config, since),
1077
+ const queryClient = reactQuery.useQueryClient();
1078
+ return reactQuery.useMutation({
1079
+ mutationFn: (rkey) => setPositionPrimary(config, rkey),
1080
+ onSuccess: async (result, variables, onMutateResult, context) => {
1081
+ if (result.success) {
1082
+ await invalidatePositionCaches(queryClient, ownerHandleOrDid);
1083
+ }
1084
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1085
+ },
1086
+ ...options
1087
+ });
1088
+ }
1089
+ function useUnsetPositionPrimary(ownerHandleOrDid, options) {
1090
+ const config = useSifaConfig();
1091
+ const queryClient = reactQuery.useQueryClient();
1092
+ return reactQuery.useMutation({
1093
+ mutationFn: (rkey) => unsetPositionPrimary(config, rkey),
1094
+ onSuccess: async (result, variables, onMutateResult, context) => {
1095
+ if (result.success) {
1096
+ await invalidatePositionCaches(queryClient, ownerHandleOrDid);
1097
+ }
1098
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1099
+ },
1100
+ ...options
1101
+ });
1102
+ }
1103
+ function useLinkSkillToPosition(ownerHandleOrDid, options) {
1104
+ const config = useSifaConfig();
1105
+ const queryClient = reactQuery.useQueryClient();
1106
+ return reactQuery.useMutation({
1107
+ mutationFn: ({ position, skillRef }) => linkSkillToPosition(config, position, skillRef),
1108
+ onSuccess: async (result, variables, onMutateResult, context) => {
1109
+ if (result.success) {
1110
+ await invalidatePositionCaches(queryClient, ownerHandleOrDid);
1111
+ }
1112
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1113
+ },
1114
+ ...options
1115
+ });
1116
+ }
1117
+ function useUnlinkSkillFromPosition(ownerHandleOrDid, options) {
1118
+ const config = useSifaConfig();
1119
+ const queryClient = reactQuery.useQueryClient();
1120
+ return reactQuery.useMutation({
1121
+ mutationFn: ({ position, skillRef }) => unlinkSkillFromPosition(config, position, skillRef),
1122
+ onSuccess: async (result, variables, onMutateResult, context) => {
1123
+ if (result.success) {
1124
+ await invalidatePositionCaches(queryClient, ownerHandleOrDid);
1125
+ }
1126
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1127
+ },
1128
+ ...options
1129
+ });
1130
+ }
1131
+ async function invalidateProfile2(queryClient, ownerHandleOrDid) {
1132
+ await queryClient.invalidateQueries({
1133
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1134
+ });
1135
+ }
1136
+ function useCreateEducation(ownerHandleOrDid, options) {
1137
+ const config = useSifaConfig();
1138
+ const queryClient = reactQuery.useQueryClient();
1139
+ return reactQuery.useMutation({
1140
+ mutationFn: (data) => createEducation(config, data),
1141
+ onSuccess: async (result, variables, onMutateResult, context) => {
1142
+ if (result.success) {
1143
+ await invalidateProfile2(queryClient, ownerHandleOrDid);
1144
+ }
1145
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1146
+ },
1147
+ ...options
1148
+ });
1149
+ }
1150
+ function useUpdateEducation(ownerHandleOrDid, options) {
1151
+ const config = useSifaConfig();
1152
+ const queryClient = reactQuery.useQueryClient();
1153
+ return reactQuery.useMutation({
1154
+ mutationFn: ({ rkey, data }) => updateEducation(config, rkey, data),
1155
+ onSuccess: async (result, variables, onMutateResult, context) => {
1156
+ if (result.success) {
1157
+ await invalidateProfile2(queryClient, ownerHandleOrDid);
1158
+ }
1159
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1160
+ },
1161
+ ...options
1162
+ });
1163
+ }
1164
+ function useDeleteEducation(ownerHandleOrDid, options) {
1165
+ const config = useSifaConfig();
1166
+ const queryClient = reactQuery.useQueryClient();
1167
+ return reactQuery.useMutation({
1168
+ mutationFn: (rkey) => deleteEducation(config, rkey),
1169
+ onSuccess: async (result, variables, onMutateResult, context) => {
1170
+ if (result.success) {
1171
+ await invalidateProfile2(queryClient, ownerHandleOrDid);
1172
+ }
1173
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1174
+ },
1175
+ ...options
1176
+ });
1177
+ }
1178
+ async function invalidateProfile3(queryClient, ownerHandleOrDid) {
1179
+ await queryClient.invalidateQueries({
1180
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1181
+ });
1182
+ }
1183
+ function useCreateSkill(ownerHandleOrDid, options) {
1184
+ const config = useSifaConfig();
1185
+ const queryClient = reactQuery.useQueryClient();
1186
+ return reactQuery.useMutation({
1187
+ mutationFn: (data) => createSkill(config, data),
1188
+ onSuccess: async (result, variables, onMutateResult, context) => {
1189
+ if (result.success) {
1190
+ await invalidateProfile3(queryClient, ownerHandleOrDid);
1191
+ }
1192
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1193
+ },
1194
+ ...options
1195
+ });
1196
+ }
1197
+ function useUpdateSkill(ownerHandleOrDid, options) {
1198
+ const config = useSifaConfig();
1199
+ const queryClient = reactQuery.useQueryClient();
1200
+ return reactQuery.useMutation({
1201
+ mutationFn: ({ rkey, data }) => updateSkill(config, rkey, data),
1202
+ onSuccess: async (result, variables, onMutateResult, context) => {
1203
+ if (result.success) {
1204
+ await invalidateProfile3(queryClient, ownerHandleOrDid);
1205
+ }
1206
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1207
+ },
1208
+ ...options
1209
+ });
1210
+ }
1211
+ function useDeleteSkill(ownerHandleOrDid, options) {
1212
+ const config = useSifaConfig();
1213
+ const queryClient = reactQuery.useQueryClient();
1214
+ return reactQuery.useMutation({
1215
+ mutationFn: (rkey) => deleteSkill(config, rkey),
1216
+ onSuccess: async (result, variables, onMutateResult, context) => {
1217
+ if (result.success) {
1218
+ await invalidateProfile3(queryClient, ownerHandleOrDid);
1219
+ }
1220
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1221
+ },
1222
+ ...options
1223
+ });
1224
+ }
1225
+ async function invalidateProfile4(queryClient, ownerHandleOrDid) {
1226
+ await queryClient.invalidateQueries({
1227
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1228
+ });
1229
+ }
1230
+ function useCreateRecord(ownerHandleOrDid, options) {
1231
+ const config = useSifaConfig();
1232
+ const queryClient = reactQuery.useQueryClient();
1233
+ return reactQuery.useMutation({
1234
+ mutationFn: ({ collection, data }) => createRecord(config, collection, data),
1235
+ onSuccess: async (result, variables, onMutateResult, context) => {
1236
+ if (result.success) {
1237
+ await invalidateProfile4(queryClient, ownerHandleOrDid);
1238
+ }
1239
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1240
+ },
1241
+ ...options
1242
+ });
1243
+ }
1244
+ function useUpdateRecord(ownerHandleOrDid, options) {
1245
+ const config = useSifaConfig();
1246
+ const queryClient = reactQuery.useQueryClient();
1247
+ return reactQuery.useMutation({
1248
+ mutationFn: ({ collection, rkey, data }) => updateRecord(config, collection, rkey, data),
1249
+ onSuccess: async (result, variables, onMutateResult, context) => {
1250
+ if (result.success) {
1251
+ await invalidateProfile4(queryClient, ownerHandleOrDid);
1252
+ }
1253
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1254
+ },
1255
+ ...options
1256
+ });
1257
+ }
1258
+ function useDeleteRecord(ownerHandleOrDid, options) {
1259
+ const config = useSifaConfig();
1260
+ const queryClient = reactQuery.useQueryClient();
1261
+ return reactQuery.useMutation({
1262
+ mutationFn: ({ collection, rkey }) => deleteRecord(config, collection, rkey),
1263
+ onSuccess: async (result, variables, onMutateResult, context) => {
1264
+ if (result.success) {
1265
+ await invalidateProfile4(queryClient, ownerHandleOrDid);
1266
+ }
1267
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1268
+ },
1269
+ ...options
1270
+ });
1271
+ }
1272
+ async function invalidateProfile5(queryClient, ownerHandleOrDid) {
1273
+ await queryClient.invalidateQueries({
1274
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1275
+ });
1276
+ }
1277
+ function useCreateProfileLocation(ownerHandleOrDid, options) {
1278
+ const config = useSifaConfig();
1279
+ const queryClient = reactQuery.useQueryClient();
1280
+ return reactQuery.useMutation({
1281
+ mutationFn: (data) => createProfileLocation(config, data),
1282
+ onSuccess: async (result, variables, onMutateResult, context) => {
1283
+ if (result.success) {
1284
+ await invalidateProfile5(queryClient, ownerHandleOrDid);
1285
+ }
1286
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1287
+ },
1288
+ ...options
1289
+ });
1290
+ }
1291
+ function useUpdateProfileLocation(ownerHandleOrDid, options) {
1292
+ const config = useSifaConfig();
1293
+ const queryClient = reactQuery.useQueryClient();
1294
+ return reactQuery.useMutation({
1295
+ mutationFn: ({ rkey, data }) => updateProfileLocation(config, rkey, data),
1296
+ onSuccess: async (result, variables, onMutateResult, context) => {
1297
+ if (result.success) {
1298
+ await invalidateProfile5(queryClient, ownerHandleOrDid);
1299
+ }
1300
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1301
+ },
1302
+ ...options
1303
+ });
1304
+ }
1305
+ function useDeleteProfileLocation(ownerHandleOrDid, options) {
1306
+ const config = useSifaConfig();
1307
+ const queryClient = reactQuery.useQueryClient();
1308
+ return reactQuery.useMutation({
1309
+ mutationFn: (rkey) => deleteProfileLocation(config, rkey),
1310
+ onSuccess: async (result, variables, onMutateResult, context) => {
1311
+ if (result.success) {
1312
+ await invalidateProfile5(queryClient, ownerHandleOrDid);
1313
+ }
1314
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1315
+ },
1316
+ ...options
1317
+ });
1318
+ }
1319
+ async function invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid) {
1320
+ await queryClient.invalidateQueries({
1321
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1322
+ });
1323
+ await queryClient.invalidateQueries({
1324
+ queryKey: sifaQueryKeys.profile.externalAccounts(ownerHandleOrDid)
1325
+ });
1326
+ }
1327
+ function useExternalAccounts(handleOrDid, options) {
1328
+ const config = useSifaConfig();
1329
+ return reactQuery.useQuery({
1330
+ queryKey: sifaQueryKeys.profile.externalAccounts(handleOrDid ?? ""),
1331
+ queryFn: () => fetchExternalAccounts(config, handleOrDid ?? ""),
1332
+ enabled: Boolean(handleOrDid) && (options?.enabled ?? true),
1333
+ ...options
1334
+ });
1335
+ }
1336
+ function useCreateExternalAccount(ownerHandleOrDid, options) {
1337
+ const config = useSifaConfig();
1338
+ const queryClient = reactQuery.useQueryClient();
1339
+ return reactQuery.useMutation({
1340
+ mutationFn: (data) => createExternalAccount(config, data),
1341
+ onSuccess: async (result, variables, onMutateResult, context) => {
1342
+ if (result.success) {
1343
+ await invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid);
1344
+ }
1345
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1346
+ },
1347
+ ...options
1348
+ });
1349
+ }
1350
+ function useUpdateExternalAccount(ownerHandleOrDid, options) {
1351
+ const config = useSifaConfig();
1352
+ const queryClient = reactQuery.useQueryClient();
1353
+ return reactQuery.useMutation({
1354
+ mutationFn: ({ rkey, data }) => updateExternalAccount(config, rkey, data),
1355
+ onSuccess: async (result, variables, onMutateResult, context) => {
1356
+ if (result.success) {
1357
+ await invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid);
1358
+ }
1359
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1360
+ },
1361
+ ...options
1362
+ });
1363
+ }
1364
+ function useDeleteExternalAccount(ownerHandleOrDid, options) {
1365
+ const config = useSifaConfig();
1366
+ const queryClient = reactQuery.useQueryClient();
1367
+ return reactQuery.useMutation({
1368
+ mutationFn: (rkey) => deleteExternalAccount(config, rkey),
1369
+ onSuccess: async (result, variables, onMutateResult, context) => {
1370
+ if (result.success) {
1371
+ await invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid);
1372
+ }
1373
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1374
+ },
1375
+ ...options
1376
+ });
1377
+ }
1378
+ function useSetExternalAccountPrimary(ownerHandleOrDid, options) {
1379
+ const config = useSifaConfig();
1380
+ const queryClient = reactQuery.useQueryClient();
1381
+ return reactQuery.useMutation({
1382
+ mutationFn: (rkey) => setExternalAccountPrimary(config, rkey),
1383
+ onSuccess: async (result, variables, onMutateResult, context) => {
1384
+ if (result.success) {
1385
+ await invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid);
1386
+ }
1387
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1388
+ },
1389
+ ...options
1390
+ });
1391
+ }
1392
+ function useUnsetExternalAccountPrimary(ownerHandleOrDid, options) {
1393
+ const config = useSifaConfig();
1394
+ const queryClient = reactQuery.useQueryClient();
1395
+ return reactQuery.useMutation({
1396
+ mutationFn: (rkey) => unsetExternalAccountPrimary(config, rkey),
1397
+ onSuccess: async (result, variables, onMutateResult, context) => {
1398
+ if (result.success) {
1399
+ await invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid);
1400
+ }
1401
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1402
+ },
1403
+ ...options
1404
+ });
1405
+ }
1406
+ function useVerifyExternalAccount(ownerHandleOrDid, options) {
1407
+ const config = useSifaConfig();
1408
+ const queryClient = reactQuery.useQueryClient();
1409
+ return reactQuery.useMutation({
1410
+ mutationFn: (rkey) => verifyExternalAccount(config, rkey),
1411
+ onSuccess: async (result, variables, onMutateResult, context) => {
1412
+ if (result.success) {
1413
+ await invalidateProfileAndExternalAccounts(queryClient, ownerHandleOrDid);
1414
+ }
1415
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1416
+ },
1417
+ ...options
1418
+ });
1419
+ }
1420
+ function useCreateEndorsement(endorsedHandleOrDid, options) {
1421
+ const config = useSifaConfig();
1422
+ const queryClient = reactQuery.useQueryClient();
1423
+ return reactQuery.useMutation({
1424
+ mutationFn: (data) => createEndorsement(config, data),
1425
+ onSuccess: async (result, variables, onMutateResult, context) => {
1426
+ if (result.success && endorsedHandleOrDid) {
1427
+ await queryClient.invalidateQueries({
1428
+ queryKey: sifaQueryKeys.profile.byHandle(endorsedHandleOrDid)
1429
+ });
1430
+ await queryClient.invalidateQueries({
1431
+ queryKey: sifaQueryKeys.endorsement.count(endorsedHandleOrDid)
1432
+ });
1433
+ }
1434
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1435
+ },
1436
+ ...options
1437
+ });
1438
+ }
1439
+ async function invalidateProfile6(queryClient, ownerHandleOrDid) {
1440
+ await queryClient.invalidateQueries({
1441
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1442
+ });
1443
+ }
1444
+ function useHideKeytraceClaim(ownerHandleOrDid, options) {
1445
+ const config = useSifaConfig();
1446
+ const queryClient = reactQuery.useQueryClient();
1447
+ return reactQuery.useMutation({
1448
+ mutationFn: (rkey) => hideKeytraceClaim(config, rkey),
1449
+ onSuccess: async (result, variables, onMutateResult, context) => {
1450
+ if (result.success) {
1451
+ await invalidateProfile6(queryClient, ownerHandleOrDid);
1452
+ }
1453
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1454
+ },
1455
+ ...options
1456
+ });
1457
+ }
1458
+ function useUnhideKeytraceClaim(ownerHandleOrDid, options) {
1459
+ const config = useSifaConfig();
1460
+ const queryClient = reactQuery.useQueryClient();
1461
+ return reactQuery.useMutation({
1462
+ mutationFn: (rkey) => unhideKeytraceClaim(config, rkey),
1463
+ onSuccess: async (result, variables, onMutateResult, context) => {
1464
+ if (result.success) {
1465
+ await invalidateProfile6(queryClient, ownerHandleOrDid);
1466
+ }
1467
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1468
+ },
1469
+ ...options
1470
+ });
1471
+ }
1472
+ async function invalidateProfile7(queryClient, ownerHandleOrDid) {
1473
+ await queryClient.invalidateQueries({
1474
+ queryKey: sifaQueryKeys.profile.byHandle(ownerHandleOrDid)
1475
+ });
1476
+ }
1477
+ function makeWriteHook(fetcher) {
1478
+ return function useHook(ownerHandleOrDid, options) {
1479
+ const config = useSifaConfig();
1480
+ const queryClient = reactQuery.useQueryClient();
1481
+ return reactQuery.useMutation({
1482
+ mutationFn: (v) => fetcher(config, v),
1483
+ onSuccess: async (result, variables, onMutateResult, context) => {
1484
+ if (result.success) {
1485
+ await invalidateProfile7(queryClient, ownerHandleOrDid);
1486
+ }
1487
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1488
+ },
1489
+ ...options
1490
+ });
1491
+ };
1492
+ }
1493
+ var useHideOrcidPublication = makeWriteHook(
1494
+ (config, putCode) => hideOrcidPublication(config, putCode)
1495
+ );
1496
+ var useUnhideOrcidPublication = makeWriteHook(
1497
+ (config, putCode) => unhideOrcidPublication(config, putCode)
1498
+ );
1499
+ var useHideStandardPublication = makeWriteHook(
1500
+ (config, uri) => hideStandardPublication(config, uri)
1501
+ );
1502
+ var useUnhideStandardPublication = makeWriteHook(
1503
+ (config, uri) => unhideStandardPublication(config, uri)
1504
+ );
1505
+ var useBulkHideStandardPublications = makeWriteHook(
1506
+ (config, uris) => bulkHideStandardPublications(config, uris)
1507
+ );
1508
+ var useBulkUnhideStandardPublications = makeWriteHook(
1509
+ (config, uris) => bulkUnhideStandardPublications(config, uris)
1510
+ );
1511
+ var useHideSifaPublication = makeWriteHook(
1512
+ (config, rkey) => hideSifaPublication(config, rkey)
1513
+ );
1514
+ var useUnhideSifaPublication = makeWriteHook(
1515
+ (config, rkey) => unhideSifaPublication(config, rkey)
1516
+ );
1517
+ function useRefreshOrcidPublications(ownerHandleOrDid, options) {
1518
+ const config = useSifaConfig();
1519
+ const queryClient = reactQuery.useQueryClient();
1520
+ return reactQuery.useMutation({
1521
+ mutationFn: () => refreshOrcidPublications(config),
1522
+ onSuccess: async (result, variables, onMutateResult, context) => {
1523
+ if (result.success) {
1524
+ await invalidateProfile7(queryClient, ownerHandleOrDid);
1525
+ }
1526
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1527
+ },
1528
+ ...options
1529
+ });
1530
+ }
1531
+ function useStats(options) {
1532
+ const config = useSifaConfig();
1533
+ return reactQuery.useQuery({
1534
+ queryKey: sifaQueryKeys.stats.homepage(),
1535
+ queryFn: () => fetchStats(config),
1536
+ ...options
1537
+ });
1538
+ }
1539
+ function useAppsRegistry(options) {
1540
+ const config = useSifaConfig();
1541
+ return reactQuery.useQuery({
1542
+ queryKey: sifaQueryKeys.apps.registry(),
1543
+ queryFn: () => fetchAppsRegistry(config),
1544
+ ...options
1545
+ });
1546
+ }
1547
+ function useHiddenApps(options) {
1548
+ const config = useSifaConfig();
1549
+ return reactQuery.useQuery({
1550
+ queryKey: sifaQueryKeys.apps.hidden(),
1551
+ queryFn: () => fetchHiddenApps(config),
1552
+ ...options
1553
+ });
1554
+ }
1555
+ function useSearchProfiles(filters, options) {
1556
+ const config = useSifaConfig();
1557
+ return reactQuery.useQuery({
1558
+ queryKey: sifaQueryKeys.search.profiles(filters),
1559
+ queryFn: () => fetchSearchProfiles(config, filters),
1560
+ ...options
1561
+ });
1562
+ }
1563
+ function useSkillSuggestions(query, options) {
1564
+ const config = useSifaConfig();
1565
+ return reactQuery.useQuery({
1566
+ queryKey: sifaQueryKeys.search.skills(query),
1567
+ queryFn: () => fetchSkillSuggestions(config, query),
1568
+ enabled: query.trim().length > 0 && (options?.enabled ?? true),
1569
+ ...options
1570
+ });
1571
+ }
1572
+ function useCanonicalSkillSearch(query, limit = 10, options) {
1573
+ const config = useSifaConfig();
1574
+ return reactQuery.useQuery({
1575
+ queryKey: sifaQueryKeys.search.canonicalSkills(query, limit),
1576
+ queryFn: () => searchSkills(config, query, limit),
1577
+ enabled: query.trim().length > 0 && (options?.enabled ?? true),
1578
+ ...options
1579
+ });
1580
+ }
1581
+ function useSearchFilters(options) {
1582
+ const config = useSifaConfig();
1583
+ return reactQuery.useQuery({
1584
+ queryKey: sifaQueryKeys.search.filters(),
1585
+ queryFn: () => fetchSearchFilters(config),
1586
+ ...options
1587
+ });
1588
+ }
1589
+ function useSimilarProfiles(did, opts = {}, options) {
1590
+ const config = useSifaConfig();
1591
+ const limit = opts.limit ?? 5;
1592
+ return reactQuery.useQuery({
1593
+ queryKey: sifaQueryKeys.discovery.similar(did ?? "", limit),
1594
+ queryFn: () => fetchSimilarProfiles(config, did ?? "", { limit }),
1595
+ enabled: Boolean(did) && (options?.enabled ?? true),
1596
+ ...options
1597
+ });
1598
+ }
1599
+ function useSuggestions(opts = {}, options) {
1600
+ const config = useSifaConfig();
1601
+ return reactQuery.useQuery({
1602
+ queryKey: sifaQueryKeys.discovery.suggestions(opts),
1603
+ queryFn: () => fetchSuggestions(config, opts),
1604
+ ...options
1605
+ });
1606
+ }
1607
+ function useSuggestionCount(since, options) {
1608
+ const config = useSifaConfig();
1609
+ return reactQuery.useQuery({
1610
+ queryKey: sifaQueryKeys.discovery.suggestionCount(since),
1611
+ queryFn: () => fetchSuggestionCount(config, since),
647
1612
  ...options
648
1613
  });
649
1614
  }
@@ -725,6 +1690,34 @@ function useAppAccountCheck(appId, options) {
725
1690
  ...options
726
1691
  });
727
1692
  }
1693
+ function useCreateReaction(options) {
1694
+ const config = useSifaConfig();
1695
+ const queryClient = reactQuery.useQueryClient();
1696
+ return reactQuery.useMutation({
1697
+ mutationFn: ({ targetUri, appId, targetCid }) => createReaction(config, targetUri, appId, targetCid),
1698
+ onSuccess: async (result, variables, onMutateResult, context) => {
1699
+ if (result.ok) {
1700
+ await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.reactions.all() });
1701
+ }
1702
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1703
+ },
1704
+ ...options
1705
+ });
1706
+ }
1707
+ function useDeleteReaction(options) {
1708
+ const config = useSifaConfig();
1709
+ const queryClient = reactQuery.useQueryClient();
1710
+ return reactQuery.useMutation({
1711
+ mutationFn: ({ targetUri, appId }) => deleteReaction(config, targetUri, appId),
1712
+ onSuccess: async (result, variables, onMutateResult, context) => {
1713
+ if (result.success) {
1714
+ await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.reactions.all() });
1715
+ }
1716
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1717
+ },
1718
+ ...options
1719
+ });
1720
+ }
728
1721
  function useRoadmapVotes(options) {
729
1722
  const config = useSifaConfig();
730
1723
  return reactQuery.useQuery({
@@ -741,19 +1734,100 @@ function useMyRoadmapVotes(options) {
741
1734
  ...options
742
1735
  });
743
1736
  }
1737
+ async function invalidateRoadmap(queryClient) {
1738
+ await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.roadmap.all() });
1739
+ }
1740
+ function useCastRoadmapVote(options) {
1741
+ const config = useSifaConfig();
1742
+ const queryClient = reactQuery.useQueryClient();
1743
+ return reactQuery.useMutation({
1744
+ mutationFn: (key) => castRoadmapVote(config, key),
1745
+ onSuccess: async (result, variables, onMutateResult, context) => {
1746
+ if (result.success) {
1747
+ await invalidateRoadmap(queryClient);
1748
+ }
1749
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1750
+ },
1751
+ ...options
1752
+ });
1753
+ }
1754
+ function useRetractRoadmapVote(options) {
1755
+ const config = useSifaConfig();
1756
+ const queryClient = reactQuery.useQueryClient();
1757
+ return reactQuery.useMutation({
1758
+ mutationFn: (key) => retractRoadmapVote(config, key),
1759
+ onSuccess: async (result, variables, onMutateResult, context) => {
1760
+ if (result.success) {
1761
+ await invalidateRoadmap(queryClient);
1762
+ }
1763
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1764
+ },
1765
+ ...options
1766
+ });
1767
+ }
1768
+ function useResetProfile(options) {
1769
+ const config = useSifaConfig();
1770
+ const queryClient = reactQuery.useQueryClient();
1771
+ return reactQuery.useMutation({
1772
+ mutationFn: (deletePdsData) => resetProfile(config, deletePdsData),
1773
+ onSuccess: async (result, variables, onMutateResult, context) => {
1774
+ if (result.success) {
1775
+ await queryClient.invalidateQueries({ queryKey: sifaQueryKeys.all() });
1776
+ }
1777
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1778
+ },
1779
+ ...options
1780
+ });
1781
+ }
1782
+ function useDeleteAccount(options) {
1783
+ const config = useSifaConfig();
1784
+ const queryClient = reactQuery.useQueryClient();
1785
+ return reactQuery.useMutation({
1786
+ mutationFn: (deletePdsData) => deleteAccount(config, deletePdsData),
1787
+ onSuccess: async (result, variables, onMutateResult, context) => {
1788
+ if (result.success) {
1789
+ queryClient.clear();
1790
+ }
1791
+ await options?.onSuccess?.(result, variables, onMutateResult, context);
1792
+ },
1793
+ ...options
1794
+ });
1795
+ }
744
1796
 
745
1797
  exports.ApiError = ApiError;
746
1798
  exports.QUOTED_POSTS_BATCH_MAX = QUOTED_POSTS_BATCH_MAX;
747
1799
  exports.SifaProvider = SifaProvider;
748
1800
  exports.apiFetch = apiFetch;
749
1801
  exports.apiFetchOrNull = apiFetchOrNull;
1802
+ exports.apiWrite = apiWrite;
1803
+ exports.apiWriteCreate = apiWriteCreate;
1804
+ exports.bulkHideStandardPublications = bulkHideStandardPublications;
1805
+ exports.bulkUnhideStandardPublications = bulkUnhideStandardPublications;
1806
+ exports.castRoadmapVote = castRoadmapVote;
750
1807
  exports.checkAppAccount = checkAppAccount;
1808
+ exports.createEducation = createEducation;
1809
+ exports.createEndorsement = createEndorsement;
1810
+ exports.createExternalAccount = createExternalAccount;
751
1811
  exports.createPosition = createPosition;
1812
+ exports.createProfileLocation = createProfileLocation;
1813
+ exports.createReaction = createReaction;
1814
+ exports.createRecord = createRecord;
1815
+ exports.createSkill = createSkill;
1816
+ exports.deleteAccount = deleteAccount;
1817
+ exports.deleteAvatarOverride = deleteAvatarOverride;
1818
+ exports.deleteEducation = deleteEducation;
1819
+ exports.deleteExternalAccount = deleteExternalAccount;
1820
+ exports.deletePosition = deletePosition;
1821
+ exports.deleteProfileLocation = deleteProfileLocation;
1822
+ exports.deleteReaction = deleteReaction;
1823
+ exports.deleteRecord = deleteRecord;
1824
+ exports.deleteSkill = deleteSkill;
752
1825
  exports.fetchActivityFeed = fetchActivityFeed;
753
1826
  exports.fetchActivityTeaser = fetchActivityTeaser;
754
1827
  exports.fetchAppsRegistry = fetchAppsRegistry;
755
1828
  exports.fetchAtFundLink = fetchAtFundLink;
756
1829
  exports.fetchEndorsementCount = fetchEndorsementCount;
1830
+ exports.fetchExternalAccounts = fetchExternalAccounts;
757
1831
  exports.fetchFeaturedProfile = fetchFeaturedProfile;
758
1832
  exports.fetchFollowing = fetchFollowing;
759
1833
  exports.fetchHeatmapData = fetchHeatmapData;
@@ -770,31 +1844,109 @@ exports.fetchSkillSuggestions = fetchSkillSuggestions;
770
1844
  exports.fetchStats = fetchStats;
771
1845
  exports.fetchSuggestionCount = fetchSuggestionCount;
772
1846
  exports.fetchSuggestions = fetchSuggestions;
1847
+ exports.hideKeytraceClaim = hideKeytraceClaim;
1848
+ exports.hideOrcidPublication = hideOrcidPublication;
1849
+ exports.hideSifaPublication = hideSifaPublication;
1850
+ exports.hideStandardPublication = hideStandardPublication;
1851
+ exports.linkSkillToPosition = linkSkillToPosition;
1852
+ exports.refreshOrcidPublications = refreshOrcidPublications;
1853
+ exports.refreshPds = refreshPds;
1854
+ exports.resetProfile = resetProfile;
773
1855
  exports.resolveQuotedPosts = resolveQuotedPosts;
1856
+ exports.retractRoadmapVote = retractRoadmapVote;
1857
+ exports.searchSkills = searchSkills;
1858
+ exports.setExternalAccountPrimary = setExternalAccountPrimary;
1859
+ exports.setPositionPrimary = setPositionPrimary;
774
1860
  exports.sifaQueryKeys = sifaQueryKeys;
1861
+ exports.unhideKeytraceClaim = unhideKeytraceClaim;
1862
+ exports.unhideOrcidPublication = unhideOrcidPublication;
1863
+ exports.unhideSifaPublication = unhideSifaPublication;
1864
+ exports.unhideStandardPublication = unhideStandardPublication;
1865
+ exports.unlinkSkillFromPosition = unlinkSkillFromPosition;
1866
+ exports.unsetExternalAccountPrimary = unsetExternalAccountPrimary;
1867
+ exports.unsetPositionPrimary = unsetPositionPrimary;
1868
+ exports.updateEducation = updateEducation;
1869
+ exports.updateExternalAccount = updateExternalAccount;
1870
+ exports.updatePosition = updatePosition;
1871
+ exports.updateProfileLocation = updateProfileLocation;
1872
+ exports.updateProfileOverride = updateProfileOverride;
1873
+ exports.updateProfileSelf = updateProfileSelf;
1874
+ exports.updateRecord = updateRecord;
1875
+ exports.updateSkill = updateSkill;
1876
+ exports.uploadAvatar = uploadAvatar;
775
1877
  exports.useActivityFeed = useActivityFeed;
776
1878
  exports.useActivityTeaser = useActivityTeaser;
777
1879
  exports.useAppAccountCheck = useAppAccountCheck;
778
1880
  exports.useAppsRegistry = useAppsRegistry;
779
1881
  exports.useAtFundLink = useAtFundLink;
1882
+ exports.useBulkHideStandardPublications = useBulkHideStandardPublications;
1883
+ exports.useBulkUnhideStandardPublications = useBulkUnhideStandardPublications;
1884
+ exports.useCanonicalSkillSearch = useCanonicalSkillSearch;
1885
+ exports.useCastRoadmapVote = useCastRoadmapVote;
1886
+ exports.useCreateEducation = useCreateEducation;
1887
+ exports.useCreateEndorsement = useCreateEndorsement;
1888
+ exports.useCreateExternalAccount = useCreateExternalAccount;
780
1889
  exports.useCreatePosition = useCreatePosition;
1890
+ exports.useCreateProfileLocation = useCreateProfileLocation;
1891
+ exports.useCreateReaction = useCreateReaction;
1892
+ exports.useCreateRecord = useCreateRecord;
1893
+ exports.useCreateSkill = useCreateSkill;
1894
+ exports.useDeleteAccount = useDeleteAccount;
1895
+ exports.useDeleteAvatarOverride = useDeleteAvatarOverride;
1896
+ exports.useDeleteEducation = useDeleteEducation;
1897
+ exports.useDeleteExternalAccount = useDeleteExternalAccount;
1898
+ exports.useDeletePosition = useDeletePosition;
1899
+ exports.useDeleteProfileLocation = useDeleteProfileLocation;
1900
+ exports.useDeleteReaction = useDeleteReaction;
1901
+ exports.useDeleteRecord = useDeleteRecord;
1902
+ exports.useDeleteSkill = useDeleteSkill;
781
1903
  exports.useEndorsementCount = useEndorsementCount;
1904
+ exports.useExternalAccounts = useExternalAccounts;
782
1905
  exports.useFeaturedProfile = useFeaturedProfile;
783
1906
  exports.useFollowing = useFollowing;
784
1907
  exports.useHeatmapData = useHeatmapData;
785
1908
  exports.useHiddenApps = useHiddenApps;
1909
+ exports.useHideKeytraceClaim = useHideKeytraceClaim;
1910
+ exports.useHideOrcidPublication = useHideOrcidPublication;
1911
+ exports.useHideSifaPublication = useHideSifaPublication;
1912
+ exports.useHideStandardPublication = useHideStandardPublication;
1913
+ exports.useLinkSkillToPosition = useLinkSkillToPosition;
786
1914
  exports.useMyRoadmapVotes = useMyRoadmapVotes;
787
1915
  exports.useNetworkStreamCount = useNetworkStreamCount;
788
1916
  exports.useProfile = useProfile;
789
1917
  exports.useReactionStatus = useReactionStatus;
1918
+ exports.useRefreshOrcidPublications = useRefreshOrcidPublications;
1919
+ exports.useRefreshPds = useRefreshPds;
1920
+ exports.useResetProfile = useResetProfile;
1921
+ exports.useRetractRoadmapVote = useRetractRoadmapVote;
790
1922
  exports.useRoadmapVotes = useRoadmapVotes;
791
1923
  exports.useSearchFilters = useSearchFilters;
792
1924
  exports.useSearchProfiles = useSearchProfiles;
1925
+ exports.useSetExternalAccountPrimary = useSetExternalAccountPrimary;
1926
+ exports.useSetPositionPrimary = useSetPositionPrimary;
793
1927
  exports.useSifaConfig = useSifaConfig;
794
1928
  exports.useSimilarProfiles = useSimilarProfiles;
795
1929
  exports.useSkillSuggestions = useSkillSuggestions;
796
1930
  exports.useStats = useStats;
797
1931
  exports.useSuggestionCount = useSuggestionCount;
798
1932
  exports.useSuggestions = useSuggestions;
1933
+ exports.useUnhideKeytraceClaim = useUnhideKeytraceClaim;
1934
+ exports.useUnhideOrcidPublication = useUnhideOrcidPublication;
1935
+ exports.useUnhideSifaPublication = useUnhideSifaPublication;
1936
+ exports.useUnhideStandardPublication = useUnhideStandardPublication;
1937
+ exports.useUnlinkSkillFromPosition = useUnlinkSkillFromPosition;
1938
+ exports.useUnsetExternalAccountPrimary = useUnsetExternalAccountPrimary;
1939
+ exports.useUnsetPositionPrimary = useUnsetPositionPrimary;
1940
+ exports.useUpdateEducation = useUpdateEducation;
1941
+ exports.useUpdateExternalAccount = useUpdateExternalAccount;
1942
+ exports.useUpdatePosition = useUpdatePosition;
1943
+ exports.useUpdateProfileLocation = useUpdateProfileLocation;
1944
+ exports.useUpdateProfileOverride = useUpdateProfileOverride;
1945
+ exports.useUpdateProfileSelf = useUpdateProfileSelf;
1946
+ exports.useUpdateRecord = useUpdateRecord;
1947
+ exports.useUpdateSkill = useUpdateSkill;
1948
+ exports.useUploadAvatar = useUploadAvatar;
1949
+ exports.useVerifyExternalAccount = useVerifyExternalAccount;
1950
+ exports.verifyExternalAccount = verifyExternalAccount;
799
1951
  //# sourceMappingURL=index.cjs.map
800
1952
  //# sourceMappingURL=index.cjs.map