@singi-labs/sifa-sdk 0.18.22 → 0.19.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.
Files changed (37) hide show
  1. package/dist/badge/index.cjs.map +1 -1
  2. package/dist/badge/index.js.map +1 -1
  3. package/dist/{feed-BMm9Pkew.d.cts → follow-profile-D1l6pulB.d.cts} +1 -190
  4. package/dist/{feed-BMm9Pkew.d.ts → follow-profile-D1l6pulB.d.ts} +1 -190
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.d.cts +4 -4
  7. package/dist/index.d.ts +4 -4
  8. package/dist/index.js +1 -1
  9. package/dist/{network-map-Dupds9nG.d.cts → network-map-C8VCE7HI.d.cts} +2 -2
  10. package/dist/{network-map-Cwef6yhK.d.ts → network-map-DNE9jp_r.d.ts} +2 -2
  11. package/dist/{org-DgC4pecF.d.cts → org-8RWC0qSH.d.cts} +198 -191
  12. package/dist/{org-DC_71Ojb.d.ts → org-BwK-97S0.d.ts} +198 -191
  13. package/dist/{profile-investment-Bvulg_jG.d.cts → profile-investment-D-nKT3ZK.d.cts} +190 -1
  14. package/dist/{profile-investment-Bvulg_jG.d.ts → profile-investment-D-nKT3ZK.d.ts} +190 -1
  15. package/dist/query/fetchers/index.cjs +9 -9
  16. package/dist/query/fetchers/index.cjs.map +1 -1
  17. package/dist/query/fetchers/index.d.cts +4 -4
  18. package/dist/query/fetchers/index.d.ts +4 -4
  19. package/dist/query/fetchers/index.js +9 -9
  20. package/dist/query/fetchers/index.js.map +1 -1
  21. package/dist/query/hooks/index.cjs +11 -17
  22. package/dist/query/hooks/index.cjs.map +1 -1
  23. package/dist/query/hooks/index.d.cts +4 -4
  24. package/dist/query/hooks/index.d.ts +4 -4
  25. package/dist/query/hooks/index.js +11 -17
  26. package/dist/query/hooks/index.js.map +1 -1
  27. package/dist/query/index.cjs +12 -18
  28. package/dist/query/index.cjs.map +1 -1
  29. package/dist/query/index.d.cts +6 -6
  30. package/dist/query/index.d.ts +6 -6
  31. package/dist/query/index.js +12 -18
  32. package/dist/query/index.js.map +1 -1
  33. package/dist/schemas/index.d.cts +2 -2
  34. package/dist/schemas/index.d.ts +2 -2
  35. package/dist/{use-org-notification-emails-ZmOjvMh0.d.cts → use-org-notification-emails-CeDxRlis.d.cts} +7 -40
  36. package/dist/{use-org-notification-emails-CHU0JhlL.d.ts → use-org-notification-emails-LIoQtBgD.d.ts} +7 -40
  37. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { p as ExternalAccount, Q as SkillSuggestion } from './index-C13I8diU.js';
2
- import { y as FollowFeedPage, B as FollowProfileItem, q as FeatureAllowlistEntry, s as FeatureFlag } from './feed-BMm9Pkew.js';
3
2
  import { b as ActivityLabel, t as RepoDeleteResult, w as RepoInventory } from './types-YpOch4Ho.js';
3
+ import { s as FollowProfileItem, p as FeatureAllowlistEntry, r as FeatureFlag } from './follow-profile-D1l6pulB.js';
4
4
  import { z } from 'zod';
5
5
  import { d as OrgNotificationEmailRequestInput, b as OrgDomainChallengeRequestInput, O as OrgClaimRequestInput, a as OrgProfileUpdateRequestInput, c as OrgDomainVerifyRequestInput } from './org-settings-CZ_tmAYl.js';
6
6
 
@@ -21,6 +21,16 @@ interface SifaApiConfig {
21
21
  * consumers can leave this unset.
22
22
  */
23
23
  fetch?: typeof fetch;
24
+ /**
25
+ * Optional per-request auth-token minter for auth-required reads. The NATIVE
26
+ * app supplies this (it has no sifa-api session cookie): given a method NSID
27
+ * (`lxm`), it mints a short-lived AT Protocol service-auth JWT on the user's
28
+ * PDS (see the SDK's `/atproto` `mintServiceAuthToken`) and returns it; the
29
+ * fetcher attaches it as `Authorization: Bearer`. Web omits this and relies on
30
+ * its session cookie (`credentials: 'include'`). Return `null` to send no
31
+ * token. See `sifa-api` `createIdentityMiddleware`.
32
+ */
33
+ getAuthToken?: (lxm: string) => Promise<string | null>;
24
34
  }
25
35
  /** Options accepted by {@link apiFetch}. */
