@dynamic-labs-wallet/midnight 1.0.39 → 1.0.41

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/index.cjs.js CHANGED
@@ -6,6 +6,7 @@ var walletSdkAddressFormat = require('@midnight-ntwrk/wallet-sdk-address-format'
6
6
  var walletSdkDustWallet = require('@midnight-ntwrk/wallet-sdk-dust-wallet');
7
7
  var walletSdkFacade = require('@midnight-ntwrk/wallet-sdk-facade');
8
8
  var walletSdkShielded = require('@midnight-ntwrk/wallet-sdk-shielded');
9
+ var walletSdkAbstractions = require('@midnight-ntwrk/wallet-sdk-abstractions');
9
10
  var walletSdkUnshieldedWallet = require('@midnight-ntwrk/wallet-sdk-unshielded-wallet');
10
11
  var bip32 = require('@scure/bip32');
11
12
  var bs58 = require('bs58');
@@ -232,7 +233,12 @@ function _ts_generator$1(thisArg, body) {
232
233
  }
233
234
  }
234
235
  var DB_NAME = 'dynamic-midnight-wallet-state';
235
- var DB_VERSION = 1;
236
+ // Open WITHOUT a fixed version. Passing a version LOWER than the one already in
237
+ // the browser throws `VersionError` (IndexedDB forbids downgrades) — which is
238
+ // exactly what broke the cache after an earlier `DB_VERSION = 2` experiment was
239
+ // reverted to 1: dev browsers still had v2, every open failed, and the wallet
240
+ // cold-synced on every load. Opening with no version adopts whatever version
241
+ // exists (or creates the DB fresh), so a downgrade error is impossible.
236
242
  var STORE_NAME = 'state';
237
243
  // Normalizes a DOMException | unknown into an Error so promise rejections
238
244
  // always carry an Error instance. Object-shaped errors (DOMException, plain
