pushbullet
Version:
Use PushBullets REST API
484 lines (320 loc) • 10.6 kB
Markdown
# PushBullet API
A Node.js module for using the [PushBullet REST API](https://www.pushbullet.com/api).
## Usage
This module is very simple to use. All you need is your PushBullet API key and you can begin pushing.
```javascript
let PushBullet = require('pushbullet');
let pusher = new PushBullet('YOUR-API-KEY');
let response = await pusher.devices();
let response = await pusher.note(deviceParams, noteTitle, noteBody);
```
### Target devices
The push functions (`note`, `link`, `file`) have a `deviceParams` parameter which can be several types:
- If it is a string containing an '@' it is treated as an email address.
- If it is a string not containing an '@' it is treated as a device iden.
- If it is a number it is treated as a device id.
- If it is an object it is assumed to have one of the 'target parameters' as defined on https://docs.pushbullet.com/v2/pushes/ as an attribute. It can also have an optional `source_device_iden` attribute. If the object is empty, `{}`, then the push is sent to all devices.
### Async/Await
Version 2 of the module supported callback and promise based execution. Version 3 uses async/await. Callbacks can still be used by utilising `util.callbackify()`.
```javascript
let response = await pusher.devices();
console.log(await response.json());
```
## API
### new PushBullet(apiKey)
Creates a new PushBullet object.
The `apiKey` parameter is the string API key provided by PushBullet.
### PushBullet.me();
Get the current user's information.
```javascript
await pusher.me();
```
### PushBullet.devices([options])
Retrieves a list of pushable devices.
The `options` parameter can use two attributes `cursor` and`limit`
to control the data returned.
- `active` is used to restrict the results to only active devices.
- `cursor` is used to select the page if the results have been paginated.
- `limit` is used to limit the number of objects in the reponse.
```javascript
let options = {
limit: 10
};
await pusher.devices(options);
```
### PushBullet.createDevice(deviceOptions)
Creates a new device.
```javascript
let deviceOptions = {
nickname: 'node-app'
};
await pusher.createDevice(deviceOptions);
```
### PushBullet.updateDevice(deviceIden, deviceOptions)
Creates a new device.
```javascript
let deviceOptions = {
nickname: 'node-app'
};
await pusher.updateDevice(deviceIden, deviceOptions);
```
### PushBullet.deleteDevice(deviceIden)
Delete a device.
```javascript
await pusher.deleteDevice('u1qSJddxeKwOGuGW');
```
### PushBullet.note(deviceParams, noteTitle, noteBody)
Push a note to the specified device.
```javascript
await pusher.note('u1qSJddxeKwOGuGW', 'New Note', 'Note body text');
```
### PushBullet.link(deviceParams, name, url, body)
Push a link to the specified device.
```javascript
await pusher.link('u1qSJddxeKwOGuGW', 'GitHub', 'https://github.com/', 'Note body text');
```
### PushBullet.file(deviceParams, filePath, message)
Push a file to the specified device.
```javascript
await pusher.file('u1qSJddxeKwOGuGW', '/path/to/file', 'Important file!');
```
### PushBullet.dismissPush(pushIden)
Dismiss a push.
```javascript
await pusher.dismissPush('udhrSpjAewzdwpCC');
```
### PushBullet.deletePush(pushIden)
Delete a push.
```javascript
await pusher.deletePush('udhrSpjAewzdwpCC');
```
### PushBullet.deleteAllPushes(callback)
Delete all pushes associated with the current account.
```javascript
await pusher.deleteAllPushes(function(error, response) {});
```
### PushBullet.history([options])
Get the push history.
The `options` parameter can use three attributes `cursor`, `limit` and
`modified_after` to control the data returned.
- `active` is used to only select undeleted pushes. Defaults to true if not specified.
- `cursor` is used to select the page if the results have been paginated.
- `limit` is used to limit the number of objects in the reponse.
- `modified_after` should be a timestamp. Defaults to 0 if not specified.
```javascript
let options = {
limit: 10,
modified_after: 1400000000.00000
};
await pusher.history(options)
```
### PushBullet.subscriptions([options])
Get a list of current subscriptions.
The `options` parameter can use two attributes `cursor` and`limit`
to control the data returned.
- `active` is used to restrict the results to only active devices.
- `cursor` is used to select the page if the results have been paginated.
- `limit` is used to limit the number of objects in the reponse.
```javascript
let options = {
limit: 10
};
await pusher.subscriptions(options);
```
### PushBullet.subscribe(channelTag)
Subscribe to a channel.
```javascript
await pusher.subscribe('jblow');
```
### PushBullet.unsubscribe(subscriptionIden)
Subscribe to a channel.
```javascript
await pusher.unsubscribe('udprOsjAsLtNTRAG');
```
### PushBullet.muteSubscription(subscriptionIden)
Mute a subscription.
```javascript
await pusher.muteSubscription('udprOsjAsLtNTRAG');
```
### PushBullet.unmuteSubscription(subscriptionIden)
Unmute a subscription.
```javascript
await pusher.unmuteSubscription('udprOsjAsLtNTRAG');
```
### PushBullet.channelInfo(channelTag)
Get information about a channel.
```javascript
await pusher.channelInfo('jblow');
```
### PushBullet.chats([options])
Get a list of current chats.
The `options` parameter can use two attributes `cursor` and`limit`
to control the data returned.
- `active` is used to restrict the results to only active devices.
- `cursor` is used to select the page if the results have been paginated.
- `limit` is used to limit the number of objects in the reponse.
```javascript
let options = {
limit: 10
};
await pusher.chats(options);
```
### PushBullet.createChat(email)
Create a new chat.
```javascript
await pusher.createChat('a@b.com');
```
### PushBullet.deleteChat(chatIden)
Delete a chat.
```javascript
await pusher.deleteChat('udprOsjAsLtNTRAG');
```
### PushBullet.muteChat(chatIden)
Mute a chat.
```javascript
await pusher.muteChat('udprOsjAsLtNTRAG');
```
### PushBullet.unmuteChat(chatIden)
Unmute a chat.
```javascript
await pusher.unmuteChat('udprOsjAsLtNTRAG');
```
### PushBullet.createText(deviceIden, addresses, message, [options])
Create a new text.
The `options` parameter can be used to add additional information to the text request.
- `file_url` is a URL of a file to send with the text.
- `file_type` is the mime type of the file being sent. Required if `file_url` is used.
Other options are available, see https://docs.pushbullet.com/#text
```javascript
await pusher.createText('udprOsjAsLtNTRAG', '+13035551212', 'Test Message', {});
```
### PushBullet.updateText(textIden, options)
Update a chat.
`options` is an object representing the text attributes to update.
See https://docs.pushbullet.com/#text for the available attributes and structure.
```javascript
await pusher.updateText('udprOsjAsLtNTRAG', {});
```
### PushBullet.deleteText(textIden)
Delete a text.
```javascript
await pusher.deleteText('udprOsjAsLtNTRAG');
```
### PushBullet.sendSMS(options)
Send an SMS through a device.
```javascript
let options = {
source_user_iden: 'ujpah72o0', // The user iden of the user sending this message
target_device_iden: 'ujpah72o0sjAoRtnM0jc', // The iden of the device corresponding to the phone that should send the SMS
conversation_iden: '+1 303 555 1212', // Phone number to send the SMS to
message: 'Hello!' // The SMS message to send
};
await pusher.sendSMS(options);
```
### PushBullet.sendClipboard(options)
Send clipboard content.
```javascript
let options = {
source_user_iden: "ujpah72o0", // The iden of the user sending this message
source_device_iden: "ujpah72o0sjAoRtnM0jc", // The iden of the device sending this message
body: "http://www.google.com", // The text to copy to the clipboard
};
await pusher.sendClipboard(options);
```
### PushBullet.dismissEphemeral(options)
Dismiss an ephemeral.
```javascript
let options = {
package_name: 'com.pushbullet.android', // Set to the package_name field from the mirrored notification
notification_id: '-8', // Set to the notification_id field from the mirrored notification
notification_tag: null, // Set to the notification_tag field from the mirrored notification
source_user_iden: 'ujpah72o0', // Set to the source_user_iden field from the mirrored notification
};
await pusher.dismissEphemeral(options);
```
### PushBullet.stream()
Returns a new stream listener which will emit events from the stream.
```javascript
let stream = pusher.stream();
```
#### connect()
Connects to the stream.
```javascript
stream.connect();
```
#### close()
Disconnects from the stream.
```javascript
stream.close();
```
#### Events
##### connect
Emitted when the stream has connected.
```javascript
stream.on('connect', function() {
// stream has connected
});
```
##### close
Emitted when the stream has disconnected.
```javascript
stream.on('close', function() {
// stream has disconnected
});
```
##### error
Emitted when there is a connection or streaming error.
```javascript
stream.on('error', function(error) {
// stream error
});
```
##### message
Emitted when a message is received from the stream. `message` will be emitted for all messages
but you can listen for specific messages with `nop`, `tickle` and `push`.
```javascript
stream.on('message', function(message) {
// message received
});
```
##### nop
Emitted when the keep-alive 'no-operation' message is received.
```javascript
stream.on('nop', function() {
// nop message received
});
```
##### tickle
Emitted when the `tickle` message is received.
```javascript
stream.on('tickle', function(type) {
// tickle message received
});
```
##### push
Emited when the `push` message is received.
```javascript
stream.on('push', function(push) {
// push message received
});
```
### PushBullet.enableEncryption(encryptionPassword, userIden)
Enables End-to-End encryption.
```javascript
pusher.me(function(error, user) {
// needed to call me() to gather user iden
pusher.enableEncryption('YOUR-END-TO-END-PASSWORD', user.iden);
let stream = pusher.stream();
stream.on('message', function(message) {
console.log(message); // message is decrypted automatically
});
stream.connect();
let options = {
source_user_iden: 'ujpah72o0',
target_device_iden: 'ujpah72o0sjAoRtnM0jc',
conversation_iden: '+1 303 555 1212',
message: 'Hello!'
};
await pusher.sendSMS(options); // options are encrypted automatically
});
```