decred.org/dcrdex@v1.0.5/server/cmd/dexadm/script.js (about) 1 async function requestJSON (method, addr, opts) { 2 opts = opts || {} 3 const req = { 4 method: method, 5 headers: { 'Content-Type': opts.contentType ?? 'application/json' }, 6 body: opts.reqBody 7 } 8 const resp = await window.fetch(addr, req) 9 const body = await resp.text() 10 if (resp.status !== 200) { console.log(resp); throw new Error(`${resp.status}: ${resp.statusText} : ${body}`) } 11 if (body.length === 0) return "OK" 12 if (opts.raw) return body 13 return JSON.parse(body) 14 } 15 16 (async () => { 17 const page = {} 18 for (const el of document.querySelectorAll('[id]')) page[el.id] = el 19 20 page.responseTmpl.remove() 21 page.responseTmpl.removeAttribute('id') 22 23 const writeResult = (path, res, isError) => { 24 const div = page.responseTmpl.cloneNode(true) 25 const tmpl = Array.from(div.querySelectorAll('[data-tmpl]')).reduce((d, el) => { 26 d[el.dataset.tmpl] = el 27 return d 28 }, {}) 29 page.responses.prepend(div) 30 tmpl.path.textContent = path 31 tmpl.close.addEventListener('click', () => div.remove()) 32 tmpl.response.textContent = res 33 if (isError) tmpl.response.classList.add('errcolor') 34 while (page.responses.children.length > 20) page.responses.removeChild(page.respones.lastChild) 35 page.responses.scrollTo(0, 0) 36 } 37 38 const doRequest = async (method, path, opts) => { 39 try { 40 const resp = await requestJSON(method, path, opts) 41 if (opts?.raw) tmpl.response.textContent = resp 42 else writeResult(path, JSON.stringify(resp, null, 4)) 43 } catch (e) { 44 writeResult(path, e.toString(), true) 45 } 46 } 47 48 const get = (path, opts) => doRequest('GET', path, opts) 49 const post = (path, reqBody, contentType) => doRequest('POST', path, { reqBody, contentType }) 50 51 page.assetBttn.addEventListener('click', () => get(`/asset/${page.assetInput.value}`)) 52 page.feeScaleBttn.addEventListener('click', () => get(`/asset/${page.assetInput.value}/setfeescale/${page.feeScaleInput.value}`)) 53 page.configBttn.addEventListener('click', () => get('/config')) 54 page.listAccountsBttn.addEventListener('click', () => get('/accounts')) 55 page.accountInfoBttn.addEventListener('click', () => get(`/account/${page.accountIDInput.value}`)) 56 page.accountOutcomesBttn.addEventListener('click', () => get(`/account/${page.accountIDInput.value}/outcomes?n=100`)) 57 page.matchFailsBttn.addEventListener('click', () => get(`/account/${page.accountIDInput.value}/fails?n=100`)) 58 page.forgiveMatchBttn.addEventListener('click', () => get(`/account/${page.accountIDInput.value}/forgive_match/${page.forgiveMatchIDInput.value}`)) 59 page.notifyAccountBttn.addEventListener('click', () => post(`/account/${page.accountIDInput.value}/notify`, page.notifyAccountInput.value, 'text/plain')) 60 page.broadcastBttn.addEventListener('click', () => post(`/notifyall`, page.broadcastInput.value, 'text/plain')) 61 page.viewMarketsBttn.addEventListener('click', () => get('/markets')) 62 page.marketInfoBttn.addEventListener('click', () => get(`/market/${page.marketIDInput.value}`)) 63 page.marketBookBttn.addEventListener('click', () => get(`/market/${page.marketIDInput.value}/orderbook`)) 64 page.marketEpochBttn.addEventListener('click', () => get(`/market/${page.marketIDInput.value}/epochorders`)) 65 page.marketMatchesBttn.addEventListener('click', () => { 66 const uri = `/market/${page.marketIDInput.value}/matches?n=100&includeinactive=${page.includeInactiveMatches.checked ? 'true' : 'false'}` 67 get(uri, { raw: true }) 68 }) 69 page.suspendTimeCheckbox.addEventListener('change', () => page.suspendTimeInput.classList.toggle('d-none', !page.suspendTimeCheckbox.checked)) 70 page.unsuspendTimeCheckbox.addEventListener('change', () => page.unsuspendTimeInput.classList.toggle('d-none', !page.unsuspendTimeCheckbox.checked)) 71 const susun = (tag, withTime, timeV) => { 72 if (!page.marketIDInput.value) return writeResult('/market', "no market specified", true) 73 if (withTime && timeV === '') return writeResult('/market', "datetime not set", true) 74 const params = new URLSearchParams() 75 if (tag === 'suspend') params.append('persist', `${page.persistBook.checked ? 'true' : 'false'}`) 76 if (withTime && timeV) params.append('t', (new Date(timeV)).getTime()) 77 get(`/market/${page.marketIDInput.value}/${tag}?${params.toString()}`) 78 } 79 page.suspendBttn.addEventListener('click', () => susun('suspend', page.suspendTimeCheckbox.checked, page.suspendTimeInput.value)) 80 page.resumeBttn.addEventListener('click', () => susun('resume', page.unsuspendTimeCheckbox.checked, page.unsuspendTimeInput.value)) 81 page.generatePrepaidBondsBttn.addEventListener('click', () => { 82 const [n, days, strength] = [page.prepaidBondCountInput.value, page.prepaidBondDaysInput.value, page.prepaidBondStrengthInput.value] 83 get(`/prepaybonds?n=${n}&days=${days}&strength=${strength}`) 84 }) 85 })()