wative-core 2.3.9 → 2.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.
- package/CHANGELOG.md +148 -0
- package/dist/artifacts/evm/index.cjs +1 -1
- package/dist/artifacts/evm/index.d.cts +2 -2
- package/dist/artifacts/evm/index.d.ts +2 -2
- package/dist/artifacts/evm/index.js +1 -1
- package/dist/artifacts/svm/index.cjs +1 -1
- package/dist/artifacts/svm/index.d.cts +3 -3
- package/dist/artifacts/svm/index.d.ts +3 -3
- package/dist/artifacts/svm/index.js +1 -1
- package/dist/{container-provider-D_557LVN.d.ts → container-provider-D2QluIe_.d.ts} +1 -1
- package/dist/{container-provider-CkKGyHis.d.cts → container-provider-DAUXclw_.d.cts} +1 -1
- package/dist/{evm-Xw4zBLUH.d.ts → evm-GxBuNjq7.d.ts} +1 -1
- package/dist/{evm-gsdoVj16.d.cts → evm-qXdZWugm.d.cts} +1 -1
- package/dist/{file-sink-D33jvque.d.ts → file-sink-B0EjCBvG.d.ts} +2 -2
- package/dist/{file-sink-C_SlT9IC.d.cts → file-sink-DSOZbsJM.d.cts} +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +12 -8
- package/dist/index.d.ts +12 -8
- package/dist/index.js +1 -1
- package/dist/index.node.cjs +1 -1
- package/dist/index.node.d.cts +6 -6
- package/dist/index.node.d.ts +6 -6
- package/dist/index.node.js +1 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +3 -3
- package/dist/node/index.d.ts +3 -3
- package/dist/node/index.js +1 -1
- package/dist/{svm-CTCJsYri.d.cts → svm-B_c0L-rJ.d.cts} +1 -1
- package/dist/{svm-CUuqpl1h.d.ts → svm-Ca4Xyw0Y.d.ts} +1 -1
- package/dist/{workspace-Du_jy51u.d.cts → workspace-DdaY7sWa.d.cts} +5 -1
- package/dist/{workspace-Du_jy51u.d.ts → workspace-DdaY7sWa.d.ts} +5 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,154 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `wative-core` are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [2.4.0] — 2026-08-11
|
|
6
|
+
|
|
7
|
+
Six breaking items, each one an operation that reported success without having
|
|
8
|
+
done what it said. A broadcast whose reply never arrived was reported as one
|
|
9
|
+
that never went out — on both chains. Moving an account between workspaces saved
|
|
10
|
+
its later changes to the wrong place; changing a password could leave the old one
|
|
11
|
+
working; erasing a browser workspace could leave everything in it; and restoring
|
|
12
|
+
a backup over an existing workspace kept records the backup did not contain. The
|
|
13
|
+
rest either clears secrets from memory sooner, or accepts input that was being
|
|
14
|
+
refused for no reason.
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
- **BREAKING. A broadcast whose outcome is unknown no longer reports as one that
|
|
18
|
+
was refused — on both chains.** When the connection to an endpoint died during
|
|
19
|
+
a broadcast, or the endpoint answered with an error status or something that
|
|
20
|
+
was not a reply, the send reported `failed`: the one status meaning "that never
|
|
21
|
+
went out, send it again". Those bytes may well have reached the network. On
|
|
22
|
+
EVM a rebuilt transaction takes a fresh position from a node whose count the
|
|
23
|
+
relayed one already advanced; on Solana there is no position to collide at all,
|
|
24
|
+
so a rebuild takes a fresh blockhash, becomes a different transaction, and
|
|
25
|
+
nothing dedupes the two. Either way both can land.
|
|
26
|
+
|
|
27
|
+
Such a send now reports `timeout`, meaning the outcome is unknown, and the
|
|
28
|
+
identifier of the transaction that was signed is reported so it can be looked
|
|
29
|
+
up before anything else is sent.
|
|
30
|
+
|
|
31
|
+
An endpoint that answers with a reason it refused still reports `failed`,
|
|
32
|
+
because nothing was sent and sending again is safe. That is the ordinary way a
|
|
33
|
+
send fails — an underpriced or badly-positioned transaction on EVM, an expired
|
|
34
|
+
blockhash or a failed simulation on Solana — and for an expired blockhash
|
|
35
|
+
rebuilding is exactly the right response.
|
|
36
|
+
- **BREAKING. An endpoint that refuses is reported differently from one that
|
|
37
|
+
never answered.** Every way a request could go wrong reported the same thing,
|
|
38
|
+
including the one case where the endpoint read the request and declined it.
|
|
39
|
+
Those are opposite facts for a broadcast, and a caller needs to tell them
|
|
40
|
+
apart to know whether sending again is safe. A refusal now carries its own
|
|
41
|
+
error code and the reason the endpoint gave; a lost connection, an error
|
|
42
|
+
status, or an unreadable reply still report the endpoint as unreachable. The
|
|
43
|
+
two chains previously disagreed about which code a refusal carried; they now
|
|
44
|
+
agree.
|
|
45
|
+
- **A value an endpoint sent is cleaned before it appears in an error.** Two
|
|
46
|
+
errors raised while reading a reply placed that reply into the message exactly
|
|
47
|
+
as received, so control characters chosen by the endpoint were reproduced into
|
|
48
|
+
whatever log the caller writes, and an overlong value was repeated in full.
|
|
49
|
+
The value is still shown, since for a number the rejected text is the
|
|
50
|
+
diagnosis, but it is cleaned and shortened.
|
|
51
|
+
|
|
52
|
+
### Security
|
|
53
|
+
- **BREAKING. Changing an account's password now reports failure rather than a
|
|
54
|
+
success that did not happen.** If the account was locked between the moment
|
|
55
|
+
the change was requested and the moment it was carried out, the recovery
|
|
56
|
+
phrase was quietly left under the old password while everything else about the
|
|
57
|
+
change was saved. The account then reported that its password had been
|
|
58
|
+
changed, after which the new password failed and the old one still worked —
|
|
59
|
+
the exact reverse of the promise, in the situation you change a password for.
|
|
60
|
+
An account managed by its workspace was additionally recorded as having a
|
|
61
|
+
password of its own, which made it unopenable the next time it was loaded.
|
|
62
|
+
Two changes started at the same time could also both report success, with the
|
|
63
|
+
second overwriting the first using a password the first had already retired.
|
|
64
|
+
Both cases now report failure and leave the account exactly as it was.
|
|
65
|
+
- **BREAKING. Erasing a browser workspace now reports whether it happened.**
|
|
66
|
+
Erasing one while the same application still had it open reported success and
|
|
67
|
+
left every stored record in the browser. Because nothing released the
|
|
68
|
+
workspace, that was the ordinary outcome rather than a rare one. The workspace
|
|
69
|
+
is now closed first so the erase can finish. An erase that cannot be confirmed
|
|
70
|
+
is reported as unconfirmed rather than as failed — it may still complete on its
|
|
71
|
+
own, and erasing again is always safe. Erasing where the browser offers no
|
|
72
|
+
storage at all now reports that, instead of returning quietly.
|
|
73
|
+
- **Secrets are cleared from memory once they are no longer needed.** Several
|
|
74
|
+
intermediate values produced while deriving a key were left behind after use,
|
|
75
|
+
and a derived key dropped from the internal cache was discarded without being
|
|
76
|
+
cleared, putting it beyond the reach of the cleanup that runs when a workspace
|
|
77
|
+
locks. Unlocking an account whose recovery phrase could not be read also left
|
|
78
|
+
that phrase in memory although the account reported itself locked. Keys and
|
|
79
|
+
addresses are unchanged: derivation was checked byte for byte against the
|
|
80
|
+
previous release and against the published Argon2 test vectors.
|
|
81
|
+
- **An endpoint that is not text is refused rather than saved unchecked.**
|
|
82
|
+
`rpcUrl` was the only network field with no type check, so a value that was not
|
|
83
|
+
text skipped every endpoint check — including the one that refuses addresses on
|
|
84
|
+
your local network — and was stored anyway. Leaving the field out reported an
|
|
85
|
+
error from outside this library rather than its own, including while loading a
|
|
86
|
+
stored network. An empty endpoint still means no endpoint configured.
|
|
87
|
+
- **A rejected name or colour is quoted before it is reported.** Both were placed
|
|
88
|
+
into the error message exactly as supplied, so control characters in them were
|
|
89
|
+
reproduced into whatever log you write. A name is not always your own — it can
|
|
90
|
+
come from a filename on disk, or from a backup being restored.
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
- **BREAKING. An account moved to another workspace now belongs to the workspace
|
|
94
|
+
holding it.** Moving one wrote a single record into the receiving workspace and
|
|
95
|
+
then kept sending every later change back to the workspace it came from.
|
|
96
|
+
Reopening the receiving workspace showed the account without those changes, and
|
|
97
|
+
closing the original one made the account unusable even though the receiving
|
|
98
|
+
workspace was open and still listed it. For an imported private key, discarding
|
|
99
|
+
the original workspace lost the key. The account now saves to the workspace
|
|
100
|
+
holding it, unlocks with that workspace's password, and is closed by it.
|
|
101
|
+
Locking the receiving workspace while the move is still going on now closes the
|
|
102
|
+
account rather than leaving it open and unreachable. Re-deleting an account
|
|
103
|
+
that was moved in reports that it is already gone, rather than reporting it as
|
|
104
|
+
belonging elsewhere.
|
|
105
|
+
- **BREAKING. Restoring a backup over an existing workspace now replaces it.**
|
|
106
|
+
Records the backup did not contain were left in place beside the restored ones,
|
|
107
|
+
still under the previous password. They could not be opened, could not be seen,
|
|
108
|
+
kept their names reserved, and made removing a network fail from then on. Only
|
|
109
|
+
what the backup carries is kept now, and anything it omits is removed. A backup
|
|
110
|
+
that cannot be restored in full is refused before anything changes, and a
|
|
111
|
+
backup carrying no configuration is refused outright rather than leaving a
|
|
112
|
+
workspace no password can open. The workspace is closed at the end, since the
|
|
113
|
+
password that opened it belonged to the workspace that was just replaced.
|
|
114
|
+
- **A wallet can be labelled in your own script.** Tags and token symbols
|
|
115
|
+
accepted the letters of every script but refused the marks that most of them
|
|
116
|
+
require, so Devanagari, Bengali, Tamil, Thai, Arabic and Hebrew could not be
|
|
117
|
+
used at all. They now are. A label that would display as blank, or as nothing
|
|
118
|
+
at all, is still refused. Token symbols containing `+` are also accepted, which
|
|
119
|
+
several real tokens need.
|
|
120
|
+
- **The two spellings of one password are one password.** The same password can
|
|
121
|
+
arrive in two forms depending on the keyboard, clipboard or operating system it
|
|
122
|
+
came from, and both have always unlocked a wallet. Several places compared the
|
|
123
|
+
forms directly instead, so a correct password could be reported as wrong when
|
|
124
|
+
re-entered on an already-open workspace or account, when confirming a record's
|
|
125
|
+
password, and when creating an account that shares the workspace password.
|
|
126
|
+
Checking a new password against previous ones now recognises the same password
|
|
127
|
+
in a different form as a reuse.
|
|
128
|
+
- **A deleted account's name can be used again.** Every account name seen when a
|
|
129
|
+
workspace opened was reserved for as long as it stayed open, and deleting the
|
|
130
|
+
account did not release it. Creating an account under that name again quietly
|
|
131
|
+
produced a numbered variant, and adding one back was refused with a message
|
|
132
|
+
asking you to restore a file that had just been deleted.
|
|
133
|
+
- **A token address pasted with a leading space is accepted.** It was refused
|
|
134
|
+
here while the same address was accepted everywhere else in the library.
|
|
135
|
+
- **A hex value carrying two prefixes is refused rather than decoded.**
|
|
136
|
+
`0x0x41` produced two bytes with a zero in front instead of an error.
|
|
137
|
+
- **Moving an account needs the networks it uses to exist in the receiving
|
|
138
|
+
workspace.** An account refers to its networks by name, so moving one into a
|
|
139
|
+
workspace that does not have a network it uses wrote a record that could not
|
|
140
|
+
be read back. The move reported success, and after reopening the account was
|
|
141
|
+
simply absent — not listed, not reported as held back, and not even holding
|
|
142
|
+
its name, while a record containing its recovery phrase and every key stayed
|
|
143
|
+
in the workspace, unreachable and impossible to remove. The move is now
|
|
144
|
+
refused before anything is written, naming the missing network.
|
|
145
|
+
- **An account cannot be left holding no keys.** Both ways of removing wallets
|
|
146
|
+
checked that at least one wallet remained, which does not mean at least one
|
|
147
|
+
key remains: a wallet can legitimately be added without addresses, so removing
|
|
148
|
+
the wallet carrying an account's only keys left an account with none. It still
|
|
149
|
+
reported itself as an account, and reopening it produced a shell with nothing
|
|
150
|
+
in it. Removing wallets that hold no keys is unaffected, as is removing an
|
|
151
|
+
account outright.
|
|
152
|
+
|
|
5
153
|
## [2.3.9] — 2026-08-10
|
|
6
154
|
|
|
7
155
|
Three breaking items. Two are on paths that were producing results no
|