react-native-nitro-net 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +1 -1
  2. package/android/CMakeLists.txt +5 -0
  3. package/android/build.gradle +1 -1
  4. package/lib/Driver.d.ts +1 -0
  5. package/lib/Driver.d.ts.map +1 -0
  6. package/lib/Driver.js +2 -5
  7. package/lib/Net.nitro.d.ts +1 -0
  8. package/lib/Net.nitro.d.ts.map +1 -0
  9. package/lib/Net.nitro.js +4 -7
  10. package/lib/http.d.ts +2 -1
  11. package/lib/http.d.ts.map +1 -0
  12. package/lib/http.js +56 -61
  13. package/lib/https.d.ts +1 -0
  14. package/lib/https.d.ts.map +1 -0
  15. package/lib/https.js +11 -53
  16. package/lib/index.d.ts +41 -198
  17. package/lib/index.d.ts.map +1 -0
  18. package/lib/index.js +11 -928
  19. package/lib/net.d.ts +197 -0
  20. package/lib/net.d.ts.map +1 -0
  21. package/lib/net.js +875 -0
  22. package/lib/tls.d.ts +2 -1
  23. package/lib/tls.d.ts.map +1 -0
  24. package/lib/tls.js +35 -51
  25. package/nitrogen/generated/android/RustCNet+autolinking.cmake +1 -1
  26. package/nitrogen/generated/android/RustCNet+autolinking.gradle +1 -1
  27. package/nitrogen/generated/android/RustCNetOnLoad.cpp +1 -1
  28. package/nitrogen/generated/android/RustCNetOnLoad.hpp +1 -1
  29. package/nitrogen/generated/android/c++/JFunc_void_double_std__shared_ptr_ArrayBuffer_.hpp +1 -1
  30. package/nitrogen/generated/android/c++/JHybridHttpParserSpec.cpp +1 -1
  31. package/nitrogen/generated/android/c++/JHybridHttpParserSpec.hpp +1 -1
  32. package/nitrogen/generated/android/c++/JHybridNetDriverSpec.cpp +1 -1
  33. package/nitrogen/generated/android/c++/JHybridNetDriverSpec.hpp +1 -1
  34. package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.cpp +1 -1
  35. package/nitrogen/generated/android/c++/JHybridNetServerDriverSpec.hpp +1 -1
  36. package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.cpp +1 -1
  37. package/nitrogen/generated/android/c++/JHybridNetSocketDriverSpec.hpp +1 -1
  38. package/nitrogen/generated/android/c++/JNetConfig.hpp +1 -1
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/Func_void_double_std__shared_ptr_ArrayBuffer_.kt +1 -1
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridHttpParserSpec.kt +1 -1
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetDriverSpec.kt +1 -1
  42. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetServerDriverSpec.kt +1 -1
  43. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/HybridNetSocketDriverSpec.kt +1 -1
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/NetConfig.kt +1 -1
  45. package/nitrogen/generated/android/kotlin/com/margelo/nitro/net/RustCNetOnLoad.kt +1 -1
  46. package/nitrogen/generated/ios/RustCNet+autolinking.rb +1 -1
  47. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.cpp +1 -1
  48. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Bridge.hpp +1 -1
  49. package/nitrogen/generated/ios/RustCNet-Swift-Cxx-Umbrella.hpp +1 -1
  50. package/nitrogen/generated/ios/RustCNetAutolinking.mm +1 -1
  51. package/nitrogen/generated/ios/RustCNetAutolinking.swift +1 -1
  52. package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.cpp +1 -1
  53. package/nitrogen/generated/ios/c++/HybridHttpParserSpecSwift.hpp +1 -1
  54. package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.cpp +1 -1
  55. package/nitrogen/generated/ios/c++/HybridNetDriverSpecSwift.hpp +1 -1
  56. package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.cpp +1 -1
  57. package/nitrogen/generated/ios/c++/HybridNetServerDriverSpecSwift.hpp +1 -1
  58. package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.cpp +1 -1
  59. package/nitrogen/generated/ios/c++/HybridNetSocketDriverSpecSwift.hpp +1 -1
  60. package/nitrogen/generated/ios/swift/Func_void_double_std__shared_ptr_ArrayBuffer_.swift +1 -1
  61. package/nitrogen/generated/ios/swift/HybridHttpParserSpec.swift +1 -1
  62. package/nitrogen/generated/ios/swift/HybridHttpParserSpec_cxx.swift +1 -1
  63. package/nitrogen/generated/ios/swift/HybridNetDriverSpec.swift +1 -1
  64. package/nitrogen/generated/ios/swift/HybridNetDriverSpec_cxx.swift +1 -1
  65. package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec.swift +1 -1
  66. package/nitrogen/generated/ios/swift/HybridNetServerDriverSpec_cxx.swift +1 -1
  67. package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec.swift +1 -1
  68. package/nitrogen/generated/ios/swift/HybridNetSocketDriverSpec_cxx.swift +1 -1
  69. package/nitrogen/generated/ios/swift/NetConfig.swift +1 -1
  70. package/nitrogen/generated/shared/c++/HybridHttpParserSpec.cpp +1 -1
  71. package/nitrogen/generated/shared/c++/HybridHttpParserSpec.hpp +1 -1
  72. package/nitrogen/generated/shared/c++/HybridNetDriverSpec.cpp +1 -1
  73. package/nitrogen/generated/shared/c++/HybridNetDriverSpec.hpp +1 -1
  74. package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.cpp +1 -1
  75. package/nitrogen/generated/shared/c++/HybridNetServerDriverSpec.hpp +1 -1
  76. package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.cpp +1 -1
  77. package/nitrogen/generated/shared/c++/HybridNetSocketDriverSpec.hpp +1 -1
  78. package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.cpp +1 -1
  79. package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.hpp +1 -1
  80. package/nitrogen/generated/shared/c++/NetConfig.hpp +1 -1
  81. package/package.json +7 -5
  82. package/src/http.ts +18 -12
  83. package/src/https.ts +0 -2
  84. package/src/index.ts +13 -1005
  85. package/src/net.ts +1005 -0
  86. package/src/tls.ts +1 -1
