@unicitylabs/sphere-sdk 0.14.11-dev.3 → 0.14.11-dev.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.
@@ -12667,6 +12667,12 @@ var InventoryView = class {
12667
12667
  release(tokenId) {
12668
12668
  if (this.inFlight.delete(tokenId)) this.deps.emit("inventory:updated");
12669
12669
  }
12670
+ /** Release a whole set as ONE change (per-token emitted 54 events per send). */
12671
+ releaseMany(tokenIds) {
12672
+ let changed = false;
12673
+ for (const tokenId of tokenIds) if (this.inFlight.delete(tokenId)) changed = true;
12674
+ if (changed) this.deps.emit("inventory:updated");
12675
+ }
12670
12676
  pinned(tokenId) {
12671
12677
  return this.deps.isPinned?.(tokenId) ?? false;
12672
12678
  }
@@ -13813,6 +13819,16 @@ function parseAmount(raw) {
13813
13819
  function supportsDeterministicMint(engine) {
13814
13820
  return engine.deterministicMint === true;
13815
13821
  }
13822
+ function makeSingleFlightRefresh(refresh) {
13823
+ let inFlight = false;
13824
+ return () => {
13825
+ if (inFlight) return;
13826
+ inFlight = true;
13827
+ void refresh().catch(() => void 0).finally(() => {
13828
+ inFlight = false;
13829
+ });
13830
+ };
13831
+ }
13816
13832
  function composeFacadeParts(deps, hooks) {
13817
13833
  const ownPubkeyBytes = hexToBytes4(deps.ownPubkey);
13818
13834
  const ledger = new ReservationLedger();
@@ -13934,11 +13950,10 @@ function buildReceive(deps, hooks, historyStore, heldStates, view) {
13934
13950
  registry: deps.registry,
13935
13951
  recordReceived: (record) => recordReceived(historyStore, record),
13936
13952
  emit: (event, transfer) => deps.emit(event, transfer),
13937
- // The mirror is the balance the wallet renders; refresh it as the drain runs
13938
- // so a multi-token receive lands progressively instead of all at the end.
13939
- refreshView: () => {
13940
- void view.delta().catch(() => void 0);
13941
- },
13953
+ // Single-flight: view.delta() enqueues on a strict-FIFO SerialChain, so
13954
+ // firing per throttle tick regardless of the last one builds a queue that
13955
+ // drains in a burst at the END — a slower version of the bug being fixed.
13956
+ refreshView: makeSingleFlightRefresh(() => view.delta()),
13942
13957
  attention: (transferId, code, detail) => {
13943
13958
  deps.emit(
13944
13959
  "transfer:attention",
@@ -14383,7 +14398,7 @@ var PaymentsFacade = class {
14383
14398
  settleFailure(transferId, coinId, releaseIds) {
14384
14399
  this.ledger.cancel(transferId);
14385
14400
  this.queue.clearExpectedChange(transferId);
14386
- for (const tokenId of releaseIds) this.view.release(tokenId);
14401
+ this.view.releaseMany(releaseIds);
14387
14402
  this.queue.notifyChange(coinId);
14388
14403
  }
14389
14404
  /** Open intent: sources stay reserved + in-flight (§5.2) until resume adopts them. */
@@ -14408,7 +14423,7 @@ var PaymentsFacade = class {
14408
14423
  async refreshThenRelease(coinId, spentIds) {
14409
14424
  try {
14410
14425
  await this.view.delta();
14411
- for (const tokenId of spentIds) this.view.release(tokenId);
14426
+ this.view.releaseMany(spentIds);
14412
14427
  } finally {
14413
14428
  this.queue.notifyChange(coinId);
14414
14429
  }