# @wpp/admin-sdk

TypeScript SDK for WhatsApp Multi-tenant Platform Administration.

## Features

- ✅ Complete Admin API coverage
- ✅ Framework-agnostic (React, Vue, Angular, Vanilla JS)
- ✅ Full TypeScript support with comprehensive types
- ✅ WhatsApp operations via composition (@wpp/sdk)
- ✅ Comprehensive error handling
- ✅ Examples for all resources

## Installation

```bash
npm install @wpp/admin-sdk
```

## Quick Start

```typescript
import { AdminAPIClient } from '@wpp/admin-sdk';

// Create client instance
const admin = new AdminAPIClient({
  baseURL: 'http://localhost:3000',
  auth: {
    type: 'jwt',
    token: 'your-jwt-token',
  },
});

// Use admin resources
const users = await admin.users.list();
console.log('Users:', users);

const tenant = await admin.tenants.create({ name: 'Acme Corp' });
console.log('Created tenant:', tenant);

// Use WhatsApp operations via composition
await admin.whatsapp.whatsappAdmin.connect(tenant.id);
const qr = await admin.whatsapp.whatsappAdmin.getQR(tenant.id);
console.log('QR Code:', qr.qr);
```

## Resources

The Admin SDK provides the following resources:

### Admin Operations
- **users** - User management (CRUD, roles)
- **tenants** - Tenant management (CRUD, settings)
- **devices** - Device management (connect, QR codes, status)
- **apiTokens** - API token management (CRUD)
- **branding** - Branding configuration (colors, logos, messages)
- **advancedWebhooks** - Advanced webhooks (CRUD, logs, stats, filters)
- **dashboard** - Dashboard statistics and metrics

### WhatsApp Operations (via @wpp/sdk)
- **whatsapp** - Full WhatsApp API access through composition

## API Reference

### Users

```typescript
// List all users
const users = await admin.users.list();

// Get user by ID
const user = await admin.users.get('user-id');

// Create user
const newUser = await admin.users.create({
  email: 'user@example.com',
  password: 'securepassword',
  role: 'user',
  tenantId: 'tenant-id', // optional
});

// Update user
await admin.users.update('user-id', {
  role: 'admin',
});

// Delete user
await admin.users.delete('user-id');
```

### Tenants

```typescript
// List all tenants
const tenants = await admin.tenants.list();

// Create tenant
const tenant = await admin.tenants.create({ name: 'New Tenant' });

// Update tenant settings
await admin.tenants.updateSettings(tenant.id, {
  webhookUrl: 'https://example.com/webhook',
  webhookSecret: 'secret',
});
```

### Devices

```typescript
// List all devices
const devices = await admin.devices.list();

// Get device status
const device = await admin.devices.get('tenant-id');

// Get QR code
const { qr, status } = await admin.devices.getQR('tenant-id');

// Connect device
await admin.devices.connect('tenant-id');

// Reconnect (with force option)
await admin.devices.reconnect('tenant-id', { force: true });

// Reset device
await admin.devices.reset('tenant-id');
```

### Advanced Webhooks

```typescript
// Create advanced webhook
const webhook = await admin.advancedWebhooks.create({
  name: 'Group Messages',
  urls: ['https://api.example.com/webhook'],
  eventTypes: ['messages.upsert'],
  filters: {
    remoteJid: '120363XXX@g.us',
    fromMe: false,
  },
  secret: 'webhook-secret',
  retryCount: 3,
}, 'tenant-id');

// Get delivery logs
const logs = await admin.advancedWebhooks.getLogs(webhook.id, {
  success: false,
  limit: 20,
});

// Get statistics
const stats = await admin.advancedWebhooks.getStats(webhook.id);
console.log('Success rate:', stats.successRate);
```

### WhatsApp Integration

The Admin SDK uses `@wpp/sdk` internally for WhatsApp operations:

```typescript
// Access WhatsApp operations
await admin.whatsapp.whatsappAdmin.sendMessage('tenant-id', {
  jid: '5511999999999@s.whatsapp.net',
  text: 'Hello from admin!',
});

// Create group
await admin.whatsapp.whatsappAdmin.createGroup('tenant-id', {
  subject: 'My Group',
  participants: ['5511111111111@s.whatsapp.net'],
});

// List groups
const groups = await admin.whatsapp.whatsappAdmin.listGroups('tenant-id');
```

## Authentication

The SDK supports two authentication methods:

### JWT Authentication

```typescript
const admin = new AdminAPIClient({
  baseURL: 'http://localhost:3000',
  auth: {
    type: 'jwt',
    token: 'your-jwt-token',
  },
});

// Update token later
admin.setAuth('new-token', 'jwt');

// Clear auth
admin.clearAuth();
```

### API Token Authentication

```typescript
const admin = new AdminAPIClient({
  baseURL: 'http://localhost:3000',
  auth: {
    type: 'apiToken',
    token: 'your-api-token',
  },
});
```

## Error Handling

The SDK provides comprehensive error classes:

```typescript
import {
  APIError,
  AuthError,
  ValidationError,
  NotFoundError,
  RateLimitError,
  NetworkError,
} from '@wpp/admin-sdk';

try {
  await admin.users.get('invalid-id');
} catch (error) {
  if (error instanceof NotFoundError) {
    console.log('User not found');
  } else if (error instanceof AuthError) {
    console.log('Authentication failed');
  } else if (error instanceof ValidationError) {
    console.log('Validation error:', error.message);
  } else if (error instanceof APIError) {
    console.log('API error:', error.status, error.message);
  }
}
```

## Advanced Configuration

```typescript
const admin = new AdminAPIClient({
  baseURL: 'http://localhost:3000',
  timeout: 60000, // 60 seconds
  headers: {
    'X-Custom-Header': 'value',
  },
  onRequest: (config) => {
    console.log('Request:', config.method, config.url);
    return config;
  },
  onResponse: (response) => {
    console.log('Response:', response.status);
    return response;
  },
  onError: (error) => {
    console.error('Error:', error.message);
  },
});
```

## Examples

See the `examples/` directory for complete working examples:

- `basic-usage.ts` - Basic CRUD operations
- `whatsapp-integration.ts` - WhatsApp operations via composition
- `advanced-webhooks.ts` - Advanced webhook management
- `react-usage.tsx` - React integration example

## TypeScript Support

The SDK is written in TypeScript and provides full type definitions:

```typescript
import type {
  User,
  Tenant,
  Device,
  AdvancedWebhook,
  DashboardStats,
} from '@wpp/admin-sdk';
```

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev

# Clean
npm run clean
```

## License

MIT

## Support

For issues and questions, visit the [GitHub repository](https://github.com/your-org/wpp-multitenant).
