forked from obvtiger/wirekvs-js
177 lines
4.1 KiB
Markdown
177 lines
4.1 KiB
Markdown
# WireKVS-JS
|
|
|
|
A Node.js client for the WireKVS database service. This client provides a simple interface to interact with WireKVS databases, including real-time updates via WebSocket connections.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install wirekvs-js
|
|
```
|
|
|
|
## Usage
|
|
|
|
There are two ways to use the WireKVS client:
|
|
|
|
### 1. Direct Database Connection
|
|
|
|
If you already have a database ID and access key, you can connect directly to the database:
|
|
|
|
```javascript
|
|
const WireKVS = require('wirekvs-js');
|
|
|
|
// Connect directly to a database
|
|
const db = WireKVS.connect('your-database-id', 'your-access-key');
|
|
|
|
// Set up real-time listeners with method chaining
|
|
db.on('connected', () => console.log('Connected'))
|
|
.on('post', event => console.log('New value:', event))
|
|
.on('error', error => console.error('Error:', error));
|
|
|
|
// Use the database
|
|
await db.set('key', 'value');
|
|
const value = await db.get('key');
|
|
|
|
// Disconnect when done
|
|
db.disconnect();
|
|
```
|
|
|
|
### 2. Using the Client for Database Management
|
|
|
|
If you need to create, list, or manage databases:
|
|
|
|
```javascript
|
|
const WireKVS = require('wirekvs-js');
|
|
|
|
// Initialize with your auth token
|
|
const client = new WireKVS('your-auth-token');
|
|
|
|
// Create a new database
|
|
const newDb = await client.createDatabase({
|
|
name: 'My Database',
|
|
allowPublicWrites: false,
|
|
allowPublicReads: true,
|
|
allowPublicModifications: false,
|
|
allowSpecificPublicReads: false
|
|
});
|
|
|
|
// Connect to the new database using its access key
|
|
const db = client.database(newDb.kvsId, newDb.accessKey);
|
|
|
|
// Use the database...
|
|
await db.set('key', 'value');
|
|
|
|
// Disconnect when done
|
|
db.disconnect();
|
|
```
|
|
|
|
## Database Operations
|
|
|
|
### Basic Operations
|
|
|
|
```javascript
|
|
// Get all entries
|
|
const entries = await db.getAllEntries();
|
|
|
|
// Get a specific value
|
|
const value = await db.get('key');
|
|
|
|
// Set a value
|
|
await db.set('key', 'value');
|
|
|
|
// Update a value
|
|
await db.update('key', 'new value');
|
|
|
|
// Delete a value
|
|
await db.delete('key');
|
|
|
|
// Search for entries
|
|
const results = await db.search('searchTerm');
|
|
```
|
|
|
|
### Database Management
|
|
|
|
```javascript
|
|
// List all databases
|
|
const databases = await client.listDatabases();
|
|
|
|
// Update database settings
|
|
await client.updateDatabase(databaseId, {
|
|
name: 'New Name',
|
|
allowPublicReads: false
|
|
});
|
|
|
|
// Truncate a database
|
|
await client.truncateDatabase(databaseId);
|
|
|
|
// Delete a database
|
|
await client.deleteDatabase(databaseId);
|
|
```
|
|
|
|
## Real-time Updates
|
|
|
|
The database instance extends EventEmitter and provides real-time updates for all changes:
|
|
|
|
### Available Events
|
|
|
|
```javascript
|
|
// Connection events
|
|
db.on('connected', () => console.log('Connected'));
|
|
db.on('disconnected', () => console.log('Disconnected'));
|
|
db.on('error', error => console.error('Error:', error));
|
|
|
|
// Data events
|
|
db.on('post', event => console.log('New value set:', event.key, event.value));
|
|
db.on('patch', event => console.log('Value updated:', event.key, event.value));
|
|
db.on('delete', event => console.log('Value deleted:', event.key));
|
|
db.on('truncate', () => console.log('Database truncated'));
|
|
```
|
|
|
|
### Event Handling
|
|
|
|
```javascript
|
|
// Add event listeners with method chaining
|
|
db.on('event1', handler1)
|
|
.on('event2', handler2);
|
|
|
|
// Remove specific event listener
|
|
db.off('event1', handler1);
|
|
|
|
// Remove all listeners for an event
|
|
db.off('event1');
|
|
|
|
// Disconnect and cleanup
|
|
db.disconnect(); // Removes all listeners and closes WebSocket
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
All async methods will throw errors if the operation fails. It's recommended to use try-catch blocks:
|
|
|
|
```javascript
|
|
try {
|
|
await db.set('key', 'value');
|
|
} catch (error) {
|
|
if (error.response) {
|
|
// Server responded with error
|
|
console.error('Server error:', error.response.data);
|
|
} else if (error.request) {
|
|
// No response received
|
|
console.error('No response:', error.request);
|
|
} else {
|
|
// Request setup error
|
|
console.error('Error:', error.message);
|
|
}
|
|
}
|
|
```
|
|
|
|
## Automatic Reconnection
|
|
|
|
The WebSocket connection automatically attempts to reconnect if disconnected unexpectedly. This ensures your real-time updates continue even after temporary network issues.
|
|
|
|
## Examples
|
|
|
|
Check out the `examples/demo.js` file for a complete working example of all features.
|
|
|
|
## License
|
|
|
|
MIT
|