@singi-labs/sifa-sdk 0.18.7 → 0.18.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1148,6 +1148,13 @@ var APP_CATEGORY_MAP = {
1148
1148
  // app.greengale.blog.entry — authored blog posts (title, subtitle, Markdown body)
1149
1149
  kut: "Social",
1150
1150
  // social.kut.community.membership — joining a Kut community (a commitment)
1151
+ // Onboard from the upcoming profile-of-the-day audit.
1152
+ atmob: "Pastes",
1153
+ // in.atmob.paste.{document,bundle} — authored text/code pastes on atmob.in
1154
+ tokono: "Video",
1155
+ // ma.tokono.byov.video — authored videos hosted via the tokono.ma "bring your own video" feature
1156
+ portable: "Social",
1157
+ // agency.portable.membership — joining a community (a commitment), attested by another actor
1151
1158
  // Web-only (rendered in pills/cards via sifa-web atproto-apps.ts;
1152
1159
  // no backend scan collection yet)
1153
1160
  linkat: "Links",
@@ -1164,8 +1171,8 @@ function categoryForApp(appId) {
1164
1171
  // src/taxonomy/activity-tiers.json
1165
1172
  var activity_tiers_default = {
1166
1173
  $schema: "https://sifa.id/schemas/activity-tiers/v1.json",
1167
- version: "1.3.0",
1168
- updated: "2026-08-25",
1174
+ version: "1.4.0",
1175
+ updated: "2026-09-04",
1169
1176
  tiers: {
1170
1177
  creation: {
1171
1178
  label: "Made",
@@ -1184,6 +1191,23 @@ var activity_tiers_default = {
1184
1191
  }
1185
1192
  },
1186
1193
  lexicons: {
1194
+ "agency.portable.membership": {
1195
+ tier: "creation",
1196
+ app: "portable",
1197
+ notes: "Joining a community (a commitment), attested by another actor."
1198
+ },
1199
+ "in.atmob.paste.document": {
1200
+ tier: "creation",
1201
+ app: "atmob"
1202
+ },
1203
+ "in.atmob.paste.bundle": {
1204
+ tier: "creation",
1205
+ app: "atmob"
1206
+ },
1207
+ "ma.tokono.byov.video": {
1208
+ tier: "creation",
1209
+ app: "tokono"
1210
+ },
1187
1211
  "app.atmobb.discussion.reply": {
1188
1212
  tier: "creation",
1189
1213
  app: "atmobb",
@@ -3485,6 +3509,22 @@ var APP_URL_PATTERNS = Object.freeze({
3485
3509
  // its own; the card links to the community it joined, built from the
3486
3510
  // membership's community.uri in resolve-card-url. Homepage fallback only.
3487
3511
  profileUrlPattern: "https://kut.social"
3512
+ },
3513
+ atmob: {
3514
+ // atmob (atmob.in) is a paste app. Its SPA viewer renders any paste by its
3515
+ // full at-uri via a `?uri=` query param (verified in the app's app.js:
3516
+ // `location.search = ?uri=${encodeURIComponent(uri)}`). Both paste.document
3517
+ // and paste.bundle share that viewer, so the per-record URL is built
3518
+ // bespoke from the item's own uri in resolve-card-url. No pattern here.
3519
+ },
3520
+ tokono: {
3521
+ // tokono (tokono.ma) hosts "bring your own video" records, but tokono.ma is
3522
+ // the owner's static personal site with no public per-video viewer route.
3523
+ // Cards render non-clickable.
3524
+ },
3525
+ portable: {
3526
+ // agency.portable (handle portable.agency) has no resolving website, and a
3527
+ // membership record has no page of its own. Cards render non-clickable.
3488
3528
  }
3489
3529
  });
3490
3530
  var COLLECTION_TO_APP = [
@@ -3572,7 +3612,11 @@ var COLLECTION_TO_APP = [
3572
3612
  // Onboard from angrydutchman.houseofmadness.org profile audit.
3573
3613
  ["app.askeverything.", "askeverything"],
3574
3614
  ["app.greengale.", "greengale"],
3575
- ["social.kut.", "kut"]
3615
+ ["social.kut.", "kut"],
3616
+ // Onboard from the upcoming profile-of-the-day audit.
3617
+ ["in.atmob.paste.", "atmob"],
3618
+ ["ma.tokono.byov.", "tokono"],
3619
+ ["agency.portable.", "portable"]
3576
3620
  ];
3577
3621
 
3578
3622
  // src/cards/resolve-card-url.ts
@@ -3755,6 +3799,10 @@ function resolveCardHealth(item) {
3755
3799
  if (collection === "exchange.recipe.recipe") {
3756
3800
  return patternHealth("recipe", { handle: authorHandle, did: authorDid, rkey }, collection);
3757
3801
  }
3802
+ if (collection.startsWith("in.atmob.paste.")) {
3803
+ if (uri) return recordHealth(`https://atmob.in/?uri=${encodeURIComponent(uri)}`);
3804
+ return { url: null, strategy: "none" };
3805
+ }
3758
3806
  const recordUrl = stringOrNull(record.url);
3759
3807
  if (recordUrl) return urlHealth(recordUrl);
3760
3808
  return patternHealth(appId, { handle: authorHandle, did: authorDid, rkey }, collection);
@@ -5319,13 +5367,11 @@ function groupInvolvementByHeading(items) {
5319
5367
  bucket.push(item);
5320
5368
  byHeading.set(heading, bucket);
5321
5369
  }
5322
- const recency = (i) => i.endedAt ?? i.startedAt ?? "";
5323
5370
  const groups = [];
5324
5371
  for (const heading of INVOLVEMENT_HEADING_ORDER) {
5325
5372
  const bucket = byHeading.get(heading);
5326
5373
  if (!bucket?.length) continue;
5327
- const sorted = [...bucket].sort((a, b) => recency(b).localeCompare(recency(a)));
5328
- groups.push({ heading, items: sorted });
5374
+ groups.push({ heading, items: sortByDateDesc(bucket, lexiconDateExtractor) });
5329
5375
  }
5330
5376
  return groups;
5331
5377
  }
@@ -6150,7 +6196,7 @@ function describeSifaRecord(collection, value) {
6150
6196
  }
6151
6197
 
6152
6198
  // src/index.ts
6153
- var SIFA_SDK_VERSION = "0.18.7";
6199
+ var SIFA_SDK_VERSION = "0.18.9";
6154
6200
 
6155
6201
  exports.ACTIVITY_TIERS = ACTIVITY_TIERS;
6156
6202
  exports.ACTIVITY_VERBS = ACTIVITY_VERBS;