Skip to content

Commit 580c3f1

Browse files
committed
test
1 parent 2355eb0 commit 580c3f1

File tree

7 files changed

+110
-76
lines changed

7 files changed

+110
-76
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@ publish/src
2525
publish/package
2626
demo/report/report.html
2727
demo/report/stats.json
28+
*.aar
29+
/src/pnpm-lock.yaml
30+
package-lock.json

src/https.android.ts

Lines changed: 37 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,24 @@ export function clearCache() {
3737

3838
let _timeout = 10;
3939

40+
class Callback extends com.nativescript.https.OkhttpCallback{
41+
resolve
42+
reject
43+
onStringResponse (content, statusCode, heads) {
44+
let headers = {};
45+
// let heads: okhttp3.Headers = resp.headers();
46+
let i: number, len: number = heads.size();
47+
for (i = 0; i < len; i++) {
48+
let key = heads.name(i);
49+
headers[key] = heads.value(i);
50+
}
51+
this.resolve({content, statusCode, headers});
52+
}
53+
onFailure (task, error) {
54+
this.reject(error);
55+
}
56+
}
57+
4058
export function enableSSLPinning(options: Https.HttpsSSLPinningOptions) {
4159
// console.log('options', options)
4260
if (!peer.host && !peer.certificate) {
@@ -185,12 +203,10 @@ function getClient(reload: boolean = false, timeout: number = 10): okhttp3.OkHtt
185203
Client = client.build();
186204
return Client;
187205
}
188-
189206
export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsResponse> {
190207
return new Promise((resolve, reject) => {
191208
try {
192209
let client = getClient(false, opts.timeout);
193-
194210
let request = new okhttp3.Request.Builder();
195211
request.url(opts.url);
196212

@@ -222,20 +238,25 @@ export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsRes
222238
'PUT': 'put',
223239
'PATCH': 'patch'
224240
};
225-
226-
if ((['GET', 'HEAD'].indexOf(opts.method) !== -1) || (opts.method === 'DELETE' && !isDefined(opts.body))) {
241+
let type
242+
if ((['GET', 'HEAD'].indexOf(opts.method) !== -1) || (opts.method === 'DELETE' && !isDefined(opts.body) && !isDefined(opts.content))) {
227243
request[methods[opts.method]]();
228244
} else {
229-
let type = opts.headers && opts.headers['Content-Type'] ? <string>opts.headers['Content-Type'] : 'application/json';
230-
let body = <any>opts.body || {};
231-
try {
232-
body = JSON.stringify(body);
233-
} catch (ignore) {
245+
type = opts.headers && opts.headers['Content-Type'] ? <string>opts.headers['Content-Type'] : 'application/json';
246+
247+
let body;
248+
if (opts.body) {
249+
try {
250+
body = JSON.stringify(opts.body);
251+
} catch (ignore) {
252+
}
253+
} else if (opts.content) {
254+
body = opts.content
234255
}
235256
request[methods[opts.method]](okhttp3.RequestBody.create(
236-
okhttp3.MediaType.parse(type),
237-
body
238-
));
257+
okhttp3.MediaType.parse(type),
258+
body
259+
));
239260
}
240261

241262
// We have to allow networking on the main thread because larger responses will crash the app with an NetworkOnMainThreadException.
@@ -244,53 +265,10 @@ export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsRes
244265
if (opts.allowLargeResponse) {
245266
android.os.StrictMode.setThreadPolicy(android.os.StrictMode.ThreadPolicy.LAX);
246267
}
247-
248-
client.newCall(request.build()).enqueue(new okhttp3.Callback({
249-
onResponse: (task, response) => {
250-
// console.log('onResponse')
251-
// console.keys('response', response)
252-
// console.log('onResponse > response.isSuccessful()', response.isSuccessful())
253-
254-
// let body = response.body()//.bytes()
255-
// console.keys('body', body)
256-
// console.log('body.contentType()', body.contentType())
257-
// console.log('body.contentType().toString()', body.contentType().toString())
258-
// console.log('body.bytes()', body.bytes())
259-
// console.dump('wtf', wtf)
260-
// console.log('opts.url', opts.url)
261-
// console.log('body.string()', body.string())
262-
263-
// let content: any = response.body().string()
264-
// console.log('content', content)
265-
// try {
266-
// content = JSON.parse(response.body().string())
267-
// } catch (error) {
268-
// return reject(error)
269-
// }
270-
271-
let content = response.body().string();
272-
try {
273-
content = JSON.parse(content);
274-
} catch (e) {
275-
}
276-
277-
let statusCode = response.code();
278-
279-
let headers = {};
280-
let heads: okhttp3.Headers = response.headers();
281-
let i: number, len: number = heads.size();
282-
for (i = 0; i < len; i++) {
283-
let key = heads.name(i);
284-
headers[key] = heads.value(i);
285-
}
286-
287-
resolve({content, statusCode, headers});
288-
},
289-
onFailure: (task, error) => {
290-
reject(error);
291-
},
292-
}));
293-
268+
const callback = new Callback();
269+
callback.resolve = resolve;
270+
callback.reject = reject;
271+
client.newCall(request.build()).enqueue(callback);
294272
} catch (error) {
295273
reject(error);
296274
}

src/https.common.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export interface CacheOptions {
1515
}
1616

1717
export interface HttpsRequestObject {
18-
[key: string]: string | number;
18+
[key: string]: string | number | boolean | HttpsRequestObject | Array<any>;
1919
}
2020

2121

@@ -26,6 +26,7 @@ export interface HttpsRequestOptions {
2626
headers?: Headers;
2727
params?: HttpsRequestObject;
2828
body?: HttpsRequestObject;
29+
content?: string;
2930
/**
3031
* On Android large responses may crash the app (fi. https://httpbin.org/bytes/10000).
3132
* By setting this to true we allow large responses on the main thread (which this plugin currently does).

src/https.ios.ts

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function enableSSLPinning(options: Https.HttpsSSLPinningOptions) {
5353
export function disableSSLPinning() {
5454
policies.secured = false;
5555
console.log('nativescript-https > Disabled SSL pinning');
56-
}
56+
}
5757

5858
console.info('nativescript-https > Disabled SSL pinning by default');
5959

@@ -94,6 +94,24 @@ function AFFailure(resolve, reject, task: NSURLSessionDataTask, error: NSError)
9494
}
9595
}
9696

97+
function bodyToNative(cont) {
98+
let dict;
99+
if (Array.isArray(cont)) {
100+
dict = NSArray.arrayWithArray(cont.map(item=>bodyToNative(item)));
101+
// cont.forEach(function(item, idx) {
102+
// dict.addObject(bodyToNative(item));
103+
// });
104+
} else if (isObject(cont)) {
105+
dict = NSMutableDictionary.new<string, any>();
106+
Object.keys(cont).forEach(key =>
107+
dict.setValueForKey(bodyToNative(cont[key]), key)
108+
);
109+
} else {
110+
dict = cont;
111+
}
112+
return dict;
113+
}
114+
97115
export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsResponse> {
98116
return new Promise((resolve, reject) => {
99117
try {
@@ -133,23 +151,25 @@ export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsRes
133151

134152
let dict = null;
135153
if (opts.body) {
136-
let cont = opts.body;
137-
if (Array.isArray(cont)) {
138-
dict = NSMutableArray.new();
139-
cont.forEach(function(item, idx) {
140-
dict.addObject(item);
141-
});
142-
} else if (isObject(cont)) {
143-
dict = NSMutableDictionary.new<string, any>();
144-
Object.keys(cont).forEach(key => dict.setValueForKey(cont[key] as any, key));
145-
}
154+
dict = bodyToNative(opts.body);
155+
} else if (opts.content) {
156+
dict = opts.content;
146157
}
147158

148159
manager.requestSerializer.timeoutInterval = opts.timeout ? opts.timeout : 10;
149160

150-
const headers = null;
151-
152-
const success = (task: NSURLSessionDataTask, data?: any) => {
161+
let methods = {
162+
GET: "GETParametersSuccessFailure",
163+
POST: "POSTParametersSuccessFailure",
164+
PUT: "PUTParametersSuccessFailure",
165+
DELETE: "DELETEParametersSuccessFailure",
166+
PATCH: "PATCHParametersSuccessFailure",
167+
HEAD: "HEADParametersSuccessFailure",
168+
};
169+
manager[methods[opts.method]](
170+
opts.url,
171+
dict,
172+
function success(task: NSURLSessionDataTask, data: any) {
153173
AFSuccess(resolve, task, data);
154174
};
155175

@@ -173,7 +193,7 @@ export function request(opts: Https.HttpsRequestOptions): Promise<Https.HttpsRes
173193
manager.PATCHParametersHeadersSuccessFailure(opts.url, dict, headers, success, failure);
174194
} else if (opts.method === "HEAD") {
175195
manager.HEADParametersHeadersSuccessFailure(opts.url, dict, headers, success, failure);
176-
}
196+
}
177197

178198

179199
} catch (error) {
@@ -225,4 +245,4 @@ function getData(data) {
225245
content = data;
226246
}
227247
return content;
228-
}
248+
}

src/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ export function enableSSLPinning(options: Https.HttpsSSLPinningOptions);
55
export function disableSSLPinning();
66

77
export function request(options: Https.HttpsRequestOptions): Promise<Https.HttpsResponse>;
8+
export function setCache(options?: Https.CacheOptions)
89

910
export * from './https.common';
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.nativescript.https;
2+
import android.util.Log;
3+
import okhttp3.Callback;
4+
5+
public class OkhttpCallback implements okhttp3.Callback {
6+
final String TAG = "OkhttpCallback";
7+
public void onStringResponse(String responseString, int statusCode, okhttp3.Headers headers) {}
8+
public void onResponse(okhttp3.Call call, okhttp3.Response response ) throws java.io.IOException {
9+
String responseString = null;
10+
Log.d(TAG, "onResponse1: " + ((android.os.Looper.getMainLooper().getThread() == java.lang.Thread.currentThread()) ? "1" : "0"));
11+
okhttp3.ResponseBody responseBody = response.body();
12+
responseString = responseBody.string();
13+
responseBody.close();
14+
Log.d(TAG, "onResponse2");
15+
onStringResponse(responseString, response.code(), response.headers());
16+
}
17+
public void onFailure(okhttp3.Call call, java.io.IOException e) {}
18+
}

src/references.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,16 @@
44
/// <reference path="./platforms/android/typings/okio.d.ts" />
55
/// <reference path="./platforms/android/typings/okhttp3.d.ts" />
66
/// <reference path="./platforms/ios/typings/objc!AFNetworking.d.ts" />
7+
8+
9+
10+
declare namespace com {
11+
export namespace nativescript {
12+
export namespace https {
13+
class OkhttpCallback extends okhttp3.Callback {
14+
public constructor();
15+
onStringResponse( responseString:string, statusCode: number, headers: okhttp3.Headers)
16+
}
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)