@@ -2,7 +2,7 @@
2
2
  /// HybridNetDriverSpec_cxx.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  import Foundation
@@ -2,7 +2,7 @@
2
2
  /// HybridNetServerDriverSpec.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  import Foundation
@@ -2,7 +2,7 @@
2
2
  /// HybridNetServerDriverSpec_cxx.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  import Foundation
@@ -2,7 +2,7 @@
2
2
  /// HybridNetSocketDriverSpec.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  import Foundation
@@ -2,7 +2,7 @@
2
2
  /// HybridNetSocketDriverSpec_cxx.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  import Foundation
@@ -2,7 +2,7 @@
2
2
  /// NetConfig.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  import Foundation
@@ -2,7 +2,7 @@
2
2
  /// HybridHttpParserSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "HybridHttpParserSpec.hpp"
@@ -2,7 +2,7 @@
2
2
  /// HybridHttpParserSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// HybridNetDriverSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "HybridNetDriverSpec.hpp"
@@ -2,7 +2,7 @@
2
2
  /// HybridNetDriverSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// HybridNetServerDriverSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "HybridNetServerDriverSpec.hpp"
@@ -2,7 +2,7 @@
2
2
  /// HybridNetServerDriverSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// HybridNetSocketDriverSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "HybridNetSocketDriverSpec.hpp"
@@ -2,7 +2,7 @@
2
2
  /// HybridNetSocketDriverSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// HybridNitroBufferSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "HybridNitroBufferSpec.hpp"
@@ -2,7 +2,7 @@
2
2
  /// HybridNitroBufferSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// NetConfig.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "react-native-nitro-net",
3
3
  "description": "Ultra-high-performance networking to React Native by combining a memory-safe Rust core with the zero-overhead Nitro Modules JSI bridge. Provides Node.js-compatible net, tls, http(s) API.",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
+ "type": "module",
5
6
  "main": "./lib/index.js",
6
7
  "module": "./lib/index.js",
7
8
  "types": "./lib/index.d.ts",
@@ -28,13 +29,14 @@
28
29
  "one": "yarn copy-clib && yarn build && yarn pack",
29
30
  "build": "npx nitrogen@0.32.0 && tsc",
30
31
  "prepare": "npm run build",
