1 | 'use strict'
|
2 |
|
3 | const http = require('http')
|
4 | const Request = require('request')
|
5 |
|
6 | class OneSignal {
|
7 |
|
8 | constructor(app_id = OneSignal.Required, api_key = OneSignal.Required) {
|
9 | this.APP_ID = app_id
|
10 | this.API = Request.defaults({
|
11 | baseUrl: 'https://onesignal.com/api/v1',
|
12 | headers: {
|
13 | 'Content-Type': 'application/json',
|
14 | 'Authorization': `Basic ${api_key}`
|
15 | }
|
16 | })
|
17 | }
|
18 |
|
19 | GetDevices() {
|
20 | let defer = new Promise((resolve, reject) => {
|
21 | this.API(`/players?app_id=${this.APP_ID}`, (err, resp) => {
|
22 | if (err)
|
23 | return reject(OneSignal.Error(err))
|
24 | resolve(OneSignal.Response(resp))
|
25 | })
|
26 | })
|
27 | return defer
|
28 | }
|
29 |
|
30 | GetDevice(device_id = OneSignal.Required) {
|
31 | let defer = new Promise((resolve, reject) => {
|
32 | this.API(`/players/${device_id}?app_id=${this.APP_ID}`, (err, resp) => {
|
33 | if (err)
|
34 | return OneSignal.Error(err)
|
35 | resolve(OneSignal.Response(resp))
|
36 | })
|
37 | })
|
38 | return defer
|
39 | }
|
40 |
|
41 | Send(Message = OneSignal.Required, Devices = [], Segments = ['All']) {
|
42 | let defer = new Promise((resolve, reject) => {
|
43 | this.API({
|
44 | url: '/notifications',
|
45 | method: 'POST',
|
46 | body: JSON.stringify({
|
47 | app_id: this.APP_ID,
|
48 | included_segments: Segments,
|
49 | include_player_ids: Devices,
|
50 | contents: {
|
51 | en: Message
|
52 | }
|
53 | })
|
54 | }, (err, resp) => {
|
55 | if (err)
|
56 | return reject(OneSignal.Error(err))
|
57 | resolve(OneSignal.Response(resp))
|
58 | })
|
59 | })
|
60 | return defer
|
61 | }
|
62 |
|
63 | static OS(label = 'iOS') {
|
64 | let OSID
|
65 | switch (label.toLowerCase()) {
|
66 | case 'ios':
|
67 | OSID = 0; break;
|
68 | case 'android':
|
69 | OSID = 1; break;
|
70 | case 'amazon':
|
71 | OSID = 2; break;
|
72 | case 'windowsphone-mpns':
|
73 | OSID = 3; break;
|
74 | case 'chromeapps':
|
75 | OSID = 4; break;
|
76 | case 'chromewebpush':
|
77 | OSID = 5; break;
|
78 | case 'windowsphone-wns':
|
79 | OSID = 6; break;
|
80 | case 'safari':
|
81 | OSID = 7; break;
|
82 | case 'firefox':
|
83 | OSID = 8; break;
|
84 | case 'macos':
|
85 | OSID = 9; break;
|
86 | }
|
87 | return OSID
|
88 | }
|
89 |
|
90 | static get Required() {
|
91 | throw new Error('Missing Required Information.')
|
92 | }
|
93 |
|
94 | static Response(resp) {
|
95 | if (resp.statusCode !== 200) {
|
96 | let err = JSON.parse(resp.body).errors[0]
|
97 | return OneSignal.Error(new Error(`${http.STATUS_CODES[resp.statusCode]}: ${err}`))
|
98 | }
|
99 | return JSON.parse(resp.body)
|
100 | }
|
101 |
|
102 | static Error(err) {
|
103 | return new Error(err.message)
|
104 | }
|
105 |
|
106 | }
|
107 |
|
108 | module.exports = OneSignal
|