pusher-js
Version:
Pusher Channels JavaScript library for browsers, React Native, NodeJS and web workers
58 lines (52 loc) • 1.57 kB
text/typescript
import AbstractRuntime from 'runtimes/interface';
import { AuthTransport } from 'core/auth/auth_transports';
import { AuthorizerCallback, AuthData } from 'core/auth/options';
import { HTTPAuthError } from 'core/errors';
var fetchAuth: AuthTransport = function(
context: AbstractRuntime,
socketId: string,
callback: AuthorizerCallback
) {
var headers = new Headers();
headers.set('Content-Type', 'application/x-www-form-urlencoded');
for (var headerName in this.authOptions.headers) {
headers.set(headerName, this.authOptions.headers[headerName]);
}
var body = this.composeQuery(socketId);
var request = new Request(this.options.authEndpoint, {
headers,
body,
credentials: 'same-origin',
method: 'POST'
});
return fetch(request)
.then(response => {
let { status } = response;
if (status === 200) {
// manually parse the json so we can provide a more helpful error in
// failure case
return response.text();
}
throw new HTTPAuthError(
200,
`Could not get auth info from your auth endpoint, status: ${status}`
);
})
.then(data => {
let parsedData: AuthData;
try {
parsedData = JSON.parse(data);
} catch (e) {
throw new HTTPAuthError(
200,
'JSON returned from auth endpoint was invalid, yet status code was 200. Data was: ' +
data
);
}
callback(null, parsedData);
})
.catch(err => {
callback(err, { auth: '' });
});
};
export default fetchAuth;