31
- "copy-clib": "rm -rf ios/Frameworks/RustCNet.xcframework && cp -R ../rust_c_net/target/xcframework/RustCNet.xcframework ios/Frameworks/ && mkdir -p android/libs/arm64-v8a android/libs/armeabi-v7a android/libs/x86 android/libs/x86_64 && cp ../rust_c_net/target/aarch64-linux-android/release/librust_c_net.so android/libs/arm64-v8a/ && cp ../rust_c_net/target/armv7-linux-androideabi/release/librust_c_net.so android/libs/armeabi-v7a/ && cp ../rust_c_net/target/i686-linux-android/release/librust_c_net.so android/libs/x86/ && cp ../rust_c_net/target/x86_64-linux-android/release/librust_c_net.so android/libs/x86_64/ && cp ../rust_c_net/include/NetBindings.hpp cpp/",
32
- "copy-clib-android": "cp ../rust_c_net/target/aarch64-linux-android/release/librust_c_net.so android/libs/arm64-v8a/ && cp ../rust_c_net/target/armv7-linux-androideabi/release/librust_c_net.so android/libs/armeabi-v7a/ && cp ../rust_c_net/target/i686-linux-android/release/librust_c_net.so android/libs/x86/ && cp ../rust_c_net/target/x86_64-linux-android/release/librust_c_net.so android/libs/x86_64/ && cp ../rust_c_net/include/NetBindings.hpp cpp/",
33
- "copy-clib-ios": "rm -rf ios/Frameworks/RustCNet.xcframework && cp -R ../rust_c_net/target/xcframework/RustCNet.xcframework ios/Frameworks/"
32
+ "copy-clib": "npm run copy-clib-android && npm run copy-clib-ios && npm run copy-clib-mac",
33
+ "copy-clib-android": "mkdir -p android/libs/arm64-v8a android/libs/armeabi-v7a android/libs/x86 android/libs/x86_64 && cp ../rust_c_net/target/aarch64-linux-android/release/librust_c_net.so android/libs/arm64-v8a/ && cp ../rust_c_net/target/armv7-linux-androideabi/release/librust_c_net.so android/libs/armeabi-v7a/ && cp ../rust_c_net/target/i686-linux-android/release/librust_c_net.so android/libs/x86/ && cp ../rust_c_net/target/x86_64-linux-android/release/librust_c_net.so android/libs/x86_64/ && cp ../rust_c_net/include/NetBindings.hpp cpp/",
34
+ "copy-clib-ios": "rm -rf ios/Frameworks/RustCNet.xcframework && cp -R ../rust_c_net/target/xcframework/RustCNet.xcframework ios/Frameworks/",
35
+ "copy-clib-mac": "mkdir -p mac && cp ../rust_c_net/target/release/librust_c_net.a mac/ && cp ../rust_c_net/include/NetBindings.hpp cpp/"
34
36
  },
35
37
  "dependencies": {
36
38
  "eventemitter3": "^5.0.1",
37
- "react-native-nitro-buffer": "^0.0.13",
39
+ "react-native-nitro-buffer": "~0.0.14",
38
40
  "readable-stream": "^4.7.0"
39
41
  },
