forked from nativescript-community/https
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttps.common.ts
More file actions
118 lines (102 loc) · 3.1 KB
/
https.common.ts
File metadata and controls
118 lines (102 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import { Headers, HttpRequestOptions } from "@nativescript/core/http";
import { ImageSource } from "@nativescript/core/image-source";
import { File, knownFolders, path } from "@nativescript/core/file-system";
export interface HttpsSSLPinningOptions {
host: string;
certificate: string;
allowInvalidCertificates?: boolean;
validatesDomainName?: boolean;
commonName?: string;
}
export interface CacheOptions {
diskLocation: string;
diskSize: number;
memorySize?: number;
}
export interface HttpsFormDataParam {
data: any;
parameterName: string;
fileName?: string;
contentType?: string;
}
export interface HttpsRequestObject {
[key: string]:
| string
| number
| boolean
| HttpsRequestObject
| Array<any>
| HttpsFormDataParam;
}
export type CachePolicy = "noCache" | "onlyCache" | "ignoreCache";
export interface HttpsRequestOptions extends HttpRequestOptions {
url: string;
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD";
headers?: Headers;
params?: HttpsRequestObject;
body?: HttpsRequestObject | HttpsFormDataParam[];
content?: string;
/**
* Default 10 (seconds).
*/
timeout?: number;
/**
* On Android large responses may crash the app (fi. https://httpbin.org/bytes/10000).
* By setting this to true and when not using useLegacy, we allow large responses on the main thread (which this plugin currently does).
* Note that once set to true, this policy remains active until the app is killed.
*/
allowLargeResponse?: boolean;
/**
* iOS for now
*/
onProgress?: (current: number, total: number) => void;
cachePolicy?: CachePolicy;
useLegacy?: boolean;
}
export interface HttpsResponse {
headers?: Headers;
statusCode?: number;
content?: any;
reason?: string;
description?: string;
url?: string;
failure?: any;
}
export interface HttpsRequest {
nativeRequest;
cancel();
run(success, failure);
}
export interface HttpsResponseLegacy {
toArrayBuffer(): ArrayBuffer;
toArrayBufferAsync(): Promise<ArrayBuffer>;
toString(): string;
toStringAsync(): Promise<string>;
toJSON(): any;
toJSONAsync(): Promise<any>;
toImage(): Promise<ImageSource>;
// toImageAsync(): Promise<ImageSource>;
toFile(destinationFilePath: string): Promise<File>;
// toFileAsync(destinationFilePath: string): Promise<File>;
}
export function getFilenameFromUrl(url: string) {
const slashPos = url.lastIndexOf("/") + 1;
const questionMarkPos = url.lastIndexOf("?");
let actualFileName: string;
if (questionMarkPos !== -1) {
actualFileName = url.substring(slashPos, questionMarkPos);
} else {
actualFileName = url.substring(slashPos);
}
const result = path.join(knownFolders.documents().path, actualFileName);
return result;
}
export function parseJSON(source: string): any {
const src = source.trim();
if (src.lastIndexOf(")") === src.length - 1) {
return JSON.parse(
src.substring(src.indexOf("(") + 1, src.lastIndexOf(")"))
);
}
return JSON.parse(src);
}