/* global clearTimeout, dcodeIO, Buffer, TextDecoder, process, log */ const nodeFetch = require('node-fetch'); class StubMessageAPI { constructor(ourKey) { this.ourKey = ourKey; this.baseUrl = 'http://localhost:3000'; } // eslint-disable-next-line no-unused-vars async sendMessage(pubKey, data, messageTimeStamp, ttl, options = {}) { // console.warn('STUBBED message api ', pubKey, ttl); const post = { method: 'POST', }; const data64 = dcodeIO.ByteBuffer.wrap(data).toString('base64'); await nodeFetch( `${ this.baseUrl }/messages?pubkey=${pubKey}×tamp=${messageTimeStamp}&data=${encodeURIComponent( data64 )}`, post ); } async pollForGroupId(groupId, onMessages) { const get = { method: 'GET', }; const res = await nodeFetch( `${this.baseUrl}/messages?pubkey=${groupId}`, get ); try { const json = await res.json(); const modifiedMessages = json.messages.map(m => { // eslint-disable-next-line no-param-reassign m.conversationId = groupId; return m; }); onMessages(modifiedMessages || []); } catch (e) { log.error('invalid json for GROUP', e); onMessages([]); } setTimeout(() => { this.pollForGroupId(groupId, onMessages); }, 1000); } async startLongPolling(numConnections, stopPolling, callback) { const ourPubkey = this.ourKey; const get = { method: 'GET', }; const res = await nodeFetch( `${this.baseUrl}/messages?pubkey=${ourPubkey}`, get ); try { const json = await res.json(); callback(json.messages || []); } catch (e) { log.error('invalid json: ', e); callback([]); } // console.warn('STUBBED polling messages ', json.messages); } } module.exports = StubMessageAPI;