40
42
  "devDependencies": {
package/src/http.ts CHANGED
@@ -1,15 +1,14 @@
1
- import { Duplex, Writable, Readable } from 'readable-stream'
1
+ import { Writable, Readable } from 'readable-stream'
2
2
  import { EventEmitter } from 'eventemitter3'
3
3
  import { Driver } from './Driver'
4
- import { Socket, isVerbose } from './index'
4
+ import { Socket, isVerbose } from './net'
5
5
  import { TLSSocket } from './tls'
6
6
  import { Buffer } from 'react-native-nitro-buffer'
7
- import type { HttpParser } from './Net.nitro'
8
7
 
9
8
  function debugLog(message: string) {
10
9
  if (isVerbose()) {
11
10
  const timestamp = new Date().toISOString().split('T')[1].split('Z')[0];
12
- console.log(`[HTTP DEBUG ${timestamp}] ${message}`);
11
+ debugLog(`[HTTP DEBUG ${timestamp}] ${message}`);
13
12
  }
14
13
  }
15
14
 
@@ -418,7 +417,7 @@ export class Server extends EventEmitter {
418
417
  constructor(options?: ServerOptions | ((req: IncomingMessage, res: ServerResponse) => void), requestListener?: (req: IncomingMessage, res: ServerResponse) => void) {
419
418
  super();
420
419
  // Use net.Server from index.ts
421
- const { Server: NetServer } = require('./index');
420
+ const { Server: NetServer } = require('./net');
422
421
  this._netServer = new NetServer();
423
422
 
424
423
  let listener: ((req: IncomingMessage, res: ServerResponse) => void) | undefined;
@@ -573,7 +572,7 @@ export class Server extends EventEmitter {
573
572
  if (!result || result === '' || result.startsWith('ERROR:')) {
574
573
  // Empty result (partial) or error - exit loop
575
574
  if (result && result.startsWith('ERROR:')) {
576
- console.log(`[HTTP] Server: Parser error: ${result}`);
575
+ debugLog(`[HTTP] Server: Parser error: ${result}`);
577
576
  }
578
577
  break;
579
578
  }
@@ -987,7 +986,7 @@ export class ClientRequest extends OutgoingMessage {
987
986
  this.socket = socket;
988
987
  this._connected = true;
989
988
  this.emit('socket', this.socket);
990
- this._sendRequest();
989
+ // DO NOT call _sendRequest() here. Headers should only be sent once write() or end() is called.
991
990
  this._flushPendingWrites();
992
991
  this._attachSocketListeners();
993
992
  } else {
@@ -1005,7 +1004,7 @@ export class ClientRequest extends OutgoingMessage {
1005
1004
  return;
1006
1005
  }
1007
1006
  debugLog(`ClientRequest._connect: Socket connected! socket=${!!socket}, socket._driver=${!!(socket as any)._driver}`);
1008
- console.log(`[HTTP] _connect: Socket connected!`);
1007
+ debugLog(`[HTTP] _connect: Socket connected!`);
1009
1008
  this.socket = socket;
1010
1009
  this._connected = true;
1011
1010
  this.emit('socket', this.socket);
@@ -1031,7 +1030,7 @@ export class ClientRequest extends OutgoingMessage {
1031
1030
  return;
1032
1031
  }
1033
1032
  const parsed = JSON.parse(result);
1034
- console.log(`[HTTP] _connect: Parser result: ${parsed.is_headers ? 'HEADERS' : 'DATA'}${parsed.complete ? ' (COMPLETE)' : ''}`);
1033
+ debugLog(`[HTTP] _connect: Parser result: ${parsed.is_headers ? 'HEADERS' : 'DATA'}${parsed.complete ? ' (COMPLETE)' : ''}`);
1035
1034
 
1036
1035
  if (parsed.is_headers) {
1037
1036
  const status = parsed.status || 0;
@@ -1103,7 +1102,7 @@ export class ClientRequest extends OutgoingMessage {
1103
1102
  if (!result || result === '' || result.startsWith('ERROR:')) {
1104
1103
  // Empty result (partial) or error - exit loop
1105
1104
  if (result && result.startsWith('ERROR:')) {
1106
- console.log(`[HTTP] ClientRequest: Parser error: ${result}`);
1105
+ debugLog(`[HTTP] ClientRequest: Parser error: ${result}`);
1107
1106
  }
1108
1107
  break;
1109
1108
  }
@@ -1113,13 +1112,13 @@ export class ClientRequest extends OutgoingMessage {
1113
1112
  };
1114
1113
 
1115
1114
  const onError = (err: Error) => {
1116
- console.log(`[HTTP] _connect: Socket error: ${err.message}`);
1115
+ debugLog(`[HTTP] _connect: Socket error: ${err.message}`);
1117
1116
  this.emit('error', err);
1118
1117
  this._cleanupSocket();
1119
1118
  };
1120
1119
 
1121
1120
  const onClose = () => {
1122
- console.log(`[HTTP] _connect: Socket closed`);
1121
+ debugLog(`[HTTP] _connect: Socket closed`);
1123
1122
  if (this._res && !this._res.readableEnded) this._res.push(null);
1124
1123
  this.emit('close');
1125
1124
  this._cleanupSocket();
@@ -1190,6 +1189,7 @@ export class ClientRequest extends OutgoingMessage {
1190
1189
  }
1191
1190
 
1192
1191
  _write(chunk: any, encoding: string, callback: (error?: Error | null) => void) {
1192
+ this._hasBody = true;
1193
1193
  if (!this._connected) {
1194
1194
  this._pendingWrites.push({ chunk, encoding, callback });
1195
1195
  return;
@@ -1199,6 +1199,7 @@ export class ClientRequest extends OutgoingMessage {
1199
1199
  }
1200
1200
 
1201
1201
  write(chunk: any, encoding?: any, callback?: any): boolean {
1202
+ this._hasBody = true;
1202
1203
  if (!this._connected) {
1203
1204
  this._pendingWrites.push({ chunk, encoding, callback });
1204
1205
  return true;
@@ -1210,6 +1211,11 @@ export class ClientRequest extends OutgoingMessage {
1210
1211
  end(chunk?: any, encoding?: any, callback?: any): this {
1211
1212
  debugLog(`ClientRequest.end() called, connected=${this._connected}, headersSent=${this.headersSent}`);
1212
1213
  if (chunk) {
1214
+ this._hasBody = true;
1215
+ if (!this.headersSent && !this.hasHeader('Content-Length')) {
1216
+ const len = typeof chunk === 'string' ? Buffer.byteLength(chunk, encoding as any) : chunk.length;
1217
+ this.setHeader('Content-Length', len);
1218
+ }
1213
1219
  this.write(chunk, encoding);
1214
1220
  }
1215
1221
  this._ended = true;
package/src/https.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import * as http from './http'
2
2
  import * as tls from './tls'
3
- import { Driver } from './Driver'
4
- import { Buffer } from 'react-native-nitro-buffer'
5
3
  import { IncomingMessage } from './http'
6
4
 
7
5
  // ========== Server ==========