/ embark-ui / src / services / api.js
api.js
  1  import axios from "axios";
  2  import keccak from "keccakjs";
  3  
  4  function hash(cnonce, token, type, path, params = {}) {
  5    let hash = new keccak();
  6    hash.update(JSON.stringify(cnonce));
  7    hash.update(token);
  8    hash.update(type.toUpperCase());
  9    hash.update(`/embark-api${path}`);
 10    return hash.digest('hex');
 11  }
 12  
 13  function request(type, path, params = {}) {
 14    const cnonce = Date.now() + Math.random();
 15  
 16    // Extract credentials out of the params and delete so the token doesn't get sent
 17    // as cleartext.
 18    let credentials = params.credentials;
 19    delete params.credentials;
 20  
 21    let requestHash = hash(cnonce, credentials.token, type, path, params);
 22  
 23    const endpoint = `http://${credentials.host}/embark-api${path}`;
 24    const req = {
 25      method: type,
 26      url: endpoint,
 27      headers: {
 28        'X-Embark-Request-Hash': requestHash,
 29        'X-Embark-Cnonce': cnonce
 30      },
 31      ...(type === 'post' ? { data: params } : {}),
 32      ...(type === 'get' ? { params: params.params } : {})
 33    }
 34  
 35    return axios(req)
 36      .then((response) => {
 37        return (response.data && response.data.error) ? {error: response.data.error} : {response, error: null};
 38      }).catch((error) => {
 39        return {response: null, error: error.message || 'Something bad happened'};
 40      });
 41  }
 42  
 43  function get() {
 44    return request('get', ...arguments);
 45  }
 46  
 47  function post() {
 48    return request('post', ...arguments);
 49  }
 50  
 51  function destroy() {
 52    return request('delete', ...arguments);
 53  }
 54  
 55  export function postCommand() {
 56    return post('/command', ...arguments);
 57  }
 58  
 59  export function postCommandSuggestions() {
 60    return post('/suggestions', ...arguments);
 61  }
 62  
 63  export function fetchAccounts() {
 64    return get('/blockchain/accounts', ...arguments);
 65  }
 66  
 67  export function fetchAccount(payload) {
 68    return get(`/blockchain/accounts/${payload.address}`, ...arguments);
 69  }
 70  
 71  export function fetchBlocks(payload) {
 72    return get('/blockchain/blocks', {params: payload, credentials: payload.credentials});
 73  }
 74  
 75  export function fetchBlock(payload) {
 76    return get(`/blockchain/blocks/${payload.blockNumber}`, ...arguments);
 77  }
 78  
 79  export function fetchTransactions(payload) {
 80    return get('/blockchain/transactions', {params: payload, credentials: payload.credentials});
 81  }
 82  
 83  export function fetchTransaction(payload) {
 84    return get(`/blockchain/transactions/${payload.hash}`, ...arguments);
 85  }
 86  
 87  export function fetchProcesses() {
 88    return get('/processes', ...arguments);
 89  }
 90  
 91  export function fetchServices() {
 92    return get('/services', ...arguments);
 93  }
 94  
 95  export function fetchProcessLogs(payload) {
 96    return get(`/process-logs/${payload.processName}`, {params: payload, credentials: payload.credentials});
 97  }
 98  
 99  export function fetchContractLogs() {
100    return get(`/contracts/logs`, ...arguments);
101  }
102  
103  export function fetchContractEvents() {
104    return get(`/blockchain/contracts/events`, ...arguments);
105  }
106  
107  export function fetchContracts() {
108    return get('/contracts', ...arguments);
109  }
110  
111  export function fetchContract(payload) {
112    return get(`/contract/${payload.contractName}`, ...arguments);
113  }
114  
115  export function postContractFunction(payload) {
116    return post(`/contract/${payload.contractName}/function`, ...arguments);
117  }
118  
119  export function postContractDeploy(payload) {
120    return post(`/contract/${payload.contractName}/deploy`, ...arguments);
121  }
122  
123  export function postContractCompile() {
124    return post('/contract/compile', ...arguments);
125  }
126  
127  export function fetchVersions() {
128    return get('/versions', ...arguments);
129  }
130  
131  export function fetchPlugins() {
132    return get('/plugins', ...arguments);
133  }
134  
135  export function sendMessage(payload) {
136    return post(`/communication/sendMessage`, Object.assign({}, payload.body, {credentials: payload.credentials}));
137  }
138  
139  export function fetchContractProfile(payload) {
140    return get(`/profiler/${payload.contractName}`, ...arguments);
141  }
142  
143  export function fetchEnsRecord(payload) {
144    const _payload = {params: payload, credentials: payload.credentials};
145    if (payload.name) {
146      return get('/ens/resolve', _payload);
147    }
148  
149    return get('/ens/lookup', _payload);
150  }
151  
152  export function postEnsRecord() {
153    return post('/ens/register', ...arguments);
154  }
155  
156  export function getEthGasAPI() {
157    return get('/blockchain/gas/oracle', ...arguments);
158  }
159  
160  export function fetchFiles() {
161    return get('/files', ...arguments);
162  }
163  
164  export function fetchFile(payload) {
165    return get('/file', {params: payload, credentials: payload.credentials});
166  }
167  
168  export function postFile() {
169    return post('/files', ...arguments);
170  }
171  
172  export function deleteFile(payload) {
173    return destroy('/file', {params: payload, credentials: payload.credentials});
174  }
175  
176  export function authenticate(payload) {
177    return post('/authenticate', {...payload, credentials: payload});
178  }
179  
180  export function signMessage(payload) {
181    return post('/messages/sign', ...arguments);
182  }
183  
184  export function verifyMessage(payload) {
185    return post('/messages/verify', ...arguments);
186  }
187  
188  export function startDebug(payload) {
189    return post('/debugger/start', {params: payload, credentials: payload.credentials});
190  }
191  
192  export function debugJumpBack(payload) {
193    return post('/debugger/jumpBack', {params: payload, credentials: payload.credentials});
194  }
195  
196  export function debugJumpForward(payload) {
197    return post('/debugger/jumpForward', {params: payload, credentials: payload.credentials});
198  }
199  
200  export function debugStepOverForward(payload) {
201    return post('/debugger/stepOverForward', {params: payload, credentials: payload.credentials});
202  }
203  
204  export function debugStepOverBackward(payload) {
205    return post('/debugger/stepOverBackward', {params: payload, credentials: payload.credentials});
206  }
207  
208  export function debugStepIntoForward(payload) {
209    return post('/debugger/stepIntoForward', {params: payload, credentials: payload.credentials});
210  }
211  
212  export function debugStepIntoBackward(payload) {
213    return post('/debugger/stepIntoBackward', {params: payload, credentials: payload.credentials});
214  }
215  
216  export function toggleBreakpoint(payload) {
217    return post('/debugger/breakpoint', {params: payload, credentials: payload.credentials});
218  }
219  
220  export function listenToDebugger(credentials) {
221    return new WebSocket(`ws://${credentials.host}/embark-api/debugger`, [credentials.token]);
222  }
223  
224  export function listenToChannel(credentials, channel) {
225    return new WebSocket(`ws://${credentials.host}/embark-api/communication/listenTo/${channel}`, [credentials.token]);
226  }
227  
228  export function webSocketProcess(credentials, processName) {
229    return new WebSocket(`ws://${credentials.host}/embark-api/process-logs/${processName}`, [credentials.token]);
230  }
231  
232  export function webSocketContractLogs(credentials) {
233    return new WebSocket(`ws://${credentials.host}/embark-api/contracts/logs`, [credentials.token]);
234  }
235  
236  export function webSocketContractEvents(credentials) {
237    return new WebSocket(`ws://${credentials.host}/embark-api/blockchain/contracts/event`, [credentials.token]);
238  }
239  
240  export function webSocketBlockHeader(credentials) {
241    return new WebSocket(`ws://${credentials.host}/embark-api/blockchain/blockHeader`, [credentials.token]);
242  }
243  
244  export function websocketGasOracle(credentials) {
245    return new WebSocket(`ws://${credentials.host}/embark-api/blockchain/gas/oracle`, [credentials.token]);
246  }