@arcadiasystems/morse-sdk 0.1.3 → 0.1.4
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 +36 -0
- package/README.md +17 -7
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/wallets/index.d.ts +1 -1
- package/dist/wallets/index.d.ts.map +1 -1
- package/dist/wallets/index.js +1 -1
- package/dist/wallets/index.js.map +1 -1
- package/dist/wallets/wallet-standard-signer.d.ts +51 -1
- package/dist/wallets/wallet-standard-signer.d.ts.map +1 -1
- package/dist/wallets/wallet-standard-signer.js +96 -1
- package/dist/wallets/wallet-standard-signer.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `morse-sdk` will be documented in this file. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [0.1.4] - 2026-05-21
|
|
6
|
+
|
|
7
|
+
Pluggable `PubkeyCache` for `fromAccountAsync` so Phantom users do not re-sign a probe message on every page reload.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **`PubkeyCache` interface** with `get`, `set`, optional `clear`. Methods may be sync or async, so the same interface backs browser `localStorage`, IndexedDB, and server-side KV stores. Pass via the new `options.pubkeyCache` arg on `fromAccountAsync`.
|
|
12
|
+
- **`BrowserStoragePubkeyCache`**: ready-to-use `PubkeyCache` backed by a DOM `Storage`-like interface (defaults to `globalThis.localStorage`). Customizable `prefix` for namespacing. Throws `ConfigurationError` at construction when `localStorage` is unavailable and no `storage` was injected (SSR / Node without polyfill).
|
|
13
|
+
- **`BrowserStorageLike` / `BrowserStoragePubkeyCacheOptions`** exported types for consumers building their own storage adapters or tests.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **`fromAccountAsync(account, callbacks, options?)`**: third parameter added. Cache hits are still verified to derive to `account.address` before the signer is trusted; on mismatch the SDK calls `cache.clear?.(address)` and falls through to a fresh probe, then writes the recovered pubkey back via `cache.set`. Stale entries, planted bytes, and wallet rotation all heal automatically. Compliant wallets (sync `fromAccount` path) skip the cache entirely; `get`/`set` are not called.
|
|
18
|
+
|
|
19
|
+
### Consumer migration
|
|
20
|
+
|
|
21
|
+
Before (probe popup on every mount):
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
const signer = await WalletStandardSigner.fromAccountAsync(account, callbacks);
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
After (probe popup once per address):
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { BrowserStoragePubkeyCache } from "@arcadiasystems/morse-sdk";
|
|
31
|
+
const signer = await WalletStandardSigner.fromAccountAsync(account, callbacks, {
|
|
32
|
+
pubkeyCache: new BrowserStoragePubkeyCache(),
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Unchanged
|
|
37
|
+
|
|
38
|
+
No behavior change for callers who do not pass `pubkeyCache`. No behavior change for compliant wallets. `fromAccount` (sync) is unchanged; the cache only applies to the async recovery path. Error classes, public types, and the rest of the SDK surface are byte-identical to 0.1.3.
|
|
39
|
+
|
|
5
40
|
## [0.1.3] - 2026-05-21
|
|
6
41
|
|
|
7
42
|
Phantom (Sui) wallet support, plus a structured error class so consumer dapps can render proper UX for unsupported wallets.
|
|
@@ -96,6 +131,7 @@ See `README.md` for the full list. Headlines:
|
|
|
96
131
|
- Wallet schemes other than Ed25519 ship as decoders with E2E unverified; `WalletStandardSigner.fromAccount` will accept them, but `@mysten/walrus` and `@mysten/seal` round-trip is not yet smoke-tested for those configurations.
|
|
97
132
|
- gRPC client only at v0.1.0; the reader and adapter interfaces are typed against `Pick<SuiGrpcClient, ...>`. JSON-RPC fallback is planned for v0.2.0.
|
|
98
133
|
|
|
134
|
+
[0.1.4]: https://github.com/arcadiasystems/morse-dcms/releases/tag/v0.1.4
|
|
99
135
|
[0.1.3]: https://github.com/arcadiasystems/morse-dcms/releases/tag/v0.1.3
|
|
100
136
|
[0.1.2]: https://github.com/arcadiasystems/morse-dcms/releases/tag/v0.1.2
|
|
101
137
|
[0.1.1]: https://github.com/arcadiasystems/morse-dcms/releases/tag/v0.1.1
|
package/README.md
CHANGED
|
@@ -232,7 +232,8 @@ The full public surface, grouped by concern. Every export carries a JSDoc on its
|
|
|
232
232
|
| --- | --- |
|
|
233
233
|
| `KeypairAdapter` | Server / CLI `WalletAdapter` wrapping a raw `Ed25519Keypair`. |
|
|
234
234
|
| `WalletStandardSigner.fromAccount(account, callbacks)` | Browser-side `Signer` for `@mysten/walrus` and `@mysten/seal`; wraps wallet-standard wallets without ever holding the user's key. Sync; throws `UnsupportedWalletSchemeError` on non-canonical `account.publicKey` (e.g. Phantom). |
|
|
235
|
-
| `WalletStandardSigner.fromAccountAsync(account, callbacks)` | Same as `fromAccount`, with signature-based pubkey recovery for wallets that return a non-canonical `account.publicKey
|
|
235
|
+
| `WalletStandardSigner.fromAccountAsync(account, callbacks, options?)` | Same as `fromAccount`, with signature-based pubkey recovery for wallets that return a non-canonical `account.publicKey` (Phantom). Pass `options.pubkeyCache` to skip the recovery probe across sessions. One extra wallet popup on first session per address; subsequent sessions are zero-popup when a cache is supplied. |
|
|
236
|
+
| `BrowserStoragePubkeyCache({ storage?, prefix? })` | `PubkeyCache` backed by browser `localStorage`. Customizable storage backend (for tests, `sessionStorage`, or polyfills) and key prefix. |
|
|
236
237
|
| `DefaultWalrusWriteAdapter.fromConfig(config, signer)` | Walrus uploads (blob + quilt). Implements `WalrusFlowCapable` (the 2-popup optimization). |
|
|
237
238
|
| `DefaultWalrusReadAdapter.fromConfig(config)` | Walrus reads (`readBlob`, `readBlobByObjectId`, `readQuiltPatch`, `readBlobRef`). |
|
|
238
239
|
| `HttpPublisherWriteAdapter.fromConfig({ publisherUrl, ownerAddress })` | Walrus uploads via a publisher HTTP service (operator pays storage; 1 popup for upload + addEntry). |
|
|
@@ -323,25 +324,34 @@ Refused schemes throw `UnsupportedWalletSchemeError` (a `ConfigurationError` sub
|
|
|
323
324
|
|
|
324
325
|
Phantom's Sui adapter returns a 59-byte opaque blob in `account.publicKey` instead of the canonical 32 / 33-byte form mandated by wallet-standard. This is a documented Phantom quirk (see the Sui developer forum thread from August 2025), not an SDK gap.
|
|
325
326
|
|
|
326
|
-
For Phantom-class wallets, use `WalletStandardSigner.fromAccountAsync` instead of `fromAccount
|
|
327
|
+
For Phantom-class wallets, use `WalletStandardSigner.fromAccountAsync` instead of `fromAccount`, and pass a `PubkeyCache` to avoid re-prompting on every page reload:
|
|
327
328
|
|
|
328
329
|
```ts
|
|
329
|
-
import {
|
|
330
|
+
import {
|
|
331
|
+
WalletStandardSigner,
|
|
332
|
+
BrowserStoragePubkeyCache,
|
|
333
|
+
UnsupportedWalletSchemeError,
|
|
334
|
+
} from "@arcadiasystems/morse-sdk";
|
|
330
335
|
|
|
331
336
|
try {
|
|
332
|
-
const signer = await WalletStandardSigner.fromAccountAsync(account, callbacks
|
|
333
|
-
|
|
337
|
+
const signer = await WalletStandardSigner.fromAccountAsync(account, callbacks, {
|
|
338
|
+
pubkeyCache: new BrowserStoragePubkeyCache(),
|
|
339
|
+
});
|
|
334
340
|
} catch (err) {
|
|
335
341
|
if (err instanceof UnsupportedWalletSchemeError) {
|
|
336
342
|
// Render: "Your wallet uses an unsupported scheme. Try Slush or Suiet."
|
|
337
|
-
// err.publicKeyBytes, err.address, err.walletName available.
|
|
343
|
+
// err.code, err.publicKeyBytes, err.address, err.walletName available.
|
|
338
344
|
}
|
|
339
345
|
}
|
|
340
346
|
```
|
|
341
347
|
|
|
342
348
|
`fromAccountAsync` tries the sync decoder first (no extra IO for compliant wallets), and on failure recovers the real Ed25519 public key by asking the wallet to sign a domain-separated probe message. Sui's canonical signature is `flag || sig || pk` (97 bytes for Ed25519); the last 32 bytes are the raw key. The recovered key is verified to derive to `account.address` before the signer is constructed.
|
|
343
349
|
|
|
344
|
-
|
|
350
|
+
Without a cache, the probe popup fires every session (every page reload, every component remount). With a `BrowserStoragePubkeyCache`, the popup fires once per address; subsequent sessions read from `localStorage` and skip the probe. The cached pubkey is still verified to derive to `account.address` on every load, so stale entries (wallet switch, planted bytes) heal automatically: the SDK calls `cache.clear?.(address)` and re-probes.
|
|
351
|
+
|
|
352
|
+
For non-browser contexts (SSR, Node, native), implement the `PubkeyCache` interface against IndexedDB, Redis, or any KV store. Methods may be sync or async.
|
|
353
|
+
|
|
354
|
+
The probe message is `"morse-sdk:wallet-pubkey-recovery:" + address`, wrapped by Sui's `signPersonalMessage` `"Sui Message:"` prefix, so it cannot collide with a real transaction. Compliant wallets pay no extra cost; they take the sync `fromAccount` path inside `fromAccountAsync` and skip both the probe and the cache.
|
|
345
355
|
|
|
346
356
|
## Error taxonomy
|
|
347
357
|
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,6 @@ export { type AddEncryptedEntryArgs, type AddEncryptedEntryFromBytesArgs, type A
|
|
|
11
11
|
export { type EntryListPage, type ListEntriesOptions, type ListPublicationsOptions, type ListPublisherCapsOptions, type OwnedPublication, type PublicationListPage, type PublicationReader, type PublisherCapListPage, RpcPublicationReader, type ScanEntriesOptions, } from "./read/index.js";
|
|
12
12
|
export { buildPublisherSealId, DefaultSealAdapter, decodePublisherSealId, type SealAdapter, type SealAdapterConfig, type SealDecryptOptions, type SealEncryptOptions, type SealEncryptResult, type SealIdParts, } from "./seal/index.js";
|
|
13
13
|
export { AccessPolicy, type BlobObjectId, type BlobRef, type Collection, type Entry, type OwnerCap, type OwnerCapId, type PackageId, type Publication, type PublicationId, type PublisherCap, type PublisherCapId, QUILT_PATCH_ID_LENGTH, type QuiltPatchId, type RegistryId, type Revision, type SealId, SealPolicyTag, StorageMode, type SuiAddress, type SuiObjectId, type TxCreatedObject, type TxDeletedObject, type TxReceipt, type WalrusBlobId, } from "./types.js";
|
|
14
|
-
export { KeypairAdapter, type SimulationReturnValues, type WalletAdapter, type WalletSignPersonalMessage, type WalletSignTransaction, type WalletStandardAccount, WalletStandardSigner, type WalletStandardSignerCallbacks, type WalletStandardSignerOptions, } from "./wallets/index.js";
|
|
14
|
+
export { type BrowserStorageLike, BrowserStoragePubkeyCache, type BrowserStoragePubkeyCacheOptions, KeypairAdapter, type PubkeyCache, type SimulationReturnValues, type WalletAdapter, type WalletSignPersonalMessage, type WalletSignTransaction, type WalletStandardAccount, WalletStandardSigner, type WalletStandardSignerCallbacks, type WalletStandardSignerOptions, } from "./wallets/index.js";
|
|
15
15
|
export { DefaultWalrusReadAdapter, DefaultWalrusWriteAdapter, type DefaultWalrusWriteAdapterOptions, decodeQuiltPatchId, encodeQuiltPatchId, HttpAggregatorReadAdapter, type HttpAggregatorReadAdapterOptions, HttpPublisherWriteAdapter, type HttpPublisherWriteAdapterOptions, isWalrusFlowCapable, type ParsePublisherResponse, type QuiltPatchIdParts, type QuiltPatchInput, quiltPatchIdFromString, quiltPatchIdToString, type StartBlobUploadResult, type UploadBlobOptions, type UploadBlobResult, type UploadQuiltOptions, type UploadQuiltPatch, type UploadQuiltResult, type WalrusAdapterConfig, type WalrusBlobIntegrityCheck, type WalrusFlowCapable, type WalrusReadAdapter, type WalrusReadAdapterConfig, type WalrusReadOptions, type WalrusUploadCommonOptions, type WalrusWriteAdapter, } from "./walrus/index.js";
|
|
16
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,6 @@ export { addEncryptedEntry, addEncryptedEntryFromBytes, addEntry, addEntryFromBy
|
|
|
10
10
|
export { RpcPublicationReader, } from "./read/index.js";
|
|
11
11
|
export { buildPublisherSealId, DefaultSealAdapter, decodePublisherSealId, } from "./seal/index.js";
|
|
12
12
|
export { AccessPolicy, QUILT_PATCH_ID_LENGTH, SealPolicyTag, StorageMode, } from "./types.js";
|
|
13
|
-
export { KeypairAdapter, WalletStandardSigner, } from "./wallets/index.js";
|
|
13
|
+
export { BrowserStoragePubkeyCache, KeypairAdapter, WalletStandardSigner, } from "./wallets/index.js";
|
|
14
14
|
export { DefaultWalrusReadAdapter, DefaultWalrusWriteAdapter, decodeQuiltPatchId, encodeQuiltPatchId, HttpAggregatorReadAdapter, HttpPublisherWriteAdapter, isWalrusFlowCapable, quiltPatchIdFromString, quiltPatchIdToString, } from "./walrus/index.js";
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACN,gBAAgB,EAGhB,WAAW,EACX,OAAO,GAGP,MAAM,aAAa,CAAC;AACrB,OAAO,EAEN,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,WAAW,EAGX,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,aAAa,EAEb,SAAS,EAET,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EAEpB,4BAA4B,EAC5B,eAAe,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EASN,iBAAiB,EACjB,0BAA0B,EAC1B,QAAQ,EACR,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAK5B,gBAAgB,EAChB,iBAAiB,EASjB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EAGnB,iBAAiB,EAMjB,aAAa,EACb,gBAAgB,EAIhB,kBAAkB,EAKlB,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EASN,oBAAoB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GAOrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,YAAY,EAYZ,qBAAqB,EAKrB,aAAa,EACb,WAAW,GAOX,MAAM,YAAY,CAAC;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACN,gBAAgB,EAGhB,WAAW,EACX,OAAO,GAGP,MAAM,aAAa,CAAC;AACrB,OAAO,EAEN,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,WAAW,EAGX,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,aAAa,EAEb,SAAS,EAET,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EAEpB,4BAA4B,EAC5B,eAAe,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EASN,iBAAiB,EACjB,0BAA0B,EAC1B,QAAQ,EACR,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAK5B,gBAAgB,EAChB,iBAAiB,EASjB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EAGnB,iBAAiB,EAMjB,aAAa,EACb,gBAAgB,EAIhB,kBAAkB,EAKlB,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EASN,oBAAoB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GAOrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,YAAY,EAYZ,qBAAqB,EAKrB,aAAa,EACb,WAAW,GAOX,MAAM,YAAY,CAAC;AACpB,OAAO,EAEN,yBAAyB,EAEzB,cAAc,EAOd,oBAAoB,GAGpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EAEzB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EAEzB,yBAAyB,EAEzB,mBAAmB,EAInB,sBAAsB,EACtB,oBAAoB,GAepB,MAAM,mBAAmB,CAAC"}
|
package/dist/wallets/index.d.ts
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export type { SimulationReturnValues, WalletAdapter } from "./adapter.js";
|
|
5
5
|
export { KeypairAdapter } from "./keypair-adapter.js";
|
|
6
|
-
export { type WalletSignPersonalMessage, type WalletSignTransaction, type WalletStandardAccount, WalletStandardSigner, type WalletStandardSignerCallbacks, type WalletStandardSignerOptions, } from "./wallet-standard-signer.js";
|
|
6
|
+
export { type BrowserStorageLike, BrowserStoragePubkeyCache, type BrowserStoragePubkeyCacheOptions, type PubkeyCache, type WalletSignPersonalMessage, type WalletSignTransaction, type WalletStandardAccount, WalletStandardSigner, type WalletStandardSignerCallbacks, type WalletStandardSignerOptions, } from "./wallet-standard-signer.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallets/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,GAChC,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallets/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACN,KAAK,kBAAkB,EACvB,yBAAyB,EACzB,KAAK,gCAAgC,EACrC,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,GAChC,MAAM,6BAA6B,CAAC"}
|
package/dist/wallets/index.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Public barrel for the wallet adapter layer.
|
|
3
3
|
*/
|
|
4
4
|
export { KeypairAdapter } from "./keypair-adapter.js";
|
|
5
|
-
export { WalletStandardSigner, } from "./wallet-standard-signer.js";
|
|
5
|
+
export { BrowserStoragePubkeyCache, WalletStandardSigner, } from "./wallet-standard-signer.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallets/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallets/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAEN,yBAAyB,EAMzB,oBAAoB,GAGpB,MAAM,6BAA6B,CAAC"}
|
|
@@ -103,6 +103,12 @@ export declare class WalletStandardSigner extends Signer {
|
|
|
103
103
|
* verifies it derives to `account.address`. One extra wallet popup for
|
|
104
104
|
* Phantom-class wallets; compliant wallets pay no extra cost.
|
|
105
105
|
*
|
|
106
|
+
* Pass `options.pubkeyCache` to skip the probe on subsequent sessions:
|
|
107
|
+
* the SDK reads cached bytes, verifies they derive to `account.address`,
|
|
108
|
+
* and on mismatch calls `clear` (if defined) and re-probes. Successful
|
|
109
|
+
* probes write back via `set`. See `BrowserStoragePubkeyCache` for a
|
|
110
|
+
* `localStorage`-backed default.
|
|
111
|
+
*
|
|
106
112
|
* Recovery handles Ed25519 only; other schemes throw
|
|
107
113
|
* `UnsupportedWalletSchemeError` with `code: "recovery-non-ed25519"`.
|
|
108
114
|
*
|
|
@@ -111,7 +117,9 @@ export declare class WalletStandardSigner extends Signer {
|
|
|
111
117
|
* from `fromAccount` (zkLogin shape mismatch, etc.) propagate
|
|
112
118
|
* verbatim without firing the probe.
|
|
113
119
|
*/
|
|
114
|
-
static fromAccountAsync(account: WalletStandardAccount, callbacks: WalletStandardSignerCallbacks
|
|
120
|
+
static fromAccountAsync(account: WalletStandardAccount, callbacks: WalletStandardSignerCallbacks, options?: {
|
|
121
|
+
pubkeyCache?: PubkeyCache;
|
|
122
|
+
}): Promise<WalletStandardSigner>;
|
|
115
123
|
getKeyScheme(): SignatureScheme;
|
|
116
124
|
getPublicKey(): PublicKey;
|
|
117
125
|
sign(_bytes: Uint8Array): Promise<Uint8Array<ArrayBuffer>>;
|
|
@@ -133,4 +141,46 @@ export declare class WalletStandardSigner extends Signer {
|
|
|
133
141
|
effects: true;
|
|
134
142
|
}>>;
|
|
135
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Pluggable storage for pubkeys recovered by `fromAccountAsync`. Used to
|
|
146
|
+
* skip the probe `signPersonalMessage` popup on subsequent sessions for
|
|
147
|
+
* wallets that return a non-canonical `account.publicKey` (Phantom).
|
|
148
|
+
* Methods may be sync or async to support browser `localStorage` (sync),
|
|
149
|
+
* `IndexedDB` (async), and server-side KV stores (async).
|
|
150
|
+
*
|
|
151
|
+
* Cache hits are still verified to derive to `account.address` before being
|
|
152
|
+
* trusted; on mismatch the SDK calls `clear` (if defined) and re-probes.
|
|
153
|
+
*/
|
|
154
|
+
export interface PubkeyCache {
|
|
155
|
+
get(address: string): Uint8Array | null | Promise<Uint8Array | null>;
|
|
156
|
+
set(address: string, pubkey: Uint8Array): void | Promise<void>;
|
|
157
|
+
clear?(address: string): void | Promise<void>;
|
|
158
|
+
}
|
|
159
|
+
/** Subset of the DOM `Storage` interface that `BrowserStoragePubkeyCache` needs. */
|
|
160
|
+
export interface BrowserStorageLike {
|
|
161
|
+
getItem(key: string): string | null;
|
|
162
|
+
setItem(key: string, value: string): void;
|
|
163
|
+
removeItem(key: string): void;
|
|
164
|
+
}
|
|
165
|
+
export interface BrowserStoragePubkeyCacheOptions {
|
|
166
|
+
/** Defaults to `globalThis.localStorage`. Pass a custom backend for tests or `sessionStorage`. */
|
|
167
|
+
readonly storage?: BrowserStorageLike;
|
|
168
|
+
/** Key prefix to namespace inside the storage. Defaults to `"morse-sdk:wallet-pubkey:"`. */
|
|
169
|
+
readonly prefix?: string;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Sync `PubkeyCache` backed by browser `localStorage` (or any DOM
|
|
173
|
+
* `Storage`-like). Pubkeys are stored as base64 strings under
|
|
174
|
+
* `<prefix><address>`. Throws `ConfigurationError` on construction if
|
|
175
|
+
* `globalThis.localStorage` is unavailable and no `storage` was passed
|
|
176
|
+
* (e.g. SSR/Node without polyfill); inject a storage backend or use a
|
|
177
|
+
* different cache implementation in non-browser contexts.
|
|
178
|
+
*/
|
|
179
|
+
export declare class BrowserStoragePubkeyCache implements PubkeyCache {
|
|
180
|
+
#private;
|
|
181
|
+
constructor(options?: BrowserStoragePubkeyCacheOptions);
|
|
182
|
+
get(address: string): Uint8Array | null;
|
|
183
|
+
set(address: string, pubkey: Uint8Array): void;
|
|
184
|
+
clear(address: string): void;
|
|
185
|
+
}
|
|
136
186
|
//# sourceMappingURL=wallet-standard-signer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-standard-signer.d.ts","sourceRoot":"","sources":["../../src/wallets/wallet-standard-signer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACN,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,MAAM,EACN,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAM5D;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE;IAC3C,WAAW,EAAE,WAAW,CAAC;CACzB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAElC;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,UAAU,CAAC;CACpB,KAAK,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEpD,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;CACxD;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,8EAA8E;AAC9E,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;CACxD;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,MAAM;;gBAMnC,OAAO,EAAE,2BAA2B;IAQhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,MAAM,CAAC,WAAW,CACjB,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,6BAA6B,GACtC,oBAAoB;IAUvB
|
|
1
|
+
{"version":3,"file":"wallet-standard-signer.d.ts","sourceRoot":"","sources":["../../src/wallets/wallet-standard-signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,6 +85,12 @@ export class WalletStandardSigner extends Signer {
|
|
|
85
85
|
* verifies it derives to `account.address`. One extra wallet popup for
|
|
86
86
|
* Phantom-class wallets; compliant wallets pay no extra cost.
|
|
87
87
|
*
|
|
88
|
+
* Pass `options.pubkeyCache` to skip the probe on subsequent sessions:
|
|
89
|
+
* the SDK reads cached bytes, verifies they derive to `account.address`,
|
|
90
|
+
* and on mismatch calls `clear` (if defined) and re-probes. Successful
|
|
91
|
+
* probes write back via `set`. See `BrowserStoragePubkeyCache` for a
|
|
92
|
+
* `localStorage`-backed default.
|
|
93
|
+
*
|
|
88
94
|
* Recovery handles Ed25519 only; other schemes throw
|
|
89
95
|
* `UnsupportedWalletSchemeError` with `code: "recovery-non-ed25519"`.
|
|
90
96
|
*
|
|
@@ -93,7 +99,7 @@ export class WalletStandardSigner extends Signer {
|
|
|
93
99
|
* from `fromAccount` (zkLogin shape mismatch, etc.) propagate
|
|
94
100
|
* verbatim without firing the probe.
|
|
95
101
|
*/
|
|
96
|
-
static async fromAccountAsync(account, callbacks) {
|
|
102
|
+
static async fromAccountAsync(account, callbacks, options) {
|
|
97
103
|
try {
|
|
98
104
|
return WalletStandardSigner.fromAccount(account, callbacks);
|
|
99
105
|
}
|
|
@@ -102,7 +108,29 @@ export class WalletStandardSigner extends Signer {
|
|
|
102
108
|
error.code !== "non-canonical-pubkey") {
|
|
103
109
|
throw error;
|
|
104
110
|
}
|
|
111
|
+
const cache = options?.pubkeyCache;
|
|
112
|
+
if (cache !== undefined) {
|
|
113
|
+
const cached = await cache.get(account.address);
|
|
114
|
+
if (cached !== null) {
|
|
115
|
+
const verified = verifyCachedEd25519PubKey(cached, account.address);
|
|
116
|
+
if (verified !== null) {
|
|
117
|
+
return new WalletStandardSigner({
|
|
118
|
+
publicKey: verified,
|
|
119
|
+
keyScheme: "ED25519",
|
|
120
|
+
signTransaction: callbacks.signTransaction,
|
|
121
|
+
signPersonalMessage: callbacks.signPersonalMessage,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Cached bytes did not derive to account.address (stale entry,
|
|
125
|
+
// wallet switch, or planted bytes). Drop it and fall through
|
|
126
|
+
// to a fresh probe.
|
|
127
|
+
await cache.clear?.(account.address);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
105
130
|
const recovered = await recoverEd25519PublicKeyFromSignature(account, callbacks.signPersonalMessage);
|
|
131
|
+
if (cache !== undefined) {
|
|
132
|
+
await cache.set(account.address, recovered.toRawBytes());
|
|
133
|
+
}
|
|
106
134
|
return new WalletStandardSigner({
|
|
107
135
|
publicKey: recovered,
|
|
108
136
|
keyScheme: "ED25519",
|
|
@@ -247,6 +275,25 @@ async function recoverEd25519PublicKeyFromSignature(account, signPersonalMessage
|
|
|
247
275
|
}
|
|
248
276
|
return publicKey;
|
|
249
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Validate cached pubkey bytes: must be exactly 32 bytes and must derive to
|
|
280
|
+
* the expected Sui address. Returns the constructed key on success, null
|
|
281
|
+
* on any failure so the caller can clear and re-probe.
|
|
282
|
+
*/
|
|
283
|
+
function verifyCachedEd25519PubKey(bytes, expectedAddress) {
|
|
284
|
+
if (bytes.length !== 32) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
const publicKey = new Ed25519PublicKey(bytes);
|
|
289
|
+
const derived = normalizeSuiAddress(publicKey.toSuiAddress());
|
|
290
|
+
const expected = normalizeSuiAddress(expectedAddress);
|
|
291
|
+
return derived === expected ? publicKey : null;
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
250
297
|
/**
|
|
251
298
|
* Build the list of (scheme, public-key-constructor) pairs to try against
|
|
252
299
|
* `account.address`. Covers raw bytes (Suiet-style) and flag-prefixed bytes
|
|
@@ -296,4 +343,52 @@ function candidateInterpretations(bytes) {
|
|
|
296
343
|
}
|
|
297
344
|
return list;
|
|
298
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Sync `PubkeyCache` backed by browser `localStorage` (or any DOM
|
|
348
|
+
* `Storage`-like). Pubkeys are stored as base64 strings under
|
|
349
|
+
* `<prefix><address>`. Throws `ConfigurationError` on construction if
|
|
350
|
+
* `globalThis.localStorage` is unavailable and no `storage` was passed
|
|
351
|
+
* (e.g. SSR/Node without polyfill); inject a storage backend or use a
|
|
352
|
+
* different cache implementation in non-browser contexts.
|
|
353
|
+
*/
|
|
354
|
+
export class BrowserStoragePubkeyCache {
|
|
355
|
+
#storage;
|
|
356
|
+
#prefix;
|
|
357
|
+
constructor(options = {}) {
|
|
358
|
+
const storage = options.storage ?? globalThis.localStorage;
|
|
359
|
+
if (!storage) {
|
|
360
|
+
throw new ConfigurationError("BrowserStoragePubkeyCache: globalThis.localStorage is not available. In SSR / Node contexts, guard construction with `typeof localStorage !== 'undefined'`, defer to a client-only component, or pass an explicit `storage` backend (e.g. a Redis-backed PubkeyCache implementation).");
|
|
361
|
+
}
|
|
362
|
+
this.#storage = storage;
|
|
363
|
+
this.#prefix = options.prefix ?? "morse-sdk:wallet-pubkey:";
|
|
364
|
+
}
|
|
365
|
+
get(address) {
|
|
366
|
+
const value = this.#storage.getItem(this.#prefix + address);
|
|
367
|
+
// Some Storage shims (jsdom variants, RN AsyncStorage wrappers) return
|
|
368
|
+
// "" instead of null on a missing key; treat both as a miss.
|
|
369
|
+
if (!value) {
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
try {
|
|
373
|
+
return fromBase64(value);
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// Corrupt entry; treat as miss. SDK will re-probe and overwrite.
|
|
377
|
+
return null;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
set(address, pubkey) {
|
|
381
|
+
this.#storage.setItem(this.#prefix + address, toBase64(pubkey));
|
|
382
|
+
}
|
|
383
|
+
clear(address) {
|
|
384
|
+
this.#storage.removeItem(this.#prefix + address);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
function toBase64(bytes) {
|
|
388
|
+
let binary = "";
|
|
389
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
390
|
+
binary += String.fromCharCode(bytes[i] ?? 0);
|
|
391
|
+
}
|
|
392
|
+
return btoa(binary);
|
|
393
|
+
}
|
|
299
394
|
//# sourceMappingURL=wallet-standard-signer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-standard-signer.js","sourceRoot":"","sources":["../../src/wallets/wallet-standard-signer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAIN,MAAM,GACN,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AA4ChF;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,MAAM;IACtC,UAAU,CAAY;IACtB,UAAU,CAAkB;IAC5B,gBAAgB,CAAwB;IACxC,oBAAoB,CAA4B;IAEzD,YAAY,OAAoC;QAC/C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;QAChD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IACzD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,MAAM,CAAC,WAAW,CACjB,OAA8B,EAC9B,SAAwC;QAExC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO,IAAI,oBAAoB,CAAC;YAC/B,SAAS;YACT,SAAS;YACT,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;SAClD,CAAC,CAAC;IACJ,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"wallet-standard-signer.js","sourceRoot":"","sources":["../../src/wallets/wallet-standard-signer.ts"],"names":[],"mappings":"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"}
|