@@ -262,8 +268,10 @@ function openDb() {
262
268
  // the session (private-browsing bootup, transient quota errors, etc).
263
269
  // Re-throw so the original caller still sees the rejection.
264
270
  dbPromise = new Promise(function(resolve, reject) {
265
- var req = indexedDB.open(DB_NAME, DB_VERSION);
271
+ var req = indexedDB.open(DB_NAME);
266
272
  req.onupgradeneeded = function() {
273
+ // Fires only when the DB is first created (or an existing DB lacks the
274
+ // store). Create the store if absent; never destructive.
267
275
  var db = req.result;
268
276
  if (!db.objectStoreNames.contains(STORE_NAME)) {
269
277
  db.createObjectStore(STORE_NAME, {
@@ -322,7 +330,7 @@ function getWalletState(accountAddress) {
322
330
  }
323
331
  function _getWalletState() {
324
332
  _getWalletState = _async_to_generator$1(function(accountAddress) {
325
- var result;
333
+ var result, err;
326
334
  return _ts_generator$1(this, function(_state) {
327
335
  switch(_state.label){
328
336
  case 0:
@@ -345,8 +353,13 @@ function _getWalletState() {
345
353
  result !== null && result !== void 0 ? result : null
346
354
  ];
347
355
  case 2:
348
- _state.sent();
349
- // IndexedDB unavailable (private mode, corrupt DB, etc.) — behave as if empty.
356
+ err = _state.sent();
357
+ // IndexedDB unavailable (private mode, third-party storage partitioning,
358
+ // corrupt DB, etc.) — behave as if empty. Surface to the console so a
359
+ // blocked/partitioned store (which would force a cold sync every load)
360
+ // is visible instead of silently swallowed.
361
+ // eslint-disable-next-line no-console
362
+ console.warn('[Midnight] CACHE read FAILED (IndexedDB unavailable) — treating as empty:', err);
350
363
  return [
351
364
  2,
352
365
  null
@@ -365,7 +378,7 @@ function putWalletState(accountAddress, state) {
365
378
  }
366
379
  function _putWalletState() {
367
380
  _putWalletState = _async_to_generator$1(function(accountAddress, state) {
368
- var record;
381
+ var record, err;
369
382
  return _ts_generator$1(this, function(_state) {
370
383
  switch(_state.label){
371
384
  case 0:
@@ -391,12 +404,19 @@ function _putWalletState() {
391
404
  ];
392
405
  case 2:
393
406
  _state.sent();
407
+ // eslint-disable-next-line no-console
408
+ console.info("[Midnight] CACHE write OK — checkpoint saved (shielded=".concat(record.shielded.length, "B dust=").concat(record.dust.length, "B)"));
394
409
  return [
395
410
  3,
396
411
  4
397
412
  ];
398
413
  case 3:
399
- _state.sent();
414
+ err = _state.sent();
415
+ // Persist is best-effort. A failure just means next init will cold-sync —
416
+ // but surface it so a blocked/partitioned IndexedDB (third-party iframe)
417
+ // is visible rather than silently swallowed.
418
+ // eslint-disable-next-line no-console
419
+ console.warn('[Midnight] CACHE write FAILED (IndexedDB unavailable):', err);
400
420
  return [
401
421
  3,
402
422
  4
@@ -763,6 +783,22 @@ function _ts_values(o) {
763
783
  };
764
784
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
765
785
  }
786
+ /** Whether a sub-wallet side has finished syncing. `highestRelevantIndex`
787
+ * is 0 during sync, so `isStrictlyComplete()` is the authoritative signal. */ var isSideSynced = function(side) {
788
+ var _side_state;
789
+ var _side_progress;
790
+ var p = (_side_progress = side === null || side === void 0 ? void 0 : side.progress) !== null && _side_progress !== void 0 ? _side_progress : side === null || side === void 0 ? void 0 : (_side_state = side.state) === null || _side_state === void 0 ? void 0 : _side_state.progress;
791
+ if (!p) return false;
792
+ if (typeof p.isStrictlyComplete === 'function') return p.isStrictlyComplete();
793
+ var _p_appliedIndex;
794
+ var applied = BigInt((_p_appliedIndex = p.appliedIndex) !== null && _p_appliedIndex !== void 0 ? _p_appliedIndex : 0n);
795
+ var _p_highestRelevantIndex;
796
+ var highestRelevant = BigInt((_p_highestRelevantIndex = p.highestRelevantIndex) !== null && _p_highestRelevantIndex !== void 0 ? _p_highestRelevantIndex : 0n);
797
+ return highestRelevant > 0n && applied >= highestRelevant;
798
+ };
799
+ /** Resolve predicate for the sync wait, per mode. */ var isSyncResolved = function(s, mode) {
800
+ return mode === 'full' ? Boolean(s.isSynced) : isSideSynced(s.shielded) && isSideSynced(s.unshielded);
801
+ };
766
802
  var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
767
803
  _inherits(DynamicMidnightWalletClient, DynamicWalletClient);
768
804
  function DynamicMidnightWalletClient() {
@@ -852,6 +888,10 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
852
888
  isDirty = pendingTxCount > 0 || unshieldedPending > 0 || shieldedPending > 0 || dustPending > 0;
853
889
  if (isDirty) {
854
890
  _this.logger.debug("[Midnight] persist skipped — state is dirty \xb7 " + "pendingTxs=".concat(pendingTxCount, " \xb7 unshieldedPending=").concat(unshieldedPending, " \xb7 ") + "shieldedPending=".concat(shieldedPending, " \xb7 dustPending=").concat(dustPending, ". ") + "IndexedDB retains last clean snapshot.");
891
+ // console.* because this.logger is a NoopLogger in the iframe — cache
892
+ // diagnostics must be visible in the browser console.
893
+ // eslint-disable-next-line no-console
894
+ console.info("[Midnight] CACHE persist SKIPPED (state dirty) \xb7 pendingTxs=".concat(pendingTxCount, " ") + "unshieldedPending=".concat(unshieldedPending, " shieldedPending=").concat(shieldedPending, " dustPending=").concat(dustPending, " — no checkpoint saved, next load cold-syncs"));
855
895
  return [
856
896
  2
857
897
  ];
@@ -895,6 +935,8 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
895
935
  case 5:
896
936
  err = _state.sent();
897
937
  _this.logger.warn('[Midnight] Failed to persist wallet state:', err);
938
+ // eslint-disable-next-line no-console
939
+ console.warn('[Midnight] CACHE persist FAILED (write/serialize threw):', err);
898
940
  return [
899
941
  3,
900
942
  6
@@ -1661,6 +1703,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1661
1703
  {
1662
1704
  key: "initMidnightWallet",
1663
1705
  value: function initMidnightWallet(label, mpcParams) {
1706
+ var mode = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'full';
1664
1707
  var _this = this;
1665
1708
  return _async_to_generator(function() {
1666
1709
  var accountAddress, inFlight, initPromise;
@@ -1669,7 +1712,9 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1669
1712
  case 0:
1670
1713
  accountAddress = mpcParams.accountAddress;
1671
1714
  // If another init for this same account is in flight, return its promise
1672
- // instead of kicking off a second, redundant WalletFacade.init.
1715
+ // instead of kicking off a second, redundant WalletFacade.init. The first
1716
+ // caller's `mode` wins; that's fine — the wallet is created/cached once and
1717
+ // keeps syncing dust in the background regardless of who waited for what.
1673
1718
  inFlight = _this.pendingInits.get(accountAddress);
1674
1719
  if (inFlight) {
1675
1720
  _this.logger.info("[Midnight] ".concat(label, ": joining in-flight init for ").concat(accountAddress));
@@ -1678,7 +1723,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1678
1723
  inFlight
1679
1724
  ];
1680
1725
  }
1681
- initPromise = _this.runMidnightWalletInit(label, mpcParams);
1726
+ initPromise = _this.runMidnightWalletInit(label, mpcParams, mode);
1682
1727
  _this.pendingInits.set(accountAddress, initPromise);
1683
1728
  _state.label = 1;
1684
1729
  case 1:
@@ -1714,9 +1759,10 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1714
1759
  {
1715
1760
  key: "runMidnightWalletInit",
1716
1761
  value: function runMidnightWalletInit(label, mpcParams) {
1762
+ var mode = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'full';
1717
1763
  var _this = this;
1718
1764
  return _async_to_generator(function() {
1719
- var _this_cachedWallet, roleKeys, accountAddress, state, _this_cachedWallet_diagnosticSub, shieldedSecretKeys, dustSecretKey, unshieldedKeystore, config, savedState, wallet, syncStart, lastLogTime, fmtSide, state1, err, lastPendingCount, lastPendingSig, diagnosticSub;
1765
+ var _this_cachedWallet, roleKeys, accountAddress, state, _this_cachedWallet_diagnosticSub, shieldedSecretKeys, dustSecretKey, unshieldedKeystore, config, savedState, _savedState_shielded, _savedState_dust, _savedState_shielded_length, _savedState_dust_length, wallet, syncStart, lastLogTime, SIDE_NAMES, lastApplied, sideDoneAtMs, readProgress, fmtSide, state1, err, lastPendingCount, lastPendingSig, lastDustLogTime, dustDoneLogged, diagnosticSub;
1720
1766
  return _ts_generator(this, function(_state) {
1721
1767
  switch(_state.label){
1722
1768
  case 0:
@@ -1747,7 +1793,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1747
1793
  reject(new Error('Wallet re-sync timeout'));
1748
1794
  }, 30000);
1749
1795
  sub = _this.cachedWallet.wallet.state().subscribe(function(s) {
1750
- if (s.isSynced) {
1796
+ if (isSyncResolved(s, mode)) {
1751
1797
  clearTimeout(tid);
1752
1798
  // Defer to a microtask so `sub` is definitely assigned whether the
1753
1799
  // emission is synchronous or async.
@@ -1820,7 +1866,14 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1820
1866
  indexerHttpUrl: 'https://indexer.preview.midnight.network/api/v4/graphql',
1821
1867
  indexerWsUrl: 'wss://indexer.preview.midnight.network/api/v4/graphql/ws'
1822
1868
  },
1823
- txHistoryStorage: new walletSdkUnshieldedWallet.NoOpTransactionHistoryStorage()
1869
+ // v4 sync batching. `size` = updates fetched per indexer round-trip.
1870
+ // Measured: 2000 vs 10000 gave the same ~750 entries/sec (≈130s dust cold
1871
+ // sync), so dust is apply-bound (per-entry WASM compute), not fetch-bound
1872
+ // — batch size doesn't move the total. Kept at 2000.
1873
+ batchUpdates: {
1874
+ size: 2000
1875
+ },
1876
+ txHistoryStorage: new walletSdkAbstractions.NoOpTransactionHistoryStorage()
1824
1877
  };
1825
1878
  return [
1826
1879
  4,
@@ -1830,8 +1883,13 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1830
1883
  savedState = _state.sent();
1831
1884
  if (savedState) {
1832
1885
  _this.logger.info("[Midnight] ".concat(label, ": found persisted state — resuming sync from checkpoint"));
1886
+ // console.* because this.logger is a NoopLogger in the iframe.
1887
+ // eslint-disable-next-line no-console
1888
+ console.info("[Midnight] ".concat(label, ": CACHE HIT — restoring from IndexedDB checkpoint ") + "(updatedAt=".concat(savedState.updatedAt ? new Date(savedState.updatedAt).toISOString() : 'n/a', " ") + "shielded=".concat((_savedState_shielded_length = (_savedState_shielded = savedState.shielded) === null || _savedState_shielded === void 0 ? void 0 : _savedState_shielded.length) !== null && _savedState_shielded_length !== void 0 ? _savedState_shielded_length : 0, "B dust=").concat((_savedState_dust_length = (_savedState_dust = savedState.dust) === null || _savedState_dust === void 0 ? void 0 : _savedState_dust.length) !== null && _savedState_dust_length !== void 0 ? _savedState_dust_length : 0, "B)"));
1833
1889
  } else {
1834
1890
  _this.logger.info("[Midnight] ".concat(label, ": no persisted state — cold sync from genesis"));
1891
+ // eslint-disable-next-line no-console
1892
+ console.info("[Midnight] ".concat(label, ": CACHE MISS — no IndexedDB checkpoint for this account, cold sync from genesis"));
1835
1893
  }
1836
1894
  _this.logger.info("[Midnight] ".concat(label, ": initializing wallet..."));
1837
1895
  return [
@@ -1860,31 +1918,56 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1860
1918
  _this.logger.debug("[Midnight] ".concat(label, ": syncing..."));
1861
1919
  syncStart = Date.now();
1862
1920
  lastLogTime = 0;
1863
- // Per-side sync-progress summary. Fields are bigints; `gap` is how many
1864
- // updates still need to be applied to reach the latest relevant index
1865
- // (not the chain tip — `highestRelevantIndex` is what matters for balance).
1866
- // Read the progress object the SDK itself uses for isSynced. For shielded
1867
- // and dust it lives at `side.state.progress`; for unshielded it's
1868
- // `side.progress`. Fall back across both to be safe.
1869
- fmtSide = function(side) {
1921
+ SIDE_NAMES = [
1922
+ 'shielded',
1923
+ 'unshielded',
1924
+ 'dust'
1925
+ ];
1926
+ // Per-tick throughput tracking: appliedIndex per side at the previous log,
1927
+ // so each periodic line shows how many chunks were applied in the interval
1928
+ // (a non-zero delta = still actively polling/applying index chunks). And
1929
+ // the wall-clock at which each side individually completed, so we can see
1930
+ // which dimension is the slow one.
1931
+ lastApplied = {};
1932
+ sideDoneAtMs = {};
1933
+ // In v4 every WalletState (shielded/unshielded/dust) exposes the full
1934
+ // SyncProgress via the `progress` getter (appliedIndex, highestRelevantIndex,
1935
+ // highestIndex). Read that FIRST — `side.state.progress` is the inner
1936
+ // CoreWallet's partial progress (has appliedIndex but leaves the highest*
1937
+ // fields at 0, which is why `gap`/`tip` showed 0 before).
1938
+ readProgress = function(side) {
1870
1939
  var _side_state;
1871
- var _side_state_progress;
1872
- var p = (_side_state_progress = side === null || side === void 0 ? void 0 : (_side_state = side.state) === null || _side_state === void 0 ? void 0 : _side_state.progress) !== null && _side_state_progress !== void 0 ? _side_state_progress : side === null || side === void 0 ? void 0 : side.progress;
1873
- if (!p) return 'n/a';
1940
+ var _side_progress;
1941
+ var p = (_side_progress = side === null || side === void 0 ? void 0 : side.progress) !== null && _side_progress !== void 0 ? _side_progress : side === null || side === void 0 ? void 0 : (_side_state = side.state) === null || _side_state === void 0 ? void 0 : _side_state.progress;
1942
+ if (!p) return undefined;
1874
1943
  var _p_appliedIndex;
1875
- var applied = (_p_appliedIndex = p.appliedIndex) !== null && _p_appliedIndex !== void 0 ? _p_appliedIndex : 0n;
1944
+ var applied = BigInt((_p_appliedIndex = p.appliedIndex) !== null && _p_appliedIndex !== void 0 ? _p_appliedIndex : 0n);
1876
1945
  var _p_highestRelevantIndex;
1877
- var highestRelevant = (_p_highestRelevantIndex = p.highestRelevantIndex) !== null && _p_highestRelevantIndex !== void 0 ? _p_highestRelevantIndex : 0n;
1878
- var _p_highestRelevantWalletIndex;
1879
- var highestRelevantWallet = (_p_highestRelevantWalletIndex = p.highestRelevantWalletIndex) !== null && _p_highestRelevantWalletIndex !== void 0 ? _p_highestRelevantWalletIndex : 0n;
1946
+ var highestRelevant = BigInt((_p_highestRelevantIndex = p.highestRelevantIndex) !== null && _p_highestRelevantIndex !== void 0 ? _p_highestRelevantIndex : 0n);
1880
1947
  var _p_highestIndex;
1881
- var highest = (_p_highestIndex = p.highestIndex) !== null && _p_highestIndex !== void 0 ? _p_highestIndex : 0n;
1882
- var connected = p.isConnected ? '' : '✗';
1883
- var done = '?';
1884
- if (typeof p.isStrictlyComplete === 'function') {
1885
- done = p.isStrictlyComplete() ? '✓' : '✗';
1886
- }
1887
- return "done=".concat(done, " \xb7 applied=").concat(applied, " \xb7 hrw=").concat(highestRelevantWallet, " \xb7 hr=").concat(highestRelevant, " \xb7 tip=").concat(highest, " \xb7 ws=").concat(connected);
1948
+ var highest = BigInt((_p_highestIndex = p.highestIndex) !== null && _p_highestIndex !== void 0 ? _p_highestIndex : 0n);
1949
+ var done = typeof p.isStrictlyComplete === 'function' ? p.isStrictlyComplete() : highestRelevant > 0n && applied >= highestRelevant;
1950
+ return {
1951
+ applied: applied,
1952
+ connected: Boolean(p.isConnected),
1953
+ done: done,
1954
+ highest: highest,
1955
+ highestRelevant: highestRelevant
1956
+ };
1957
+ };
1958
+ // `remaining` = updates still to apply to reach the latest relevant index
1959
+ // (the target for isSynced — not the chain tip). `+N` = entries applied
1960
+ // since the previous periodic log. `pct` = applied / highestRelevant.
1961
+ fmtSide = function(name, side) {
1962
+ var p = readProgress(side);
1963
+ if (!p) return "".concat(name, "=n/a");
1964
+ var _lastApplied_name;
1965
+ var prev = (_lastApplied_name = lastApplied[name]) !== null && _lastApplied_name !== void 0 ? _lastApplied_name : p.applied;
1966
+ var delta = p.applied - prev;
1967
+ lastApplied[name] = p.applied;
1968
+ var remaining = p.highestRelevant > p.applied ? p.highestRelevant - p.applied : 0n;
1969
+ var pct = p.highestRelevant > 0n ? "".concat((Number(p.applied) / Number(p.highestRelevant) * 100).toFixed(1), "%") : 'n/a';
1970
+ return "".concat(name, "[done=").concat(p.done ? '✓' : '✗', " ").concat(p.applied, "/").concat(p.highestRelevant, " (").concat(pct, ", +").concat(delta, ") remaining=").concat(remaining, " tip=").concat(p.highest, " ws=").concat(p.connected ? '✓' : '✗', "]");
1888
1971
  };
1889
1972
  _state.label = 12;
1890
1973
  case 12:
@@ -1909,16 +1992,54 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1909
1992
  }, 300000);
1910
1993
  sub = wallet.state().subscribe(function(s) {
1911
1994
  var now = Date.now();
1995
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1996
+ try {
1997
+ // Record the moment each side individually completes (checked every
1998
+ // tick so the timestamp is precise, not rounded to the 5s log).
1999
+ for(var _iterator = SIDE_NAMES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
2000
+ var name = _step.value;
2001
+ var _readProgress;
2002
+ if (sideDoneAtMs[name] === undefined && ((_readProgress = readProgress(s[name])) === null || _readProgress === void 0 ? void 0 : _readProgress.done)) {
2003
+ sideDoneAtMs[name] = now;
2004
+ // console.* (not this.logger, which is a NoopLogger / remote
2005
+ // shipper here) so these sync-timing diagnostics are visible in
2006
+ // the browser console.
2007
+ // eslint-disable-next-line no-console
2008
+ console.info("[Midnight] ".concat(label, ": ").concat(name, " side synced in ").concat(((now - syncStart) / 1000).toFixed(1), "s"));
2009
+ }
2010
+ }
2011
+ } catch (err) {
2012
+ _didIteratorError = true;
2013
+ _iteratorError = err;
2014
+ } finally{
2015
+ try {
2016
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
2017
+ _iterator.return();
2018
+ }
2019
+ } finally{
2020
+ if (_didIteratorError) {
2021
+ throw _iteratorError;
2022
+ }
2023
+ }
2024
+ }
1912
2025
  if (now - lastLogTime > 5000) {
1913
2026
  lastLogTime = now;
1914
- _this.logger.debug("[Midnight] ".concat(label, ": sync @ ").concat(((now - syncStart) / 1000).toFixed(1), "s \xb7 ") + "isSynced=".concat(s.isSynced, " \xb7 ") + "shielded=".concat(fmtSide(s.shielded), " \xb7 ") + "unshielded=".concat(fmtSide(s.unshielded), " \xb7 ") + "dust=".concat(fmtSide(s.dust)));
2027
+ // eslint-disable-next-line no-console
2028
+ console.info("[Midnight] ".concat(label, ": sync @ ").concat(((now - syncStart) / 1000).toFixed(1), "s \xb7 ") + "isSynced=".concat(s.isSynced, " \xb7 ") + "".concat(fmtSide('shielded', s.shielded), " \xb7 ") + "".concat(fmtSide('unshielded', s.unshielded), " \xb7 ") + "".concat(fmtSide('dust', s.dust)));
1915
2029
  }
1916
- if (s.isSynced) {
2030
+ if (isSyncResolved(s, mode)) {
1917
2031
  clearTimeout(timeoutId);
1918
2032
  queueMicrotask(function() {
1919
2033
  return sub === null || sub === void 0 ? void 0 : sub.unsubscribe();
1920
2034
  });
1921
- _this.logger.debug("[Midnight] ".concat(label, ": synced in ").concat(((Date.now() - syncStart) / 1000).toFixed(1), "s \xb7 ") + "shielded=".concat(fmtSide(s.shielded), " \xb7 ") + "unshielded=".concat(fmtSide(s.unshielded), " \xb7 ") + "dust=".concat(fmtSide(s.dust)));
2035
+ var elapsed = (Date.now() - syncStart) / 1000;
2036
+ var perSide = SIDE_NAMES.map(function(name) {
2037
+ var at = sideDoneAtMs[name];
2038
+ var when = at === undefined ? 'n/a' : "".concat(((at - syncStart) / 1000).toFixed(1), "s");
2039
+ return "".concat(name, "=").concat(when);
2040
+ }).join(' · ');
2041
+ // eslint-disable-next-line no-console
2042
+ console.info("[Midnight] ".concat(label, ": fully synced in ").concat(elapsed.toFixed(1), "s \xb7 per-side: ").concat(perSide));
1922
2043
  resolve(s);
1923
2044
  }
1924
2045
  });
@@ -1967,8 +2088,28 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1967
2088
  // full log-format state for the lifetime of the client.
1968
2089
  lastPendingCount = -1;
1969
2090
  lastPendingSig = '';
2091
+ // Dust telemetry. The foreground sync logger (above) unsubscribes the
2092
+ // instant shielded + unshielded resolve, so this long-lived subscription is
2093
+ // the ONLY window into the background dust fold. Log dust progress every
2094
+ // ~5s while it's still folding (so we can see `applied` climbing vs frozen),
2095
+ // and once when it finally reports strictly-complete (or never, which is
2096
+ // itself the answer). Reuses fmtSide for a format consistent with the
2097
+ // foreground log.
2098
+ lastDustLogTime = 0;
2099
+ dustDoneLogged = false;
1970
2100
  diagnosticSub = wallet.state().subscribe(function(s) {
1971
2101
  var _s_pending;
2102
+ var dustNow = Date.now();
2103
+ var dustDone = isSideSynced(s.dust);
2104
+ if (dustDone && !dustDoneLogged) {
2105
+ dustDoneLogged = true;
2106
+ // eslint-disable-next-line no-console
2107
+ console.info("[Midnight] ".concat(label, ": dust fully synced in ").concat(((dustNow - syncStart) / 1000).toFixed(1), "s \xb7 ").concat(fmtSide('dust', s.dust)));
2108
+ } else if (!dustDone && dustNow - lastDustLogTime > 5000) {
2109
+ lastDustLogTime = dustNow;
2110
+ // eslint-disable-next-line no-console
2111
+ console.info("[Midnight] ".concat(label, ": dust @ ").concat(((dustNow - syncStart) / 1000).toFixed(1), "s \xb7 ").concat(fmtSide('dust', s.dust)));
2112
+ }
1972
2113
  var _s_pending_all;
1973
2114
  var pending = (_s_pending_all = s === null || s === void 0 ? void 0 : (_s_pending = s.pending) === null || _s_pending === void 0 ? void 0 : _s_pending.all) !== null && _s_pending_all !== void 0 ? _s_pending_all : [];
1974
2115
  var sig = JSON.stringify(pending.map(function(p) {
@@ -2110,7 +2251,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2110
2251
  var accountAddress = param.accountAddress, password = param.password, signedSessionId = param.signedSessionId, mfaToken = param.mfaToken, elevatedAccessToken = param.elevatedAccessToken;
2111
2252
  var _this = this;
2112
2253
  return _async_to_generator(function() {
2113
- var _state_unshielded, _state_shielded, _state_dust_balance, _state_dust, _ref, state, addr, unshieldedByToken, _state_unshielded_balances, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, tokenType, value, shieldedByToken, _state_shielded_balances, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value1, tokenType1, value1, _state_dust_balance1, result;
2254
+ var _state_unshielded, _state_shielded, _state_dust_balance, _state_dust, _state_dust1, _ref, state, addr, unshieldedByToken, _state_unshielded_balances, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, tokenType, value, shieldedByToken, _state_shielded_balances, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value1, tokenType1, value1, now, _state_dust_balance1, dustBalance, _state_dust_totalCoins, dustCap, result;
2114
2255
  return _ts_generator(this, function(_state) {
2115
2256
  switch(_state.label){
2116
2257
  case 0:
@@ -2122,7 +2263,10 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2122
2263
  signedSessionId: signedSessionId,
2123
2264
  mfaToken: mfaToken,
2124
2265
  elevatedAccessToken: elevatedAccessToken
2125
- })
2266
+ }, // Resolve once shielded + unshielded are ready; let dust finish in the
2267
+ // background so the public/shielded balance shows without the ~130s
2268
+ // dust cold-sync.
2269
+ 'shielded-unshielded')
2126
2270
  ];
2127
2271
  case 1:
2128
2272
  _ref = _state.sent(), state = _ref.state, addr = _ref.accountAddress;
@@ -2168,10 +2312,22 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2168
2312
  }
2169
2313
  }
2170
2314
  }
2315
+ // v4 exposes the dust generation cap per coin (DustFullInfo.maxCap). The
2316
+ // wallet-level cap is the sum across the wallet's dust coins.
2317
+ now = new Date();
2318
+ dustBalance = (_state_dust_balance1 = (_state_dust = state.dust) === null || _state_dust === void 0 ? void 0 : (_state_dust_balance = _state_dust.balance) === null || _state_dust_balance === void 0 ? void 0 : _state_dust_balance.call(_state_dust, now)) !== null && _state_dust_balance1 !== void 0 ? _state_dust_balance1 : 0n;
2319
+ dustCap = ((_state_dust_totalCoins = (_state_dust1 = state.dust) === null || _state_dust1 === void 0 ? void 0 : _state_dust1.totalCoins) !== null && _state_dust_totalCoins !== void 0 ? _state_dust_totalCoins : []).reduce(function(sum, coin) {
2320
+ var _coin_maxCap;
2321
+ return sum + ((_coin_maxCap = coin.maxCap) !== null && _coin_maxCap !== void 0 ? _coin_maxCap : 0n);
2322
+ }, 0n);
2171
2323
  result = {
2172
2324
  unshielded: unshieldedByToken,
2173
2325
  shielded: shieldedByToken,
2174
- dust: ((_state_dust_balance1 = (_state_dust = state.dust) === null || _state_dust === void 0 ? void 0 : (_state_dust_balance = _state_dust.balance) === null || _state_dust_balance === void 0 ? void 0 : _state_dust_balance.call(_state_dust, new Date())) !== null && _state_dust_balance1 !== void 0 ? _state_dust_balance1 : 0n).toString(),
2326
+ dust: {
2327
+ balance: dustBalance.toString(),
2328
+ cap: dustCap.toString()
2329
+ },
2330
+ dustSynced: isSideSynced(state.dust),
2175
2331
  address: addr
2176
2332
  };
2177
2333
  // Fire-and-forget snapshot so the next init resumes from here instead
@@ -2460,7 +2616,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2460
2616
  var accountAddress = param.accountAddress, transaction = param.transaction, _param_waitForBalance = param.waitForBalance, waitForBalance = _param_waitForBalance === void 0 ? false : _param_waitForBalance, tokenType = param.tokenType, balanceBefore = param.balanceBefore, password = param.password, signedSessionId = param.signedSessionId, mfaToken = param.mfaToken, elevatedAccessToken = param.elevatedAccessToken;
2461
2617
  var _this = this;
2462
2618
  return _async_to_generator(function() {
2463
- var _updatedState_unshielded_balances, _updatedState_unshielded, wallet, txBytes, finalized, txIdentifier, txHash, balanceBeforeBig, updatedState, _updatedState_unshielded_balances_tokenType, balanceAfter;
2619
+ var _updatedState_unshielded_balances, _updatedState_unshielded, wallet, txBytes, finalized, txIdentifier, txHash, canonicalHash, balanceBeforeBig, updatedState, _updatedState_unshielded_balances_tokenType, balanceAfter;
2464
2620
  return _ts_generator(this, function(_state) {
2465
2621
  switch(_state.label){
2466
2622
  case 0:
@@ -2485,7 +2641,17 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2485
2641
  ];
2486
2642
  case 2:
2487
2643
  txIdentifier = _state.sent();
2644
+ // The facade returns the submission *identifier* (used to watch for the tx),
2645
+ // but the block explorer indexes by the canonical transaction hash. Derive
2646
+ // that hash from the finalized ledger transaction so explorer links resolve;
2647
+ // fall back to the identifier if the hash can't be computed.
2488
2648
  txHash = DynamicMidnightWalletClient.toTxHashString(txIdentifier);
2649
+ try {
2650
+ canonicalHash = DynamicMidnightWalletClient.toTxHashString(finalized.transactionHash());
2651
+ if (canonicalHash) txHash = canonicalHash;
2652
+ } catch (err) {
2653
+ _this.logger.warn('[Midnight] submitTransaction: could not derive canonical tx hash, using submission identifier', err);
2654
+ }
2489
2655
  _this.logger.info('[Midnight] submitTransaction: broadcast, txHash=', txHash);
2490
2656
  if (!waitForBalance) {
2491
2657
  void _this.persistCachedWalletState();
package/index.esm.js CHANGED
@@ -4,7 +4,8 @@ import { ShieldedAddress, ShieldedCoinPublicKey, ShieldedEncryptionPublicKey, Mi
4
4
  import { DustWallet } from '@midnight-ntwrk/wallet-sdk-dust-wallet';
5
5
  import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade';
6
6
  import { ShieldedWallet } from '@midnight-ntwrk/wallet-sdk-shielded';
7
- import { UnshieldedWallet, PublicKey, createKeystore, NoOpTransactionHistoryStorage } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet';
7
+ import { NoOpTransactionHistoryStorage } from '@midnight-ntwrk/wallet-sdk-abstractions';
8
+ import { UnshieldedWallet, PublicKey, createKeystore } from '@midnight-ntwrk/wallet-sdk-unshielded-wallet';
8
9
  import { HDKey } from '@scure/bip32';
9
10
  import bs58 from 'bs58';
10
11
  import { bech32m } from 'bech32';
@@ -211,7 +212,12 @@ function _ts_generator$1(thisArg, body) {
211
212
  }
212
213
  }
213
214
  var DB_NAME = 'dynamic-midnight-wallet-state';
214
- var DB_VERSION = 1;
215
+ // Open WITHOUT a fixed version. Passing a version LOWER than the one already in
216
+ // the browser throws `VersionError` (IndexedDB forbids downgrades) — which is
217
+ // exactly what broke the cache after an earlier `DB_VERSION = 2` experiment was
218
+ // reverted to 1: dev browsers still had v2, every open failed, and the wallet
219
+ // cold-synced on every load. Opening with no version adopts whatever version
220
+ // exists (or creates the DB fresh), so a downgrade error is impossible.
215
221
  var STORE_NAME = 'state';
216
222
  // Normalizes a DOMException | unknown into an Error so promise rejections
217
223
  // always carry an Error instance. Object-shaped errors (DOMException, plain
@@ -241,8 +247,10 @@ function openDb() {
241
247
  // the session (private-browsing bootup, transient quota errors, etc).
242
248
  // Re-throw so the original caller still sees the rejection.
243
249
  dbPromise = new Promise(function(resolve, reject) {
244
- var req = indexedDB.open(DB_NAME, DB_VERSION);
250
+ var req = indexedDB.open(DB_NAME);
245
251
  req.onupgradeneeded = function() {
252
+ // Fires only when the DB is first created (or an existing DB lacks the
253
+ // store). Create the store if absent; never destructive.
246
254
  var db = req.result;
247
255
  if (!db.objectStoreNames.contains(STORE_NAME)) {
248
256
  db.createObjectStore(STORE_NAME, {
@@ -301,7 +309,7 @@ function getWalletState(accountAddress) {
301
309
  }
302
310
  function _getWalletState() {
303
311
  _getWalletState = _async_to_generator$1(function(accountAddress) {
304
- var result;
312
+ var result, err;
305
313
  return _ts_generator$1(this, function(_state) {
306
314
  switch(_state.label){
307
315
  case 0:
@@ -324,8 +332,13 @@ function _getWalletState() {
324
332
  result !== null && result !== void 0 ? result : null
325
333
  ];
326
334
  case 2:
327
- _state.sent();
328
- // IndexedDB unavailable (private mode, corrupt DB, etc.) — behave as if empty.
335
+ err = _state.sent();
336
+ // IndexedDB unavailable (private mode, third-party storage partitioning,
337
+ // corrupt DB, etc.) — behave as if empty. Surface to the console so a
338
+ // blocked/partitioned store (which would force a cold sync every load)
339
+ // is visible instead of silently swallowed.
340
+ // eslint-disable-next-line no-console
341
+ console.warn('[Midnight] CACHE read FAILED (IndexedDB unavailable) — treating as empty:', err);
329
342
  return [
330
343
  2,
331
344
  null
@@ -344,7 +357,7 @@ function putWalletState(accountAddress, state) {
344
357
  }
345
358
  function _putWalletState() {
346
359
  _putWalletState = _async_to_generator$1(function(accountAddress, state) {
347
- var record;
360
+ var record, err;
348
361
  return _ts_generator$1(this, function(_state) {
349
362
  switch(_state.label){
350
363
  case 0:
@@ -370,12 +383,19 @@ function _putWalletState() {
370
383
  ];
371
384
  case 2:
372
385
  _state.sent();
386
+ // eslint-disable-next-line no-console
387
+ console.info("[Midnight] CACHE write OK — checkpoint saved (shielded=".concat(record.shielded.length, "B dust=").concat(record.dust.length, "B)"));
373
388
  return [
374
389
  3,
375
390
  4
376
391
  ];
377
392
  case 3:
378
- _state.sent();
393
+ err = _state.sent();
394
+ // Persist is best-effort. A failure just means next init will cold-sync —
395
+ // but surface it so a blocked/partitioned IndexedDB (third-party iframe)
396
+ // is visible rather than silently swallowed.
397
+ // eslint-disable-next-line no-console
398
+ console.warn('[Midnight] CACHE write FAILED (IndexedDB unavailable):', err);
379
399
  return [
380
400
  3,
381
401
  4
@@ -742,6 +762,22 @@ function _ts_values(o) {
742
762
  };
743
763
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
744
764
  }
765
+ /** Whether a sub-wallet side has finished syncing. `highestRelevantIndex`
766
+ * is 0 during sync, so `isStrictlyComplete()` is the authoritative signal. */ var isSideSynced = function(side) {
767
+ var _side_state;
768
+ var _side_progress;
769
+ var p = (_side_progress = side === null || side === void 0 ? void 0 : side.progress) !== null && _side_progress !== void 0 ? _side_progress : side === null || side === void 0 ? void 0 : (_side_state = side.state) === null || _side_state === void 0 ? void 0 : _side_state.progress;
770
+ if (!p) return false;
771
+ if (typeof p.isStrictlyComplete === 'function') return p.isStrictlyComplete();
772
+ var _p_appliedIndex;
773
+ var applied = BigInt((_p_appliedIndex = p.appliedIndex) !== null && _p_appliedIndex !== void 0 ? _p_appliedIndex : 0n);
774
+ var _p_highestRelevantIndex;
775
+ var highestRelevant = BigInt((_p_highestRelevantIndex = p.highestRelevantIndex) !== null && _p_highestRelevantIndex !== void 0 ? _p_highestRelevantIndex : 0n);
776
+ return highestRelevant > 0n && applied >= highestRelevant;
777
+ };
778
+ /** Resolve predicate for the sync wait, per mode. */ var isSyncResolved = function(s, mode) {
779
+ return mode === 'full' ? Boolean(s.isSynced) : isSideSynced(s.shielded) && isSideSynced(s.unshielded);
780
+ };
745
781
  var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
746
782
  _inherits(DynamicMidnightWalletClient, DynamicWalletClient);
747
783
  function DynamicMidnightWalletClient() {
@@ -831,6 +867,10 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
831
867
  isDirty = pendingTxCount > 0 || unshieldedPending > 0 || shieldedPending > 0 || dustPending > 0;
832
868
  if (isDirty) {
833
869
  _this.logger.debug("[Midnight] persist skipped — state is dirty \xb7 " + "pendingTxs=".concat(pendingTxCount, " \xb7 unshieldedPending=").concat(unshieldedPending, " \xb7 ") + "shieldedPending=".concat(shieldedPending, " \xb7 dustPending=").concat(dustPending, ". ") + "IndexedDB retains last clean snapshot.");
870
+ // console.* because this.logger is a NoopLogger in the iframe — cache
871
+ // diagnostics must be visible in the browser console.
872
+ // eslint-disable-next-line no-console
873
+ console.info("[Midnight] CACHE persist SKIPPED (state dirty) \xb7 pendingTxs=".concat(pendingTxCount, " ") + "unshieldedPending=".concat(unshieldedPending, " shieldedPending=").concat(shieldedPending, " dustPending=").concat(dustPending, " — no checkpoint saved, next load cold-syncs"));
834
874
  return [
835
875
  2
836
876
  ];
@@ -874,6 +914,8 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
874
914
  case 5:
875
915
  err = _state.sent();
876
916
  _this.logger.warn('[Midnight] Failed to persist wallet state:', err);
917
+ // eslint-disable-next-line no-console
918
+ console.warn('[Midnight] CACHE persist FAILED (write/serialize threw):', err);
877
919
  return [
878
920
  3,
879
921
  6
@@ -1640,6 +1682,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1640
1682
  {
1641
1683
  key: "initMidnightWallet",
1642
1684
  value: function initMidnightWallet(label, mpcParams) {
1685
+ var mode = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'full';
1643
1686
  var _this = this;
1644
1687
  return _async_to_generator(function() {
1645
1688
  var accountAddress, inFlight, initPromise;
@@ -1648,7 +1691,9 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1648
1691
  case 0:
1649
1692
  accountAddress = mpcParams.accountAddress;
1650
1693
  // If another init for this same account is in flight, return its promise
1651
- // instead of kicking off a second, redundant WalletFacade.init.
1694
+ // instead of kicking off a second, redundant WalletFacade.init. The first
1695
+ // caller's `mode` wins; that's fine — the wallet is created/cached once and
1696
+ // keeps syncing dust in the background regardless of who waited for what.
1652
1697
  inFlight = _this.pendingInits.get(accountAddress);
1653
1698
  if (inFlight) {
1654
1699
  _this.logger.info("[Midnight] ".concat(label, ": joining in-flight init for ").concat(accountAddress));
@@ -1657,7 +1702,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1657
1702
  inFlight
1658
1703
  ];
1659
1704
  }
1660
- initPromise = _this.runMidnightWalletInit(label, mpcParams);
1705
+ initPromise = _this.runMidnightWalletInit(label, mpcParams, mode);
1661
1706
  _this.pendingInits.set(accountAddress, initPromise);
1662
1707
  _state.label = 1;
1663
1708
  case 1:
@@ -1693,9 +1738,10 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1693
1738
  {
1694
1739
  key: "runMidnightWalletInit",
1695
1740
  value: function runMidnightWalletInit(label, mpcParams) {
1741
+ var mode = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 'full';
1696
1742
  var _this = this;
1697
1743
  return _async_to_generator(function() {
1698
- var _this_cachedWallet, roleKeys, accountAddress, state, _this_cachedWallet_diagnosticSub, shieldedSecretKeys, dustSecretKey, unshieldedKeystore, config, savedState, wallet, syncStart, lastLogTime, fmtSide, state1, err, lastPendingCount, lastPendingSig, diagnosticSub;
1744
+ var _this_cachedWallet, roleKeys, accountAddress, state, _this_cachedWallet_diagnosticSub, shieldedSecretKeys, dustSecretKey, unshieldedKeystore, config, savedState, _savedState_shielded, _savedState_dust, _savedState_shielded_length, _savedState_dust_length, wallet, syncStart, lastLogTime, SIDE_NAMES, lastApplied, sideDoneAtMs, readProgress, fmtSide, state1, err, lastPendingCount, lastPendingSig, lastDustLogTime, dustDoneLogged, diagnosticSub;
1699
1745
  return _ts_generator(this, function(_state) {
1700
1746
  switch(_state.label){
1701
1747
  case 0:
@@ -1726,7 +1772,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1726
1772
  reject(new Error('Wallet re-sync timeout'));
1727
1773
  }, 30000);
1728
1774
  sub = _this.cachedWallet.wallet.state().subscribe(function(s) {
1729
- if (s.isSynced) {
1775
+ if (isSyncResolved(s, mode)) {
1730
1776
  clearTimeout(tid);
1731
1777
  // Defer to a microtask so `sub` is definitely assigned whether the
1732
1778
  // emission is synchronous or async.
@@ -1799,6 +1845,13 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1799
1845
  indexerHttpUrl: 'https://indexer.preview.midnight.network/api/v4/graphql',
1800
1846
  indexerWsUrl: 'wss://indexer.preview.midnight.network/api/v4/graphql/ws'
1801
1847
  },
1848
+ // v4 sync batching. `size` = updates fetched per indexer round-trip.
1849
+ // Measured: 2000 vs 10000 gave the same ~750 entries/sec (≈130s dust cold
1850
+ // sync), so dust is apply-bound (per-entry WASM compute), not fetch-bound
1851
+ // — batch size doesn't move the total. Kept at 2000.
1852
+ batchUpdates: {
1853
+ size: 2000
1854
+ },
1802
1855
  txHistoryStorage: new NoOpTransactionHistoryStorage()
1803
1856
  };
1804
1857
  return [
@@ -1809,8 +1862,13 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1809
1862
  savedState = _state.sent();
1810
1863
  if (savedState) {
1811
1864
  _this.logger.info("[Midnight] ".concat(label, ": found persisted state — resuming sync from checkpoint"));
1865
+ // console.* because this.logger is a NoopLogger in the iframe.
1866
+ // eslint-disable-next-line no-console
1867
+ console.info("[Midnight] ".concat(label, ": CACHE HIT — restoring from IndexedDB checkpoint ") + "(updatedAt=".concat(savedState.updatedAt ? new Date(savedState.updatedAt).toISOString() : 'n/a', " ") + "shielded=".concat((_savedState_shielded_length = (_savedState_shielded = savedState.shielded) === null || _savedState_shielded === void 0 ? void 0 : _savedState_shielded.length) !== null && _savedState_shielded_length !== void 0 ? _savedState_shielded_length : 0, "B dust=").concat((_savedState_dust_length = (_savedState_dust = savedState.dust) === null || _savedState_dust === void 0 ? void 0 : _savedState_dust.length) !== null && _savedState_dust_length !== void 0 ? _savedState_dust_length : 0, "B)"));
1812
1868
  } else {
1813
1869
  _this.logger.info("[Midnight] ".concat(label, ": no persisted state — cold sync from genesis"));
1870
+ // eslint-disable-next-line no-console
1871
+ console.info("[Midnight] ".concat(label, ": CACHE MISS — no IndexedDB checkpoint for this account, cold sync from genesis"));
1814
1872
  }
1815
1873
  _this.logger.info("[Midnight] ".concat(label, ": initializing wallet..."));
1816
1874
  return [
@@ -1839,31 +1897,56 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1839
1897
  _this.logger.debug("[Midnight] ".concat(label, ": syncing..."));
1840
1898
  syncStart = Date.now();
1841
1899
  lastLogTime = 0;
1842
- // Per-side sync-progress summary. Fields are bigints; `gap` is how many
1843
- // updates still need to be applied to reach the latest relevant index
1844
- // (not the chain tip — `highestRelevantIndex` is what matters for balance).
1845
- // Read the progress object the SDK itself uses for isSynced. For shielded
1846
- // and dust it lives at `side.state.progress`; for unshielded it's
1847
- // `side.progress`. Fall back across both to be safe.
1848
- fmtSide = function(side) {
1900
+ SIDE_NAMES = [
1901
+ 'shielded',
1902
+ 'unshielded',
1903
+ 'dust'
1904
+ ];
1905
+ // Per-tick throughput tracking: appliedIndex per side at the previous log,
1906
+ // so each periodic line shows how many chunks were applied in the interval
1907
+ // (a non-zero delta = still actively polling/applying index chunks). And
1908
+ // the wall-clock at which each side individually completed, so we can see
1909
+ // which dimension is the slow one.
1910
+ lastApplied = {};
1911
+ sideDoneAtMs = {};
1912
+ // In v4 every WalletState (shielded/unshielded/dust) exposes the full
1913
+ // SyncProgress via the `progress` getter (appliedIndex, highestRelevantIndex,
1914
+ // highestIndex). Read that FIRST — `side.state.progress` is the inner
1915
+ // CoreWallet's partial progress (has appliedIndex but leaves the highest*
1916
+ // fields at 0, which is why `gap`/`tip` showed 0 before).
1917
+ readProgress = function(side) {
1849
1918
  var _side_state;
1850
- var _side_state_progress;
1851
- var p = (_side_state_progress = side === null || side === void 0 ? void 0 : (_side_state = side.state) === null || _side_state === void 0 ? void 0 : _side_state.progress) !== null && _side_state_progress !== void 0 ? _side_state_progress : side === null || side === void 0 ? void 0 : side.progress;
1852
- if (!p) return 'n/a';
1919
+ var _side_progress;
1920
+ var p = (_side_progress = side === null || side === void 0 ? void 0 : side.progress) !== null && _side_progress !== void 0 ? _side_progress : side === null || side === void 0 ? void 0 : (_side_state = side.state) === null || _side_state === void 0 ? void 0 : _side_state.progress;
1921
+ if (!p) return undefined;
1853
1922
  var _p_appliedIndex;
1854
- var applied = (_p_appliedIndex = p.appliedIndex) !== null && _p_appliedIndex !== void 0 ? _p_appliedIndex : 0n;
1923
+ var applied = BigInt((_p_appliedIndex = p.appliedIndex) !== null && _p_appliedIndex !== void 0 ? _p_appliedIndex : 0n);
1855
1924
  var _p_highestRelevantIndex;
1856
- var highestRelevant = (_p_highestRelevantIndex = p.highestRelevantIndex) !== null && _p_highestRelevantIndex !== void 0 ? _p_highestRelevantIndex : 0n;
1857
- var _p_highestRelevantWalletIndex;
1858
- var highestRelevantWallet = (_p_highestRelevantWalletIndex = p.highestRelevantWalletIndex) !== null && _p_highestRelevantWalletIndex !== void 0 ? _p_highestRelevantWalletIndex : 0n;
1925
+ var highestRelevant = BigInt((_p_highestRelevantIndex = p.highestRelevantIndex) !== null && _p_highestRelevantIndex !== void 0 ? _p_highestRelevantIndex : 0n);
1859
1926
  var _p_highestIndex;
1860
- var highest = (_p_highestIndex = p.highestIndex) !== null && _p_highestIndex !== void 0 ? _p_highestIndex : 0n;
1861
- var connected = p.isConnected ? '' : '✗';
1862
- var done = '?';
1863
- if (typeof p.isStrictlyComplete === 'function') {
1864
- done = p.isStrictlyComplete() ? '✓' : '✗';
1865
- }
1866
- return "done=".concat(done, " \xb7 applied=").concat(applied, " \xb7 hrw=").concat(highestRelevantWallet, " \xb7 hr=").concat(highestRelevant, " \xb7 tip=").concat(highest, " \xb7 ws=").concat(connected);
1927
+ var highest = BigInt((_p_highestIndex = p.highestIndex) !== null && _p_highestIndex !== void 0 ? _p_highestIndex : 0n);
1928
+ var done = typeof p.isStrictlyComplete === 'function' ? p.isStrictlyComplete() : highestRelevant > 0n && applied >= highestRelevant;
1929
+ return {
1930
+ applied: applied,
1931
+ connected: Boolean(p.isConnected),
1932
+ done: done,
1933
+ highest: highest,
1934
+ highestRelevant: highestRelevant
1935
+ };
1936
+ };
1937
+ // `remaining` = updates still to apply to reach the latest relevant index
1938
+ // (the target for isSynced — not the chain tip). `+N` = entries applied
1939
+ // since the previous periodic log. `pct` = applied / highestRelevant.
1940
+ fmtSide = function(name, side) {
1941
+ var p = readProgress(side);
1942
+ if (!p) return "".concat(name, "=n/a");
1943
+ var _lastApplied_name;
1944
+ var prev = (_lastApplied_name = lastApplied[name]) !== null && _lastApplied_name !== void 0 ? _lastApplied_name : p.applied;
1945
+ var delta = p.applied - prev;
1946
+ lastApplied[name] = p.applied;
1947
+ var remaining = p.highestRelevant > p.applied ? p.highestRelevant - p.applied : 0n;
1948
+ var pct = p.highestRelevant > 0n ? "".concat((Number(p.applied) / Number(p.highestRelevant) * 100).toFixed(1), "%") : 'n/a';
1949
+ return "".concat(name, "[done=").concat(p.done ? '✓' : '✗', " ").concat(p.applied, "/").concat(p.highestRelevant, " (").concat(pct, ", +").concat(delta, ") remaining=").concat(remaining, " tip=").concat(p.highest, " ws=").concat(p.connected ? '✓' : '✗', "]");
1867
1950
  };
1868
1951
  _state.label = 12;
1869
1952
  case 12:
@@ -1888,16 +1971,54 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1888
1971
  }, 300000);
1889
1972
  sub = wallet.state().subscribe(function(s) {
1890
1973
  var now = Date.now();
1974
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1975
+ try {
1976
+ // Record the moment each side individually completes (checked every
1977
+ // tick so the timestamp is precise, not rounded to the 5s log).
1978
+ for(var _iterator = SIDE_NAMES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1979
+ var name = _step.value;
1980
+ var _readProgress;
1981
+ if (sideDoneAtMs[name] === undefined && ((_readProgress = readProgress(s[name])) === null || _readProgress === void 0 ? void 0 : _readProgress.done)) {
1982
+ sideDoneAtMs[name] = now;
1983
+ // console.* (not this.logger, which is a NoopLogger / remote
1984
+ // shipper here) so these sync-timing diagnostics are visible in
1985
+ // the browser console.
1986
+ // eslint-disable-next-line no-console
1987
+ console.info("[Midnight] ".concat(label, ": ").concat(name, " side synced in ").concat(((now - syncStart) / 1000).toFixed(1), "s"));
1988
+ }
1989
+ }
1990
+ } catch (err) {
1991
+ _didIteratorError = true;
1992
+ _iteratorError = err;
1993
+ } finally{
1994
+ try {
1995
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1996
+ _iterator.return();
1997
+ }
1998
+ } finally{
1999
+ if (_didIteratorError) {
2000
+ throw _iteratorError;
2001
+ }
2002
+ }
2003
+ }
1891
2004
  if (now - lastLogTime > 5000) {
1892
2005
  lastLogTime = now;
1893
- _this.logger.debug("[Midnight] ".concat(label, ": sync @ ").concat(((now - syncStart) / 1000).toFixed(1), "s \xb7 ") + "isSynced=".concat(s.isSynced, " \xb7 ") + "shielded=".concat(fmtSide(s.shielded), " \xb7 ") + "unshielded=".concat(fmtSide(s.unshielded), " \xb7 ") + "dust=".concat(fmtSide(s.dust)));
2006
+ // eslint-disable-next-line no-console
2007
+ console.info("[Midnight] ".concat(label, ": sync @ ").concat(((now - syncStart) / 1000).toFixed(1), "s \xb7 ") + "isSynced=".concat(s.isSynced, " \xb7 ") + "".concat(fmtSide('shielded', s.shielded), " \xb7 ") + "".concat(fmtSide('unshielded', s.unshielded), " \xb7 ") + "".concat(fmtSide('dust', s.dust)));
1894
2008
  }
1895
- if (s.isSynced) {
2009
+ if (isSyncResolved(s, mode)) {
1896
2010
  clearTimeout(timeoutId);
1897
2011
  queueMicrotask(function() {
1898
2012
  return sub === null || sub === void 0 ? void 0 : sub.unsubscribe();
1899
2013
  });
1900
- _this.logger.debug("[Midnight] ".concat(label, ": synced in ").concat(((Date.now() - syncStart) / 1000).toFixed(1), "s \xb7 ") + "shielded=".concat(fmtSide(s.shielded), " \xb7 ") + "unshielded=".concat(fmtSide(s.unshielded), " \xb7 ") + "dust=".concat(fmtSide(s.dust)));
2014
+ var elapsed = (Date.now() - syncStart) / 1000;
2015
+ var perSide = SIDE_NAMES.map(function(name) {
2016
+ var at = sideDoneAtMs[name];
2017
+ var when = at === undefined ? 'n/a' : "".concat(((at - syncStart) / 1000).toFixed(1), "s");
2018
+ return "".concat(name, "=").concat(when);
2019
+ }).join(' · ');
2020
+ // eslint-disable-next-line no-console
2021
+ console.info("[Midnight] ".concat(label, ": fully synced in ").concat(elapsed.toFixed(1), "s \xb7 per-side: ").concat(perSide));
1901
2022
  resolve(s);
1902
2023
  }
1903
2024
  });
@@ -1946,8 +2067,28 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
1946
2067
  // full log-format state for the lifetime of the client.
1947
2068
  lastPendingCount = -1;
1948
2069
  lastPendingSig = '';
2070
+ // Dust telemetry. The foreground sync logger (above) unsubscribes the
2071
+ // instant shielded + unshielded resolve, so this long-lived subscription is
2072
+ // the ONLY window into the background dust fold. Log dust progress every
2073
+ // ~5s while it's still folding (so we can see `applied` climbing vs frozen),
2074
+ // and once when it finally reports strictly-complete (or never, which is
2075
+ // itself the answer). Reuses fmtSide for a format consistent with the
2076
+ // foreground log.
2077
+ lastDustLogTime = 0;
2078
+ dustDoneLogged = false;
1949
2079
  diagnosticSub = wallet.state().subscribe(function(s) {
1950
2080
  var _s_pending;
2081
+ var dustNow = Date.now();
2082
+ var dustDone = isSideSynced(s.dust);
2083
+ if (dustDone && !dustDoneLogged) {
2084
+ dustDoneLogged = true;
2085
+ // eslint-disable-next-line no-console
2086
+ console.info("[Midnight] ".concat(label, ": dust fully synced in ").concat(((dustNow - syncStart) / 1000).toFixed(1), "s \xb7 ").concat(fmtSide('dust', s.dust)));
2087
+ } else if (!dustDone && dustNow - lastDustLogTime > 5000) {
2088
+ lastDustLogTime = dustNow;
2089
+ // eslint-disable-next-line no-console
2090
+ console.info("[Midnight] ".concat(label, ": dust @ ").concat(((dustNow - syncStart) / 1000).toFixed(1), "s \xb7 ").concat(fmtSide('dust', s.dust)));
2091
+ }
1951
2092
  var _s_pending_all;
1952
2093
  var pending = (_s_pending_all = s === null || s === void 0 ? void 0 : (_s_pending = s.pending) === null || _s_pending === void 0 ? void 0 : _s_pending.all) !== null && _s_pending_all !== void 0 ? _s_pending_all : [];
1953
2094
  var sig = JSON.stringify(pending.map(function(p) {
@@ -2089,7 +2230,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2089
2230
  var accountAddress = param.accountAddress, password = param.password, signedSessionId = param.signedSessionId, mfaToken = param.mfaToken, elevatedAccessToken = param.elevatedAccessToken;
2090
2231
  var _this = this;
2091
2232
  return _async_to_generator(function() {
2092
- var _state_unshielded, _state_shielded, _state_dust_balance, _state_dust, _ref, state, addr, unshieldedByToken, _state_unshielded_balances, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, tokenType, value, shieldedByToken, _state_shielded_balances, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value1, tokenType1, value1, _state_dust_balance1, result;
2233
+ var _state_unshielded, _state_shielded, _state_dust_balance, _state_dust, _state_dust1, _ref, state, addr, unshieldedByToken, _state_unshielded_balances, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, tokenType, value, shieldedByToken, _state_shielded_balances, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value1, tokenType1, value1, now, _state_dust_balance1, dustBalance, _state_dust_totalCoins, dustCap, result;
2093
2234
  return _ts_generator(this, function(_state) {
2094
2235
  switch(_state.label){
2095
2236
  case 0:
@@ -2101,7 +2242,10 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2101
2242
  signedSessionId: signedSessionId,
2102
2243
  mfaToken: mfaToken,
2103
2244
  elevatedAccessToken: elevatedAccessToken
2104
- })
2245
+ }, // Resolve once shielded + unshielded are ready; let dust finish in the
2246
+ // background so the public/shielded balance shows without the ~130s
2247
+ // dust cold-sync.
2248
+ 'shielded-unshielded')
2105
2249
  ];
2106
2250
  case 1:
2107
2251
  _ref = _state.sent(), state = _ref.state, addr = _ref.accountAddress;
@@ -2147,10 +2291,22 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2147
2291
  }
2148
2292
  }
2149
2293
  }
2294
+ // v4 exposes the dust generation cap per coin (DustFullInfo.maxCap). The
2295
+ // wallet-level cap is the sum across the wallet's dust coins.
2296
+ now = new Date();
2297
+ dustBalance = (_state_dust_balance1 = (_state_dust = state.dust) === null || _state_dust === void 0 ? void 0 : (_state_dust_balance = _state_dust.balance) === null || _state_dust_balance === void 0 ? void 0 : _state_dust_balance.call(_state_dust, now)) !== null && _state_dust_balance1 !== void 0 ? _state_dust_balance1 : 0n;
2298
+ dustCap = ((_state_dust_totalCoins = (_state_dust1 = state.dust) === null || _state_dust1 === void 0 ? void 0 : _state_dust1.totalCoins) !== null && _state_dust_totalCoins !== void 0 ? _state_dust_totalCoins : []).reduce(function(sum, coin) {
2299
+ var _coin_maxCap;
2300
+ return sum + ((_coin_maxCap = coin.maxCap) !== null && _coin_maxCap !== void 0 ? _coin_maxCap : 0n);
2301
+ }, 0n);
2150
2302
  result = {
2151
2303
  unshielded: unshieldedByToken,
2152
2304
  shielded: shieldedByToken,
2153
- dust: ((_state_dust_balance1 = (_state_dust = state.dust) === null || _state_dust === void 0 ? void 0 : (_state_dust_balance = _state_dust.balance) === null || _state_dust_balance === void 0 ? void 0 : _state_dust_balance.call(_state_dust, new Date())) !== null && _state_dust_balance1 !== void 0 ? _state_dust_balance1 : 0n).toString(),
2305
+ dust: {
2306
+ balance: dustBalance.toString(),
2307
+ cap: dustCap.toString()
2308
+ },
2309
+ dustSynced: isSideSynced(state.dust),
2154
2310
  address: addr
2155
2311
  };
2156
2312
  // Fire-and-forget snapshot so the next init resumes from here instead
@@ -2439,7 +2595,7 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2439
2595
  var accountAddress = param.accountAddress, transaction = param.transaction, _param_waitForBalance = param.waitForBalance, waitForBalance = _param_waitForBalance === void 0 ? false : _param_waitForBalance, tokenType = param.tokenType, balanceBefore = param.balanceBefore, password = param.password, signedSessionId = param.signedSessionId, mfaToken = param.mfaToken, elevatedAccessToken = param.elevatedAccessToken;
2440
2596
  var _this = this;
2441
2597
  return _async_to_generator(function() {
2442
- var _updatedState_unshielded_balances, _updatedState_unshielded, wallet, txBytes, finalized, txIdentifier, txHash, balanceBeforeBig, updatedState, _updatedState_unshielded_balances_tokenType, balanceAfter;
2598
+ var _updatedState_unshielded_balances, _updatedState_unshielded, wallet, txBytes, finalized, txIdentifier, txHash, canonicalHash, balanceBeforeBig, updatedState, _updatedState_unshielded_balances_tokenType, balanceAfter;
2443
2599
  return _ts_generator(this, function(_state) {
2444
2600
  switch(_state.label){
2445
2601
  case 0:
@@ -2464,7 +2620,17 @@ var DynamicMidnightWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
2464
2620
  ];
2465
2621
  case 2:
2466
2622
  txIdentifier = _state.sent();
2623
+ // The facade returns the submission *identifier* (used to watch for the tx),
2624
+ // but the block explorer indexes by the canonical transaction hash. Derive
2625
+ // that hash from the finalized ledger transaction so explorer links resolve;
2626
+ // fall back to the identifier if the hash can't be computed.
2467
2627
  txHash = DynamicMidnightWalletClient.toTxHashString(txIdentifier);
2628
+ try {
2629
+ canonicalHash = DynamicMidnightWalletClient.toTxHashString(finalized.transactionHash());
2630
+ if (canonicalHash) txHash = canonicalHash;
2631
+ } catch (err) {
2632
+ _this.logger.warn('[Midnight] submitTransaction: could not derive canonical tx hash, using submission identifier', err);
2633
+ }
2468
2634
  _this.logger.info('[Midnight] submitTransaction: broadcast, txHash=', txHash);
2469
2635
  if (!waitForBalance) {
2470
2636
  void _this.persistCachedWalletState();
package/package.json CHANGED
@@ -1,19 +1,20 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/midnight",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@dynamic-labs-wallet/browser": "1.0.39",
7
+ "@dynamic-labs-wallet/browser": "1.0.41",
8
8
  "@dynamic-labs/sdk-api-core": "^0.0.984",
9
- "@midnight-ntwrk/ledger-v8": "8.0.3",
10
- "@midnight-ntwrk/wallet-sdk-address-format": "3.1.0",
9
+ "@midnight-ntwrk/ledger-v8": "^8.1.0",
10
+ "@midnight-ntwrk/wallet-sdk-abstractions": "2.1.0",
11
+ "@midnight-ntwrk/wallet-sdk-address-format": "3.1.1",
11
12
  "@scure/bip32": "^2.0.1",
12
13
  "bs58": "^6.0.0",
13
- "@midnight-ntwrk/wallet-sdk-facade": "3.0.0",
14
- "@midnight-ntwrk/wallet-sdk-shielded": "2.1.0",
15
- "@midnight-ntwrk/wallet-sdk-unshielded-wallet": "2.1.0",
16
- "@midnight-ntwrk/wallet-sdk-dust-wallet": "3.0.0",
14
+ "@midnight-ntwrk/wallet-sdk-facade": "4.0.0",
15
+ "@midnight-ntwrk/wallet-sdk-shielded": "3.0.0",
16
+ "@midnight-ntwrk/wallet-sdk-unshielded-wallet": "3.0.0",
17
+ "@midnight-ntwrk/wallet-sdk-dust-wallet": "4.0.0",
17
18
  "bech32": "^2.0.0"
18
19
  },
19
20
  "publishConfig": {
@@ -1,5 +1,21 @@
1
1
  import { DynamicWalletClient, type ClientKeyShare, type ThresholdSignatureScheme, type RequestWithElevatedAccessToken } from '@dynamic-labs-wallet/browser';
2
2
  import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
3
+ /**
4
+ * Sync wait mode for `initMidnightWallet`:
5
+ * - `full`: wait for all three sub-wallets (incl. dust) — the default, used by
6
+ * transaction/dust operations that need the complete state.
7
+ * - `shielded-unshielded`: resolve as soon as shielded + unshielded are synced,
8
+ * leaving dust to finish in the background. Used by balance reads so the
9
+ * public/shielded balance shows in ~seconds instead of waiting on the ~130s
10
+ * dust cold-sync. Embedded (WaaS) wallets only — external/injected wallets
11
+ * never use this client.
12
+ */
13
+ type WalletSyncMode = 'full' | 'shielded-unshielded';
14
+ /** Whether a sub-wallet side has finished syncing. `highestRelevantIndex`
15
+ * is 0 during sync, so `isStrictlyComplete()` is the authoritative signal. */
16
+ export declare const isSideSynced: (side: any) => boolean;
17
+ /** Resolve predicate for the sync wait, per mode. */
18
+ export declare const isSyncResolved: (s: any, mode: WalletSyncMode) => boolean;
3
19
  export declare class DynamicMidnightWalletClient extends DynamicWalletClient {
4
20
  readonly chainName = "MIDNIGHT";
5
21
  private cachedWallet;
@@ -110,8 +126,16 @@ export declare class DynamicMidnightWalletClient extends DynamicWalletClient {
110
126
  }): Promise<{
111
127
  unshielded: Record<string, string>;
112
128
  shielded: Record<string, string>;
113
- dust: string;
129
+ dust: {
130
+ balance: string;
131
+ cap: string;
132
+ };
114
133
  address: string;
134
+ /** False while dust is still syncing in the background. Balance reads
135
+ * resolve as soon as shielded + unshielded are synced (mode
136
+ * 'shielded-unshielded'), so dust may not be complete yet — consumers
137
+ * can show a "dust loading" state and poll until this is true. */
138
+ dustSynced: boolean;
115
139
  }>;
116
140
  registerDust({ accountAddress, password, signedSessionId, mfaToken, elevatedAccessToken, }: {
117
141
  accountAddress: string;
@@ -250,4 +274,5 @@ export declare class DynamicMidnightWalletClient extends DynamicWalletClient {
250
274
  dustSecretKey: any;
251
275
  }>;
252
276
  }
277
+ export {};
253
278
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"walletStateStorage.d.ts","sourceRoot":"","sources":["../../src/client/walletStateStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,KAAK,CAcpE;AAsCD,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAUjG;AAED,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrH;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E"}
1
+ {"version":3,"file":"walletStateStorage.d.ts","sourceRoot":"","sources":["../../src/client/walletStateStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG,KAAK,CAcpE;AAwCD,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAejG;AAED,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrH;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E"}