All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- curly - use default content-type when there are no headers #410 by @liamdiprose
- Added prebuilt binaries for Node.js 22, Electron 33, Electron 32, and Electron 31
Besides possible security patches, this will be the last minor release in the v4 series. For v5, I am currently planning to work on this:
- Migrate to N-API, which will allow us to support newer Node.js versions more easily.
- Drop support for Node.js < 22.
- Drop support for building with libcurl < 8.0.
- Drop x86 support.
- Support ES modules.
- Mininum supported Node.js version is now Node.js 16.14.
- The prebuilt binaries are only available on:
- Node.js 18, 20, and 21
- Electron 27, 27, and 28
- NW.js binaries were removed, and may be re-introduced in the future.
3.0.0 - 2022-11-17
- The supported engines of Node.js were bumped to:
^14.14 || >=16
. - The supported versions of Electron now are:
v21
,v20
,v19
,v18
, andv17
. - The node-gyp package has been bumped, which means Python 3.0 is now required to build from source.
- Minimum c++ version your compiler needs to support is now
c++17
. - The minimum macOS version is now Big Sur (11.6)
- The prebuilt binaries on glibc Linux are now built on Ubuntu 20.04.
- The prebuilt binaries on musl Linux (Alpine) are now built on Alpine 3.16.
- The prebuilt binaries on Windows are now built with Visual Studio 2019.
- There are no prebuilt binaries for NW.js anymore. This is because nw-gyp does not support Python 3 currently.
- Option types for
CURLOPT_FTP_RESPONSE_TIMEOUT
has been removed, since libcurl 7.20 it was the same asCURLOPT_SERVER_RESPONSE_TIMEOUT
.
- Add support for the following options:
- Add support for the following info options:
- Upgraded prebuild binaries to use libcurl 7.86.0. On Windows, OpenSSL 3.0.7 will be used.
2.3.4 - 2022-01-29
- support
curl_blob
options #300 by @johnwchadwick - added arm64 builds for macOS #312 by @johnwchadwick
- added most options that were missing up xto libcurl version 7.79.1, including HSTS support.
- added prebuilt binaries for Node.js v17.
- Upgraded prebuild binaries to use libcurl 7.79.1. On Windows, OpenSSL 3.0.0 will be used.
- The only Electron versions with prebuilt binaries are:
16
,15
,14
,13
,12
, and11
. - The only Nwjs versions with prebuilt binaries are:
0.58
,0.57
, and0.56
.
2.3.3 - 2021-05-09
- Fix support for Node.js v16
2.3.2 - 2021-03-24
- The prebuilt binaries are not build with c-ares anymore, for reasoning see issue #280.
c-ares was included in the prebuilt binaries starting with
2.3.0
.
2.3.1 - 2021-03-09
The yes, curly
is still experimental release. 😅
If you are using curly
in your project, and you want to share any feedback about it, please post them in our Discord. I would love to read and discuss it!
- Fixed not building zstd lib statically. #274
- Fixed download streams not working with responses that did not include a body. #271
- Added prebuilt binaries for: Node.js 15, Electron v11, Electron v12, Nwjs 0.49.2, Nwjs 0.51.2, and Nwjs 0.52.0.
- Building the addon from source now requires a C++ compiler with support for c++1z (c++17).
- Removed prebuilt binaries for: Node.js 10, Electron v5, Electron v6, Electron v7, Nwjs v0.43, and Nwjs v0.44.
2.3.0 - 2020-11-15
Probably the last release that curly
is considered experimental.
-
curly
(andcurly.<method>
) is now able to automatically parse the response body based on the content-type header of the response. #240
Default parsers forapplication/json
(callsJSON.parse
) andtext/*
(converts the rawBuffer
to a string withutf8
encoding) were added. This means that for responses without a matching content-type the rawBuffer
will be returned. This is different from the previous behavior where a string would always be returned. The default parsers can be overwritten by settingcurly.defaultResponseBodyParsers
to an object with the format:{ 'content-type': (data: Buffer, headers: HeaderInfo[]) => any }
Where
content-type
can be one of these:- the exact content-type.
- a pattern using
*
to match specific parts of the content-type, liketext/*
. - a catch-all pattern: just
*
.
You can also override the parsers using the following options:
curlyResponseBodyParsers
object that will be merged withdefaultResponseBodyParsers
.curlyResponseBodyParser
a parser that will be used for all responses.
It's also possible to set
curlyResponseBodyParser
tofalse
and the data returned will always be the rawBuffer
.Of course, it is still possible to use your own
writeFunction
(libcurlCURLOPT_WRITEFUNCTION
option) to set your own write callback and not rely on this default handling of the response.
As curly
is marked as experimental, this allows us to do a breaking change in a minor version bump. This release should make the curly API more stable and provide a better developer experience, however, the API remains experimental.
- Some
curly.<method>
calls not working correctly, to be more specific, all calls that were notget
,post
andhead
. - Errors thrown by the internal
Curl
instance used bycurly
not being re-thrown correctly. - Progress callbacks were not allowing to use default libcurl progress meter (by returning
CurlProgressFunc.Continue
).
- Calling
curly.create(options)
will now return a newcurly
object that will use the passedoptions
as defaults. #247 - TypeScript:
curly
(andcurly.<method>
) now accepts a generic type parameter which will be the type of thedata
returned. By default, this is set toany
. - Added new options to the
curly
API:curlyBaseUrl: string
, if set, their value will always be added as the prefix for the URL.curlyLowerCaseHeaders: boolean
, if set to true, headers will be returned in lower case. Defaults to false. #240
- Added new methods and
CurlFeature
allowing the use of streams to upload and download data without having to setWRITEFUNCTION
and/orREADFUNCTION
manually. #237Curl.setUploadStream
Curl.setStreamProgress
Curl.setStreamResponseHighWaterMark
CurlFeature.StreamResponse
New options were also added to thecurly
API:curlyProgressCallback
curlyStreamResponse
curlyStreamResponseHighWaterMark
curlyStreamUpload
These new features related to streams are only reliable when using a libcurl version >= 7.69.1.
- Support libcurl info
CURLINFO_CERTINFO
. Can be retrieved usinggetInfo("CERTINFO")
. Thanks to @Sergey-Mityukov for most of the work on this. - Support libcurl info
CURLINFO_EFFECTIVE_METHOD
. Requires libcurl >= 7.72.0. - Support libcurl info
CURLINFO_PROXY_ERROR
. UseCurlPx
for constants. Requires libcurl >= 7.73.0. - Support libcurl option
CURLOPT_SSL_EC_CURVES
. Requires libcurl >= 7.73.0. - Added prebuilt binaries for Electron v10.1
- The libcurl version being used by prebuilt binaries is now 7.73.0 and it's now built with c-ares.
curly
now has 100% code coverage.
- Removed prebuilt binaries for: Electron v3, Electron v4, Nwjs v0.42, and Nwjs v0.43
2.2.0 - 2020-07-14
- Fix
curly.get
not working correctly (#230) - Fix not resetting
CURLOPT_TRAILERDATA
when duplicating anEasy
instance (7bf3a51)
- Added initial support to the
CURLMOPT_PUSHFUNCTION
libcurl multi option. (#232) (b8d0fac) - Added
private
member to theEasyNativeBinding
typescript class, you can set this value on theEasy
instances to anything, and Typescript should not complain. - Adde prebuilt binaries for Electron v9
- Improved Typescript types / documentation for some libcurl options. (63a71b7)
2.1.3 - 2020-06-02
v2.1.2
had a caching issue on during the dist files generation, which caused it to not build some required files.
2.1.2 - 2020-06-01
- Fix
curly.post
andcurly.head
using wrong libcurl options to set the HTTP Method. - Fix
postinstall
script not working properly. - Setting the
HTTPPOST
option tonull
would, wrongly, throw an Error. - Setting any string option to
null
would, wrongly, throw an Error.
- We now have API docs! 🥳 http://jcmais.github.io/node-libcurl/modules/_index_.html Thanks to typedoc
- Added back prebuilt binaries for:
- Electron v3, v4 and v5
- Added
isMonitoringSockets
boolean readonly property toEasy
instances, it istrue
whenmonitorSocketEvents
has been called on thatEasy
instance. - Added
CurlVersion
enum to be used with therawFeatures
property returned fromCurl.getVersionInfo
.
2.1.1 - 2020-04-28
- Remove
benchmark
folder from the distributed npm package (reducing the package size)
2.1.0 - 2020-04-12
- Fix retrieve-win-deps Windows build script not working correctly
- Fix context switches between addon callbacks not causing Node.js to drain microtasks - (#177)
- Fix some curl_off_t getinfo values corrupting the stack
WRITEFUNCTION
,HEADERFUNCTION
andREADFUNCTION
callbacks now correctly rethrow JS errors thrown inside of them. The return value of both callbacks is now also checked to be an integer, any other type will cause an error. This is considered a fix because previously the return value was being cast to an integer, which means the method would already fail, as there are remote chances (aka impossible) casting something else to an integer would yield the length of the data passed by libcurl.
- Added missing
CURLOPT_SASL_AUTHZID
option - libcurl 7.66.0 - Added missing
CURLE_AUTH_ERROR
error code added with libcurl 7.66.0 - Added missing
CURLINFO_RETRY_AFTER
info field - libcurl 7.66.0 - Added missing
CURL_HTTP_VERSION_3
constant related http version to theCurlHttpVersion
enum - libcurl 7.66.0 - Added missing
CURLMOPT_MAX_CONCURRENT_STREAMS
option - libcurl 7.67.0 - Added missing
CurlProgressFunc
enum to reflect the newCURL_PROGRESSFUNC_CONTINUE
constant - libcurl 7.68.0 - Added missing
CurlSslOpt
enum memberNoPartialChain
- libcurl 7.68.0 - Added missing
CURLE_HTTP3
error code - An HTTP/3 layer problem - libcurl 7.68.0 - Added missing
CURLM_WAKEUP_FAILURE
error code - wakeup is unavailable or failed - libcurl 7.68.0 - Added missing
CURLM_BAD_FUNCTION_ARGUMENT
error code - function called with a bad parameter - libcurl 7.69.0 - Added missing
CURLE_QUIC_CONNECT_ERROR
error code - QUIC connection error - libcurl 7.69.0 - Added missing
CURLOPT_MAIL_RCPT_ALLLOWFAILS
option - libcurl 7.69.0
- Prebuilt binaries are now compiled with libcurl 7.69.1 and, when possible, latest version of other related dependencies:
- OpenSSL 1.1.1d
- nghttp2 1.4.0
- libssh2 1.9.0
- Added prebuilt binaries for:
- Electron v8
- NW.js v0.44, v0.43 and v0.42
- Dropped prebuilt binaries for:
- Node.js 8
- Electron v3, v4 and v5
- NW.js v0.38 and v0.39
- Remove dynamic require (#204)
- The C++ implementation for the previously removed
onData
andonHeader
Curl/Easy instance fields has been removed - If you were still using those internal fields your code is going to break. UseWRITEFUNCTION
andHEADERFUNCTION
options instead.
2.0.3 - 2019-12-11
- Updated return type of DEBUGFUNCTION (#202)
- Fixed issues when building with newer versions of v8 (Node.js >= 13 and Electron >= 7) (#203)
- Type for
this
added to event listeners callbacks - Build on Node.js 13 and Electron 7
2.0.2 - 2019-09-20
- Build on Electron v6
- Improved build scripts
- bump libssh2 to 1.9.0
2.0.1 - 2019-06-06
- Fixed problem when building with libcurl <= 7.38
2.0.0 - 2019-06-02
- Dropped support for Node.js 4 and 6
- Prebuilt binary is now statically built with brotli, libssh2, nghttp2, OpenSSL and zlib. brotli, OpenSSL, nghttp2 and zlib versions match their respective versions used by Node.js.
- The minimum libcurl version being tested is now
7.50.0
, which itself is almost 3 years old.
The addon will still try to be compatible with old versions up to7.32.0
, but there are no guarantees. Curl.reset
now correctly resets their instance (#141)- Previously
Curl.code
had all Curl codes into a single enum like object, that is, it included properties for eachCURLMCode
,CURLcode
andCURLSHcode
libcurl enums.
Now they are separated, each on their own object:
CURLMCode
->CurlMultiCode
CURLcode
->CurlCode
CURLSHCode
->CurlShareCode
DEBUGFUNCTION
now receives aBuffer
as thedata
argument, instead of astring
.Easy.send
andEasy.recv
now return an object,{ code: CurlCode, bytesSent: number }
and{ code: CurlCode, bytesReceived: number }
respectively.Curl
class: removed_
prefix from their private members.
Only a breaking change in case you were using internal methods.Curl
class: methodsonData
andonHeader
renamed todefaultWriteFunction
anddefaultHeaderFunction
.
Only a breaking change in case you were using internal methods.Curl
class: deprecated instance fieldsonData
andonHeader
were removed.
Use optionsWRITEFUNCTION
andHEADERFUNCTION
respectively.Curl.dupHandle
, argumentshouldCopyCallbacks
was removed, it was the first one.
This is not needed anymore because the previously set callbacks (onData
andonHeader
) can now only be set using their respective libcurl options, which is always copied when duplicating a handle.Curl.multi
moved toMulti.option
Curl.share
moved toShare.option
- Following members were moved to their own export:
Curl.auth
->CurlAuth
Curl.pause
->CurlPause
Curl.http
->CurlHttpversion
Curl.feature
->CurlFeature
Curl.lock
->CurlShareLock
Curl.header
->CurlHeader
Curl.info.debug
->CurlInfoDebug
Curl.netrc
->CurlNetrc
Curl.chunk
->CurlChunk
Curl.filetype
->CurlFileType
Curl.fnmatchfunc
->CurlFnMatchFunc
Curl.ftpauth
->CurlFtpAuth
Curl.ftpssl
->CurlFtpSsl
Curl.ftpmethod
->CurlFtpMethod
Curl.rtspreq
->CurlRtspRequest
Curl.ipresolve
->CurlIpResolve
Curl.proxy
->CurlProxy
Curl.pipe
->CurlPipe
Curl.usessl
->CurlUseSsl
Curl.sslversion
->CurlSslVersion
Curl.sslversion.max
->CurlSslVersionMax
Curl.ssh_auth
->CurlSshAuth
Curl.timecond
->CurlTimeCond
Easy.socket
->SocketState
And their fields were changed fromSNAKE_CASE
toPascalCase
.
The change in casing was to follow Typescript's Enum naming convention. Curl.protocol
also moved to their own exportCurlProtocol
, no changes were made to fields casing in this case.- Passing non-integer option value to
Multi.setOpt
will now throw an error.
Previously the value was converted to1
if it was a truthy value, or0
if otherwise.
- Fix SigAbort caused by calling v8
AsFunction
on null value atEasy::SetOpt
- Fix SegFault during gargage collection after
process.exit
(#165) - Using
curl_socket_t
without libcurl version guard onEasy::GetInfo
- Support Node.js 12
- Added missing options:
CURLOPT_DISALLOW_USERNAME_IN_URL
CURLOPT_DNS_SHUFFLE_ADDRESSES
CURLOPT_DOH_URL
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS
CURLOPT_HAPROXYPROTOCOL
CURLOPT_HTTP09_ALLOWED
CURLOPT_REQUEST_TARGET
CURLOPT_FTP_FILEMETHOD
(#148)CURLOPT_MAXAGE_CONN
CURLOPT_PROXY_*
CURLOPT_RTSPHEADER
CURLOPT_RTSP_REQUEST
CURLOPT_SOCKS5_AUTH
CURLOPT_SSH_COMPRESSION
CURLOPT_TLS13_CIPHERS
CURLOPT_TIMEVALUE_LARGE
CURLOPT_TRAILERFUNCTION
CURLOPT_UPKEEP_INTERVAL_MS
- Add missing info fields:
CURLINFO_*_{DOWNLOAD,UPLOAD}_T
CURLINFO_*_TIME_T
CURLINFO_FILETIME_T
- Add
Curl.getVersionInfo()
which returns an object that represents the struct returned fromcurl_version_info()
.
See their type definition for details: [./lib/types/CurlVersionInfoNativeBinding.ts
](./lib/types/ - Add
Curl.getVersionInfoString()
which returns a string representation of the above function.
It should be almost identical to the one returned fromcurl -V
. - Add
Curl.isVersionGreaterOrEqualThan(x, y, z)
to help test if the libcurl version the addon was built against is greater or equal than x.y.z. - Add
upkeep
function to Easy and Curl classes. This is a binding for thecurl_easy_upkeep()
function. - Errors thrown inside callbacks are correctly caught / passed forward (if using multi interface)
- All
Curl
instances now set theirUSERAGENT
tonode-libcurl/${packageVersion}
during creation.
You change the default user agent string by changingCurl.defaultUserAgent
, and disable it by setting their value to null. CurlWriteFunc
andCurlReadFunc
enums with special return codes for their respective options,WRITEFUNCTION
andREADFUNCTION
.- Added experimental
curly(url: string, options: {})
/curly.<http-verb>(url: string, options: {})
async api.
This API can change between minor releases.
- Migrated project to Typescript and added type definitions
- Bumped libcurl version used on Windows to
7.64.1
, which hasnghttp2
support - Added the
Curl
instance that emitted the event as the last param passed to events, can be useful if using anonymous functions as callback for the events. Example:// ... curl.on('end', (statusCode, data, headers, curlInstance) => { // ... })
- Fix erratic condition when setting option
HEADERFUNCTION
(#142) - macOS libs should be linked against @rpath (#145)
Special Thanks to @koskokos2 for their contributions to this release.
- Node.js 10 on CI and respective prebuilt binaries
- Removed deprecated NAN method calls
1.3.2 - 2018-05-24
- Curl multi integer options being wrongly tested (#126)
1.3.1 - 2018-05-04
- Changelog file (finally)
- Improved code style, started using prettier