@atproto/bsky 0.0.189 → 0.0.191

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 (104) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/data-plane/server/routes/suggestions.js +1 -1
  3. package/dist/data-plane/server/routes/suggestions.js.map +1 -1
  4. package/dist/lexicon/lexicons.d.ts +2 -2
  5. package/dist/lexicon/lexicons.js +1 -1
  6. package/dist/lexicon/lexicons.js.map +1 -1
  7. package/dist/lexicon/types/app/bsky/actor/profile.d.ts +4 -3
  8. package/dist/lexicon/types/app/bsky/actor/profile.d.ts.map +1 -1
  9. package/dist/lexicon/types/app/bsky/actor/profile.js +9 -7
  10. package/dist/lexicon/types/app/bsky/actor/profile.js.map +1 -1
  11. package/dist/lexicon/types/app/bsky/actor/status.d.ts +4 -3
  12. package/dist/lexicon/types/app/bsky/actor/status.d.ts.map +1 -1
  13. package/dist/lexicon/types/app/bsky/actor/status.js +9 -7
  14. package/dist/lexicon/types/app/bsky/actor/status.js.map +1 -1
  15. package/dist/lexicon/types/app/bsky/feed/generator.d.ts +4 -3
  16. package/dist/lexicon/types/app/bsky/feed/generator.d.ts.map +1 -1
  17. package/dist/lexicon/types/app/bsky/feed/generator.js +9 -7
  18. package/dist/lexicon/types/app/bsky/feed/generator.js.map +1 -1
  19. package/dist/lexicon/types/app/bsky/feed/like.d.ts +4 -3
  20. package/dist/lexicon/types/app/bsky/feed/like.d.ts.map +1 -1
  21. package/dist/lexicon/types/app/bsky/feed/like.js +9 -7
  22. package/dist/lexicon/types/app/bsky/feed/like.js.map +1 -1
  23. package/dist/lexicon/types/app/bsky/feed/post.d.ts +4 -3
  24. package/dist/lexicon/types/app/bsky/feed/post.d.ts.map +1 -1
  25. package/dist/lexicon/types/app/bsky/feed/post.js +9 -7
  26. package/dist/lexicon/types/app/bsky/feed/post.js.map +1 -1
  27. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts +4 -3
  28. package/dist/lexicon/types/app/bsky/feed/postgate.d.ts.map +1 -1
  29. package/dist/lexicon/types/app/bsky/feed/postgate.js +9 -7
  30. package/dist/lexicon/types/app/bsky/feed/postgate.js.map +1 -1
  31. package/dist/lexicon/types/app/bsky/feed/repost.d.ts +4 -3
  32. package/dist/lexicon/types/app/bsky/feed/repost.d.ts.map +1 -1
  33. package/dist/lexicon/types/app/bsky/feed/repost.js +9 -7
  34. package/dist/lexicon/types/app/bsky/feed/repost.js.map +1 -1
  35. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts +4 -3
  36. package/dist/lexicon/types/app/bsky/feed/threadgate.d.ts.map +1 -1
  37. package/dist/lexicon/types/app/bsky/feed/threadgate.js +9 -7
  38. package/dist/lexicon/types/app/bsky/feed/threadgate.js.map +1 -1
  39. package/dist/lexicon/types/app/bsky/graph/block.d.ts +4 -3
  40. package/dist/lexicon/types/app/bsky/graph/block.d.ts.map +1 -1
  41. package/dist/lexicon/types/app/bsky/graph/block.js +9 -7
  42. package/dist/lexicon/types/app/bsky/graph/block.js.map +1 -1
  43. package/dist/lexicon/types/app/bsky/graph/follow.d.ts +4 -3
  44. package/dist/lexicon/types/app/bsky/graph/follow.d.ts.map +1 -1
  45. package/dist/lexicon/types/app/bsky/graph/follow.js +9 -7
  46. package/dist/lexicon/types/app/bsky/graph/follow.js.map +1 -1
  47. package/dist/lexicon/types/app/bsky/graph/list.d.ts +4 -3
  48. package/dist/lexicon/types/app/bsky/graph/list.d.ts.map +1 -1
  49. package/dist/lexicon/types/app/bsky/graph/list.js +9 -7
  50. package/dist/lexicon/types/app/bsky/graph/list.js.map +1 -1
  51. package/dist/lexicon/types/app/bsky/graph/listblock.d.ts +4 -3
  52. package/dist/lexicon/types/app/bsky/graph/listblock.d.ts.map +1 -1
  53. package/dist/lexicon/types/app/bsky/graph/listblock.js +9 -7
  54. package/dist/lexicon/types/app/bsky/graph/listblock.js.map +1 -1
  55. package/dist/lexicon/types/app/bsky/graph/listitem.d.ts +4 -3
  56. package/dist/lexicon/types/app/bsky/graph/listitem.d.ts.map +1 -1
  57. package/dist/lexicon/types/app/bsky/graph/listitem.js +9 -7
  58. package/dist/lexicon/types/app/bsky/graph/listitem.js.map +1 -1
  59. package/dist/lexicon/types/app/bsky/graph/starterpack.d.ts +4 -3
  60. package/dist/lexicon/types/app/bsky/graph/starterpack.d.ts.map +1 -1
  61. package/dist/lexicon/types/app/bsky/graph/starterpack.js +9 -7
  62. package/dist/lexicon/types/app/bsky/graph/starterpack.js.map +1 -1
  63. package/dist/lexicon/types/app/bsky/graph/verification.d.ts +4 -3
  64. package/dist/lexicon/types/app/bsky/graph/verification.d.ts.map +1 -1
  65. package/dist/lexicon/types/app/bsky/graph/verification.js +9 -7
  66. package/dist/lexicon/types/app/bsky/graph/verification.js.map +1 -1
  67. package/dist/lexicon/types/app/bsky/labeler/service.d.ts +4 -3
  68. package/dist/lexicon/types/app/bsky/labeler/service.d.ts.map +1 -1
  69. package/dist/lexicon/types/app/bsky/labeler/service.js +9 -7
  70. package/dist/lexicon/types/app/bsky/labeler/service.js.map +1 -1
  71. package/dist/lexicon/types/app/bsky/notification/declaration.d.ts +4 -3
  72. package/dist/lexicon/types/app/bsky/notification/declaration.d.ts.map +1 -1
  73. package/dist/lexicon/types/app/bsky/notification/declaration.js +9 -7
  74. package/dist/lexicon/types/app/bsky/notification/declaration.js.map +1 -1
  75. package/dist/lexicon/types/chat/bsky/actor/declaration.d.ts +4 -3
  76. package/dist/lexicon/types/chat/bsky/actor/declaration.d.ts.map +1 -1
  77. package/dist/lexicon/types/chat/bsky/actor/declaration.js +9 -7
  78. package/dist/lexicon/types/chat/bsky/actor/declaration.js.map +1 -1
  79. package/dist/lexicon/types/com/atproto/lexicon/schema.d.ts +4 -3
  80. package/dist/lexicon/types/com/atproto/lexicon/schema.d.ts.map +1 -1
  81. package/dist/lexicon/types/com/atproto/lexicon/schema.js +9 -7
  82. package/dist/lexicon/types/com/atproto/lexicon/schema.js.map +1 -1
  83. package/package.json +6 -6
  84. package/src/data-plane/server/routes/suggestions.ts +1 -1
  85. package/src/lexicon/lexicons.ts +1 -1
  86. package/src/lexicon/types/app/bsky/actor/profile.ts +12 -6
  87. package/src/lexicon/types/app/bsky/actor/status.ts +12 -6
  88. package/src/lexicon/types/app/bsky/feed/generator.ts +12 -6
  89. package/src/lexicon/types/app/bsky/feed/like.ts +12 -6
  90. package/src/lexicon/types/app/bsky/feed/post.ts +12 -6
  91. package/src/lexicon/types/app/bsky/feed/postgate.ts +12 -6
  92. package/src/lexicon/types/app/bsky/feed/repost.ts +12 -6
  93. package/src/lexicon/types/app/bsky/feed/threadgate.ts +12 -6
  94. package/src/lexicon/types/app/bsky/graph/block.ts +12 -6
  95. package/src/lexicon/types/app/bsky/graph/follow.ts +12 -6
  96. package/src/lexicon/types/app/bsky/graph/list.ts +12 -6
  97. package/src/lexicon/types/app/bsky/graph/listblock.ts +12 -6
  98. package/src/lexicon/types/app/bsky/graph/listitem.ts +12 -6
  99. package/src/lexicon/types/app/bsky/graph/starterpack.ts +12 -6
  100. package/src/lexicon/types/app/bsky/graph/verification.ts +12 -6
  101. package/src/lexicon/types/app/bsky/labeler/service.ts +12 -6
  102. package/src/lexicon/types/app/bsky/notification/declaration.ts +12 -6
  103. package/src/lexicon/types/chat/bsky/actor/declaration.ts +12 -6
  104. package/src/lexicon/types/com/atproto/lexicon/schema.ts +12 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atproto/bsky
