npm package: @qgustavor/pushbullet-js
Description: Fork of pushbullet
Latest version: 2.0.0

# PushBullet JS

A JavaScript module for using the [PushBullet REST API](https://www.pushbullet.com/api). Forked from https://github.com/qgustavor/deno-pushbullet-api/ which was forked from https://github.com/alexwhitman/node-pushbullet-api as the Deno module had fixes from node-pushbullet-api but can't be used on Node. And because Deno can open Node imports, it's better to just migrate to Node.

## Usage

This module is very simple to use. All you need is your PushBullet API key and you can begin pushing.

```javascript
import PushBullet from '@qgustavor/pushbullet-js'
const pusher = new PushBullet('YOUR-API-KEY')

const response = await pusher.devices()

const 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: 'deno-app'
}

await pusher.createDevice(deviceOptions)
```

### PushBullet.updateDevice(deviceIden, deviceOptions)

Creates a new device.

```javascript
let deviceOptions = {
  nickname: 'deno-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, file, message)

Push a file to the specified device.

```javascript
const file = new File([await fs.readFile('/path/to/file')], 'file')
await pusher.file('u1qSJddxeKwOGuGW', 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.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
let response = await pusher.me()
let user = await response.json()

await 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
```