@noobforal/openphone-api-sdk
Version:
Unofficial TypeScript SDK for OpenPhone Public API (AI-generated - use with caution)
361 lines (267 loc) ⢠9.29 kB
Markdown
# OpenPhone API SDK (Unofficial)
A TypeScript SDK for the OpenPhone Public API, built with Bun and designed for modern JavaScript/TypeScript applications.
## ā ļø Important Disclaimers
**šØ This is NOT an official OpenPhone SDK. This is an unofficial, community-created SDK.**
**š¤ This SDK was primarily generated by AI and should be used with caution in production environments.**
**š¤ Published by: [@noobforal](https://www.npmjs.com/~noobforal) - This is NOT affiliated with OpenPhone company.**
- **Unofficial**: This is not an official OpenPhone product and is not endorsed by OpenPhone
- **Community Support**: This SDK is maintained by the community, not by OpenPhone
- **Code Quality**: While the code has been tested and follows best practices, it may contain issues that weren't caught during initial development
- **Security**: Please review all code thoroughly before using in production, especially authentication and API key handling
- **Testing**: Additional testing is recommended beyond the basic test suite included
- **Maintenance**: This code may require ongoing maintenance and updates as the OpenPhone API evolves
- **Support**: Limited support is available for AI-generated code
**Recommendations:**
- Review all code before production use
- Add comprehensive test coverage for your specific use cases
- Monitor for security vulnerabilities regularly
- Consider contributing improvements back to the project
- Use at your own risk
## Features
- š§ **TypeScript First**: Full type safety with auto-generated types from OpenAPI spec
- š **Modern**: Built with Bun for fast development and execution
- š¦ **Tree-shakable**: ES modules with tree-shaking support
- š”ļø **Type-safe**: End-to-end type safety for all API calls
- š **Auto-generated**: Types and client generated from OpenAPI specification
- š± **Complete API Coverage**: Support for calls, messages, phone numbers, and webhooks
## Installation
```bash
# Using Bun (recommended)
bun add @noobforal/openphone-api-sdk
# Using npm
npm install @noobforal/openphone-api-sdk
# Using yarn
yarn add @noobforal/openphone-api-sdk
# Using pnpm
pnpm add @noobforal/openphone-api-sdk
```
## Quick Start
```typescript
import { OpenPhoneClient } from '@noobforal/openphone-api-sdk';
// Initialize the client
const client = new OpenPhoneClient({
apiKey: 'your-api-key-here',
baseUrl: 'https://api.openphone.com', // optional, defaults to this
});
// List phone numbers
const phoneNumbers = await client.listPhoneNumbers();
// List calls
const calls = await client.listCalls({
phoneNumberId: 'PN123abc',
participants: ['+1234567890'],
maxResults: 10,
});
// Send a message
const message = await client.sendMessage({
content: 'Hello from the SDK!',
from: 'PN123abc',
to: ['+1234567890'],
});
```
## API Reference
### Configuration
```typescript
interface OpenPhoneConfig {
apiKey: string; // Your OpenPhone API key
baseUrl?: string; // API base URL (default: 'https://api.openphone.com')
timeout?: number; // Request timeout in ms (default: 30000)
}
```
### Calls API
#### `listCalls(params)`
Retrieve a paginated list of calls.
```typescript
const calls = await client.listCalls({
phoneNumberId: 'PN123abc', // Required: OpenPhone number ID
userId: 'US123abc', // Optional: User ID
participants: ['+1234567890'], // Required: Array of participant phone numbers
since: '2024-01-01T00:00:00Z', // Optional: Start date filter
createdAfter: '2024-01-01T00:00:00Z', // Optional: Created after filter
createdBefore: '2024-01-31T23:59:59Z', // Optional: Created before filter
maxResults: 50, // Required: Maximum number of results
pageToken: 'next-page-token', // Optional: Pagination token
});
```
#### `getCall(callId)`
Get details for a specific call.
```typescript
const call = await client.getCall('call-id-here');
```
### Messages API
#### `listMessages(params)`
Retrieve a chronological list of messages.
```typescript
const messages = await client.listMessages({
phoneNumberId: 'PN123abc',
participants: ['+1234567890'],
maxResults: 50,
// ... other optional filters
});
```
#### `getMessage(messageId)`
Get details for a specific message.
```typescript
const message = await client.getMessage('message-id-here');
```
#### `sendMessage(params)`
Send a new message.
```typescript
const message = await client.sendMessage({
content: 'Hello, world!',
from: 'PN123abc', // OpenPhone number ID
to: ['+1234567890'], // Array of recipient phone numbers
phoneNumberId: 'PN123abc', // Optional: Alternative to 'from'
userId: 'US123abc', // Optional: User ID
setInboxStatus: 'done', // Optional: Set inbox status
});
```
### Phone Numbers API
#### `listPhoneNumbers(params?)`
Retrieve the list of phone numbers and users.
```typescript
const phoneNumbers = await client.listPhoneNumbers({
userId: 'US123abc', // Optional: Filter by user ID
});
```
### Webhooks API
#### `listWebhooks(params?)`
List all webhooks for a user.
```typescript
const webhooks = await client.listWebhooks({
userId: 'US123abc', // Optional: Filter by user ID
});
```
#### `getWebhook(webhookId)`
Get details for a specific webhook.
```typescript
const webhook = await client.getWebhook('webhook-id-here');
```
#### Create Webhooks
Create webhooks for different event types:
```typescript
// Message webhook
const messageWebhook = await client.createMessageWebhook({
url: 'https://your-app.com/webhooks/messages',
events: ['message.received', 'message.delivered'],
label: 'My Message Webhook',
resourceIds: ['PN123abc'], // or '*' for all resources
status: 'enabled',
});
// Call webhook
const callWebhook = await client.createCallWebhook({
url: 'https://your-app.com/webhooks/calls',
events: ['call.completed', 'call.ringing'],
label: 'My Call Webhook',
resourceIds: '*',
status: 'enabled',
});
// Call summary webhook
const summaryWebhook = await client.createCallSummaryWebhook({
url: 'https://your-app.com/webhooks/summaries',
events: ['call.summary.completed'],
label: 'My Summary Webhook',
resourceIds: '*',
status: 'enabled',
});
// Call transcript webhook
const transcriptWebhook = await client.createCallTranscriptWebhook({
url: 'https://your-app.com/webhooks/transcripts',
events: ['call.transcript.completed'],
label: 'My Transcript Webhook',
resourceIds: '*',
status: 'enabled',
});
```
### Utility Methods
#### `getConfig()`
Get the current client configuration.
```typescript
const config = client.getConfig();
console.log(config.apiKey); // 'your-api-key-here'
```
#### `updateConfig(newConfig)`
Update the client configuration.
```typescript
client.updateConfig({
baseUrl: 'https://staging-api.openphone.com',
timeout: 60000,
});
```
## Error Handling
All API methods return a response object with `data`, `error`, and `response` properties:
```typescript
const { data, error, response } = await client.listCalls(params);
if (error) {
console.error('API Error:', error);
console.error('Status:', response.status);
console.error('Status Text:', response.statusText);
} else {
console.log('Success:', data);
}
```
## TypeScript Support
This SDK is built with TypeScript and provides full type safety. All API responses, request parameters, and client methods are fully typed.
```typescript
import { OpenPhoneClient, OpenPhoneConfig } from '@openphone/api-sdk';
import type { paths } from '@openphone/api-sdk';
// Full type safety for all operations
const client: OpenPhoneClient = new OpenPhoneClient({
apiKey: 'your-api-key',
});
// TypeScript will provide autocomplete and type checking
const calls = await client.listCalls({
phoneNumberId: 'PN123abc',
participants: ['+1234567890'],
maxResults: 10,
});
```
## Development
### Prerequisites
- [Bun](https://bun.sh) (recommended) or Node.js 18+
- TypeScript 5+
### Building
```bash
# Install dependencies
bun install
# Build the project
bun run build
# Run in development mode
bun run dev
# Run tests
bun test
# Lint code
bun run lint
# Format code
bun run format
```
### Project Structure
```
src/
āāā index.ts # Main entry point
āāā client.ts # OpenPhoneClient class
āāā types.ts # Auto-generated TypeScript types
dist/ # Built output
āāā index.js # Bundled JavaScript
āāā index.d.ts # TypeScript declarations
āāā index.d.ts.map # Source maps
```
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Run the build and tests
6. Submit a pull request
## License
MIT License - see [LICENSE](LICENSE) file for details.
## Support
- š§ Email: support@openphone.com
- š Documentation: [https://support.openphone.com/hc/en-us](https://support.openphone.com/hc/en-us)
- š Issues: [GitHub Issues](https://github.com/openphone/openphone-api-sdk/issues)
## Changelog
### 1.0.1
- Initial release
- Full TypeScript support
- Complete API coverage for calls, messages, phone numbers, and webhooks
- Auto-generated types from OpenAPI specification
- Modern ES modules with tree-shaking support