@safercity/sdk
v0.0.1
Published
Official SaferCity API client for TypeScript/JavaScript
Downloads
70
Maintainers
Readme
@safercity/sdk
Official SaferCity API client for TypeScript/JavaScript.
Installation
npm install @safercity/sdk
# or
bun add @safercity/sdk
# or
yarn add @safercity/sdkQuick Start
import { createSaferCityClient } from '@safercity/sdk';
const client = createSaferCityClient({
baseUrl: 'https://api.safercity.com',
token: 'your-jwt-token',
tenantId: 'your-tenant-id',
});
// Health check
const { data: health } = await client.health.check();
console.log('API Status:', health.status);
// Get user
const { data: user } = await client.users.get('user-123');
console.log('User:', user);
// Create panic
const { data: panic } = await client.panics.create({
userId: 'user-123',
latitude: -26.2041,
longitude: 28.0473,
});
console.log('Panic created:', panic.id);Authentication
JWT Token
const client = createSaferCityClient({
baseUrl: 'https://api.safercity.com',
token: jwtToken, // Your JWT token
});
// Update token later
client.setToken(newToken);OAuth Token Flow
const client = createSaferCityClient({
baseUrl: 'https://api.safercity.com',
});
// Get access token
const { data: tokens } = await client.oauth.token({
grant_type: 'client_credentials',
tenantId: 'your-tenant-id',
});
// Set token on client
client.setToken(tokens.access_token);Streaming (SSE)
Stream real-time panic updates:
for await (const event of client.panics.streamUpdates('panic-123')) {
console.log('Update:', JSON.parse(event.data));
}API Reference
Health
client.health.check()- Check API status
Authentication
client.auth.whoami()- Get current auth contextclient.oauth.token(body)- Get access tokenclient.oauth.refresh(body)- Refresh tokenclient.oauth.introspect(body)- Introspect tokenclient.oauth.revoke(body)- Revoke token
Users
client.users.create(body)- Create userclient.users.list(query?)- List usersclient.users.get(userId)- Get user by IDclient.users.update(userId, body)- Update userclient.users.delete(userId)- Delete user
Panics
client.panics.create(body)- Create panicclient.panics.get(panicId, query?)- Get panicclient.panics.list(query?)- List panicsclient.panics.updateLocation(panicId, body)- Update locationclient.panics.cancel(panicId, body)- Cancel panicclient.panics.streamUpdates(panicId)- Stream updates (SSE)
Subscriptions
client.subscriptions.listTypes()- List subscription typesclient.subscriptions.create(body)- Create subscriptionclient.subscriptions.list(query?)- List subscriptionsclient.subscriptions.stats()- Get stats
Location Safety
client.locationSafety.check(query)- Check location safety
Crimes
client.crimes.list(query?)- List crimesclient.crimes.categories()- Get crime categoriesclient.crimes.types()- Get crime types
Error Handling
import { SaferCityApiError } from '@safercity/sdk';
try {
await client.users.get('invalid-id');
} catch (error) {
if (error instanceof SaferCityApiError) {
console.log('API Error:', error.error);
console.log('Message:', error.message);
console.log('Status:', error.status);
}
}Custom Fetch
For environments with custom fetch requirements:
import { createSaferCityClient } from '@safercity/sdk';
const client = createSaferCityClient({
baseUrl: 'https://api.safercity.com',
fetch: customFetchImplementation,
});Related Packages
@safercity/sdk-react- React hooks with TanStack Query@safercity/sdk-react-native- React Native support with expo-fetch
License
MIT
