UNPKG

@68publishers/amp-client

Version:

JS Client for 68publishers/amp

49 lines (38 loc) 1.43 kB
import { AbstractGateway } from './abstract-gateway.mjs'; import { default as querystring } from 'query-string'; export class DefaultGateway extends AbstractGateway { fetch(request, success, error) { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { if (XMLHttpRequest.DONE !== xhr.readyState || 0 === xhr.status) { return false; } const response = JSON.parse(xhr.responseText); if (200 <= xhr.status && 300 > xhr.status) { success(response); } else { error(response); } }; xhr.onerror = () => { error({ status: 'error', data: { code: xhr.status, error: xhr.statusText || 'unknown', }, }); }; let endpoint = request.endpoint; if ('GET' === request.method) { endpoint += `?${querystring.stringify(request.parameters)}`; } xhr.open(request.method, endpoint, true); xhr.overrideMimeType('application/json'); xhr.setRequestHeader('Accept', 'application/json'); for (let header of request.headers) { xhr.setRequestHeader(header.name, header.value); } xhr.send('POST' === request.method ? JSON.stringify(request.parameters) : null); } }