UNPKG

2.49 kBJavaScriptView Raw
1/**
2 * @author Aref Mirhosseini <code@arefm.me> (http://arefm.me)
3 */
4
5'use strict'
6
7const http = require('http')
8const Request = require('request')
9
10class 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
116module.exports = OneSignal