@unicitylabs/sphere-sdk 0.14.11-dev.3 → 0.14.11-dev.5

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.js CHANGED
@@ -12683,6 +12683,12 @@ var InventoryView = class {
12683
12683
  release(tokenId) {
12684
12684
  if (this.inFlight.delete(tokenId)) this.deps.emit("inventory:updated");
12685
12685
  }
12686
+ /** Release a whole set as ONE change (per-token emitted 54 events per send). */
12687
+ releaseMany(tokenIds) {
12688
+ let changed = false;
12689
+ for (const tokenId of tokenIds) if (this.inFlight.delete(tokenId)) changed = true;
12690
+ if (changed) this.deps.emit("inventory:updated");
12691
+ }
12686
12692
  pinned(tokenId) {
12687
12693
  return this.deps.isPinned?.(tokenId) ?? false;
12688
12694
  }
@@ -12900,7 +12906,7 @@ var InventoryView = class {
12900
12906
 
12901
12907
  // modules/payments-v2/receive/Receive.ts
12902
12908
  var ACK_BATCH_SIZE = 200;
12903
- var REFRESH_INTERVAL_MS = 750;
12909
+ var REFRESH_INTERVAL_MS = 2500;
12904
12910
  var POLL_INTERVAL_MS = 3e4;
12905
12911
  var ATTENTION_CLAIM_CONFLICT = "claim:conflict";
12906
12912
  function receivedDedupKey(tokenId, stateHash) {
@@ -13829,6 +13835,16 @@ function parseAmount(raw) {
13829
13835
  function supportsDeterministicMint(engine) {
13830
13836
  return engine.deterministicMint === true;
13831
13837
  }
13838
+ function makeSingleFlightRefresh(refresh) {
13839
+ let inFlight = false;
13840
+ return () => {
13841
+ if (inFlight) return;
13842
+ inFlight = true;
13843
+ void refresh().catch(() => void 0).finally(() => {
13844
+ inFlight = false;
13845
+ });
13846
+ };
13847
+ }
13832
13848
  function composeFacadeParts(deps, hooks) {
13833
13849
  const ownPubkeyBytes = hexToBytes4(deps.ownPubkey);
13834
13850
  const ledger = new ReservationLedger();
@@ -13950,11 +13966,10 @@ function buildReceive(deps, hooks, historyStore, heldStates, view) {
13950
13966
  registry: deps.registry,
13951
13967
  recordReceived: (record) => recordReceived(historyStore, record),
13952
13968
  emit: (event, transfer) => deps.emit(event, transfer),
13953
- // The mirror is the balance the wallet renders; refresh it as the drain runs
13954
- // so a multi-token receive lands progressively instead of all at the end.
13955
- refreshView: () => {
13956
- void view.delta().catch(() => void 0);
13957
- },
13969
+ // Single-flight: view.delta() enqueues on a strict-FIFO SerialChain, so
13970
+ // firing per throttle tick regardless of the last one builds a queue that
13971
+ // drains in a burst at the END — a slower version of the bug being fixed.
13972
+ refreshView: makeSingleFlightRefresh(() => view.delta()),
13958
13973
  attention: (transferId, code, detail) => {
13959
13974
  deps.emit(
13960
13975
  "transfer:attention",
@@ -14399,7 +14414,7 @@ var PaymentsFacade = class {
14399
14414
  settleFailure(transferId, coinId, releaseIds) {
14400
14415
  this.ledger.cancel(transferId);
14401
14416
  this.queue.clearExpectedChange(transferId);
14402
- for (const tokenId of releaseIds) this.view.release(tokenId);
14417
+ this.view.releaseMany(releaseIds);
14403
14418
  this.queue.notifyChange(coinId);
14404
14419
  }
14405
14420
  /** Open intent: sources stay reserved + in-flight (§5.2) until resume adopts them. */
@@ -14424,7 +14439,7 @@ var PaymentsFacade = class {
14424
14439
  async refreshThenRelease(coinId, spentIds) {
14425
14440
  try {
14426
14441
  await this.view.delta();
14427
- for (const tokenId of spentIds) this.view.release(tokenId);
14442
+ this.view.releaseMany(spentIds);
14428
14443
  } finally {
14429
14444
  this.queue.notifyChange(coinId);
14430
14445
  }