From 0ed770be93b0d1aeb75ffcb3e2529aaa51b00728 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 30 Jul 2026 21:10:22 +0300 Subject: [PATCH] fix rebase conflicts --- lexicons.json | 19 +- lexicons/app/bsky/ageassurance/defs.json | 8 + lexicons/app/bsky/graph/getFollowers.json | 4 + lexicons/app/bsky/graph/getFollows.json | 4 + .../app/bsky/graph/searchStarterPacksV2.json | 52 ++ .../bsky/notification/listNotifications.json | 5 + lexicons/app/bsky/unspecced/defs.json | 6 + lexicons/app/bsky/unspecced/getTrends.json | 4 + package.json | 2 +- pnpm-lock.yaml | 459 ++++++++++++++++-- src/ageAssurance/util.test.ts | 59 ++- src/ageAssurance/util.ts | 16 +- .../dms/dialogs/ShareViaChatDialog.tsx | 52 +- .../interstitials/FeedTrendingTopics.tsx | 7 +- .../moderation/ReportDialog/state.test.ts | 14 +- src/lib/media/video/multipart/upload.ts | 7 +- .../PostThread/components/LikesStat.tsx | 2 +- .../ActivityNotificationSettings.tsx | 2 +- src/screens/Signup/state.ts | 8 +- .../notifications/__tests__/util.test.ts | 7 +- src/state/queries/profile-followers.ts | 2 +- src/state/queries/profile-follows.ts | 2 +- src/state/queries/starter-pack-search.ts | 15 +- .../com/composer/text-input/TextInput.tsx | 2 +- .../notifications/NotificationFeedItem.tsx | 9 +- src/view/com/testing/TestCtrls.e2e.tsx | 2 +- 26 files changed, 635 insertions(+), 134 deletions(-) create mode 100644 lexicons/app/bsky/graph/searchStarterPacksV2.json diff --git a/lexicons.json b/lexicons.json index ac33ff919f..39c33a7398 100644 --- a/lexicons.json +++ b/lexicons.json @@ -102,6 +102,7 @@ "app.bsky.graph.muteActorList", "app.bsky.graph.muteThread", "app.bsky.graph.searchStarterPacks", + "app.bsky.graph.searchStarterPacksV2", "app.bsky.graph.starterpack", "app.bsky.graph.unmuteActor", "app.bsky.graph.unmuteActorList", @@ -328,7 +329,7 @@ }, "app.bsky.ageassurance.defs": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.ageassurance.defs", - "cid": "bafyreibb6kioccml6lypjq4zkaalhtpcxzqb2kcsjjhkdbffrcjz5chjbu" + "cid": "bafyreicbjiikqdyvklyrzrxhoubciaxxb2ysx45jv3xhtiiyt3kcnbtvc4" }, "app.bsky.ageassurance.getConfig": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.ageassurance.getConfig", @@ -604,11 +605,11 @@ }, "app.bsky.graph.getFollowers": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.getFollowers", - "cid": "bafyreihf2jjv2tchwfe4xphzjifr6ig52rdnfg3gq5m6q4hevcmz2zib6y" + "cid": "bafyreierv27tiobzlp6gvxcly22sc6pt4opbuh4q6l2f3h6drhykb5s7ba" }, "app.bsky.graph.getFollows": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.getFollows", - "cid": "bafyreifih5zxzuhtazq6h2hzb2lfjnshyhgc2wy3mprhegqallprsi3mzy" + "cid": "bafyreieajs5563pt6exwgkz2z3lz3l6tpxkvttb2vtbdhgsor7xedq5gtm" }, "app.bsky.graph.getKnownFollowers": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.getKnownFollowers", @@ -686,6 +687,10 @@ "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.searchStarterPacks", "cid": "bafyreiccilccjcf6owlhgwu742ipbi5xfooa4aolkg6cuhnnplgyfveel4" }, + "app.bsky.graph.searchStarterPacksV2": { + "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.searchStarterPacksV2", + "cid": "bafyreifzm4bcm3tw26peaor6u2ebj7qehfapnjyazhfj5tp6r2zikvet54" + }, "app.bsky.graph.starterpack": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.graph.starterpack", "cid": "bafyreih6wyvcj4gbkywomzbgj5rx742wz6qewew75xne43d4wld37u3ena" @@ -740,7 +745,7 @@ }, "app.bsky.notification.listNotifications": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.notification.listNotifications", - "cid": "bafyreigousmnsubjootrgwbw4ktxqw7wt6ch7x3lqdluczpbx3jnt5ig4q" + "cid": "bafyreibnnyxsg2ow6pox2e76cijt7dzkv22qxpxrytb7vqyiv723xrn2tm" }, "app.bsky.notification.putActivitySubscription": { "uri": "at://did:plc:4v4y5r3lwsbtmsxhile2ljac/com.atproto.lexicon.schema/app.bsky.notification.putActivitySubscription", @@ -772,7 +777,7 @@ }, "app.bsky.unspecced.defs": { "uri": "at://did:plc:placeholder00000000000000000000/com.atproto.lexicon.schema/app.bsky.unspecced.defs", - "cid": "bafyreihd4bjmbxtrkx2m4xuiaisuguenbd5d23qsbu5njo3xxib7skwfbe" + "cid": "bafyreia54pdzsurj6zqgluzt6klyborq2kq75zgaphnkeyxz3q2uozzepi" }, "app.bsky.unspecced.getAgeAssuranceState": { "uri": "at://did:plc:placeholder00000000000000000000/com.atproto.lexicon.schema/app.bsky.unspecced.getAgeAssuranceState", @@ -852,7 +857,7 @@ }, "app.bsky.unspecced.getTrends": { "uri": "at://did:plc:placeholder00000000000000000000/com.atproto.lexicon.schema/app.bsky.unspecced.getTrends", - "cid": "bafyreif5uukfgnbzsb4yaqk4e6zjb3gxei42bodsxka7t6viq6lxnox4mq" + "cid": "bafyreihrlvlry47lhborwurq7b2onjxt6nrtgk2yfqrqgy6kjra56aoyvq" }, "app.bsky.unspecced.getTrendsSkeleton": { "uri": "at://did:plc:placeholder00000000000000000000/com.atproto.lexicon.schema/app.bsky.unspecced.getTrendsSkeleton", @@ -1507,4 +1512,4 @@ "cid": "bafyreifj3hxfarkbpbcnjbckaljyyrwmrbaz3sy4ttx5pbzrdv7ea2pmby" } } -} \ No newline at end of file +} diff --git a/lexicons/app/bsky/ageassurance/defs.json b/lexicons/app/bsky/ageassurance/defs.json index 8f3ee43448..5111439870 100644 --- a/lexicons/app/bsky/ageassurance/defs.json +++ b/lexicons/app/bsky/ageassurance/defs.json @@ -64,6 +64,14 @@ "description": "The Age Assurance configuration for a specific region.", "required": ["countryCode", "minAccessAge", "rules"], "properties": { + "platforms": { + "type": "array", + "description": "The platforms this configuration applies to. If omitted, the configuration applies to all platforms.", + "items": { + "type": "string", + "knownValues": ["web", "ios", "android"] + } + }, "countryCode": { "type": "string", "description": "The ISO 3166-1 alpha-2 country code this configuration applies to." diff --git a/lexicons/app/bsky/graph/getFollowers.json b/lexicons/app/bsky/graph/getFollowers.json index d91da22cac..05041ea00a 100644 --- a/lexicons/app/bsky/graph/getFollowers.json +++ b/lexicons/app/bsky/graph/getFollowers.json @@ -21,6 +21,10 @@ }, "cursor": { "type": "string" + }, + "sort": { + "type": "string", + "knownValues": ["latest", "top"] } } }, diff --git a/lexicons/app/bsky/graph/getFollows.json b/lexicons/app/bsky/graph/getFollows.json index 2b1c0bad72..f007bf6738 100644 --- a/lexicons/app/bsky/graph/getFollows.json +++ b/lexicons/app/bsky/graph/getFollows.json @@ -21,6 +21,10 @@ }, "cursor": { "type": "string" + }, + "sort": { + "type": "string", + "knownValues": ["latest", "top"] } } }, diff --git a/lexicons/app/bsky/graph/searchStarterPacksV2.json b/lexicons/app/bsky/graph/searchStarterPacksV2.json new file mode 100644 index 0000000000..4885c9dfe3 --- /dev/null +++ b/lexicons/app/bsky/graph/searchStarterPacksV2.json @@ -0,0 +1,52 @@ +{ + "lexicon": 1, + "id": "app.bsky.graph.searchStarterPacksV2", + "defs": { + "main": { + "type": "query", + "description": "Find starter packs matching search criteria. Does not require auth.", + "parameters": { + "type": "params", + "required": ["q"], + "properties": { + "q": { + "type": "string", + "description": "Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended." + }, + "limit": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 25 + }, + "cursor": { + "type": "string" + } + } + }, + "output": { + "encoding": "application/json", + "schema": { + "type": "object", + "required": ["starterPacks"], + "properties": { + "cursor": { + "type": "string" + }, + "hitsTotal": { + "type": "integer", + "description": "Estimated total number of matching hits. May be rounded or truncated." + }, + "starterPacks": { + "type": "array", + "items": { + "type": "ref", + "ref": "app.bsky.graph.defs#starterPackView" + } + } + } + } + } + } + } +} diff --git a/lexicons/app/bsky/notification/listNotifications.json b/lexicons/app/bsky/notification/listNotifications.json index adde811236..378bd18af2 100644 --- a/lexicons/app/bsky/notification/listNotifications.json +++ b/lexicons/app/bsky/notification/listNotifications.json @@ -111,6 +111,11 @@ "record": { "type": "unknown" }, + "starterPack": { + "description": "The starter pack associated with this notification. Present when the notification is for a follow originating from a starter pack.", + "type": "ref", + "ref": "app.bsky.graph.defs#starterPackViewBasic" + }, "isRead": { "type": "boolean" }, diff --git a/lexicons/app/bsky/unspecced/defs.json b/lexicons/app/bsky/unspecced/defs.json index bdff995a19..609de81f8f 100644 --- a/lexicons/app/bsky/unspecced/defs.json +++ b/lexicons/app/bsky/unspecced/defs.json @@ -67,6 +67,9 @@ "displayName": { "type": "string" }, + "description": { + "type": "string" + }, "link": { "type": "string" }, @@ -110,6 +113,9 @@ "displayName": { "type": "string" }, + "description": { + "type": "string" + }, "link": { "type": "string" }, diff --git a/lexicons/app/bsky/unspecced/getTrends.json b/lexicons/app/bsky/unspecced/getTrends.json index 1c114218a4..b857c8681b 100644 --- a/lexicons/app/bsky/unspecced/getTrends.json +++ b/lexicons/app/bsky/unspecced/getTrends.json @@ -28,6 +28,10 @@ "type": "ref", "ref": "app.bsky.unspecced.defs#trendView" } + }, + "recIdStr": { + "type": "string", + "description": "Snowflake for this recommendation, use when submitting recommendation events." } } } diff --git a/package.json b/package.json index cade1f99aa..7153b53c5c 100644 --- a/package.json +++ b/package.json @@ -111,8 +111,8 @@ "@bsky.app/expo-scroll-edge-effect": "^0.1.9", "@bsky.app/expo-translate-text": "^0.2.9", "@bsky.app/peek-menu": "^0.3.2", - "@bsky.app/react-native-uitextview": "^2.5.0", "@bsky.app/react-native-mmkv": "2.12.5", + "@bsky.app/react-native-uitextview": "^2.5.0", "@bsky.app/sdk": "npm:bsky-sdk-preview@0.0.1-preview.2", "@bsky.app/sift": "^0.3.9", "@bsky.app/tapper": "^0.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62c4abd7ec..88bd329c96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -241,12 +241,15 @@ importers: .: dependencies: - '@atproto/api': - specifier: 0.20.34 - version: 0.20.34 '@atproto/common-web': specifier: 0.5.6 version: 0.5.6 + '@atproto/lex': + specifier: 0.3.0 + version: 0.3.0 + '@atproto/lex-password-session': + specifier: 0.1.8 + version: 0.1.8 '@atproto/syntax': specifier: 0.7.2 version: 0.7.2 @@ -277,9 +280,15 @@ importers: '@bsky.app/peek-menu': specifier: ^0.3.2 version: 0.3.2(expo@54.0.35(@babel/core@7.29.0)(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@bsky.app/react-native-mmkv': + specifier: 2.12.5 + version: 2.12.5(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@bsky.app/react-native-uitextview': specifier: ^2.5.0 version: 2.5.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@bsky.app/sdk': + specifier: npm:bsky-sdk-preview@0.0.1-preview.2 + version: bsky-sdk-preview@0.0.1-preview.2(@atproto/lex@0.3.0) '@bsky.app/sift': specifier: ^0.3.9 version: 0.3.9(expo@54.0.35(@babel/core@7.29.0)(react-native-webview@13.15.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -871,34 +880,99 @@ packages: graphql: optional: true - '@atproto/api@0.20.34': - resolution: {integrity: sha512-nKfCLkH2Al58YupLGtoVIucZ5XjtN9sU5oOTI70lp8J4nxl52C/Tk7AktcWe+Nx7st3I0fUgf+C5cHePgvwT0w==} + '@atproto-labs/did-resolver@0.3.5': + resolution: {integrity: sha512-0dMM+hj40VQiD/EJhlC1UMQgPXRwKeqM7NgJte7fVuYMv5b3P0W6+Lu3iDumHULcSjMmMXxJZzoi3i493Y0gCA==} + engines: {node: '>=22'} + + '@atproto-labs/fetch@0.3.4': + resolution: {integrity: sha512-YxXwi8HMk2HHDd5rljPGqxZ8bSeU78sFNz511Y222D0FraEq98p2r1ifkIgI23KQOfy0k0VzafeJAiGDh1CvfQ==} + engines: {node: '>=22'} + + '@atproto-labs/handle-resolver@0.4.6': + resolution: {integrity: sha512-a3ZoQ0xpIowFuIhvjXwaloJwT3He6NJ02FfrKaRW0tdT2GvEH6nLaVHr46ps8A4ddCz+Q4oUha9atfr4O+0P2g==} + engines: {node: '>=22'} + + '@atproto-labs/pipe@0.2.4': + resolution: {integrity: sha512-n67jCcrC+ouAeO10cWkpPzzLMlDi/lDCU30Us+LGqhOPhT6c4t5ASdBLQi9W3jUQtRzQBt3G9zipF+xKWNvVbw==} + engines: {node: '>=22'} + + '@atproto-labs/simple-store-memory@0.2.4': + resolution: {integrity: sha512-xAAUlOP9etqP9GGmJPq9gY1bRuJlZFdsC6wtAJSwUwMTwLRdenR7s8Qg5nxhbth5XL1XOtGABoD59NW3p+sl4A==} + engines: {node: '>=22'} + + '@atproto-labs/simple-store@0.4.4': + resolution: {integrity: sha512-3YH03xg99ZUS6Fq/6jcKRiZwUbzDb58xmS7ibg0y4+dukwrHa92cV/md76RpQJkAo9KYBvwLETdvF6fNtwIoGw==} engines: {node: '>=22'} '@atproto/common-web@0.5.6': resolution: {integrity: sha512-5Y4MIK9dpkJPiKiE6u7iEHitxj+g3aAU2GfGL686JlKE2zDKD4y18BJb+uVek6nXQKb5XOdNVvw+7BHarpn8Fw==} engines: {node: '>=22'} + '@atproto/common@0.7.2': + resolution: {integrity: sha512-D43QVEnSgWhzEoelJTWouPrwdjfHPAe5xVEc5RtsA6OTKEPaEJN0LSFd495ZtanMrvvC+KrgW8Tk02C8kvp45A==} + engines: {node: '>=22'} + + '@atproto/crypto@0.5.4': + resolution: {integrity: sha512-UR0BkuYNYuFtw+dA+y/oPPxzX0SWRnGJ+1Cfh/jGP1BvjRUyezK3omjpeLms5fYrXbM9vnfX+ckJFJqkBgLOdw==} + engines: {node: '>=22'} + + '@atproto/did@0.5.4': + resolution: {integrity: sha512-BlnwQ+obL+4ZA71KH/EzZ3TY+cpSxnLiUI85mjBJIQwvDF/oN2sQA18wIj9jpduviIt2b/cMtlJuzHjzBkfXvw==} + engines: {node: '>=22'} + + '@atproto/lex-builder@0.1.8': + resolution: {integrity: sha512-GYWisNom/J1MmFeSgMIFUgEj8yVKnvuJfyX1FwNKCczwfAunEdMy2Iiolq3JZNjWmH8uCtCWj7dg2GwQuEos7Q==} + engines: {node: '>=22'} + + '@atproto/lex-cbor@0.1.4': + resolution: {integrity: sha512-1reaooZfNFunJn2Fz21Up7iFQBPZlifQKlBsRvQoLG67mv43nmH4dZWgnGLD54ShCu8dyZ8Y6Wgh7BCg+2gRSw==} + engines: {node: '>=22'} + + '@atproto/lex-client@0.3.0': + resolution: {integrity: sha512-P+S3hWdIIOgNTun7J42dvxSyCkQog3Q2ShTjvcwP761TqiRex7zDWaRAaT9gvCy6I4pRuNdBCStysjSMlJeSdg==} + engines: {node: '>=22'} + '@atproto/lex-data@0.1.5': resolution: {integrity: sha512-TEM6GHuYpNm4O90LjNgbYq1Gmcr875S+BHrDxkg4PB5w/nlsz4HlbkGQG/WP/xbIV5O8TF5nNHDpCZ5ezTRrFA==} engines: {node: '>=22'} + '@atproto/lex-document@0.1.6': + resolution: {integrity: sha512-Yxc6LJ8tE0cntQ35ewagGbl7HOMX4jRkuEQ3ct+I43LKJBQPSk02rlwTY9A7SR/ULptN4Dn7XVqskEntWmCjWA==} + engines: {node: '>=22'} + + '@atproto/lex-installer@0.1.9': + resolution: {integrity: sha512-9PdApXnwtBRGty0muK/t5CUHv18nBtkut5Q5ibDcBhYKrsVmBAVNCXLqMreC2kbZf3q5L4+IfqtqMejmAZw2Mg==} + engines: {node: '>=22'} + '@atproto/lex-json@0.1.4': resolution: {integrity: sha512-ENR2cWkVrES+UL6TovbCRdX9BJOyHHJUS8jYx3Lxp3j4vEphjn/u+DW7bWloST2O8ID2OuVlt6+28ftNEEjmQQ==} engines: {node: '>=22'} - '@atproto/lexicon@0.7.7': - resolution: {integrity: sha512-92VH2oEsJdrIVNy7WY8rGn99ANNVglyUffoN7GJc0mxKi+fXN5iVlJ2cOyTfYABhr2ldSiptZWXEPEdBaIR9/A==} + '@atproto/lex-password-session@0.1.8': + resolution: {integrity: sha512-Zr3HLu6rgadiq2w82VSThOQcNfwTJNlrzlT8n9oBXDBw3CUEq3cTMatzTpdk4HYqv0unaqhaEowcKhJ4eWvSxQ==} + engines: {node: '>=22'} + + '@atproto/lex-resolver@0.2.2': + resolution: {integrity: sha512-/7rm1bq2me4ptNoPWOrWmlmzRSPhxbcm3BaeD0V8+OzJ5VKBrYHxqp8BBZTzqgVSmwF+TqANctUG4c/y0hkigw==} + engines: {node: '>=22'} + + '@atproto/lex-schema@0.2.2': + resolution: {integrity: sha512-UFK0EH8pw31dvL27aoZ5K78z+UMiD3ybIgkCyd7Idm267KM1IpycerTDeABqo4CYP3/IAnzjGpQaUaVc12bELA==} + engines: {node: '>=22'} + + '@atproto/lex@0.3.0': + resolution: {integrity: sha512-Ir5f60NrCScDMZ2JGoxUHOQm+h6XlsDSykk0HzET8/qEeHTLwnI+MJIlBwB64eBoqGQ72qAEoMc8L+bJil+huA==} + engines: {node: '>=22'} + hasBin: true + + '@atproto/repo@0.10.6': + resolution: {integrity: sha512-ayX/ieAni4ZMbpdu6VMOCYIjzT8HctCQtcSBWWR8eoynsGZ6FzK/Lln6bH8i0wAj8vPV2pcecd57d33YsahRcQ==} engines: {node: '>=22'} '@atproto/syntax@0.7.2': resolution: {integrity: sha512-tZ1Tr0R9pK4bI4Zs69t29cjMlCFQvRNBeNkqJC5pGeNuCt64D0eoF7s/AlqeVmYppClmQ0xJquggGgsMDP6j7w==} engines: {node: '>=22'} - '@atproto/xrpc@0.8.6': - resolution: {integrity: sha512-yVfKrlwZBBm44Ft9jDvHcTCwQ1ElqSlzXHWhT/KcqE+u24EAhWVFosfABfGbUByB/PmN8eLJ06FsWo5pUQcMNQ==} - engines: {node: '>=22'} - '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -1660,6 +1734,12 @@ packages: react: '*' react-native: '*' + '@bsky.app/react-native-mmkv@2.12.5': + resolution: {integrity: sha512-3vUz1nQY1DiKIPAWRkpp5ZGxH5f2G6Ui0UuQuEYjYv81xx1qFcSzS9KQ2sHcOKYdkOM9amWV2Q8TQCxt1lrAHg==} + peerDependencies: + react: '*' + react-native: '>=0.71.0' + '@bsky.app/react-native-uitextview@2.5.0': resolution: {integrity: sha512-8DyQAJEkr0ZPEb9QMmT3088V70B6xRsY8e/jvi2oq13hCsLEXCw5M1S48xKRnr8263bJxSH0BjK0nfhPS8Myqw==} peerDependencies: @@ -2260,6 +2340,14 @@ packages: '@messageformat/parser@5.1.1': resolution: {integrity: sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==} + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2424,6 +2512,9 @@ packages: cpu: [x64] os: [win32] + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -3473,6 +3564,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@tanstack/query-async-storage-persister@5.100.10': resolution: {integrity: sha512-NbxsCI9qyMbEooFnFsAR2dbVQ6cmxZpOWSjLFy62qfMkxXnNjkskqex7YgtzWSaD/ozOOLgrbDiyYWEPYKmMyQ==} @@ -3582,6 +3676,9 @@ packages: resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} engines: {node: '>= 10'} + '@ts-morph/common@0.28.1': + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -4160,13 +4257,14 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - await-lock@3.0.0: - resolution: {integrity: sha512-eO6fLiSnrJrMdjWMNK8zbVRXPs2TKJg78iKZd9wDpN3na5tcoV6EoeiOlMgk2QaAQ1gIrK1YuMsJHXWqz89tSA==} - babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4356,6 +4454,12 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bsky-sdk-preview@0.0.1-preview.2: + resolution: {integrity: sha512-LOcuvzc6UASiI5os1BUIo9dxAeVPIFiplcVSYbaDCgpH+tkpv2mqSqqsCRTP0g2CaVCwozqaTVy+jnsTO6/9BQ==} + engines: {node: '>=22.12.0'} + peerDependencies: + '@atproto/lex': ^0.3.0 + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -4402,6 +4506,10 @@ packages: caniuse-lite@1.0.30001792: resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + cborg@4.5.8: + resolution: {integrity: sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==} + hasBin: true + cborg@5.1.1: resolution: {integrity: sha512-BDbSRIp6XrQXkTc7g+DN0RB9RrDPTUfals2ecWUlt3juPLjbAvy/V72mJcXY0Ehu0Dq/3WpNCOCT68HUTbW+lw==} hasBin: true @@ -4505,6 +4613,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -4513,6 +4625,9 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + collect-v8-coverage@1.0.3: resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} @@ -4636,6 +4751,9 @@ packages: core-js-pure@3.49.0: resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -7265,6 +7383,10 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -7396,6 +7518,9 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -7463,6 +7588,16 @@ packages: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + hasBin: true + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -7725,6 +7860,9 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -7852,6 +7990,9 @@ packages: queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + radix-ui@1.4.3: resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} peerDependencies: @@ -8153,6 +8294,13 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + real-require@1.0.0: + resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -8308,6 +8456,10 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -8484,6 +8636,9 @@ packages: sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sonner-native@0.26.4: resolution: {integrity: sha512-wBE/pctNfz+ieXjpYX7uu5hH38ws8xRmH0AFmEdEgkOS363k6N8QfFoyjGqDmdUDy15m4AAvOjd2Wz/jATukIA==} peerDependencies: @@ -8548,6 +8703,10 @@ packages: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -8803,6 +8962,10 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thread-stream@4.2.0: + resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==} + engines: {node: '>=20'} + threads@1.7.0: resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} @@ -8869,6 +9032,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-morph@27.0.2: + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + ts-plugin-sort-import-suggestions@1.0.4: resolution: {integrity: sha512-85n5lm2OQQ+b7aRNK9omU1gmjMNXRsgeLwojm5u4OSY5sVBkAHTcgMQPEeHMNlyyfFW0uXnwgqAU0pNfhD96Bw==} @@ -8932,6 +9098,9 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + uint8arrays@5.1.1: + resolution: {integrity: sha512-9muQwa4wZG4dKi9gMAIBtnk2Pw87SRpvWTH6lOGm19V2Uqxr4uomUf2PGqPnWc+qs06sN8owUU4jfcoWOcfwVQ==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -9088,6 +9257,9 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -9360,6 +9532,10 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -9368,6 +9544,10 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.1.0: + resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yauzl@3.3.0: resolution: {integrity: sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==} engines: {node: '>=12'} @@ -9389,17 +9569,35 @@ snapshots: '@0no-co/graphql.web@1.2.0': {} - '@atproto/api@0.20.34': + '@atproto-labs/did-resolver@0.3.5': dependencies: - '@atproto/common-web': 0.5.6 - '@atproto/lexicon': 0.7.7 - '@atproto/syntax': 0.7.2 - '@atproto/xrpc': 0.8.6 - await-lock: 3.0.0 - multiformats: 13.4.2 - tlds: 1.261.0 + '@atproto-labs/fetch': 0.3.4 + '@atproto-labs/pipe': 0.2.4 + '@atproto-labs/simple-store': 0.4.4 + '@atproto-labs/simple-store-memory': 0.2.4 + '@atproto/did': 0.5.4 zod: 3.25.76 + '@atproto-labs/fetch@0.3.4': + dependencies: + '@atproto-labs/pipe': 0.2.4 + + '@atproto-labs/handle-resolver@0.4.6': + dependencies: + '@atproto-labs/simple-store': 0.4.4 + '@atproto-labs/simple-store-memory': 0.2.4 + '@atproto/did': 0.5.4 + zod: 3.25.76 + + '@atproto-labs/pipe@0.2.4': {} + + '@atproto-labs/simple-store-memory@0.2.4': + dependencies: + '@atproto-labs/simple-store': 0.4.4 + lru-cache: 10.4.3 + + '@atproto-labs/simple-store@0.4.4': {} + '@atproto/common-web@0.5.6': dependencies: '@atproto/lex-data': 0.1.5 @@ -9407,22 +9605,118 @@ snapshots: '@atproto/syntax': 0.7.2 zod: 3.25.76 + '@atproto/common@0.7.2': + dependencies: + '@atproto/common-web': 0.5.6 + '@atproto/lex-cbor': 0.1.4 + '@atproto/lex-data': 0.1.5 + multiformats: 13.4.2 + pino: 10.3.1 + + '@atproto/crypto@0.5.4': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + uint8arrays: 5.1.1 + + '@atproto/did@0.5.4': + dependencies: + zod: 3.25.76 + + '@atproto/lex-builder@0.1.8': + dependencies: + '@atproto/lex-document': 0.1.6 + '@atproto/lex-schema': 0.2.2 + prettier: 3.8.3 + ts-morph: 27.0.2 + tslib: 2.8.1 + + '@atproto/lex-cbor@0.1.4': + dependencies: + '@atproto/lex-data': 0.1.5 + cborg: 4.5.8 + tslib: 2.8.1 + + '@atproto/lex-client@0.3.0': + dependencies: + '@atproto/lex-data': 0.1.5 + '@atproto/lex-json': 0.1.4 + '@atproto/lex-schema': 0.2.2 + tslib: 2.8.1 + '@atproto/lex-data@0.1.5': dependencies: multiformats: 13.4.2 tslib: 2.8.1 unicode-segmenter: 0.14.5 + '@atproto/lex-document@0.1.6': + dependencies: + '@atproto/lex-schema': 0.2.2 + core-js: 3.49.0 + tslib: 2.8.1 + + '@atproto/lex-installer@0.1.9': + dependencies: + '@atproto/lex-builder': 0.1.8 + '@atproto/lex-cbor': 0.1.4 + '@atproto/lex-data': 0.1.5 + '@atproto/lex-document': 0.1.6 + '@atproto/lex-resolver': 0.2.2 + '@atproto/lex-schema': 0.2.2 + '@atproto/syntax': 0.7.2 + tslib: 2.8.1 + '@atproto/lex-json@0.1.4': dependencies: '@atproto/lex-data': 0.1.5 tslib: 2.8.1 - '@atproto/lexicon@0.7.7': + '@atproto/lex-password-session@0.1.8': dependencies: - '@atproto/common-web': 0.5.6 + '@atproto/lex-client': 0.3.0 + '@atproto/lex-schema': 0.2.2 + tslib: 2.8.1 + + '@atproto/lex-resolver@0.2.2': + dependencies: + '@atproto-labs/did-resolver': 0.3.5 + '@atproto/crypto': 0.5.4 + '@atproto/lex-client': 0.3.0 + '@atproto/lex-data': 0.1.5 + '@atproto/lex-document': 0.1.6 + '@atproto/lex-schema': 0.2.2 + '@atproto/repo': 0.10.6 '@atproto/syntax': 0.7.2 - multiformats: 13.4.2 + tslib: 2.8.1 + + '@atproto/lex-schema@0.2.2': + dependencies: + '@atproto/lex-data': 0.1.5 + '@atproto/syntax': 0.7.2 + '@standard-schema/spec': 1.1.0 + tslib: 2.8.1 + + '@atproto/lex@0.3.0': + dependencies: + '@atproto/lex-builder': 0.1.8 + '@atproto/lex-client': 0.3.0 + '@atproto/lex-data': 0.1.5 + '@atproto/lex-installer': 0.1.9 + '@atproto/lex-json': 0.1.4 + '@atproto/lex-schema': 0.2.2 + tslib: 2.8.1 + yargs: 18.1.0 + + '@atproto/repo@0.10.6': + dependencies: + '@atproto/common': 0.7.2 + '@atproto/common-web': 0.5.6 + '@atproto/crypto': 0.5.4 + '@atproto/lex-cbor': 0.1.4 + '@atproto/lex-data': 0.1.5 + '@atproto/syntax': 0.7.2 + varint: 6.0.0 zod: 3.25.76 '@atproto/syntax@0.7.2': @@ -9430,11 +9724,6 @@ snapshots: iso-datestring-validator: 2.2.2 tslib: 2.8.1 - '@atproto/xrpc@0.8.6': - dependencies: - '@atproto/lexicon': 0.7.7 - zod: 3.25.76 - '@babel/code-frame@7.10.4': dependencies: '@babel/highlight': 7.25.9 @@ -10381,6 +10670,11 @@ snapshots: react: 19.1.0 react-native: 0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0) + '@bsky.app/react-native-mmkv@2.12.5(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + dependencies: + react: 19.1.0 + react-native: 0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0) + '@bsky.app/react-native-uitextview@2.5.0(react-native@0.81.5(patch_hash=91fd85363059530dea649a5ca6012b933f79c8491737fbfdc685abc727e48403)(@babel/core@7.29.0)(@react-native/metro-config@0.86.0(@babel/core@7.29.0))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: react: 19.1.0 @@ -11293,6 +11587,12 @@ snapshots: dependencies: moo: 0.5.3 + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -11380,6 +11680,8 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.73.0': optional: true + '@pinojs/redact@0.4.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -12550,6 +12852,8 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.1.0': {} + '@tanstack/query-async-storage-persister@5.100.10': dependencies: '@tanstack/query-core': 5.100.10 @@ -12672,6 +12976,12 @@ snapshots: '@tootallnate/once@2.0.1': {} + '@ts-morph/common@0.28.1': + dependencies: + minimatch: 10.2.5 + path-browserify: 1.0.1 + tinyglobby: 0.2.16 + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.3 @@ -13252,12 +13562,12 @@ snapshots: asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 - await-lock@3.0.0: {} - babel-jest@29.7.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 @@ -13551,6 +13861,13 @@ snapshots: dependencies: node-int64: 0.4.0 + bsky-sdk-preview@0.0.1-preview.2(@atproto/lex@0.3.0): + dependencies: + '@atproto-labs/handle-resolver': 0.4.6 + '@atproto/lex': 0.3.0 + '@atproto/syntax': 0.7.2 + tlds: 1.261.0 + buffer-crc32@0.2.13: {} buffer-from@1.1.2: {} @@ -13599,6 +13916,8 @@ snapshots: caniuse-lite@1.0.30001792: {} + cborg@4.5.8: {} + cborg@5.1.1: {} chalk@2.4.2: @@ -13721,10 +14040,18 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clone@1.0.4: {} co@4.6.0: {} + code-block-writer@13.0.3: {} + collect-v8-coverage@1.0.3: {} color-convert@1.9.3: @@ -13836,6 +14163,8 @@ snapshots: core-js-pure@3.49.0: {} + core-js@3.49.0: {} + core-util-is@1.0.3: {} cosmiconfig@8.3.6(@typescript/typescript6@6.0.2): @@ -16923,6 +17252,8 @@ snapshots: obuf@1.1.2: {} + on-exit-leak-free@2.1.2: {} + on-finished@2.3.0: dependencies: ee-first: 1.1.1 @@ -17085,6 +17416,8 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + path-browserify@1.0.1: {} + path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -17129,6 +17462,26 @@ snapshots: pinkie@2.0.4: {} + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.1.0: {} + + pino@10.3.1: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 4.2.0 + pirates@4.0.7: {} pkg-dir@4.2.0: @@ -17372,6 +17725,8 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@5.0.0: {} + progress@2.0.3: {} promise@7.3.1: @@ -17542,6 +17897,8 @@ snapshots: dependencies: inherits: 2.0.4 + quick-format-unescaped@4.0.4: {} + radix-ui@1.4.3(@types/react-dom@19.1.11(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@radix-ui/primitive': 1.1.3 @@ -17955,6 +18312,10 @@ snapshots: dependencies: picomatch: 2.3.2 + real-require@0.2.0: {} + + real-require@1.0.0: {} + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -18121,6 +18482,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} sax@1.6.0: {} @@ -18331,6 +18694,10 @@ snapshots: uuid: 8.3.2 websocket-driver: 0.7.4 + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + sonner-native@0.26.4(48ff340dede165208988dce94163b1ce): dependencies: react: 19.1.0 @@ -18399,6 +18766,8 @@ snapshots: split-on-first@1.1.0: {} + split2@4.2.0: {} + sprintf-js@1.0.3: {} stable@0.1.8: {} @@ -18646,6 +19015,10 @@ snapshots: dependencies: any-promise: 1.3.0 + thread-stream@4.2.0: + dependencies: + real-require: 1.0.0 + threads@1.7.0: dependencies: callsites: 3.1.0 @@ -18712,6 +19085,11 @@ snapshots: ts-interface-checker@0.1.13: {} + ts-morph@27.0.2: + dependencies: + '@ts-morph/common': 0.28.1 + code-block-writer: 13.0.3 + ts-plugin-sort-import-suggestions@1.0.4: {} tslib@2.8.1: {} @@ -18794,6 +19172,10 @@ snapshots: uc.micro@2.1.0: {} + uint8arrays@5.1.1: + dependencies: + multiformats: 13.4.2 + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -18925,6 +19307,8 @@ snapshots: validate-npm-package-name@5.0.1: {} + varint@6.0.0: {} + vary@1.1.2: {} vlq@1.0.1: {} @@ -19249,6 +19633,8 @@ snapshots: yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@15.4.1: dependencies: cliui: 6.0.0 @@ -19273,6 +19659,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.1.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.2.1 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yauzl@3.3.0: dependencies: buffer-crc32: 0.2.13 diff --git a/src/ageAssurance/util.test.ts b/src/ageAssurance/util.test.ts index 1da131b920..2e9d8a5d58 100644 --- a/src/ageAssurance/util.test.ts +++ b/src/ageAssurance/util.test.ts @@ -1,31 +1,42 @@ -import {getAgeAssuranceRegionConfig} from '@atproto/api' - import {getAgeAssuranceRegionConfigForGeolocation} from '#/ageAssurance/util' +import {type app} from '#/lexicons' jest.mock('#/ageAssurance/data') -jest.mock('@atproto/api', () => ({ - ...jest.requireActual('@atproto/api'), - getAgeAssuranceRegionConfig: jest.fn(), -})) -/* - * Platform-based region filtering itself is implemented and tested in - * `@atproto/api` (see `getAgeAssuranceRegionConfig`). What we own - and test - * here - is that region resolution passes the current platform through. The - * jest preset is `jest-expo/ios`, so `AGE_ASSURANCE_PLATFORM` resolves to - * `ios` in these tests. - */ describe('getAgeAssuranceRegionConfigForGeolocation', () => { - it('passes the current platform to the SDK region matcher', () => { - const config = {regions: []} - getAgeAssuranceRegionConfigForGeolocation(config, { - countryCode: 'US', - regionCode: 'TX', - }) - expect(getAgeAssuranceRegionConfig).toHaveBeenCalledWith(config, { - countryCode: 'US', - regionCode: 'TX', - platform: 'ios', - }) + const region = ( + countryCode: string, + regionCode?: string, + platforms?: string[], + ): app.bsky.ageassurance.defs.ConfigRegion => ({ + countryCode, + regionCode, + platforms, + minAccessAge: 13, + rules: [], + }) + + it('skips regions for other platforms and continues matching', () => { + const web = region('US', undefined, ['web']) + const ios = region('US', undefined, ['ios']) + + expect( + getAgeAssuranceRegionConfigForGeolocation( + {regions: [web, ios]}, + {countryCode: 'US', regionCode: undefined}, + ), + ).toBe(ios) + }) + + it('matches a region-specific config before a later country config', () => { + const texas = region('US', 'TX') + const us = region('US') + + expect( + getAgeAssuranceRegionConfigForGeolocation( + {regions: [texas, us]}, + {countryCode: 'US', regionCode: 'TX'}, + ), + ).toBe(texas) }) }) diff --git a/src/ageAssurance/util.ts b/src/ageAssurance/util.ts index 95ebe2f01b..aa5fb0056f 100644 --- a/src/ageAssurance/util.ts +++ b/src/ageAssurance/util.ts @@ -1,10 +1,7 @@ import {useMemo} from 'react' import type * as AgeRange from 'expo-age-range' import {type ModerationPrefs} from '@bsky.app/sdk/moderation' -import { - computeAgeAssuranceRegionAccess, - getAgeAssuranceRegionConfig, -} from '@bsky.app/sdk/utils' +import {computeAgeAssuranceRegionAccess} from '@bsky.app/sdk/utils' import {getAge} from '#/lib/strings/time' import {regionName} from '#/locale/helpers' @@ -44,10 +41,13 @@ export function getAgeAssuranceRegionConfigForGeolocation( config: app.bsky.ageassurance.defs.Config, geolocation: Geolocation, ): app.bsky.ageassurance.defs.ConfigRegion | undefined { - return getAgeAssuranceRegionConfig(config, { - countryCode: geolocation.countryCode ?? '', - regionCode: geolocation.regionCode, - platform: AGE_ASSURANCE_PLATFORM, + return config.regions.find(({countryCode, regionCode, platforms}) => { + if (platforms?.length && !platforms.includes(AGE_ASSURANCE_PLATFORM)) { + return false + } + if (countryCode === geolocation.countryCode) { + return !regionCode || regionCode === geolocation.regionCode + } }) } diff --git a/src/components/dms/dialogs/ShareViaChatDialog.tsx b/src/components/dms/dialogs/ShareViaChatDialog.tsx index 0463cc694d..86e22543e3 100644 --- a/src/components/dms/dialogs/ShareViaChatDialog.tsx +++ b/src/components/dms/dialogs/ShareViaChatDialog.tsx @@ -1,11 +1,8 @@ import {useCallback, useState} from 'react' -import { - ChatBskyConvoGetConvoForMembers, - ChatBskyGroupCreateGroup, -} from '@atproto/api' import {useLingui} from '@lingui/react/macro' import {isNetworkError} from '#/lib/strings/errors' +import {isXrpcErrorOf} from '#/lib/xrpc-error' import {logger} from '#/logger' import {useCreateGroupChat} from '#/state/queries/messages/create-group-chat' import {useGetConvoForMembers} from '#/state/queries/messages/get-convo-for-members' @@ -14,6 +11,7 @@ import {SearchablePeopleList} from '#/components/dialogs/SearchablePeopleList' import {InitiateChatFlow} from '#/components/dms/InitiateChatFlow' import * as Toast from '#/components/Toast' import {useAnalytics} from '#/analytics' +import {chat} from '#/lexicons' export function SendViaChatDialog({ control, @@ -70,24 +68,39 @@ function SendViaChatDialogInner({ if (isNetworkError(error)) { errorMessage = l`A network error occurred. Please check your internet connection.` } else if ( - error instanceof ChatBskyConvoGetConvoForMembers.AccountSuspendedError + isXrpcErrorOf( + chat.bsky.convo.getConvoForMembers, + error, + 'AccountSuspended', + ) ) { errorMessage = l`Suspended accounts cannot participate in chat.` } else if ( - error instanceof ChatBskyConvoGetConvoForMembers.BlockedActorError + isXrpcErrorOf(chat.bsky.convo.getConvoForMembers, error, 'BlockedActor') ) { errorMessage = l`This user has blocked you and cannot be messaged.` } else if ( - error instanceof ChatBskyConvoGetConvoForMembers.MessagesDisabledError + isXrpcErrorOf( + chat.bsky.convo.getConvoForMembers, + error, + 'MessagesDisabled', + ) ) { errorMessage = l`This user has disabled chat and cannot be messaged.` } else if ( - error instanceof - ChatBskyConvoGetConvoForMembers.NotFollowedBySenderError + isXrpcErrorOf( + chat.bsky.convo.getConvoForMembers, + error, + 'NotFollowedBySender', + ) ) { errorMessage = l`Chat recipient is not followed by the sender.` } else if ( - error instanceof ChatBskyConvoGetConvoForMembers.RecipientNotFoundError + isXrpcErrorOf( + chat.bsky.convo.getConvoForMembers, + error, + 'RecipientNotFound', + ) ) { errorMessage = l`Unable to find the selected recipient.` } @@ -109,26 +122,31 @@ function SendViaChatDialogInner({ if (isNetworkError(error)) { errorMessage = l`A network error occurred. Please check your internet connection.` } else if ( - error instanceof ChatBskyGroupCreateGroup.AccountSuspendedError + isXrpcErrorOf(chat.bsky.group.createGroup, error, 'AccountSuspended') ) { errorMessage = l`Suspended accounts cannot participate in a group chat.` - } else if (error instanceof ChatBskyGroupCreateGroup.BlockedActorError) { + } else if ( + isXrpcErrorOf(chat.bsky.group.createGroup, error, 'BlockedActor') + ) { errorMessage = l`One of the selected recipients has blocked you and cannot be messaged.` } else if ( - error instanceof - ChatBskyGroupCreateGroup.NewAccountCannotCreateGroupError + isXrpcErrorOf( + chat.bsky.group.createGroup, + error, + 'NewAccountCannotCreateGroup', + ) ) { errorMessage = l`You cannot create a group chat yet.` } else if ( - error instanceof ChatBskyGroupCreateGroup.NotFollowedBySenderError + isXrpcErrorOf(chat.bsky.group.createGroup, error, 'NotFollowedBySender') ) { errorMessage = l`A selected recipient is not followed by the sender.` } else if ( - error instanceof ChatBskyGroupCreateGroup.RecipientNotFoundError + isXrpcErrorOf(chat.bsky.group.createGroup, error, 'RecipientNotFound') ) { errorMessage = l`Unable to find a selected recipient.` } else if ( - error instanceof ChatBskyGroupCreateGroup.UserForbidsGroupsError + isXrpcErrorOf(chat.bsky.group.createGroup, error, 'UserForbidsGroups') ) { errorMessage = l`One of the selected recipients does not allow group chats.` } diff --git a/src/components/interstitials/FeedTrendingTopics.tsx b/src/components/interstitials/FeedTrendingTopics.tsx index 4d45001f1c..a069a1b851 100644 --- a/src/components/interstitials/FeedTrendingTopics.tsx +++ b/src/components/interstitials/FeedTrendingTopics.tsx @@ -1,6 +1,6 @@ import {useMemo} from 'react' import {Pressable, View} from 'react-native' -import {type AppBskyUnspeccedDefs, moderateProfile} from '@atproto/api' +import {moderateProfile} from '@bsky.app/sdk/moderation' import {Plural, Trans, useLingui} from '@lingui/react/macro' import {useModerationOpts} from '#/state/preferences/moderation-opts' @@ -29,6 +29,7 @@ import {SubtleHover} from '#/components/SubtleHover' import {useTrendingTopicSeen} from '#/components/TrendingTopics' import {Text} from '#/components/Typography' import {useAnalytics} from '#/analytics' +import {type app} from '#/lexicons' const TOPIC_COUNT = 3 @@ -182,7 +183,7 @@ function TrendRow({ recId, onPress, }: ViewStyleProp & { - trend: AppBskyUnspeccedDefs.TrendView + trend: app.bsky.unspecced.defs.TrendView rank: number feedSliceIndex: number recId?: string @@ -290,7 +291,7 @@ function TrendingTopicRowSkeleton({rank}: {rank: number}) { } function useModerateTrendingActors( - actors: AppBskyUnspeccedDefs.TrendView['actors'], + actors: app.bsky.unspecced.defs.TrendView['actors'], ) { const moderationOpts = useModerationOpts() diff --git a/src/components/moderation/ReportDialog/state.test.ts b/src/components/moderation/ReportDialog/state.test.ts index 6c08fe3d5c..c0fb53cfdd 100644 --- a/src/components/moderation/ReportDialog/state.test.ts +++ b/src/components/moderation/ReportDialog/state.test.ts @@ -1,8 +1,4 @@ -import { - type AppBskyLabelerDefs, - ToolsOzoneReportDefs as OzoneReportDefs, -} from '@atproto/api' - +import {type app, tools} from '#/lexicons' import { getNciiQualificationOutcome, initialState, @@ -12,12 +8,12 @@ import { const nciiOption = { title: 'Non-consensual intimate imagery', - reason: OzoneReportDefs.REASONSEXUALNCII, + reason: tools.ozone.report.defs.reasonSexualNCII.value, } const otherOption = { title: 'Unlabeled adult content', - reason: OzoneReportDefs.REASONSEXUALUNLABELED, + reason: tools.ozone.report.defs.reasonSexualUnlabeled.value, } function selectNciiOption(state: ReportState = initialState) { @@ -83,7 +79,7 @@ describe('reducer NCII qualification', () => { let state = selectNciiOption() state = reducer(state, { type: 'selectLabeler', - labeler: {} as AppBskyLabelerDefs.LabelerViewDetailed, + labeler: {} as app.bsky.labeler.defs.LabelerViewDetailed, }) expect(state.activeStepIndex1).toBe(2) }) @@ -92,7 +88,7 @@ describe('reducer NCII qualification', () => { let state = selectNciiOption() state = reducer(state, { type: 'selectLabeler', - labeler: {} as AppBskyLabelerDefs.LabelerViewDetailed, + labeler: {} as app.bsky.labeler.defs.LabelerViewDetailed, }) state = reducer(state, { type: 'answerNciiQuestion', diff --git a/src/lib/media/video/multipart/upload.ts b/src/lib/media/video/multipart/upload.ts index 88c92813ae..c6e575d8eb 100644 --- a/src/lib/media/video/multipart/upload.ts +++ b/src/lib/media/video/multipart/upload.ts @@ -254,12 +254,7 @@ function createTokenProvider( if (!forceRefresh && token && Date.now() < expiresAt - 60_000) return token if (!refresh) { const exp = Math.floor(Date.now() / 1000) + 60 * 30 - refresh = getServiceAuthTokenWithRetry( - client, - dispatchUrl, - exp, - signal, - ) + refresh = getServiceAuthTokenWithRetry(client, dispatchUrl, exp, signal) .then(nextToken => { token = nextToken expiresAt = exp * 1000 diff --git a/src/screens/PostThread/components/LikesStat.tsx b/src/screens/PostThread/components/LikesStat.tsx index ef0a78fbee..afc4a79cad 100644 --- a/src/screens/PostThread/components/LikesStat.tsx +++ b/src/screens/PostThread/components/LikesStat.tsx @@ -63,7 +63,7 @@ export function LikesStat({post}: {post: app.bsky.feed.defs.PostView}) { * likes, the API max per page), so they are a sample of the most recent * likers, not an exhaustive list. */ -export function KnownLikers({post}: {post: AppBskyFeedDefs.PostView}) { +export function KnownLikers({post}: {post: app.bsky.feed.defs.PostView}) { const t = useTheme() const {t: l} = useLingui() const {hasSession, currentAccount} = useSession() diff --git a/src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx b/src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx index 3aaf5e10e5..0da3356f5e 100644 --- a/src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx +++ b/src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx @@ -1,6 +1,6 @@ import {useCallback, useMemo} from 'react' import {type ListRenderItemInfo, Text as RNText, View} from 'react-native' -import {type ModerationOpts} from '@atproto/api' +import {type ModerationOpts} from '@bsky.app/sdk/moderation' import {Trans, useLingui} from '@lingui/react/macro' import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name' diff --git a/src/screens/Signup/state.ts b/src/screens/Signup/state.ts index eb4c551ddf..ae70825600 100644 --- a/src/screens/Signup/state.ts +++ b/src/screens/Signup/state.ts @@ -258,13 +258,13 @@ export const useSignupContext = () => useContext(SignupContext) * failure is unexpected and should be reported to Sentry. */ function classifyExpectedSignupError(e: unknown): string | undefined { - if (e instanceof ComAtprotoServerCreateAccount.InvalidHandleError) + if (isXrpcErrorOf(com.atproto.server.createAccount, e, 'InvalidHandle')) return 'InvalidHandle' - if (e instanceof ComAtprotoServerCreateAccount.HandleNotAvailableError) + if (isXrpcErrorOf(com.atproto.server.createAccount, e, 'HandleNotAvailable')) return 'HandleNotAvailable' - if (e instanceof ComAtprotoServerCreateAccount.InvalidPasswordError) + if (isXrpcErrorOf(com.atproto.server.createAccount, e, 'InvalidPassword')) return 'InvalidPassword' - if (e instanceof ComAtprotoServerCreateAccount.UnsupportedDomainError) + if (isXrpcErrorOf(com.atproto.server.createAccount, e, 'UnsupportedDomain')) return 'UnsupportedDomain' /* the server sends no typed error for this case */ if (String(e).includes('Email already taken')) return 'EmailTaken' diff --git a/src/state/queries/notifications/__tests__/util.test.ts b/src/state/queries/notifications/__tests__/util.test.ts index d7bcb5e5d0..c4fc409cdd 100644 --- a/src/state/queries/notifications/__tests__/util.test.ts +++ b/src/state/queries/notifications/__tests__/util.test.ts @@ -1,14 +1,15 @@ -import {type AppBskyNotificationListNotifications} from '@atproto/api' +import {type DidString} from '@atproto/syntax' import {describe, expect, it, jest} from '@jest/globals' +import {type app} from '#/lexicons' import {groupNotifications} from '../util' jest.mock('#/state/queries/profile', () => ({precacheProfile: jest.fn()})) -type Notification = AppBskyNotificationListNotifications.Notification +type Notification = app.bsky.notification.listNotifications.Notification function makeFollowNotification( - did: string, + did: DidString, starterPackUri?: string, ): Notification { return { diff --git a/src/state/queries/profile-followers.ts b/src/state/queries/profile-followers.ts index 4ab392bad4..ba540508b2 100644 --- a/src/state/queries/profile-followers.ts +++ b/src/state/queries/profile-followers.ts @@ -6,8 +6,8 @@ import { useInfiniteQuery, } from '@tanstack/react-query' -import {useAnalytics} from '#/analytics' import {useAppviewClient} from '#/state/session' +import {useAnalytics} from '#/analytics' import {app} from '#/lexicons' const DEFAULT_SORT = 'latest' diff --git a/src/state/queries/profile-follows.ts b/src/state/queries/profile-follows.ts index 4a03abfc20..a34afa6207 100644 --- a/src/state/queries/profile-follows.ts +++ b/src/state/queries/profile-follows.ts @@ -7,8 +7,8 @@ import { } from '@tanstack/react-query' import {STALE} from '#/state/queries' -import {useAnalytics} from '#/analytics' import {useAppviewClient} from '#/state/session' +import {useAnalytics} from '#/analytics' import {app} from '#/lexicons' const DEFAULT_SORT = 'latest' diff --git a/src/state/queries/starter-pack-search.ts b/src/state/queries/starter-pack-search.ts index 7987d1e07f..f42f658826 100644 --- a/src/state/queries/starter-pack-search.ts +++ b/src/state/queries/starter-pack-search.ts @@ -1,4 +1,3 @@ -import {type AppBskyGraphSearchStarterPacksV2} from '@atproto/api' import { type InfiniteData, keepPreviousData, @@ -7,7 +6,8 @@ import { } from '@tanstack/react-query' import {STALE} from '#/state/queries' -import {useAgent} from '#/state/session' +import {useAppviewClient} from '#/state/session' +import {app} from '#/lexicons' export const RQKEY_ROOT = 'starter-pack-search' export const RQKEY = (query: string, limit?: number) => [ @@ -27,23 +27,22 @@ export function useStarterPackSearch({ maintainData?: boolean limit?: number }) { - const agent = useAgent() + const client = useAppviewClient() return useInfiniteQuery< - AppBskyGraphSearchStarterPacksV2.OutputSchema, + app.bsky.graph.searchStarterPacksV2.$OutputBody, Error, - InfiniteData, + InfiniteData, QueryKey, string | undefined >({ staleTime: STALE.MINUTES.FIVE, queryKey: RQKEY(query, limit), queryFn: async ({pageParam}) => { - const res = await agent.app.bsky.graph.searchStarterPacksV2({ + return client.call(app.bsky.graph.searchStarterPacksV2, { q: query, limit, cursor: pageParam, }) - return res.data }, enabled: enabled && !!query, initialPageParam: undefined, @@ -54,7 +53,7 @@ export function useStarterPackSearch({ } function select( - data: InfiniteData, + data: InfiniteData, ) { // enforce uniqueness const uris = new Set() diff --git a/src/view/com/composer/text-input/TextInput.tsx b/src/view/com/composer/text-input/TextInput.tsx index d09d65481a..d230b01545 100644 --- a/src/view/com/composer/text-input/TextInput.tsx +++ b/src/view/com/composer/text-input/TextInput.tsx @@ -26,7 +26,7 @@ import { } from '#/view/com/composer/text-input/text-input-util' import {atoms as a, useAlf} from '#/alf' import {normalizeTextStyles} from '#/alf/typography' -import {IS_ANDROID, IS_NATIVE} from '#/env' +import {IS_ANDROID} from '#/env' import {app} from '#/lexicons' import * as bsky from '#/types/bsky' import {Autocomplete} from './mobile/Autocomplete' diff --git a/src/view/com/notifications/NotificationFeedItem.tsx b/src/view/com/notifications/NotificationFeedItem.tsx index 88825f29bb..c53a5c60ce 100644 --- a/src/view/com/notifications/NotificationFeedItem.tsx +++ b/src/view/com/notifications/NotificationFeedItem.tsx @@ -923,12 +923,9 @@ function SayHelloBtn({profile}: {profile: app.bsky.actor.defs.ProfileView}) { const onPress = async () => { try { setIsLoading(true) - const res = await chatClient.call( - chat.bsky.convo.getConvoForMembers, - { - members: [profile.did as DidString, chatClient.assertDid], - }, - ) + const res = await chatClient.call(chat.bsky.convo.getConvoForMembers, { + members: [profile.did, chatClient.assertDid], + }) navigation.navigate('MessagesConversation', { conversation: res.convo.id, }) diff --git a/src/view/com/testing/TestCtrls.e2e.tsx b/src/view/com/testing/TestCtrls.e2e.tsx index 52238505f3..88cf020160 100644 --- a/src/view/com/testing/TestCtrls.e2e.tsx +++ b/src/view/com/testing/TestCtrls.e2e.tsx @@ -77,7 +77,7 @@ export function TestCtrls() { * The appview lex client reads BLUESKY_PROXY_HEADER.get() at build * time (see clients.ts), so setting it here retargets the proxy for * subsequent sign-ins without an explicit client reconfigure. - */ + */ BLUESKY_PROXY_HEADER.set(header) hasConfiguredProxy = true setIsProxyConfigured(true)