Hopefully feature-complete Android Bluesky client written in Expo
atproto bluesky
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

Get types on OAuthClient

SharpMars 6c6c9449 1400a4b9

+11 -6
+7 -3
bun.lock
··· 63 63 64 64 "@atcute/identity": ["@atcute/identity@1.1.3", "", { "dependencies": { "@atcute/lexicons": "^1.2.4", "@badrap/valita": "^0.4.6" } }, "sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng=="], 65 65 66 - "@atcute/lexicons": ["@atcute/lexicons@1.2.5", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "esm-env": "^1.2.2" } }, "sha512-9yO9WdgxW8jZ7SbzUycH710z+JmsQ9W9n5S6i6eghYju32kkluFmgBeS47r8e8p2+Dv4DemS7o/3SUGsX9FR5Q=="], 66 + "@atcute/lexicons": ["@atcute/lexicons@1.2.6", "", { "dependencies": { "@atcute/uint8array": "^1.0.6", "@atcute/util-text": "^0.0.1", "@standard-schema/spec": "^1.1.0", "esm-env": "^1.2.2" } }, "sha512-s76UQd8D+XmHIzrjD9CJ9SOOeeLPHc+sMmcj7UFakAW/dDFXc579fcRdRfuUKvXBL5v1Gs2VgDdlh/IvvQZAwA=="], 67 + 68 + "@atcute/uint8array": ["@atcute/uint8array@1.0.6", "", {}, "sha512-ucfRBQc7BFT8n9eCyGOzDHEMKF/nZwhS2pPao4Xtab1ML3HdFYcX2DM1tadCzas85QTGxHe5urnUAAcNKGRi9A=="], 69 + 70 + "@atcute/util-text": ["@atcute/util-text@0.0.1", "", { "dependencies": { "unicode-segmenter": "^0.14.4" } }, "sha512-t1KZqvn0AYy+h2KcJyHnKF9aEqfRfMUmyY8j1ELtAEIgqN9CxINAjxnoRCJIFUlvWzb+oY3uElQL/Vyk3yss0g=="], 67 71 68 72 "@atproto-labs/did-resolver": ["@atproto-labs/did-resolver@0.2.4", "", { "dependencies": { "@atproto-labs/fetch": "0.2.3", "@atproto-labs/pipe": "0.1.1", "@atproto-labs/simple-store": "0.3.0", "@atproto-labs/simple-store-memory": "0.1.4", "@atproto/did": "0.2.3", "zod": "^3.23.8" } }, "sha512-sbXxBnAJWsKv/FEGG6a/WLz7zQYUr1vA2TXvNnPwwJQJCjPwEJMOh1vM22wBr185Phy7D2GD88PcRokn7eUVyw=="], 69 73 ··· 375 379 376 380 "@expo/xcpretty": ["@expo/xcpretty@4.3.2", "", { "dependencies": { "@babel/code-frame": "7.10.4", "chalk": "^4.1.0", "find-up": "^5.0.0", "js-yaml": "^4.1.0" }, "bin": { "excpretty": "build/cli.js" } }, "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw=="], 377 381 378 - "@formatjs/ecma402-abstract": ["@formatjs/ecma402-abstract@3.0.5", "", { "dependencies": { "@formatjs/fast-memoize": "3.0.1", "@formatjs/intl-localematcher": "0.7.3", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } }, "sha512-TF0uoOhPhbzzAuKgOA3s8M20wZm5f6IWDq6dBVkl8gKvS7vq84AkzR9ts0oLN0pbDy6TDx0pESUgyJgMJQItDg=="], 382 + "@formatjs/ecma402-abstract": ["@formatjs/ecma402-abstract@3.0.6", "", { "dependencies": { "@formatjs/fast-memoize": "3.0.1", "@formatjs/intl-localematcher": "0.7.3", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } }, "sha512-fIOujvbua2wbKk8et+ftvUvRiW8RQDAwix7ZZNjq7GbCh0npeqsLpRyBmDQ2w3tLT9PwcBwDepfJukByz8nbSA=="], 379 383 380 384 "@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.0.1", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-kzk635kEmsxrrEWQXY7uKRocFCVXR4es5OQqcqCGg2NPtQztG/OBkE9THHu6UOTxpfyIkZhh6DjPBZGRp7y3og=="], 381 385 382 386 "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.7.3", "", { "dependencies": { "@formatjs/fast-memoize": "3.0.1", "tslib": "^2.8.0" } }, "sha512-NaeABectKdTCOnlH9VFGmMS3K0JuR7Soc2t5R2MCkBrM3H/hlKVYh0XSrcjjPkbjIdrF7L/Bzx9JtGuVaSfYlA=="], 383 387 384 - "@formatjs/intl-segmenter": ["@formatjs/intl-segmenter@12.0.5", "", { "dependencies": { "@formatjs/ecma402-abstract": "3.0.5", "@formatjs/intl-localematcher": "0.7.3", "tslib": "^2.8.0" } }, "sha512-Xb6Bs9qMGwG+Jh5ADKfujlm2+nh4kLybD/YVwyHBDeyiY78wffs2KfXHM7xBTM3higjV8LodNWwAtOXgZud0Sg=="], 388 + "@formatjs/intl-segmenter": ["@formatjs/intl-segmenter@12.0.6", "", { "dependencies": { "@formatjs/ecma402-abstract": "3.0.6", "@formatjs/intl-localematcher": "0.7.3", "tslib": "^2.8.0" } }, "sha512-SiVvnBWlBCqpcpqgUZ37puQFaTAuYhd+1N53MPRB4RSmM8ULHdtC293bRRZYwU/gFVEtYj1h5C5EAqQA/0TKdw=="], 385 389 386 390 "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], 387 391
+4 -3
src/app/_layout.tsx
··· 2 2 import { StatusBar } from "expo-status-bar"; 3 3 import "react-native-reanimated"; 4 4 import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; 5 - import { ExpoOAuthClient } from "@atproto/oauth-client-expo"; 5 + import { ExpoOAuthClient, ExpoOAuthClientInterface, ExpoOAuthClientOptions } from "@atproto/oauth-client-expo"; 6 6 7 7 export const unstable_settings = { 8 8 anchor: "(tabs)", 9 9 }; 10 10 11 11 const queryClient = new QueryClient(); 12 - const oauth = new ExpoOAuthClient({ 12 + const oauthOps: ExpoOAuthClientOptions = { 13 13 handleResolver: "https://slingshot.microcosm.blue", 14 14 clientMetadata: { 15 15 client_id: "https://example.com/oauth-client-metadata.json", ··· 23 23 application_type: "native", 24 24 dpop_bound_access_tokens: true, 25 25 }, 26 - }); 26 + }; 27 + const oauth: ExpoOAuthClientInterface = new ExpoOAuthClient(oauthOps); 27 28 28 29 export default function RootLayout() { 29 30 return (