forked from tulir/whatsmeow
-
-
Notifications
You must be signed in to change notification settings - Fork 7
fix: make main authoritative for HyperMeow #35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
a10a208
docs: publish HyperMeow release guide
purpshell f646ee7
fix: return module to commit versions
purpshell fc82e26
refactor: consolidate business features
purpshell 09c6eb2
docs: align README footer
purpshell 5bb05b3
docs: define split file licensing
purpshell File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,2 +1,7 @@ | ||
| # Copyright (c) 2026 Rajeh Taher | ||
| # | ||
| # Licensed under the MIT License. See LICENSE-MIT for details. | ||
|
|
||
| .git | ||
| benchmark/barback/results | ||
| benchmark/barback/testdata/results |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,5 @@ | ||
| # Copyright (c) 2026 Rajeh Taher | ||
| # | ||
| # Licensed under the MIT License. See LICENSE-MIT for details. | ||
|
|
||
| github: [purpshell] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| <!-- | ||
| Copyright (c) 2026 Rajeh Taher | ||
| Licensed under the MIT License. See LICENSE-MIT for details. | ||
| --> | ||
|
|
||
| # Changelog | ||
|
|
||
| All notable HyperMeow changes are documented here. HyperMeow uses commit pseudo-versions from its reviewed `main` branch. | ||
|
|
||
| ## [Unreleased] | ||
|
|
||
| ### Documentation | ||
|
|
||
| - Added an evidence-backed comparison with upstream WhatsMeow. | ||
| - Consolidated the root white-box test suite into themed files without removing tests or changing coverage. | ||
| - Consolidated handwritten business-app features into `business.go` without changing the exported API. | ||
| - Moved committed benchmark reports and heap profiles into `benchmark/barback/testdata/results`; fresh run output remains under the ignored `benchmark/barback/results` workspace. | ||
| - Retracted the accidental `v0.1.0` tag and its correction carrier. | ||
| - Kept `v0.0.0` as the only selectable tag; use `@main` for the newest reviewed commit. | ||
| - Established `main` as the sole package source; `dev` remains an integration branch. | ||
|
|
||
| ## First public release - 2026-08-10 | ||
|
|
||
| The first HyperMeow release combines the reviewed `dev` train with upstream WhatsMeow protocol updates through protobuf revision `v1044834443`. | ||
|
|
||
| ### Added | ||
|
|
||
| - Published the standalone `github.com/polymorfa/hypermeow` module while retaining the upstream `whatsmeow` package names. | ||
| - Added raw-node compatibility hooks for integrations that need protocol-level observation. | ||
| - Added business linked-account and feature-eligibility reads. | ||
| - Added business profile, cover photo, product, collection, catalog, cart, visibility, appeal, and merchant-compliance mutations. | ||
| - Added validated business message builders for product lists, orders, addresses, lists, and native Flows. | ||
| - Added native Flow response metadata handling and exact preservation of JSON number lexemes. | ||
| - Added newsletter deletion through generated MEX bindings. | ||
| - Added quick-reply app-state actions and events. | ||
| - Added atomic label replacement and configurable label/full-sync event emission. | ||
| - Added independent history-sync receipt, persistence, and media-deletion controls. | ||
| - Added phone-number consent request/share message builders. | ||
| - Added LID identity verification-code generation. | ||
| - Added username persistence and PN/username-to-LID alias resolution across contacts, groups, notifications, and group membership changes. | ||
| - Added optional batched reverse-LID lookup support with bounded query chunks and negative caching. | ||
| - Added a reproducible Barback/PostgreSQL benchmark suite for DM, group, history, media, mixed messages, client memory, saturation, phone consent, business operations, and security codes. | ||
|
|
||
| ### Changed | ||
|
|
||
| - Made LIDs the primary Signal identity while retaining phone numbers and usernames as aliases when available. | ||
| - Reworked retry-message storage to allocate lazily and retain encoded payloads instead of full protobuf object graphs. | ||
| - Added bounded group, device, contact, identity, migration, retry, app-state-key, and PN-to-LID caches with durable stores remaining authoritative. | ||
| - Batched PostgreSQL session, identity, message-secret, and alias operations while retaining atomic fallbacks for generic SQL drivers. | ||
| - Avoided empty PN-to-LID database transactions and added PostgreSQL pattern indexes for migration-prefix lookups. | ||
| - Shared the default HTTP transport across clients while preserving isolation for custom proxy and HTTP-client configuration. | ||
| - Preserved the newest history-sync nonce through asynchronous persistence without blocking event delivery. | ||
|
|
||
| ### Reliability | ||
|
|
||
| - Hardened malformed and odd-length binary node decoding. | ||
| - Serialized device save/delete operations and made overlapping history-sync nonce writes monotonic. | ||
| - Exposed participant-hash mismatches instead of silently accepting inconsistent group state. | ||
| - Added bounded handler queues and guarded reconnect behavior at overflow. | ||
| - Replaced unsupported Signal-store panics with returned errors. | ||
| - Added explicit error handling for receipt misuse, CBC invariant failures, missing signed prekeys, upload read failures, partial writes, and temporary-file cleanup. | ||
| - Added compatibility checks and Docker build support for archived WhatsMeow and pre-optimization Barback baselines after the module-path migration. | ||
|
|
||
| ### Security and privacy | ||
|
|
||
| - Redacted business access tokens, cookies, nonces, profile fields, and linked-account payloads from binary-node logs. | ||
| - Added strict validation for business payload lengths, prices, product/section counts, mixed native-flow metadata, UTF-8, and trailing JSON. | ||
| - Added privacy-cache completeness and bounded failure behavior. | ||
| - Added atomic Signal identity insertion and deletion-generation fencing to prevent stale prekey fetches from restoring deleted identities. | ||
|
|
||
| ### Performance evidence | ||
|
|
||
| - The frozen three-repeat system matrix completed 45 bounded workloads with no send failures, queue overflows, or temporary files left behind. | ||
| - Against the recorded upstream revision, HyperMeow reduced allocation in all five system scenarios, reduced group-128 send p95 by 79.3%, reduced group-128 client CPU by 58.2%, and reduced group-128 SQL calls by 97.9%. | ||
| - The isolated 2,000-client constructor benchmark measured 4,240 bytes of Go heap per HyperMeow client versus 78,929 bytes upstream, a 94.6% reduction in disconnected fixed state. | ||
| - The encrypted ping-pong test sustained 1,700 healthy pairs per second versus 900 upstream under the same bounded local environment. | ||
|
|
||
| See the [system comparison](benchmark/barback/testdata/results/system-comparison.md), [RAM hardening report](benchmark/barback/testdata/results/ram-hardening.md), and [saturation report](benchmark/barback/testdata/results/maxrate-ping-pong.md) for revisions, limits, caveats, and raw evidence. | ||
|
|
||
| ### Compatibility notes | ||
|
|
||
| - Applications must migrate imports from `go.mau.fi/whatsmeow` to `github.com/polymorfa/hypermeow`. | ||
| - A single binary must not link both modules because they register identical generated protobuf descriptors. | ||
| - The Polymorfa Signal dependency changes exported Signal parameter types relative to upstream; other exported differences in this release are additive. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| MIT License | ||
|
|
||
| Copyright (c) 2026 Rajeh Taher | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| <!-- | ||
| Copyright (c) 2026 Rajeh Taher | ||
| Licensed under the MIT License. See LICENSE-MIT for details. | ||
| --> | ||
|
|
||
| # Licensing | ||
|
|
||
| HyperMeow preserves the licenses and copyright notices of its sources. | ||
|
|
||
| - Files and source content inherited from `tulir/whatsmeow` history, including | ||
| material later removed upstream and Polymorfa modifications within those | ||
| files, remain under the Mozilla Public License 2.0 in [LICENSE](LICENSE). | ||
| - Files introduced by Polymorfa and authored by Rajeh Taher are under the MIT | ||
| License in [LICENSE-MIT](LICENSE-MIT). | ||
| - Generated files, benchmark reports, and other non-commentable artifacts added | ||
| by Polymorfa follow the same MIT grant without requiring an embedded header. | ||
| - Embedded third-party material retains its original copyright and license. | ||
|
|
||
| New Polymorfa-authored source files use this notice: | ||
|
|
||
| ```text | ||
| Copyright (c) 2026 Rajeh Taher | ||
| Licensed under the MIT License. See LICENSE-MIT for details. | ||
| ``` | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.