2
2
 
3
+ ## 0.0.191
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`a8e307ef4`](https://github.com/bluesky-social/atproto/commit/a8e307ef4851b164ee38bb5149343631e329f143), [`8ff5ec4ca`](https://github.com/bluesky-social/atproto/commit/8ff5ec4caa9a1f5c1e453a416ba2af22d1ee4f58)]:
8
+ - @atproto/api@0.17.4
9
+ - @atproto-labs/fetch-node@0.2.0
10
+
11
+ ## 0.0.190
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [[`386f583cf`](https://github.com/bluesky-social/atproto/commit/386f583cffa2c596a12be4e98dde498f3b8670f6)]:
16
+ - @atproto/api@0.17.3
17
+
3
18
  ## 0.0.189
4
19
 
5
20
  ### Patch Changes
@@ -43,7 +43,7 @@ const getFollowSuggestionsGlobal = async (db, input) => {
43
43
  const firstTwo = suggestions.filter((row) => row.order === 1 || row.order === 2);
44
44
  const rest = suggestions.filter((row) => row.order !== 1 && row.order !== 2);
45
45
  const limited = firstTwo.concat(shuffle(rest)).slice(0, input.limit);
46
- // if the result set ends up getting larger, consider using a seed included in the cursor for for the randomized shuffle
46
+ // if the result set ends up getting larger, consider using a seed included in the cursor for the randomized shuffle
47
47
  const cursor = limited.length > 0
48
48
  ? limited
49
49
  .map((row) => row.order.toString())
@@ -1 +1 @@
1
- {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/suggestions.ts"],"names":[],"mappings":"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","sourcesContent":["import { ServiceImpl } from '@connectrpc/connect'\nimport { sql } from 'kysely'\nimport { Service } from '../../../proto/bsky_connect'\nimport { Database } from '../db'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getFollowSuggestions(req) {\n const { actorDid, relativeToDid, cursor, limit } = req\n if (relativeToDid) {\n return getFollowSuggestionsRelativeTo(db, {\n actorDid,\n relativeToDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n } else {\n return getFollowSuggestionsGlobal(db, {\n actorDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n }\n },\n\n async getSuggestedEntities() {\n const entities = await db.db\n .selectFrom('tagged_suggestion')\n .selectAll()\n .execute()\n return {\n entities,\n }\n },\n})\n\nconst getFollowSuggestionsGlobal = async (\n db: Database,\n input: { actorDid: string; cursor?: string; limit?: number },\n) => {\n const alreadyIncluded = parseCursor(input.cursor)\n const suggestions = await db.db\n .selectFrom('suggested_follow')\n .innerJoin('actor', 'actor.did', 'suggested_follow.did')\n .if(alreadyIncluded.length > 0, (qb) =>\n qb.where('suggested_follow.order', 'not in', alreadyIncluded),\n )\n .selectAll()\n .orderBy('suggested_follow.order', 'asc')\n .execute()\n\n // always include first two\n const firstTwo = suggestions.filter(\n (row) => row.order === 1 || row.order === 2,\n )\n const rest = suggestions.filter((row) => row.order !== 1 && row.order !== 2)\n const limited = firstTwo.concat(shuffle(rest)).slice(0, input.limit)\n\n // if the result set ends up getting larger, consider using a seed included in the cursor for for the randomized shuffle\n const cursor =\n limited.length > 0\n ? limited\n .map((row) => row.order.toString())\n .concat(alreadyIncluded.map((id) => id.toString()))\n .join(':')\n : undefined\n\n return {\n dids: limited.map((s) => s.did),\n cursor,\n }\n}\n\nconst getFollowSuggestionsRelativeTo = async (\n db: Database,\n input: {\n actorDid: string\n relativeToDid: string\n cursor?: string\n limit?: number\n },\n) => {\n if (input.cursor) return { dids: [] }\n const limit = input.limit ? Math.min(10, input.limit) : 10\n const actorsViewerFollows = db.db\n .selectFrom('follow')\n .where('creator', '=', input.actorDid)\n .select('subjectDid')\n const mostLikedAccounts = await db.db\n .selectFrom(\n db.db\n .selectFrom('like')\n .where('creator', '=', input.relativeToDid)\n .select(sql`split_part(subject, '/', 3)`.as('subjectDid'))\n .orderBy('sortAt', 'desc')\n .limit(1000) // limit to 1000\n .as('likes'),\n )\n .select('likes.subjectDid as did')\n .select((qb) => qb.fn.count('likes.subjectDid').as('count'))\n .where('likes.subjectDid', 'not in', actorsViewerFollows)\n .where('likes.subjectDid', 'not in', [input.actorDid, input.relativeToDid])\n .groupBy('likes.subjectDid')\n .orderBy('count', 'desc')\n .limit(limit)\n .execute()\n const resultDids = mostLikedAccounts.map((a) => ({ did: a.did })) as {\n did: string\n }[]\n\n if (resultDids.length < limit) {\n // backfill with popular accounts followed by actor\n const mostPopularAccountsActorFollows = await db.db\n .selectFrom('follow')\n .innerJoin('profile_agg', 'follow.subjectDid', 'profile_agg.did')\n .select('follow.subjectDid as did')\n .where('follow.creator', '=', input.actorDid)\n .where('follow.subjectDid', '!=', input.relativeToDid)\n .where('follow.subjectDid', 'not in', actorsViewerFollows)\n .if(resultDids.length > 0, (qb) =>\n qb.where(\n 'subjectDid',\n 'not in',\n resultDids.map((a) => a.did),\n ),\n )\n .orderBy('profile_agg.followersCount', 'desc')\n .limit(limit)\n .execute()\n\n resultDids.push(...mostPopularAccountsActorFollows)\n }\n\n if (resultDids.length < limit) {\n // backfill with suggested_follow table\n const additional = await db.db\n .selectFrom('suggested_follow')\n .where(\n 'did',\n 'not in',\n // exclude any we already have\n resultDids\n .map((a) => a.did)\n .concat([input.actorDid, input.relativeToDid]),\n )\n // and aren't already followed by viewer\n .where('did', 'not in', actorsViewerFollows)\n .selectAll()\n .execute()\n\n resultDids.push(...additional)\n }\n\n return { dids: resultDids.map((x) => x.did) }\n}\n\nconst parseCursor = (cursor?: string): number[] => {\n if (!cursor) {\n return []\n }\n try {\n return cursor\n .split(':')\n .map((id) => parseInt(id, 10))\n .filter((id) => !isNaN(id))\n } catch {\n return []\n }\n}\n\nconst shuffle = <T>(arr: T[]): T[] => {\n return arr\n .map((value) => ({ value, sort: Math.random() }))\n .sort((a, b) => a.sort - b.sort)\n .map(({ value }) => value)\n}\n"]}
1
+ {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../../../src/data-plane/server/routes/suggestions.ts"],"names":[],"mappings":"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","sourcesContent":["import { ServiceImpl } from '@connectrpc/connect'\nimport { sql } from 'kysely'\nimport { Service } from '../../../proto/bsky_connect'\nimport { Database } from '../db'\n\nexport default (db: Database): Partial<ServiceImpl<typeof Service>> => ({\n async getFollowSuggestions(req) {\n const { actorDid, relativeToDid, cursor, limit } = req\n if (relativeToDid) {\n return getFollowSuggestionsRelativeTo(db, {\n actorDid,\n relativeToDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n } else {\n return getFollowSuggestionsGlobal(db, {\n actorDid,\n cursor: cursor || undefined,\n limit: limit || undefined,\n })\n }\n },\n\n async getSuggestedEntities() {\n const entities = await db.db\n .selectFrom('tagged_suggestion')\n .selectAll()\n .execute()\n return {\n entities,\n }\n },\n})\n\nconst getFollowSuggestionsGlobal = async (\n db: Database,\n input: { actorDid: string; cursor?: string; limit?: number },\n) => {\n const alreadyIncluded = parseCursor(input.cursor)\n const suggestions = await db.db\n .selectFrom('suggested_follow')\n .innerJoin('actor', 'actor.did', 'suggested_follow.did')\n .if(alreadyIncluded.length > 0, (qb) =>\n qb.where('suggested_follow.order', 'not in', alreadyIncluded),\n )\n .selectAll()\n .orderBy('suggested_follow.order', 'asc')\n .execute()\n\n // always include first two\n const firstTwo = suggestions.filter(\n (row) => row.order === 1 || row.order === 2,\n )\n const rest = suggestions.filter((row) => row.order !== 1 && row.order !== 2)\n const limited = firstTwo.concat(shuffle(rest)).slice(0, input.limit)\n\n // if the result set ends up getting larger, consider using a seed included in the cursor for the randomized shuffle\n const cursor =\n limited.length > 0\n ? limited\n .map((row) => row.order.toString())\n .concat(alreadyIncluded.map((id) => id.toString()))\n .join(':')\n : undefined\n\n return {\n dids: limited.map((s) => s.did),\n cursor,\n }\n}\n\nconst getFollowSuggestionsRelativeTo = async (\n db: Database,\n input: {\n actorDid: string\n relativeToDid: string\n cursor?: string\n limit?: number\n },\n) => {\n if (input.cursor) return { dids: [] }\n const limit = input.limit ? Math.min(10, input.limit) : 10\n const actorsViewerFollows = db.db\n .selectFrom('follow')\n .where('creator', '=', input.actorDid)\n .select('subjectDid')\n const mostLikedAccounts = await db.db\n .selectFrom(\n db.db\n .selectFrom('like')\n .where('creator', '=', input.relativeToDid)\n .select(sql`split_part(subject, '/', 3)`.as('subjectDid'))\n .orderBy('sortAt', 'desc')\n .limit(1000) // limit to 1000\n .as('likes'),\n )\n .select('likes.subjectDid as did')\n .select((qb) => qb.fn.count('likes.subjectDid').as('count'))\n .where('likes.subjectDid', 'not in', actorsViewerFollows)\n .where('likes.subjectDid', 'not in', [input.actorDid, input.relativeToDid])\n .groupBy('likes.subjectDid')\n .orderBy('count', 'desc')\n .limit(limit)\n .execute()\n const resultDids = mostLikedAccounts.map((a) => ({ did: a.did })) as {\n did: string\n }[]\n\n if (resultDids.length < limit) {\n // backfill with popular accounts followed by actor\n const mostPopularAccountsActorFollows = await db.db\n .selectFrom('follow')\n .innerJoin('profile_agg', 'follow.subjectDid', 'profile_agg.did')\n .select('follow.subjectDid as did')\n .where('follow.creator', '=', input.actorDid)\n .where('follow.subjectDid', '!=', input.relativeToDid)\n .where('follow.subjectDid', 'not in', actorsViewerFollows)\n .if(resultDids.length > 0, (qb) =>\n qb.where(\n 'subjectDid',\n 'not in',\n resultDids.map((a) => a.did),\n ),\n )\n .orderBy('profile_agg.followersCount', 'desc')\n .limit(limit)\n .execute()\n\n resultDids.push(...mostPopularAccountsActorFollows)\n }\n\n if (resultDids.length < limit) {\n // backfill with suggested_follow table\n const additional = await db.db\n .selectFrom('suggested_follow')\n .where(\n 'did',\n 'not in',\n // exclude any we already have\n resultDids\n .map((a) => a.did)\n .concat([input.actorDid, input.relativeToDid]),\n )\n // and aren't already followed by viewer\n .where('did', 'not in', actorsViewerFollows)\n .selectAll()\n .execute()\n\n resultDids.push(...additional)\n }\n\n return { dids: resultDids.map((x) => x.did) }\n}\n\nconst parseCursor = (cursor?: string): number[] => {\n if (!cursor) {\n return []\n }\n try {\n return cursor\n .split(':')\n .map((id) => parseInt(id, 10))\n .filter((id) => !isNaN(id))\n } catch {\n return []\n }\n}\n\nconst shuffle = <T>(arr: T[]): T[] => {\n return arr\n .map((value) => ({ value, sort: Math.random() }))\n .sort((a, b) => a.sort - b.sort)\n .map(({ value }) => value)\n}\n"]}
@@ -3429,7 +3429,7 @@ export declare const schemaDict: {
3429
3429
  };
3430
3430
  readonly hiddenReplies: {
3431
3431
  readonly type: "array";
3432
- readonly maxLength: 50;
3432
+ readonly maxLength: 300;
3433
3433
  readonly items: {
3434
3434
  readonly type: "string";
3435
3435
  readonly format: "at-uri";
@@ -16309,7 +16309,7 @@ export declare const schemas: ({
16309
16309
  };
16310
16310
  readonly hiddenReplies: {
16311
16311
  readonly type: "array";
16312
- readonly maxLength: 50;
16312
+ readonly maxLength: 300;
16313
16313
  readonly items: {
16314
16314
  readonly type: "string";
16315
16315
  readonly format: "at-uri";
@@ -3575,7 +3575,7 @@ exports.schemaDict = {
3575
3575
  },
3576
3576
  hiddenReplies: {
3577
3577
  type: 'array',
3578
- maxLength: 50,
3578
+ maxLength: 300,
3579
3579
  items: {
3580
3580
  type: 'string',
3581
3581
  format: 'at-uri',