Files
insomnia/app/common/fetch.js
T
Gregory Schier d675222bdd Merge develop for 5.1.0 (#246)
* Add Slack badge to README

* Add Twitter badge

* Appveyor badge

* Fix badges again on README

* Fix Twitter badge link

* Simplify README.md

* Migrate Travis secure items to Travis project settings (#198)

* Remove docker linux build (using Travis now) (#199)

* Fix travis build

* Update Issue and PR templates (#200)

* Add template for future pull requests

* Format issue template like pull request template

* Will not clear selected file if dialog is dismissed (#202)

* #183, Body type "Text -> Other" reverts to previous body type (#193)

* ISSUE#183

* Adding condition to check mime-type to other

* Removing older changes for fixing issue.

* Save full response to a file (#207)

* Save full response to a file

* Add a new button on the response preview pane
* Save full response to file when button clicked

* Update after PR comments

* It's a Response, not a Request

* Remove file extension requirement

* Implement lazy tag rendering and some fixes (#211)

* expanding to 3 decimals (#213)

* Update PULL_REQUEST_TEMPLATE.md (#214)

* Show build info in console (#216)

* Add waiting message in dev mode while webpack compile happens

* Switch license from GPL to AGPL (#221)

* Default remote URLs to production

* Don't use Curl's cookie handling (#220)

* Some improvements to the response tag

* Add tests for XPath response queries

* Refactor conditional element syntax

* Add option to toggle Menu Bar showing for Windows/Linux (#225)

* Add option to toggle MenuBar showing on Windows/Linux

* Extract Toggling Menu Bar functionality to App Container. Default show Menu Bar. Remove tip from Response Pane.

* Finalize {% response ... %} Tag (#224)

* Some improvements to the response tag

* Add tests for XPath response queries

* Refactor conditional element syntax

* Update nunjucks-tags.js

* Better Nunjucks Tag Editor (#234)

* Helper to tokenize Nunjucks tag

* More granular types

* Add tag definitions

* Improve editor to be more WYSIWYG

* Fixed tests

* Added raw response tag

* A few improvements to tag editor enum

* fix NTLM typo (#244)

* Tweaks and fixes for next release (#245)
2017-05-24 09:25:22 -07:00

85 lines
2.1 KiB
JavaScript

import 'whatwg-fetch';
import {parse as urlParse} from 'url';
import {getClientString} from './constants';
import * as session from '../sync/session';
let commandListeners = [];
export function onCommand (callback) {
commandListeners.push(callback);
}
export function offCommand (callback) {
commandListeners = commandListeners.filter(l => l !== callback);
}
export function post (path, obj) {
return _fetch('POST', path, obj);
}
export function get (path, sessionId = null) {
return _fetch('GET', path, null, sessionId);
}
export function del (path, sessionId = null) {
return _fetch('DELETE', path, null, sessionId);
}
export function put (path, sessionId = null) {
return _fetch('PUT', path, null, sessionId);
}
export function rawFetch (...args) {
return window.fetch(...args);
}
async function _fetch (method, path, json, sessionId = null) {
const config = {
method: method,
headers: new window.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 window.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) {
const baseUrl = process.env.INSOMNIA_SYNC_URL || 'https://api.insomnia.rest';
return `${baseUrl}${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));
}