26
36
  interface ApiFetchOptions {
@@ -1039,6 +1049,182 @@ declare function fetchSuggestionCount(config: SifaApiConfig, since?: string, opt
1039
1049
  /** Featured profile (rotated by sifa-api). Returns `null` when none. */
1040
1050
  declare function fetchFeaturedProfile(config: SifaApiConfig, options?: ApiFetchOptions): Promise<FeaturedProfile | null>;
1041
1051
 
1052
+ interface QuotedPostAuthor {
1053
+ did: string;
1054
+ handle: string;
1055
+ displayName?: string;
1056
+ avatar?: string;
1057
+ }
1058
+ interface QuotedPostImage {
1059
+ thumb: string;
1060
+ fullsize: string;
1061
+ alt?: string;
1062
+ }
1063
+ interface QuotedPostView {
1064
+ uri: string;
1065
+ cid: string;
1066
+ author: QuotedPostAuthor;
1067
+ text: string;
1068
+ createdAt: string;
1069
+ images?: QuotedPostImage[];
1070
+ }
1071
+ type QuotedPostResult = {
1072
+ status: 'ok';
1073
+ record: QuotedPostView;
1074
+ } | {
1075
+ status: 'deleted';
1076
+ uri: string;
1077
+ } | {
1078
+ status: 'unavailable';
1079
+ uri: string;
1080
+ };
1081
+ /** Max URIs per request to `POST /api/quoted-posts/resolve` (mirrors server cap). */
1082
+ declare const QUOTED_POSTS_BATCH_MAX = 20;
1083
+ interface ResolveQuotedPostsOptions extends ApiFetchOptions {
1084
+ /** Cookie header for Next.js RSC server-side calls; ignored in browsers. */
1085
+ cookieHeader?: string;
1086
+ }
1087
+ /**
1088
+ * Resolve a batch of AT-URIs to their quoted-post snapshots via the Sifa AppView.
1089
+ *
1090
+ * Auto-deduplicates input URIs and splits requests into chunks of
1091
+ * {@link QUOTED_POSTS_BATCH_MAX} so callers can pass an arbitrary-length array.
1092
+ * Each chunk is fired in parallel. The server caches results in Valkey, so
1093
+ * repeated calls for the same URI are cheap.
1094
+ *
1095
+ * Returns a map of `uri -> QuotedPostResult`. URIs that fail (network error,
1096
+ * non-2xx, or the server omitting them) are absent from the map; the caller
1097
+ * should render a skeleton or tombstone for those.
1098
+ */
1099
+ declare function resolveQuotedPosts(config: SifaApiConfig, uris: string[], options?: ResolveQuotedPostsOptions): Promise<Record<string, QuotedPostResult>>;
1100
+
1101
+ /**
1102
+ * Liveness of an activity card's destination, as reported by sifa-api's
1103
+ * `/api/activity` enrichment (see sifa-api `url-health-checker`). How liveness
1104
+ * is measured depends on the card's health strategy (see `resolveCardHealth`):
1105
+ * first-party permalinks (`record`) are checked by record existence on the PDS;
1106
+ * foreign/derived targets (`url`) by HTTP reachability (HEAD, then GET).
1107
+ *
1108
+ * ok -- record exists, or the URL returned 2xx/3xx
1109
+ * broken -- confirmed dead (record deleted, or >=2 consecutive 4xx / >=5 consecutive 5xx)
1110
+ * unverifiable -- 403/429, PDS unreachable, or network error; NOT dead
1111
+ * unknown -- newly seen, not yet checked
1112
+ *
1113
+ * Consumers should only suppress UI on `'broken'`. All other values
1114
+ * (including missing) mean "render normally".
1115
+ */
1116
+ type ActivityItemLinkHealth = 'ok' | 'broken' | 'unverifiable' | 'unknown';
1117
+ interface HeatmapDay {
1118
+ date: string;
1119
+ total: number;
1120
+ apps: {
1121
+ appId: string;
1122
+ count: number;
1123
+ }[];
1124
+ }
1125
+ interface HeatmapResponse {
1126
+ days: HeatmapDay[];
1127
+ appTotals: {
1128
+ appId: string;
1129
+ appName: string;
1130
+ total: number;
1131
+ }[];
1132
+ thresholds: [number, number, number, number];
1133
+ }
1134
+ interface ActivityItem {
1135
+ uri: string;
1136
+ cid: string;
1137
+ collection: string;
1138
+ rkey: string;
1139
+ record: Record<string, unknown>;
1140
+ appId: string;
1141
+ appName: string;
1142
+ category: string;
1143
+ indexedAt: string;
1144
+ /**
1145
+ * The record author's handle / display name / avatar, injected by the server
1146
+ * on MULTI-author feeds (the following feed) so a card can show whose activity
1147
+ * it is. Unset on the per-author activity feed (all one author). Mirrors the
1148
+ * stream `ActivityItem`'s author fields the view-model transform reads.
1149
+ */
1150
+ authorHandle?: string;
1151
+ authorDisplayName?: string;
1152
+ authorAvatar?: string;
1153
+ /**
1154
+ * Set by the server when an `app.bsky.embed.record` quote was already
1155
+ * resolved upstream (AppView path). Mutually exclusive with `quotedPostUri`.
1156
+ */
1157
+ quotedPost?: QuotedPostResult;
1158
+ /**
1159
+ * Set by the server when an `app.bsky.embed.record` quote needs client-side
1160
+ * resolution (PDS path). Pass batches to {@link resolveQuotedPosts}.
1161
+ * Mutually exclusive with `quotedPost`.
1162
+ */
1163
+ quotedPostUri?: string;
1164
+ /**
1165
+ * Reachability of the card's external destination as last checked by
1166
+ * sifa-api. Undefined for legacy responses; treat as 'unknown'.
1167
+ * See {@link ActivityItemLinkHealth}.
1168
+ */
1169
+ linkHealth?: ActivityItemLinkHealth;
1170
+ /**
1171
+ * Content labels from `app.bsky.feed.defs#postView.labels`. Set by
1172
+ * sifa-api for Bluesky posts; undefined for other sources and legacy
1173
+ * responses. Pass items to {@link hasAdultContent} to decide whether to
1174
+ * gate media. See {@link ActivityLabel}.
1175
+ */
1176
+ labels?: ActivityLabel[];
1177
+ /**
1178
+ * The owner has hidden this item from their profile. Only ever set on the
1179
+ * owner's own view of their feed -- every other surface omits hidden items
1180
+ * rather than flagging them -- so a card can offer an unhide in place.
1181
+ */
1182
+ hidden?: boolean;
1183
+ }
1184
+ interface ActivityTeaserResponse {
1185
+ items: ActivityItem[];
1186
+ blueskyGated?: boolean;
1187
+ backfillPending?: boolean;
1188
+ failedApps?: string[];
1189
+ }
1190
+ interface ActivityFeedResponse {
1191
+ items: ActivityItem[];
1192
+ cursor: string | null;
1193
+ hasMore: boolean;
1194
+ availableCategories?: string[];
1195
+ blueskyGated?: boolean;
1196
+ failedApps?: string[];
1197
+ }
1198
+ /**
1199
+ * Per-day activity counts for a profile across all ATproto apps. Returns
1200
+ * `null` on any error so callers can render a graceful empty state.
1201
+ */
1202
+ declare function fetchHeatmapData(config: SifaApiConfig, handleOrDid: string, days: number, options?: ApiFetchOptions): Promise<HeatmapResponse | null>;
1203
+ interface FetchActivityTeaserOptions extends ApiFetchOptions {
1204
+ /**
1205
+ * Pass the caller's `Cookie` header on Next.js RSC server-side calls.
1206
+ * Required for authenticated server fetches because `credentials: 'include'`
1207
+ * does not propagate browser cookies in RSC.
1208
+ */
1209
+ cookieHeader?: string;
1210
+ }
1211
+ /**
1212
+ * Recent activity teaser for a profile (homepage-sized slice). Caps the
1213
+ * upstream wait so the SSR path cannot hang. Returns `null` on any error.
1214
+ */
1215
+ declare function fetchActivityTeaser(config: SifaApiConfig, handleOrDid: string, options?: FetchActivityTeaserOptions): Promise<ActivityTeaserResponse | null>;
1216
+ interface FetchActivityFeedOptions extends ApiFetchOptions {
1217
+ category?: string;
1218
+ limit?: number;
1219
+ cursor?: string;
1220
+ cookieHeader?: string;
1221
+ }
1222
+ /**
1223
+ * Paginated activity feed for a profile. Always fresh (`cache: 'no-store'`).
1224
+ * Returns `null` on any error.
1225
+ */
1226
+ declare function fetchActivityFeed(config: SifaApiConfig, handleOrDid: string, options?: FetchActivityFeedOptions): Promise<ActivityFeedResponse | null>;
1227
+
1042
1228
  interface FollowProfile {
1043
1229
  did: string;
1044
1230
  handle: string;
@@ -1104,35 +1290,23 @@ interface FetchFollowListOptions extends ApiFetchOptions {
1104
1290
  declare function getFollowers(config: SifaApiConfig, handle: string, opts?: FetchFollowListOptions): Promise<FollowListPage>;
1105
1291
  /** Paginated list of who `handle` follows. */
1106
1292
  declare function getFollowing(config: SifaApiConfig, handle: string, opts?: FetchFollowListOptions): Promise<FollowListPage>;
1107
- /**
1108
- * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
1109
- * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
1110
- * Stream are two distinct surfaces with different data paths (Barazo API
1111
- * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
1112
- * types are no longer consumed. Scheduled for removal in next major bump.
1113
- */
1293
+ /** Options for {@link fetchFollowingFeed}. */
1114
1294
  interface FetchFollowingFeedOptions extends ApiFetchOptions {
1115
- cursor?: string;
1116
1295
  limit?: number;
1117
- /**
1118
- * Comma-separated category filter (per sifa-api#673 TR10). Forwarded
1119
- * as-is; the server validates allowed values.
1120
- */
1121
- categories?: string[];
1296
+ /** Forward a `Cookie` header on Next.js RSC server-side calls (web). */
1122
1297
  cookieHeader?: string;
1123
1298
  }
1124
1299
  /**
1125
- * V5 home feed: Sifa events + curated ATmosphere creation events filtered
1126
- * by the authenticated viewer's followees. Composite cursor (per E5/TR4).
1127
- * Returns an empty page on error.
1300
+ * The viewer's cross-app following feed: what OTHER apps their connections use
1301
+ * (Tangled, WhiteWind, Smoke Signal, ...) — Bluesky is excluded server-side, as
1302
+ * it is the least interesting part and other apps already surface it.
1128
1303
  *
1129
- * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
1130
- * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
1131
- * Stream are two distinct surfaces with different data paths (Barazo API
1132
- * for Timeline, live PDS reads + Valkey for Stream). This fetcher is no
1133
- * longer consumed. Scheduled for removal in next major bump.
1304
+ * Auth is identity-only server-side, so the NATIVE app supplies
1305
+ * `config.getAuthToken` to mint a service-auth Bearer, while WEB relies on its
1306
+ * session cookie (`credentials: 'include'`). Returns `null` on error. v1 is a
1307
+ * finite first page (no cursor yet).
1134
1308
  */
1135
- declare function getFollowingFeed(config: SifaApiConfig, opts?: FetchFollowingFeedOptions): Promise<FollowFeedPage>;
1309
+ declare function fetchFollowingFeed(config: SifaApiConfig, opts?: FetchFollowingFeedOptions): Promise<ActivityFeedResponse | null>;
1136
1310
 
1137
1311
  /**
1138
1312
  * Options shared by the cursor-paginated follow-graph endpoints introduced in
@@ -1229,173 +1403,6 @@ interface AdminReviewQueues {
1229
1403
  */
1230
1404
  declare function getAdminReviewQueues(config: SifaApiConfig, opts?: GetAdminReviewQueuesOptions): Promise<AdminReviewQueues>;
1231
1405
 
1232
- interface QuotedPostAuthor {
1233
- did: string;
1234
- handle: string;
1235
- displayName?: string;
1236
- avatar?: string;
1237
- }
1238
- interface QuotedPostImage {
1239
- thumb: string;
1240
- fullsize: string;
1241
- alt?: string;
1242
- }
1243
- interface QuotedPostView {
1244
- uri: string;
1245
- cid: string;
1246
- author: QuotedPostAuthor;
1247
- text: string;
1248
- createdAt: string;
1249
- images?: QuotedPostImage[];
1250
- }
1251
- type QuotedPostResult = {
1252
- status: 'ok';
1253
- record: QuotedPostView;
1254
- } | {
1255
- status: 'deleted';
1256
- uri: string;
1257
- } | {
1258
- status: 'unavailable';
1259
- uri: string;
1260
- };
1261
- /** Max URIs per request to `POST /api/quoted-posts/resolve` (mirrors server cap). */
1262
- declare const QUOTED_POSTS_BATCH_MAX = 20;
1263
- interface ResolveQuotedPostsOptions extends ApiFetchOptions {
1264
- /** Cookie header for Next.js RSC server-side calls; ignored in browsers. */
1265
- cookieHeader?: string;
1266
- }
1267
- /**
1268
- * Resolve a batch of AT-URIs to their quoted-post snapshots via the Sifa AppView.
1269
- *
1270
- * Auto-deduplicates input URIs and splits requests into chunks of
1271
- * {@link QUOTED_POSTS_BATCH_MAX} so callers can pass an arbitrary-length array.
1272
- * Each chunk is fired in parallel. The server caches results in Valkey, so
1273
- * repeated calls for the same URI are cheap.
1274
- *
1275
- * Returns a map of `uri -> QuotedPostResult`. URIs that fail (network error,
1276
- * non-2xx, or the server omitting them) are absent from the map; the caller
1277
- * should render a skeleton or tombstone for those.
1278
- */
1279
- declare function resolveQuotedPosts(config: SifaApiConfig, uris: string[], options?: ResolveQuotedPostsOptions): Promise<Record<string, QuotedPostResult>>;
1280
-
1281
- /**
1282
- * Liveness of an activity card's destination, as reported by sifa-api's
1283
- * `/api/activity` enrichment (see sifa-api `url-health-checker`). How liveness
1284
- * is measured depends on the card's health strategy (see `resolveCardHealth`):
1285
- * first-party permalinks (`record`) are checked by record existence on the PDS;
1286
- * foreign/derived targets (`url`) by HTTP reachability (HEAD, then GET).
1287
- *
1288
- * ok -- record exists, or the URL returned 2xx/3xx
1289
- * broken -- confirmed dead (record deleted, or >=2 consecutive 4xx / >=5 consecutive 5xx)
1290
- * unverifiable -- 403/429, PDS unreachable, or network error; NOT dead
1291
- * unknown -- newly seen, not yet checked
1292
- *
1293
- * Consumers should only suppress UI on `'broken'`. All other values
1294
- * (including missing) mean "render normally".
1295
- */
1296
- type ActivityItemLinkHealth = 'ok' | 'broken' | 'unverifiable' | 'unknown';
1297
- interface HeatmapDay {
1298
- date: string;
1299
- total: number;
1300
- apps: {
1301
- appId: string;
1302
- count: number;
1303
- }[];
1304
- }
1305
- interface HeatmapResponse {
1306
- days: HeatmapDay[];
1307
- appTotals: {
1308
- appId: string;
1309
- appName: string;
1310
- total: number;
1311
- }[];
1312
- thresholds: [number, number, number, number];
1313
- }
1314
- interface ActivityItem {
1315
- uri: string;
1316
- cid: string;
1317
- collection: string;
1318
- rkey: string;
1319
- record: Record<string, unknown>;
1320
- appId: string;
1321
- appName: string;
1322
- category: string;
1323
- indexedAt: string;
1324
- /**
1325
- * Set by the server when an `app.bsky.embed.record` quote was already
1326
- * resolved upstream (AppView path). Mutually exclusive with `quotedPostUri`.
1327
- */
1328
- quotedPost?: QuotedPostResult;
1329
- /**
1330
- * Set by the server when an `app.bsky.embed.record` quote needs client-side
1331
- * resolution (PDS path). Pass batches to {@link resolveQuotedPosts}.
1332
- * Mutually exclusive with `quotedPost`.
1333
- */
1334
- quotedPostUri?: string;
1335
- /**
1336
- * Reachability of the card's external destination as last checked by
1337
- * sifa-api. Undefined for legacy responses; treat as 'unknown'.
1338
- * See {@link ActivityItemLinkHealth}.
1339
- */
1340
- linkHealth?: ActivityItemLinkHealth;
1341
- /**
1342
- * Content labels from `app.bsky.feed.defs#postView.labels`. Set by
1343
- * sifa-api for Bluesky posts; undefined for other sources and legacy
1344
- * responses. Pass items to {@link hasAdultContent} to decide whether to
1345
- * gate media. See {@link ActivityLabel}.
1346
- */
1347
- labels?: ActivityLabel[];
1348
- /**
1349
- * The owner has hidden this item from their profile. Only ever set on the
1350
- * owner's own view of their feed -- every other surface omits hidden items
1351
- * rather than flagging them -- so a card can offer an unhide in place.
1352
- */
1353
- hidden?: boolean;
1354
- }
1355
- interface ActivityTeaserResponse {
1356
- items: ActivityItem[];
1357
- blueskyGated?: boolean;
1358
- backfillPending?: boolean;
1359
- failedApps?: string[];
1360
- }
1361
- interface ActivityFeedResponse {
1362
- items: ActivityItem[];
1363
- cursor: string | null;
1364
- hasMore: boolean;
1365
- availableCategories?: string[];
1366
- blueskyGated?: boolean;
1367
- failedApps?: string[];
1368
- }
1369
- /**
1370
- * Per-day activity counts for a profile across all ATproto apps. Returns
1371
- * `null` on any error so callers can render a graceful empty state.
1372
- */
1373
- declare function fetchHeatmapData(config: SifaApiConfig, handleOrDid: string, days: number, options?: ApiFetchOptions): Promise<HeatmapResponse | null>;
1374
- interface FetchActivityTeaserOptions extends ApiFetchOptions {
1375
- /**
1376
- * Pass the caller's `Cookie` header on Next.js RSC server-side calls.
1377
- * Required for authenticated server fetches because `credentials: 'include'`
1378
- * does not propagate browser cookies in RSC.
1379
- */
1380
- cookieHeader?: string;
1381
- }
1382
- /**
1383
- * Recent activity teaser for a profile (homepage-sized slice). Caps the
1384
- * upstream wait so the SSR path cannot hang. Returns `null` on any error.
1385
- */
1386
- declare function fetchActivityTeaser(config: SifaApiConfig, handleOrDid: string, options?: FetchActivityTeaserOptions): Promise<ActivityTeaserResponse | null>;
1387
- interface FetchActivityFeedOptions extends ApiFetchOptions {
1388
- category?: string;
1389
- limit?: number;
1390
- cursor?: string;
1391
- cookieHeader?: string;
1392
- }
1393
- /**
1394
- * Paginated activity feed for a profile. Always fresh (`cache: 'no-store'`).
1395
- * Returns `null` on any error.
1396
- */
1397
- declare function fetchActivityFeed(config: SifaApiConfig, handleOrDid: string, options?: FetchActivityFeedOptions): Promise<ActivityFeedResponse | null>;
1398
-
1399
1406
  /**
1400
1407
  * A single merged pull request ingested from GitHub, as served by sifa-api's
1401
1408
  * `GET /api/me/github/pull-requests`. Mirrors the `github_contributions` row.
@@ -1925,4 +1932,4 @@ declare function addOrgNotificationEmail(config: SifaApiConfig, body: OrgNotific
1925
1932
  */
1926
1933
  declare function removeOrgNotificationEmail(config: SifaApiConfig, body: OrgNotificationEmailRequestInput, options?: Omit<ApiFetchOptions, 'method' | 'body'>): Promise<WriteResult & Partial<OrgNotificationEmailRemoveResult>>;
1927
1934
 
1928
- export { HIDDEN_ITEM_SOURCES as $, type ApiFetchOptions as A, type BulkHideProfileItemInput as B, type CreateResult as C, type DeleteAccountResult as D, type EndorsementInput as E, type FeatureAllowlistResponse as F, type FetchFollowingFeedOptions as G, type FetchHiddenActivityItemsOptions as H, type FetchHiddenAppsOptions as I, type FetchInboxCountsOptions as J, type FetchMyGithubPullRequestsOptions as K, type FetchMyRoadmapVotesOptions as L, type FetchProfileCompletenessOptions as M, type FetchReactionStatusOptions as N, type FetchSuggestionsOptions as O, type FetchUnlinkedPositionsOptions as P, type FilterOptions as Q, type FollowListPage as R, type SifaApiConfig as S, type FollowProfile as T, type FollowProfilePageResponse as U, type FollowUserResult as V, type WriteResult as W, type FollowingResponse as X, type GetAdminReviewQueuesOptions as Y, type GithubPullRequest as Z, type GivenConfirmation as _, type ConfirmEndorsementInput as a, type UploadAvatarResult as a$, HIDDEN_ITEM_TYPES as a0, type HeatmapDay as a1, type HeatmapResponse as a2, type HiddenActivityItem as a3, type HiddenApp as a4, type HiddenItemSource as a5, type HiddenItemType as a6, type HideActivityItemInput as a7, type HideProfileItemInput as a8, type InboxCounts as a9, type QuotedPostView as aA, type ReactionError as aB, type ReactionResult as aC, type ReactionStatus as aD, type RefreshOrcidPublicationsResult as aE, type RefreshPdsResult as aF, type RepoDeleteInput as aG, type ResetProfileResult as aH, type ResolveQuotedPostsOptions as aI, type RoadmapVoteError as aJ, type RoadmapVoteResult as aK, type RoadmapVoter as aL, type RoadmapVotesResponse as aM, type SearchFilters as aN, type SearchResponse as aO, type SifaQueryKey as aP, type SimilarProfile as aQ, type SkillSearchResult as aR, type StatsResponse as aS, type SubCategoryBulkResult as aT, type SuggestionProfile as aU, type SuggestionsResponse as aV, type UnhideActivityItemInput as aW, type UnlinkedPosition as aX, type UnlinkedPositionsResult as aY, type UpdateProfileOverrideInput as aZ, type UpdateProfileSelfInput as a_, type ListFeatureAllowlistOptions as aa, type MyGithubPullRequestsResponse as ab, type OrgClaimBinding as ac, type OrgClaimResult as ad, type OrgDomainChallengeResult as ae, type OrgDomainVerifyResult as af, type OrgNotificationEmailAddResult as ag, type OrgNotificationEmailRemoveResult as ah, type OrgProfileEcho as ai, type OrgProfileUpdateResult as aj, PROFILE_COMPLETENESS_SIGNALS as ak, type PdsWipeOutcome as al, type PendingConfirmation as am, type PendingConfirmationsPage as an, type PrimarySection as ao, type ProfileCompleteness as ap, type ProfileCompletenessSignal as aq, type ProfileIndustryInput as ar, type ProfileLocationAddress as as, type ProfileLocationInput as at, type ProfileSearchResult as au, type ProfileSelfLocation as av, QUOTED_POSTS_BATCH_MAX as aw, type QuotedPostAuthor as ax, type QuotedPostImage as ay, type QuotedPostResult as az, type ConfirmEndorsementResult as b, getFollowers as b$, type UploadPronunciationAudioResult as b0, type VerifyExternalAccountResult as b1, type WipePreview as b2, addFeatureAllowlist as b3, addOrgNotificationEmail as b4, apiFetch as b5, apiFetchOrNull as b6, apiWrite as b7, apiWriteCreate as b8, bulkHideProfileItems as b9, fetchExternalAccounts as bA, fetchFeaturedProfile as bB, fetchFollowing as bC, fetchGivenConfirmations as bD, fetchHeatmapData as bE, fetchHiddenActivityItems as bF, fetchHiddenApps as bG, fetchInboxCounts as bH, fetchMyGithubPullRequests as bI, fetchMyRoadmapVotes as bJ, fetchPendingConfirmations as bK, fetchProfileCompleteness as bL, fetchReactionStatus as bM, fetchRepoInventory as bN, fetchRoadmapVotes as bO, fetchSearchFilters as bP, fetchSearchProfiles as bQ, fetchSimilarProfiles as bR, fetchSkillSuggestions as bS, fetchStats as bT, fetchSuggestionCount as bU, fetchSuggestions as bV, fetchUnlinkedPositions as bW, fetchWipePreview as bX, followUser as bY, getAdminReviewQueues as bZ, getBlueskySuggestions as b_, bulkHideStandardPublications as ba, bulkUnhideProfileItems as bb, bulkUnhideStandardPublications as bc, castRoadmapVote as bd, checkAppAccount as be, confirmEndorsement as bf, createConfirmation as bg, createEndorsement as bh, createExternalAccount as bi, createProfileLocation as bj, createReaction as bk, createSkill as bl, deleteAccount as bm, deleteAvatarOverride as bn, deleteExternalAccount as bo, deleteNamePronunciationAudio as bp, deleteProfileLocation as bq, deleteReaction as br, deleteRepoRecords as bs, deleteSkill as bt, dismissConfirmation as bu, dismissUnlinkedPosition as bv, fetchAccounts as bw, fetchActivityFeed as bx, fetchActivityTeaser as by, fetchAppsRegistry as bz, type AccountCheckResult as c, getFollowing as c0, getFollowingFeed as c1, getMutuals as c2, hideActivityItem as c3, hideOrcidPublication as c4, hideProfileItem as c5, hideSifaPublication as c6, hideStandardPublication as c7, listFeatureAllowlist as c8, refreshOrcidPublications as c9, updateProfileSelf as cA, updateSkill as cB, updateSkillSubCategories as cC, uploadAvatar as cD, uploadNamePronunciationAudio as cE, verifyExternalAccount as cF, verifyOrgDomain as cG, type CompanySearchFilters as cH, type CompanySearchResponse as cI, type CompanySearchResult as cJ, fetchSearchCompanies as cK, refreshPds as ca, removeFeatureAllowlist as cb, removeOrgNotificationEmail as cc, repoExportUrl as cd, requestOrgDomainChallenge as ce, resetProfile as cf, resolveQuotedPosts as cg, retractRoadmapVote as ch, revokeConfirmation as ci, searchSkills as cj, setExternalAccountPrimary as ck, setSectionPrimary as cl, submitOrgClaim as cm, switchAccount as cn, unfollowUser as co, unhideActivityItem as cp, unhideOrcidPublication as cq, unhideProfileItem as cr, unhideSifaPublication as cs, unhideStandardPublication as ct, unsetExternalAccountPrimary as cu, unsetSectionPrimary as cv, updateExternalAccount as cw, updateOrgProfile as cx, updateProfileLocation as cy, updateProfileOverride as cz, type AccountSummary as d, type ActivityFeedResponse as e, type ActivityItem as f, type ActivityItemLinkHealth as g, type ActivityTeaserResponse as h, type AdminReviewQueues as i, ApiError as j, type AppRegistryEntry as k, type CastRoadmapVoteResult as l, type CheckAppAccountOptions as m, type ConfirmationInput as n, type ConfirmationSubjectInput as o, type CreateExternalAccountResult as p, type DismissUnlinkedPositionInput as q, type ExternalAccountInput as r, sifaQueryKeys as s, type FeaturedProfile as t, type FetchAccountsOptions as u, type FetchActivityFeedOptions as v, type FetchActivityTeaserOptions as w, type FetchConfirmationsOptions as x, type FetchFollowListOptions as y, type FetchFollowProfilePageOptions as z };
1935
+ export { HIDDEN_ITEM_SOURCES as $, type ApiFetchOptions as A, type BulkHideProfileItemInput as B, type CreateResult as C, type DeleteAccountResult as D, type EndorsementInput as E, type FeatureAllowlistResponse as F, type FetchFollowingFeedOptions as G, type FetchHiddenActivityItemsOptions as H, type FetchHiddenAppsOptions as I, type FetchInboxCountsOptions as J, type FetchMyGithubPullRequestsOptions as K, type FetchMyRoadmapVotesOptions as L, type FetchProfileCompletenessOptions as M, type FetchReactionStatusOptions as N, type FetchSuggestionsOptions as O, type FetchUnlinkedPositionsOptions as P, type FilterOptions as Q, type FollowListPage as R, type SifaApiConfig as S, type FollowProfile as T, type FollowProfilePageResponse as U, type FollowUserResult as V, type WriteResult as W, type FollowingResponse as X, type GetAdminReviewQueuesOptions as Y, type GithubPullRequest as Z, type GivenConfirmation as _, type ConfirmEndorsementInput as a, type UploadAvatarResult as a$, HIDDEN_ITEM_TYPES as a0, type HeatmapDay as a1, type HeatmapResponse as a2, type HiddenActivityItem as a3, type HiddenApp as a4, type HiddenItemSource as a5, type HiddenItemType as a6, type HideActivityItemInput as a7, type HideProfileItemInput as a8, type InboxCounts as a9, type QuotedPostView as aA, type ReactionError as aB, type ReactionResult as aC, type ReactionStatus as aD, type RefreshOrcidPublicationsResult as aE, type RefreshPdsResult as aF, type RepoDeleteInput as aG, type ResetProfileResult as aH, type ResolveQuotedPostsOptions as aI, type RoadmapVoteError as aJ, type RoadmapVoteResult as aK, type RoadmapVoter as aL, type RoadmapVotesResponse as aM, type SearchFilters as aN, type SearchResponse as aO, type SifaQueryKey as aP, type SimilarProfile as aQ, type SkillSearchResult as aR, type StatsResponse as aS, type SubCategoryBulkResult as aT, type SuggestionProfile as aU, type SuggestionsResponse as aV, type UnhideActivityItemInput as aW, type UnlinkedPosition as aX, type UnlinkedPositionsResult as aY, type UpdateProfileOverrideInput as aZ, type UpdateProfileSelfInput as a_, type ListFeatureAllowlistOptions as aa, type MyGithubPullRequestsResponse as ab, type OrgClaimBinding as ac, type OrgClaimResult as ad, type OrgDomainChallengeResult as ae, type OrgDomainVerifyResult as af, type OrgNotificationEmailAddResult as ag, type OrgNotificationEmailRemoveResult as ah, type OrgProfileEcho as ai, type OrgProfileUpdateResult as aj, PROFILE_COMPLETENESS_SIGNALS as ak, type PdsWipeOutcome as al, type PendingConfirmation as am, type PendingConfirmationsPage as an, type PrimarySection as ao, type ProfileCompleteness as ap, type ProfileCompletenessSignal as aq, type ProfileIndustryInput as ar, type ProfileLocationAddress as as, type ProfileLocationInput as at, type ProfileSearchResult as au, type ProfileSelfLocation as av, QUOTED_POSTS_BATCH_MAX as aw, type QuotedPostAuthor as ax, type QuotedPostImage as ay, type QuotedPostResult as az, type ConfirmEndorsementResult as b, getBlueskySuggestions as b$, type UploadPronunciationAudioResult as b0, type VerifyExternalAccountResult as b1, type WipePreview as b2, addFeatureAllowlist as b3, addOrgNotificationEmail as b4, apiFetch as b5, apiFetchOrNull as b6, apiWrite as b7, apiWriteCreate as b8, bulkHideProfileItems as b9, fetchExternalAccounts as bA, fetchFeaturedProfile as bB, fetchFollowing as bC, fetchFollowingFeed as bD, fetchGivenConfirmations as bE, fetchHeatmapData as bF, fetchHiddenActivityItems as bG, fetchHiddenApps as bH, fetchInboxCounts as bI, fetchMyGithubPullRequests as bJ, fetchMyRoadmapVotes as bK, fetchPendingConfirmations as bL, fetchProfileCompleteness as bM, fetchReactionStatus as bN, fetchRepoInventory as bO, fetchRoadmapVotes as bP, fetchSearchFilters as bQ, fetchSearchProfiles as bR, fetchSimilarProfiles as bS, fetchSkillSuggestions as bT, fetchStats as bU, fetchSuggestionCount as bV, fetchSuggestions as bW, fetchUnlinkedPositions as bX, fetchWipePreview as bY, followUser as bZ, getAdminReviewQueues as b_, bulkHideStandardPublications as ba, bulkUnhideProfileItems as bb, bulkUnhideStandardPublications as bc, castRoadmapVote as bd, checkAppAccount as be, confirmEndorsement as bf, createConfirmation as bg, createEndorsement as bh, createExternalAccount as bi, createProfileLocation as bj, createReaction as bk, createSkill as bl, deleteAccount as bm, deleteAvatarOverride as bn, deleteExternalAccount as bo, deleteNamePronunciationAudio as bp, deleteProfileLocation as bq, deleteReaction as br, deleteRepoRecords as bs, deleteSkill as bt, dismissConfirmation as bu, dismissUnlinkedPosition as bv, fetchAccounts as bw, fetchActivityFeed as bx, fetchActivityTeaser as by, fetchAppsRegistry as bz, type AccountCheckResult as c, getFollowers as c0, getFollowing as c1, getMutuals as c2, hideActivityItem as c3, hideOrcidPublication as c4, hideProfileItem as c5, hideSifaPublication as c6, hideStandardPublication as c7, listFeatureAllowlist as c8, refreshOrcidPublications as c9, updateProfileSelf as cA, updateSkill as cB, updateSkillSubCategories as cC, uploadAvatar as cD, uploadNamePronunciationAudio as cE, verifyExternalAccount as cF, verifyOrgDomain as cG, type CompanySearchFilters as cH, type CompanySearchResponse as cI, type CompanySearchResult as cJ, fetchSearchCompanies as cK, refreshPds as ca, removeFeatureAllowlist as cb, removeOrgNotificationEmail as cc, repoExportUrl as cd, requestOrgDomainChallenge as ce, resetProfile as cf, resolveQuotedPosts as cg, retractRoadmapVote as ch, revokeConfirmation as ci, searchSkills as cj, setExternalAccountPrimary as ck, setSectionPrimary as cl, submitOrgClaim as cm, switchAccount as cn, unfollowUser as co, unhideActivityItem as cp, unhideOrcidPublication as cq, unhideProfileItem as cr, unhideSifaPublication as cs, unhideStandardPublication as ct, unsetExternalAccountPrimary as cu, unsetSectionPrimary as cv, updateExternalAccount as cw, updateOrgProfile as cx, updateProfileLocation as cy, updateProfileOverride as cz, type AccountSummary as d, type ActivityFeedResponse as e, type ActivityItem as f, type ActivityItemLinkHealth as g, type ActivityTeaserResponse as h, type AdminReviewQueues as i, ApiError as j, type AppRegistryEntry as k, type CastRoadmapVoteResult as l, type CheckAppAccountOptions as m, type ConfirmationInput as n, type ConfirmationSubjectInput as o, type CreateExternalAccountResult as p, type DismissUnlinkedPositionInput as q, type ExternalAccountInput as r, sifaQueryKeys as s, type FeaturedProfile as t, type FetchAccountsOptions as u, type FetchActivityFeedOptions as v, type FetchActivityTeaserOptions as w, type FetchConfirmationsOptions as x, type FetchFollowListOptions as y, type FetchFollowProfilePageOptions as z };
@@ -216,6 +216,195 @@ declare function makeGraphFollowRecordSchema(followerDid: string): z.ZodObject<{
216
216
  note: z.ZodOptional<z.ZodString>;
217
217
  }, z.core.$strip>;
218
218
 
219
+ /**
220
+ * Feed item from `GET /api/following/feed`. Discriminated on `source`:
221
+ *
222
+ * - `sifa`: a Sifa-native event (e.g. profile update, endorsement).
223
+ * - `atmosphere`: a curated creation event from another ATproto app
224
+ * (Barazo post, etc.). Payload is the hydrated `app.bsky.embed.*#view`
225
+ * shape, NOT the raw record (per memory `sifa-hydrated-view-embed-types`).
226
+ *
227
+ * Both variants share `actor`, `indexedAt`, and `id` (the materialized
228
+ * `feed_events.id` row identifier, used in the cursor).
229
+ */
230
+ declare const FeedActorSchema: z.ZodObject<{
231
+ did: z.ZodString;
232
+ handle: z.ZodString;
233
+ displayName: z.ZodOptional<z.ZodString>;
234
+ avatarUrl: z.ZodOptional<z.ZodString>;
235
+ }, z.core.$strip>;
236
+ type FeedActor = z.infer<typeof FeedActorSchema>;
237
+ /**
238
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
239
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
240
+ * Stream are two distinct surfaces with different data paths (Barazo API
241
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
242
+ * types are no longer consumed. Scheduled for removal in next major bump.
243
+ */
244
+ declare const SifaFeedItemSchema: z.ZodObject<{
245
+ id: z.ZodString;
246
+ actor: z.ZodObject<{
247
+ did: z.ZodString;
248
+ handle: z.ZodString;
249
+ displayName: z.ZodOptional<z.ZodString>;
250
+ avatarUrl: z.ZodOptional<z.ZodString>;
251
+ }, z.core.$strip>;
252
+ indexedAt: z.ZodString;
253
+ eventType: z.ZodString;
254
+ source: z.ZodLiteral<"sifa">;
255
+ appId: z.ZodOptional<z.ZodLiteral<"sifa">>;
256
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
257
+ }, z.core.$strip>;
258
+ /**
259
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
260
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
261
+ * Stream are two distinct surfaces with different data paths (Barazo API
262
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
263
+ * types are no longer consumed. Scheduled for removal in next major bump.
264
+ */
265
+ type SifaFeedItem = z.infer<typeof SifaFeedItemSchema>;
266
+ /**
267
+ * ATmosphere feed item. `payload` is intentionally permissive: it carries
268
+ * a hydrated `app.bsky.embed.*#view` shape that varies by source app. The
269
+ * AppView resolves the hydration; clients render via the existing
270
+ * embed-view union (mirrors `sifa-web/src/components/stream/`).
271
+ *
272
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
273
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
274
+ * Stream are two distinct surfaces with different data paths (Barazo API
275
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
276
+ * types are no longer consumed. Scheduled for removal in next major bump.
277
+ */
278
+ declare const AtmosphereFeedItemSchema: z.ZodObject<{
279
+ id: z.ZodString;
280
+ actor: z.ZodObject<{
281
+ did: z.ZodString;
282
+ handle: z.ZodString;
283
+ displayName: z.ZodOptional<z.ZodString>;
284
+ avatarUrl: z.ZodOptional<z.ZodString>;
285
+ }, z.core.$strip>;
286
+ indexedAt: z.ZodString;
287
+ eventType: z.ZodString;
288
+ source: z.ZodLiteral<"atmosphere">;
289
+ appId: z.ZodString;
290
+ uri: z.ZodOptional<z.ZodString>;
291
+ cid: z.ZodOptional<z.ZodString>;
292
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
293
+ }, z.core.$strip>;
294
+ /**
295
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
296
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
297
+ * Stream are two distinct surfaces with different data paths (Barazo API
298
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
299
+ * types are no longer consumed. Scheduled for removal in next major bump.
300
+ */
301
+ type AtmosphereFeedItem = z.infer<typeof AtmosphereFeedItemSchema>;
302
+ /**
303
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
304
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
305
+ * Stream are two distinct surfaces with different data paths (Barazo API
306
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
307
+ * types are no longer consumed. Scheduled for removal in next major bump.
308
+ */
309
+ declare const FollowFeedItemSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
310
+ id: z.ZodString;
311
+ actor: z.ZodObject<{
312
+ did: z.ZodString;
313
+ handle: z.ZodString;
314
+ displayName: z.ZodOptional<z.ZodString>;
315
+ avatarUrl: z.ZodOptional<z.ZodString>;
316
+ }, z.core.$strip>;
317
+ indexedAt: z.ZodString;
318
+ eventType: z.ZodString;
319
+ source: z.ZodLiteral<"sifa">;
320
+ appId: z.ZodOptional<z.ZodLiteral<"sifa">>;
321
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
322
+ }, z.core.$strip>, z.ZodObject<{
323
+ id: z.ZodString;
324
+ actor: z.ZodObject<{
325
+ did: z.ZodString;
326
+ handle: z.ZodString;
327
+ displayName: z.ZodOptional<z.ZodString>;
328
+ avatarUrl: z.ZodOptional<z.ZodString>;
329
+ }, z.core.$strip>;
330
+ indexedAt: z.ZodString;
331
+ eventType: z.ZodString;
332
+ source: z.ZodLiteral<"atmosphere">;
333
+ appId: z.ZodString;
334
+ uri: z.ZodOptional<z.ZodString>;
335
+ cid: z.ZodOptional<z.ZodString>;
336
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
337
+ }, z.core.$strip>], "source">;
338
+ /**
339
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
340
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
341
+ * Stream are two distinct surfaces with different data paths (Barazo API
342
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
343
+ * types are no longer consumed. Scheduled for removal in next major bump.
344
+ */
345
+ type FollowFeedItem = z.infer<typeof FollowFeedItemSchema>;
346
+ /**
347
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
348
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
349
+ * Stream are two distinct surfaces with different data paths (Barazo API
350
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
351
+ * types are no longer consumed. Scheduled for removal in next major bump.
352
+ */
353
+ declare const FollowFeedPageSchema: z.ZodObject<{
354
+ items: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
355
+ id: z.ZodString;
356
+ actor: z.ZodObject<{
357
+ did: z.ZodString;
358
+ handle: z.ZodString;
359
+ displayName: z.ZodOptional<z.ZodString>;
360
+ avatarUrl: z.ZodOptional<z.ZodString>;
361
+ }, z.core.$strip>;
362
+ indexedAt: z.ZodString;
363
+ eventType: z.ZodString;
364
+ source: z.ZodLiteral<"sifa">;
365
+ appId: z.ZodOptional<z.ZodLiteral<"sifa">>;
366
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
367
+ }, z.core.$strip>, z.ZodObject<{
368
+ id: z.ZodString;
369
+ actor: z.ZodObject<{
370
+ did: z.ZodString;
371
+ handle: z.ZodString;
372
+ displayName: z.ZodOptional<z.ZodString>;
373
+ avatarUrl: z.ZodOptional<z.ZodString>;
374
+ }, z.core.$strip>;
375
+ indexedAt: z.ZodString;
376
+ eventType: z.ZodString;
377
+ source: z.ZodLiteral<"atmosphere">;
378
+ appId: z.ZodString;
379
+ uri: z.ZodOptional<z.ZodString>;
380
+ cid: z.ZodOptional<z.ZodString>;
381
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
382
+ }, z.core.$strip>], "source">>;
383
+ cursor: z.ZodNullable<z.ZodString>;
384
+ }, z.core.$strip>;
385
+ /**
386
+ * @deprecated The `/api/following/feed` surface was reverted (sifa-api#674).
387
+ * Per `decisions/activity-data-strategy.md` the Sifa Timeline + ATmosphere
388
+ * Stream are two distinct surfaces with different data paths (Barazo API
389
+ * for Timeline, live PDS reads + Valkey for Stream). These collapsed feed
390
+ * types are no longer consumed. Scheduled for removal in next major bump.
391
+ */
392
+ type FollowFeedPage = z.infer<typeof FollowFeedPageSchema>;
393
+ /**
394
+ * Composite feed cursor `(indexedAt DESC, source, id)`. Encoded as a
395
+ * URL-safe base64 string so it survives `URLSearchParams` round-trips
396
+ * without further encoding. Decoupling encode/decode from the API call
397
+ * lets consumers persist cursors (e.g. for "jump-back-here" UX) and
398
+ * lets us unit-test the format.
399
+ */
400
+ interface FeedCursor {
401
+ indexedAt: string;
402
+ source: 'sifa' | 'atmosphere';
403
+ id: string;
404
+ }
405
+ declare function encodeFeedCursor(cursor: FeedCursor): string;
406
+ declare function decodeFeedCursor(encoded: string): FeedCursor;
407
+
219
408
  /** Zod schema for `id.sifa.profile.certification` records. */
