1 | MeshbluRequest = require './meshblu-request.coffee'
|
2 |
|
3 |
|
4 | defaults = require 'lodash/defaults'
|
5 | extend = require 'lodash/extend'
|
6 | isEmpty = require 'lodash/isEmpty'
|
7 | _ = {defaults, extend, isEmpty}
|
8 |
|
9 | class 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 |
|
137 | module.exports = MeshbluHttp
|