Skip to content

Commit

Permalink
feat: Add fetchParameters to configure fetch (#1177)
Browse files Browse the repository at this point in the history
* Add `fetchParameters` to configure `fetch`
* Add referrerPolicy: 'origin'
* Add typescript definition for fetchParameters
  • Loading branch information
RuslanZavacky authored and kamilogorek committed Dec 20, 2017
1 parent bd3bd9d commit f5ddf9e
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 12 deletions.
14 changes: 14 additions & 0 deletions docs/config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,20 @@ Those configuration options are documented below:
}
}
.. describe:: fetchParameters

``fetch()`` init parameters (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters).

Defaults:

.. code-block:: javascript
{
method: 'POST',
credentials: 'include',
keepalive: true,
referrerPolicy: 'origin'
}
.. describe:: allowDuplicates

Expand Down
36 changes: 24 additions & 12 deletions src/raven.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@ function Raven() {
instrument: true,
sampleRate: 1
};
this._fetchDefaults = {
method: 'POST',
credentials: 'include',
keepalive: true,
referrerPolicy: 'origin'
};
this._ignoreOnError = 0;
this._isRavenInstalled = false;
this._originalErrorStackTraceLimit = Error.stackTraceLimit;
Expand Down Expand Up @@ -1903,15 +1909,21 @@ Raven.prototype = {
var url = opts.url + '?' + urlencode(opts.auth);

var evaluatedHeaders = null;
var evaluatedFetchParameters = {};

if (opts.options.headers) {
evaluatedHeaders = this._evaluateHeaders(opts.options.headers);
evaluatedHeaders = this._evaluateHash(opts.options.headers);
}

if (opts.options.fetchParameters) {
evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
}

if (supportsFetch()) {
var fetchOptions = {
method: 'POST',
body: stringify(opts.data)
};
evaluatedFetchParameters.body = stringify(opts.data);

var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);

if (evaluatedHeaders) {
fetchOptions.headers = evaluatedHeaders;
Expand Down Expand Up @@ -1986,17 +1998,17 @@ Raven.prototype = {
request.send(stringify(opts.data));
},

_evaluateHeaders: function(headers) {
var evaluatedHeaders = {};
_evaluateHash: function(hash) {
var evaluated = {};

for (var key in headers) {
if (headers.hasOwnProperty(key)) {
var value = headers[key];
evaluatedHeaders[key] = typeof value === 'function' ? value() : value;
for (var key in hash) {
if (hash.hasOwnProperty(key)) {
var value = hash[key];
evaluated[key] = typeof value === 'function' ? value() : value;
}
}

return evaluatedHeaders;
return evaluated;
},

_logDebug: function(level) {
Expand Down
3 changes: 3 additions & 0 deletions test/raven.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1783,6 +1783,9 @@ describe('globals', function() {
assert.deepEqual(window.fetch.lastCall.args, [
'http://localhost/?a=1&b=2',
{
credentials: 'include',
keepalive: true,
referrerPolicy: 'origin',
method: 'POST',
body: '{"foo":"bar"}'
}
Expand Down
5 changes: 5 additions & 0 deletions typescript/raven.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ declare module Raven {
[key: string]: (string | Function);
};

/** `fetch` init parameters */
fetchParameters?: {
[key: string]: (string | Function);
};

/** Allow use of private/secretKey. */
allowSecretKey?: boolean;

Expand Down

0 comments on commit f5ddf9e

Please sign in to comment.