1"use strict";
2/**
3 * Copyright (c) 650 Industries.
4 * Copyright (c) Facebook, Inc. and its affiliates.
5 *
6 * This source code is licensed under the MIT license found in the
7 * LICENSE file in the root directory of this source tree.
8 */
9var __importDefault = (this && this.__importDefault) || function (mod) {
10    return (mod && mod.__esModule) ? mod : { "default": mod };
11};
12Object.defineProperty(exports, "__esModule", { value: true });
13exports.fetchAsync = void 0;
14const react_native_1 = require("react-native");
15// @ts-expect-error
16const RCTNetworking_1 = __importDefault(require("react-native/Libraries/Network/RCTNetworking"));
17function fetchAsync(url) {
18    let id = null;
19    let responseText = null;
20    let headers = {};
21    let dataListener = null;
22    let completeListener = null;
23    let responseListener = null;
24    return new Promise((resolve, reject) => {
25        const addListener = RCTNetworking_1.default.addListener;
26        dataListener = addListener('didReceiveNetworkData', ([requestId, response]) => {
27            if (requestId === id) {
28                responseText = response;
29            }
30        });
31        responseListener = addListener('didReceiveNetworkResponse', ([requestId, status, responseHeaders]) => {
32            if (requestId === id) {
33                headers = responseHeaders;
34            }
35        });
36        completeListener = addListener('didCompleteNetworkResponse', ([requestId, error]) => {
37            if (requestId === id) {
38                if (error) {
39                    reject(error);
40                }
41                else {
42                    resolve({ body: responseText, headers });
43                }
44            }
45        });
46        RCTNetworking_1.default.sendRequest('GET', 'asyncRequest', url, {
47            'expo-platform': react_native_1.Platform.OS,
48        }, '', 'text', false, 0, (requestId) => {
49            id = requestId;
50        }, true);
51    }).finally(() => {
52        dataListener?.remove();
53        completeListener?.remove();
54        responseListener?.remove();
55    });
56}
57exports.fetchAsync = fetchAsync;
58//# sourceMappingURL=fetchAsync.native.js.map