pusher-js
Version:
Pusher Channels JavaScript library for browsers, React Native, NodeJS and web workers
70 lines (63 loc) • 1.9 kB
text/typescript
import AbstractRuntime from 'runtimes/interface';
import { AuthTransport } from 'core/auth/auth_transports';
import {
AuthRequestType,
AuthTransportCallback,
InternalAuthOptions,
} from 'core/auth/options';
import { HTTPAuthError } from 'core/errors';
var fetchAuth: AuthTransport = function (
context: AbstractRuntime,
query: string,
authOptions: InternalAuthOptions,
authRequestType: AuthRequestType,
callback: AuthTransportCallback,
) {
var headers = new Headers();
headers.set('Content-Type', 'application/x-www-form-urlencoded');
for (var headerName in authOptions.headers) {
headers.set(headerName, authOptions.headers[headerName]);
}
if (authOptions.headersProvider != null) {
const dynamicHeaders = authOptions.headersProvider();
for (var headerName in dynamicHeaders) {
headers.set(headerName, dynamicHeaders[headerName]);
}
}
var body = query;
var request = new Request(authOptions.endpoint, {
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(
status,
`Could not get ${authRequestType.toString()} info from your auth endpoint, status: ${status}`,
);
})
.then((data) => {
let parsedData;
try {
parsedData = JSON.parse(data);
} catch (e) {
throw new HTTPAuthError(
200,
`JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${data}`,
);
}
callback(null, parsedData);
})
.catch((err) => {
callback(err, null);
});
};
export default fetchAuth;