# @livo.pro/api-client

Type-safe oRPC client for Livo API.

## Installation

```bash
npm install @livo.pro/api-client
# or
pnpm add @livo.pro/api-client
```

## Usage

```typescript
import { createLivoClient } from '@livo.pro/api-client'

const rpc = createLivoClient({
  baseUrl: 'https://livo.pro',
  getHeaders: async () => ({
    'Authorization': `Bearer ${token}`
  })
})

// Full TypeScript inference for all procedures
const invitations = await rpc.auth.invitations.getPending()
const sites = await rpc.org.sites.list({ orgSlug: 'my-org' })
const tickets = await rpc.site.tickets.list({ siteSlug: 'my-site' })
```

## Available Procedures

### Auth
- `auth.invitations.getPending()` - Get pending invitations
- `auth.invitations.accept(input)` - Accept an invitation
- `auth.invitations.decline(input)` - Decline an invitation

### Organization
- `org.sites.create(input)` - Create a new site
- `org.sites.list(input)` - List sites in an organization
- `org.sites.getDashboard(input)` - Get organization dashboard
- `org.agenda.getUpcomingEvents(input)` - Get upcoming events
- `org.agenda.getAgendaEvents(input)` - Get agenda events
- `org.agenda.createEvent(input)` - Create an event
- `org.agenda.updateEvent(input)` - Update an event
- `org.agenda.deleteEvent(input)` - Delete an event
- `org.agenda.getEventById(input)` - Get event by ID

### Site
- `site.tickets.create(input)` - Create a ticket
- `site.tickets.list(input)` - List tickets
- `site.tickets.get(input)` - Get a ticket
- `site.generic.getSiteDetails(input)` - Get site details
- `site.generic.getSiteSettings(input)` - Get site settings
- `site.generic.updateSiteSettings(input)` - Update site settings
- `site.announcements.get(input)` - Get announcements
- `site.announcements.upsert(input)` - Create/update announcement
- `site.votes.create(input)` - Create a vote
- `site.votes.list(input)` - List votes
- `site.votes.get(input)` - Get a vote
- `site.votes.getPending(input)` - Get pending votes
- `site.votes.cast(input)` - Cast a vote
- `site.votes.update(input)` - Update a vote
- `site.votes.remove(input)` - Remove a vote
- `site.votes.sendReminder(input)` - Send vote reminder
- `site.votes.getMyVotes(input)` - Get user's votes

## Exported Types

```typescript
import type { LivoClient, Outputs, Inputs } from '@livo.pro/api-client'

// Use Outputs to type procedure return values
type PendingInvitations = Outputs['auth']['invitations']['getPending']

// Use Inputs to type procedure inputs
type CreateTicketInput = Inputs['site']['tickets']['create']
```

## Exported Constants

```typescript
import {
  ticketPriorityValues,
  ticketStatusValues,
  ticketVisibilityValues,
  voteStatusValues,
  type TicketPriority,
  type TicketStatus,
  type TicketVisibility,
  type VoteStatus,
} from '@livo.pro/api-client'
```

## License

MIT
