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