Releases: flomesh-io/pipy
0.30.0
Core
- Add flow control mechanism for throttling any types of input
- Add asynchronous file operations
- Support OpenSSL engines
Filters
- New filter tee
- New filter throttleConcurrency
- New filter demux (legacy demux/mux filters are renamed to demuxQueue/muxQueue)
- Filter decodeMQTT to support protocolLevel option
- Throttle filters support weak references as the account keys
API
- Support TTL option for algo.Cache
- New method stats.Metric.valueOf() for querying current metric value
- Data.from() rejects input types other than strings
Major bug fixes
- Fixed a bug where TLS requests could be stuck in the buffer
- Fixed a dead loop when trying to read folders in codebases
- Fixed some crashes when null is given to some cypto APIs
- Fixed a crash when retrieving stats.Histogram sub-metrics
- Fixed a bug where an HTTP 304 response would lead to forever waiting on the connection
- Fixed a bug in Data::shift_while() that caused Dubbo decoding failures
- The size of Data wasn't changed accordingly in some cases when packing
Build
- Support static linking to libc
- Support linking to external zlib
Documentation
Tremendous growth in documentation coverage has been done since the last release in English, Chinese and Japanese.
0.22.0-31
Core
- Overhaul to the object lifecycle management to solve a few hardcore crashes
- Supports LevelDB as a storage for codebases
- New admin proxy mode
- Retry failed codebase downloading during startup
PipyJS
- Full implementation to standard JavaScript Array, Math, Date API without iterators and timezones
- Standard-conformant JavaScript String API with UTF-32 semantics and UTF-8 representation internally
API
- Metrics and statistics API for monitoring, with internal support for Prometheus exposition format
- New
URLSearchParams
API - Data API supports generating arbitrary binary data
- Handle CDATA in
XML.decode()
andXML.encode()
- Support programmatically shutdown by
pipy.exit()
- Printing objects as JSON with
console.log()
Filters
General
- Support read/write timeouts for inbound connections
- Support read/write/connect timeouts for outbound connections
- Support signal driven tasks
- Support listening address binding
use
filter supports module(plugin) chains and round-trip filter pathsmux
filters support objects as a weak key to the shared session- LoadBalancers support dynamic unhealthy target cache
HTTP
- Basic HTTP/2 support without flow control
- HTTP codec standard conformance improvements
- Support for HTTP tunneling and WebSocket
- Actively shutdown long-lived connections around a reload
- Automatically chunk HTTP/1 message bodies when they are too large
TLS
- Support mTLS between worker nodes and the repo node
- New
handleTLSClientHello
filter to extract TLS client hello information - New
detectProtocol
filter for telling apart TLS and plain-TCP connections - Improved TLS performance
- OpenSSL library bumped to version 1.1.1-m
- Option to build with external OpenSSL library
SOCKS
- New filter
connectSOCKS
for the client side - Renamed
proxySOCKS
toacceptSOCKS
MQTT
- Simple MQTT codec filters for extracting MQTT packet information
GUI
- Script editor supports IntelliSense
- Generate pipeline graph from script enclosed in a function scope
- Builtin documentation with full tutorial and localization
0.10.0-1
Release Note
New Design
- Start a Pipy instance remotely from HTTP endpoints
- Builtin codebase service as a basic control plane, and its GUI too
- Data exchange between PJS modules can be done through
pipy().import()
andpipy().export()
, which becomes the recommended approach over the old ones
New Filters
merge
for interweaving multiple messages into one streampack
for combining multiple messages into onesplit
for byte-wise processing of messageshandleXXX
as aliases toonXXX
proxySOCKS
to handle both SOCKS4 and SOCKS5 trafficconnectTLS
andacceptTLS
for TLS traffic handling, extracted from listen and connectdecompressMessage
anddecompressHTTP
for message body decompression by zlibdemuxHTTP
andmuxHTTP
combining HTTP codec and mux/demuxserveHTTP
combining demuxHTTP and replaceMessage for convenience
New API
- Function
os.writeFile()
for local file writing - Function
algo.hash()
for JS value hashing - Class
Netmask
for IP address range handling - Class
algo.Percentile
for percentile calculation - Class
PublicKey
,PrivateKey
,Sign
,Verify
,Cipher
,Decipher
under namespace crypto
Improvements
- IPv6 support
- Number of concurrent connections can be limited on
listen
- Added size limit option to filters involving internal data buffers
- Track data buffer usage and concurrent inbound/outbound connections and dump on SIGTSTP
- HTTP codec overhaul, with the old 256KB fixed buffer optimized out
- Class
algo.Cache
now has a limit to the number of entries, with old entries getting erased based on LRU policy - Dubbo request ID becomes a string for its 64-bit range to be handled in JS
- Standard-conforming processing of object key ordering in PJS
0.8.0-31
[fix] Bug fix regarding HEAD request handling in HTTP codec filters
[fix] Non-shared mux sessions should be freed a while after reset to avoid recursive deletion resulted from closing of parent sessions
[filter] Do not show 'data discarded' message if data buffer limit is set to zero for filters handling message bodies
[filter] HTTP decoder to translate transport errors into 502 responses. Also fixed a memory leak in serveHTTP
[api] Support JWT verification with a PrivateKey object besides a JWK object
[core] Now that we have export/import as a better approach to variable sharing between modules, the old MessageStart.context property is now removed
[filter] Added serveHTTP filter that handles HTTP requests by simply providing a handler function that returns responses. The builtin GUI service changed to use this new filter internally
[core] Download codebase by using http::Mux filter to better handle the lifetime of a keep-alive connection
[core] Removed __argv since it is no longer needed now that we have variable export/import
Updated test scripts to match with the latest filter renaming
[design] HTTP filter renaming, revamping and optimization.
[api] Data.toString() returns undefined when data is not in valid UTF-8 encoding
[filter] New filter: split
[fix] Remotely downloaded scripts should have their base URI pathname stripped off
[fix] The new HTTP header encoder generated Connection and Keep-Alive headers without the value, which in turn invalidated the message
[api] Added dummy deselect method to HashingLoadBalancer and RoundRobinLoadBalancer so that the 3 load balancing algorithms are fully compatible to each other in interface
[filter] Added new filters demuxHTTP and muxHTTP combining HTTP codec and the functionality from the generalized demux/mux filters
[filter] Replace decompressMessageBody with decompressMessage and decompressHTTP, with the former protocol-agnostic and the latter specific for HTTP messages
[fix] Bug in the dump filter where the tails of data chunks are duplicated
[scripting] Remote download/update script files
[filter] Revamping HTTP codecs
[filter] Added sizeLimit to [handle|replace][Message|MessageBody] filters for setting a maximum body size that can be buffered internally before triggering a script callback
[fix] Missing file in CMakeLists.txt
[fix] Rewrite tap filter to fix a potential crash that might be caused by an invalid lambda after an asynchronous operation
[fix] Outbound connections should only retry on connection failures not reading/writing errors.
[fix] Listeners should not even start accepting when maxConnections == 0
[FIX] Base64Url decoding failure in some ending cases.
[feature] Added a new filter 'proxySOCKS' with basic non-authenticated SOCKS5 support. The old filter 'proxySOCKS4' is to be removed in the future.
[feature] Added aliases for onXXX as handleXXX to avoid misunderstanding. The old onXXX naming will be removed in the future.
[feature] Support one-shot tasks that can be used for initialization script.
[design] Added a 'context' property to MessageStart so that context information can be passed down connected pipeline sessions from module to module.
[feature] tap filter now re-evaluates its quota expression every 5 seconds
[api] Added new APIs that facilitate script hot reload, including:
[feature] New filter: pack, which combines multiple input messages into one output message.
[feature] New filter: merge, like a mux filter working in the way of a fork filter.
[feature] connect filter now can have a limit to its internal buffer size and just discard data when the buffer overflows.
[feature] algo.Cache now can have a limit to its size with only a number of LRU items kept alive.
[feature] New PJS features including:
[fix] Dubbo request ID requires 64-bit value range so we have to handle it in JS with a string
Changed DATA_CHUNK_SIZE from 16KB to 4KB for a better balance between throughput and memory usage.
[fix] Fixed an infinite loop happened in console.log when output has more than one lines.
[API] Added more classes to crypto including:
Optimization on Hex/Base64(Url) encoding and decoding so that no intermediate buffer is needed amid conversions between Data and string.
[feature]Added Netmask.next() method for generation of IPs over an address range.
[feature]Constructors of algo.RoundRobinLoadBalancer and algo.LeastWorkLoadBalancer now also receive target arrays in which case targets are weighted equally.
[Test] Added test/010-jwt and test/016-socks4-proxy
[Feature] Added support of bodiless HTTP responses (responses to HEAD requests).
[Feature] Added a new API pipy.restart() for programatic reloading of the current running pjs program
[Feature] Added a new API os.writeFile() for writing to local files.
[API] Added algo.Percentile for percentile calculation of things like latencies.
[API] Added a new global class Netmask CIDR network address mask operations.
[API] The tap filter now takes nullish quota as quota being unlimited.
[API] Added a new function algo.hash() for calculation the hash of a JS value
[BUG FIX] Crash on BSD due to C++ class name demangling failure.
[BUG FIX] proxySOCK4 filter wasn't drawn correctly in the graph on the web UI.
[BugFix] Fix rpm spec issue and adding static web service (#18)
[BugFix] Fix rpm spec issue and adding static web service
First release of Pipy pjs
First release of Pipy pjs
- Transitioned to PipyJS
- Dropped support of .cfg files in favour of JS scripts
- Reworked all filters (formerly called modules)
- Added builtin web UI
First release
This is the very first release of pipy!
Enjoy!