UNPKG

2.33 kBJavaScriptView Raw
1'use strict'
2
3const http = require('http')
4const Request = require('request')
5
6class 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
108module.exports = OneSignal