UNPKG

5.2 kBtext/coffeescriptView Raw
1MeshbluRequest = require './meshblu-request.coffee'
2
3#It's dumb, but it saves ~60k!
4defaults = require 'lodash/defaults'
5extend = require 'lodash/extend'
6isEmpty = require 'lodash/isEmpty'
7_ = {defaults, extend, isEmpty}
8
9class MeshbluHttp
10 constructor: (meshbluConfig) ->
11 throw new Error("MeshbluHttp only allows hostname: 'server' is not allowed") if meshbluConfig?.server
12 throw new Error("MeshbluHttp only allows hostname: 'host' is not allowed") if meshbluConfig?.host
13
14 options = _.extend port: 443, hostname: 'meshblu-http.octoblu.com', meshbluConfig
15
16 {@uuid, @token, @bearerToken} = options
17 {protocol, hostname, port} = options
18 {resolveSrv, domain, service, secure} = options
19
20 protocol = null if protocol == 'websocket'
21 try port = parseInt port
22 protocol ?= 'https:' if port == 443
23 protocol ?= 'http:'
24 secure ?= true
25 domain ?= 'octoblu.com'
26 service ?= 'meshblu'
27
28 @request = new MeshbluRequest {protocol, hostname, port, resolveSrv, domain, service, secure}
29
30 claimdevice: (uuid, callback) =>
31 options = @_getDefaultRequestOptions()
32 @request.post "/claimdevice/#{uuid}", options, callback
33
34 createSubscription: ({subscriberUuid, emitterUuid, type}, callback) =>
35 options = @_getDefaultRequestOptions()
36 @request.post "/v2/devices/#{subscriberUuid}/subscriptions/#{emitterUuid}/#{type}", options, (error, response) =>
37 return callback error if error?
38 return callback null if _.isEmpty response
39 return callback null, response
40
41 deleteSubscription: ({subscriberUuid, emitterUuid, type}, callback) =>
42 options = @_getDefaultRequestOptions()
43 @request.delete "/v2/devices/#{subscriberUuid}/subscriptions/#{emitterUuid}/#{type}", options, (error, response) =>
44 return callback error if error?
45 return callback null if _.isEmpty response
46 return callback null, response
47
48 device: (uuid, callback) =>
49 options = @_getDefaultRequestOptions()
50 @request.get "/v2/devices/#{uuid}", options, callback
51
52 devices: (query, callback) =>
53 options = @_getDefaultRequestOptions()
54 options.query = query
55 @request.get "/v2/devices", options, callback
56
57 search: ({query, projection, as}, callback) =>
58 options = @_getDefaultRequestOptions()
59 options.body = query
60 options.headers ?= {}
61 options.headers['X-MESHBLU-PROJECTION'] = JSON.stringify projection if projection?
62 options.headers['X-MESHBLU-AS'] = as if as?
63
64 @request.post '/search/devices', options, (error, response=[]) =>
65 return callback error if error?
66 return callback null, response
67
68 searchTokens: ({query, projection}, callback) =>
69 options = @_getDefaultRequestOptions()
70 options.body = query
71 options.headers ?= {}
72 options.headers['X-MESHBLU-PROJECTION'] = JSON.stringify projection if projection?
73
74 @request.post '/search/tokens', options, (error, response=[]) =>
75 return callback error if error?
76 return callback null, response
77
78 generateAndStoreToken: (uuid, query={}, callback) =>
79 options = @_getDefaultRequestOptions()
80 options.body = query
81 @request.post "/devices/#{uuid}/tokens", options, (error, response) =>
82 return callback error if error?
83 return callback new Error 'Invalid Response' if _.isEmpty response
84 callback null, response
85
86 listSubscriptions: ({subscriberUuid}, callback) =>
87 options = @_getDefaultRequestOptions()
88 @request.get "/v2/devices/#{subscriberUuid}/subscriptions", options, callback
89
90 message: (message, callback) =>
91 options = @_getDefaultRequestOptions()
92 options.body = message
93 @request.post "/messages", options, callback
94
95 register: (body, callback) =>
96 options = @_getDefaultRequestOptions()
97 options.body = body
98 @request.post "/devices", options, (error, response) =>
99 return callback error if error?
100 return callback new Error 'Invalid Response' if _.isEmpty response
101 callback null, response
102
103 removeTokenByQuery: (uuid, query={}, callback) =>
104 console.log 'removeTokenByQuery', uuid, query
105 options = @_getDefaultRequestOptions()
106 options.query = query
107 @request.delete "/devices/#{uuid}/tokens", options, callback
108
109 revokeToken: (uuid, token, callback=->) =>
110 options = @_getDefaultRequestOptions()
111 @request.delete "/devices/#{uuid}/tokens/#{token}", options, callback
112
113 unregister: (uuid, callback) =>
114 options = @_getDefaultRequestOptions()
115 @request.delete "/devices/#{uuid}", options, callback
116
117 update: (uuid, body, callback) =>
118 options = @_getDefaultRequestOptions()
119 options.body = body
120 @request.patch "/v2/devices/#{uuid}", options, callback
121
122 updateDangerously: (uuid, body, callback) =>
123 options = @_getDefaultRequestOptions()
124 options.body = body
125 @request.put "/v2/devices/#{uuid}", options, callback
126
127 whoami: (callback) =>
128 options = @_getDefaultRequestOptions()
129 @request.get "/v2/whoami", options, (error, response) =>
130 return callback error if error?
131 return callback new Error 'Invalid Response' if _.isEmpty response
132 callback null, response
133
134 _getDefaultRequestOptions: =>
135 return { @uuid, @token, @bearerToken }
136
137module.exports = MeshbluHttp