220
409
  declare const ProfileCertificationRecordSchema: z.ZodObject<{
221
410
  name: z.ZodString;
@@ -608,4 +797,4 @@ declare const ProfileInvestmentRecordSchema: z.ZodObject<{
608
797
  }, z.core.$loose>;
609
798
  type ProfileInvestmentRecord = z.infer<typeof ProfileInvestmentRecordSchema>;
610
799
 
611
- export { PublicationAuthorSchema as $, type ArtifactLink as A, type BlobRef as B, ProfileInvestmentRecordSchema as C, type ProfileInvolvementRecord as D, type EndorsementConfirmationRecord as E, ProfileInvolvementRecordSchema as F, type GraphFollowRecord as G, type ProfileLanguageRecord as H, InvestmentAmountSchema as I, ProfileLanguageRecordSchema as J, type ProfilePositionRecord as K, ProfilePositionRecordSchema as L, ProfilePresentationDeliveryRecordSchema as M, ProfilePresentationRecordSchema as N, type OrgProfileRecord as O, type PresentationDuration as P, type ProfileProjectRecord as Q, ProfileProjectRecordSchema as R, type ProfilePublicationRecord as S, ProfilePublicationRecordSchema as T, type ProfileSelfRecord as U, ProfileSelfRecordSchema as V, type ProfileSkillRecord as W, ProfileSkillRecordSchema as X, type ProfileVolunteeringRecord as Y, ProfileVolunteeringRecordSchema as Z, type PublicationAuthor as _, type ProfilePresentationDeliveryRecord as a, makeGraphFollowRecordSchema as a0, type ProfileInvestmentRecord as a1, type ProfilePresentationRecord as b, ArtifactLinkSchema as c, BlobRefSchema as d, EndorsementConfirmationRecordSchema as e, type EndorsementRecord as f, EndorsementRecordSchema as g, GraphFollowRecordSchema as h, type OrgEmploymentAttestationRecord as i, OrgEmploymentAttestationRecordSchema as j, OrgProfileRecordSchema as k, PROFILE_INVESTMENT_NSID as l, PROFILE_INVOLVEMENT_NSID as m, PresentationDurationSchema as n, type PresentationLink as o, PresentationLinkSchema as p, type ProfileCertificationRecord as q, ProfileCertificationRecordSchema as r, type ProfileCourseRecord as s, ProfileCourseRecordSchema as t, type ProfileEducationRecord as u, ProfileEducationRecordSchema as v, type ProfileExternalAccountRecord as w, ProfileExternalAccountRecordSchema as x, type ProfileHonorRecord as y, ProfileHonorRecordSchema as z };
800
+ export { type ProfilePublicationRecord as $, type ArtifactLink as A, type BlobRef as B, type ProfileCourseRecord as C, ProfileCourseRecordSchema as D, type EndorsementConfirmationRecord as E, type FeedActor as F, type GraphFollowRecord as G, type ProfileEducationRecord as H, InvestmentAmountSchema as I, ProfileEducationRecordSchema as J, type ProfileExternalAccountRecord as K, ProfileExternalAccountRecordSchema as L, type ProfileHonorRecord as M, ProfileHonorRecordSchema as N, type OrgProfileRecord as O, type PresentationDuration as P, ProfileInvestmentRecordSchema as Q, type ProfileInvolvementRecord as R, ProfileInvolvementRecordSchema as S, type ProfileLanguageRecord as T, ProfileLanguageRecordSchema as U, type ProfilePositionRecord as V, ProfilePositionRecordSchema as W, ProfilePresentationDeliveryRecordSchema as X, ProfilePresentationRecordSchema as Y, type ProfileProjectRecord as Z, ProfileProjectRecordSchema as _, type ProfilePresentationDeliveryRecord as a, ProfilePublicationRecordSchema as a0, type ProfileSelfRecord as a1, ProfileSelfRecordSchema as a2, type ProfileSkillRecord as a3, ProfileSkillRecordSchema as a4, type ProfileVolunteeringRecord as a5, ProfileVolunteeringRecordSchema as a6, type PublicationAuthor as a7, PublicationAuthorSchema as a8, type SifaFeedItem as a9, SifaFeedItemSchema as aa, decodeFeedCursor as ab, encodeFeedCursor as ac, makeGraphFollowRecordSchema as ad, type ProfileInvestmentRecord as ae, type ProfilePresentationRecord as b, ArtifactLinkSchema as c, type AtmosphereFeedItem as d, AtmosphereFeedItemSchema as e, BlobRefSchema as f, EndorsementConfirmationRecordSchema as g, type EndorsementRecord as h, EndorsementRecordSchema as i, FeedActorSchema as j, type FeedCursor as k, type FollowFeedItem as l, FollowFeedItemSchema as m, type FollowFeedPage as n, FollowFeedPageSchema as o, GraphFollowRecordSchema as p, type OrgEmploymentAttestationRecord as q, OrgEmploymentAttestationRecordSchema as r, OrgProfileRecordSchema as s, PROFILE_INVESTMENT_NSID as t, PROFILE_INVOLVEMENT_NSID as u, PresentationDurationSchema as v, type PresentationLink as w, PresentationLinkSchema as x, type ProfileCertificationRecord as y, ProfileCertificationRecordSchema as z };