@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.
package/dist/index.cjs CHANGED
@@ -12811,6 +12811,12 @@ var InventoryView = class {
12811
12811
  release(tokenId) {
12812
12812
  if (this.inFlight.delete(tokenId)) this.deps.emit("inventory:updated");
12813
12813
  }
12814
+ /** Release a whole set as ONE change (per-token emitted 54 events per send). */
12815
+ releaseMany(tokenIds) {
12816
+ let changed = false;
12817
+ for (const tokenId of tokenIds) if (this.inFlight.delete(tokenId)) changed = true;
12818
+ if (changed) this.deps.emit("inventory:updated");
12819
+ }
12814
12820
  pinned(tokenId) {
12815
12821
  return this.deps.isPinned?.(tokenId) ?? false;
12816
12822
  }
@@ -13957,6 +13963,16 @@ function parseAmount(raw) {
13957
13963
  function supportsDeterministicMint(engine) {
13958
13964
  return engine.deterministicMint === true;
13959
13965
  }
13966
+ function makeSingleFlightRefresh(refresh) {
13967
+ let inFlight = false;
13968
+ return () => {
13969
+ if (inFlight) return;
13970
+ inFlight = true;
13971
+ void refresh().catch(() => void 0).finally(() => {
13972
+ inFlight = false;
13973
+ });
13974
+ };
13975
+ }
13960
13976
  function composeFacadeParts(deps, hooks) {
13961
13977
  const ownPubkeyBytes = hexToBytes4(deps.ownPubkey);
13962
13978
  const ledger = new ReservationLedger();
@@ -14078,11 +14094,10 @@ function buildReceive(deps, hooks, historyStore, heldStates, view) {
14078
14094
  registry: deps.registry,
14079
14095
  recordReceived: (record) => recordReceived(historyStore, record),
14080
14096
  emit: (event, transfer) => deps.emit(event, transfer),
14081
- // The mirror is the balance the wallet renders; refresh it as the drain runs
14082
- // so a multi-token receive lands progressively instead of all at the end.
14083
- refreshView: () => {
14084
- void view.delta().catch(() => void 0);
14085
- },
14097
+ // Single-flight: view.delta() enqueues on a strict-FIFO SerialChain, so
14098
+ // firing per throttle tick regardless of the last one builds a queue that
14099
+ // drains in a burst at the END — a slower version of the bug being fixed.
14100
+ refreshView: makeSingleFlightRefresh(() => view.delta()),
14086
14101
  attention: (transferId, code, detail) => {
14087
14102
  deps.emit(
14088
14103
  "transfer:attention",
@@ -14527,7 +14542,7 @@ var PaymentsFacade = class {
14527
14542
  settleFailure(transferId, coinId, releaseIds) {
14528
14543
  this.ledger.cancel(transferId);
14529
14544
  this.queue.clearExpectedChange(transferId);
14530
- for (const tokenId of releaseIds) this.view.release(tokenId);
14545
+ this.view.releaseMany(releaseIds);
14531
14546
  this.queue.notifyChange(coinId);
14532
14547
  }
14533
14548
  /** Open intent: sources stay reserved + in-flight (§5.2) until resume adopts them. */
@@ -14552,7 +14567,7 @@ var PaymentsFacade = class {
14552
14567
  async refreshThenRelease(coinId, spentIds) {
14553
14568
  try {
14554
14569
  await this.view.delta();
14555
- for (const tokenId of spentIds) this.view.release(tokenId);
14570
+ this.view.releaseMany(spentIds);
14556
14571
  } finally {
14557
14572
  this.queue.notifyChange(coinId);
14558
14573
  }