@rorez/mobile-expo-sdk
v1.0.1
Published
SDK for connecting Expo apps to the Next.js API server
Maintainers
Readme
mobile-expo-sdk
SDK for connecting Expo/React Native apps to the Next.js API server.
Installation
# Using npm
npm install mobile-expo-sdk
# Using bun
bun add mobile-expo-sdk
# Required peer dependency for React Native
npm install @react-native-async-storage/async-storageQuick Start
import { createClient, AuthProvider } from 'mobile-expo-sdk';
// Create client instance
const client = createClient({
baseUrl: 'http://localhost:3000', // Your Next.js server URL
});
// Wrap your app with AuthProvider
function App() {
return (
<AuthProvider client={client}>
<YourApp />
</AuthProvider>
);
}Usage
Authentication
import { useAuth } from 'mobile-expo-sdk';
function LoginScreen() {
const { login, register, logout, user, isAuthenticated, isLoading } = useAuth();
const handleLogin = async () => {
try {
await login('[email protected]', 'password123');
} catch (error) {
console.error('Login failed:', error.message);
}
};
const handleRegister = async () => {
try {
await register('[email protected]', 'password123', 'John Doe');
} catch (error) {
console.error('Registration failed:', error.message);
}
};
if (isLoading) return <Text>Loading...</Text>;
return isAuthenticated ? (
<View>
<Text>Welcome, {user.name}!</Text>
<Button onPress={logout} title="Logout" />
</View>
) : (
<View>
<Button onPress={handleLogin} title="Login" />
<Button onPress={handleRegister} title="Register" />
</View>
);
}Posts
import { usePosts } from 'mobile-expo-sdk';
function PostsScreen({ client }) {
const { posts, isLoading, error, createPost, deletePost, refresh } = usePosts(client);
const handleCreate = async () => {
await createPost({ title: 'New Post', content: 'Hello World!' });
};
if (isLoading) return <Text>Loading...</Text>;
if (error) return <Text>Error: {error}</Text>;
return (
<FlatList
data={posts}
renderItem={({ item }) => (
<View>
<Text>{item.title}</Text>
<Button onPress={() => deletePost(item.id)} title="Delete" />
</View>
)}
/>
);
}Direct API Client Usage
import { createClient } from 'mobile-expo-sdk';
const client = createClient({ baseUrl: 'http://localhost:3000' });
// Auth
await client.register({ email: '[email protected]', password: 'pass123', name: 'Test' });
await client.login({ email: '[email protected]', password: 'pass123' });
const user = await client.getMe();
await client.logout();
// Posts
const posts = await client.getPosts();
const post = await client.createPost({ title: 'Hello', content: 'World' });
await client.updatePost(post.id, { title: 'Updated Title' });
await client.deletePost(post.id);API Reference
createClient(config)
Creates a new API client instance.
AuthProvider
React context provider for auth state.
useAuth()
Hook for auth state and methods: user, isAuthenticated, isLoading, login, register, logout.
usePosts(client)
Hook for fetching and managing posts.
usePost(client, id)
Hook for fetching a single post.
