Files
insomnia/website/src/fetch.js
T
Gregory Schier 549ce23ce8 Merge All Repositories into Monorepo for easier maintenance (#629)
* All projects into monorepo

* Update CI

* More CI updates

* Extracted a bunch of things into packages

* Publish

 - insomnia-plugin-base64@1.0.1
 - insomnia-plugin-default-headers@1.0.2
 - insomnia-plugin-file@1.0.1
 - insomnia-plugin-hash@1.0.1
 - insomnia-plugin-now@1.0.1
 - insomnia-plugin-request@1.0.1
 - insomnia-plugin-response@1.0.1
 - insomnia-plugin-uuid@1.0.1
 - insomnia-cookies@0.0.2
 - insomnia-importers@1.5.2
 - insomnia-prettify@0.0.3
 - insomnia-url@0.0.2
 - insomnia-xpath@0.0.2

* A bunch of small fixes

* Improved build script

* Fixed

* Merge dangling files

* Usability refactor

* Handle duplicate plugin names
2017-11-26 20:45:40 +00:00

96 lines
2.3 KiB
JavaScript

import 'whatwg-fetch';
import {parse as urlParse} from 'url';
import * as session from './session';
import {version} from '../package.json';
let commandListeners = [];
export function onCommand (callback) {
console.log(`-- Added DB Listener -- `);
commandListeners.push(callback);
}
export function offCommand (callback) {
console.log(`-- Removed DB Listener -- `);
commandListeners = commandListeners.filter(l => l !== callback);
}
export function post (path, obj) {
return _fetch('POST', path, obj)
}
export function patch (path, obj) {
return _fetch('PATCH', path, obj)
}
export function get (path, sessionId = null) {
return _fetch('GET', path, null, sessionId)
}
/** Send an HTTP DELETE request */
export function del (path, sessionId = null) {
return _fetch('DELETE', path, null, sessionId)
}
export function put (path, sessionId = null) {
return _fetch('PUT', path, null, sessionId)
}
async function _fetch (method, path, json, sessionId = null) {
const config = {
method: method,
headers: new Headers()
};
// Set some client information
config.headers.set('X-Insomnia-Client', getClientString());
if (json) {
config.body = JSON.stringify(json, null, 2);
config.headers.set('Content-Type', 'application/json');
}
sessionId = sessionId || session.getCurrentSessionId();
if (sessionId) {
config.headers.set('X-Session-Id', sessionId)
}
const response = await fetch(_getUrl(path), config);
const uri = response.headers.get('x-insomnia-command');
uri && _notifyCommandListeners(uri);
if (!response.ok) {
const err = new Error(`Response ${response.status} for ${path}`);
err.message = await response.text();
err.statusCode = response.status;
throw err
}
if (response.headers.get('content-type') === 'application/json') {
return response.json()
} else {
return response.text()
}
}
function _getUrl (path) {
return `https://api.insomnia.rest${path}`;
}
function _notifyCommandListeners (uri) {
const parsed = urlParse(uri, true);
const command = `${parsed.hostname}${parsed.pathname}`;
const args = JSON.parse(JSON.stringify(parsed.query));
commandListeners.map(fn => fn(command, args));
}
function getClientString () {
return `${isDev() ? 'development': 'production'}::browser::${version}`
}
function isDev () {
return process.env.NODE_ENV !== 'production';
}