cap-codepush
Version:
CodePush Plugin for Capacitor. Working with Capacitor 7.
95 lines (84 loc) • 3.33 kB
text/typescript
import { Http } from "code-push/script/acquisition-sdk";
import type { Callback } from "./callbackUtil";
import type { HttpResponse, HttpOptions } from "@capacitor/core";
import { CapacitorHttp as NativeHttp } from "@capacitor/core";
/**
* XMLHttpRequest-based implementation of Http.Requester.
*/
export class HttpRequester implements Http.Requester {
private contentType: string | undefined;
constructor(contentType?: string | undefined) {
this.contentType = contentType;
}
public request(verb: Http.Verb, url: string, callbackOrRequestBody: Callback<Http.Response> | string, callback?: Callback<Http.Response>): void {
var requestBody: any;
var requestCallback: Callback<Http.Response> = callback!;
// request(verb, url, callback)
if (!requestCallback && typeof callbackOrRequestBody === "function") {
requestCallback = <Callback<Http.Response>>callbackOrRequestBody;
}
// request(verb, url, requestBody, callback)
if (typeof callbackOrRequestBody === "string") {
requestBody = <string>callbackOrRequestBody;
}
if (typeof requestBody === "string") {
try {
requestBody = JSON.parse(requestBody); // if it is stringify JSON string, parse
} catch (e) {
// do nothing
}
}
var methodName = this.getHttpMethodName(verb);
if (methodName === null) {
return requestCallback(new Error("Method Not Allowed"), null);
}
const headers: { [key: string]: string } = {
"X-CodePush-Plugin-Name": "cordova-plugin-code-push",
"X-CodePush-Plugin-Version": "1.11.13",
"X-CodePush-SDK-Version": "3.1.5"
};
if (this.contentType) {
headers["Content-Type"] = this.contentType;
}
const options: HttpOptions = {
method: methodName,
url,
headers
};
if (methodName === "GET") {
options.params = requestBody;
} else {
options.data = requestBody;
}
NativeHttp.request(options).then((nativeRes: HttpResponse) => {
if (typeof nativeRes.data === "object") nativeRes.data = JSON.stringify(nativeRes.data);
var response: Http.Response = { statusCode: nativeRes.status, body: nativeRes.data };
requestCallback && requestCallback(null, response);
});
}
/**
* Gets the HTTP method name as a string.
* The reason for which this is needed is because the Http.Verb enum corresponds to integer values from native runtime.
*/
private getHttpMethodName(verb: Http.Verb): string | null {
switch (verb) {
case Http.Verb.GET:
return "GET";
case Http.Verb.DELETE:
return "DELETE";
case Http.Verb.HEAD:
return "HEAD";
case Http.Verb.PATCH:
return "PATCH";
case Http.Verb.POST:
return "POST";
case Http.Verb.PUT:
return "PUT";
case Http.Verb.TRACE:
case Http.Verb.OPTIONS:
case Http.Verb.CONNECT:
default:
return null;
}
}
}