{"version":3,"file":"KeyScheduler.cjs","sources":["../../../src/executor/KeyScheduler.ts"],"sourcesContent":["import type { OfflineTransaction } from '../types'\n\nexport class KeyScheduler {\n  private pendingTransactions: Array<OfflineTransaction> = []\n  private activeTransactionId: string | undefined\n\n  schedule(transaction: OfflineTransaction): boolean {\n    if (\n      this.pendingTransactions.some((pending) => pending.id === transaction.id)\n    ) {\n      return false\n    }\n    this.pendingTransactions.push(transaction)\n    // Sort by creation time to maintain FIFO order\n    this.pendingTransactions.sort(\n      (a, b) => a.createdAt.getTime() - b.createdAt.getTime(),\n    )\n    return true\n  }\n\n  getNext(): OfflineTransaction | undefined {\n    if (\n      this.activeTransactionId !== undefined ||\n      this.pendingTransactions.length === 0\n    ) {\n      return undefined\n    }\n    const firstTransaction = this.pendingTransactions[0]!\n    return this.isReadyToRun(firstTransaction) ? firstTransaction : undefined\n  }\n\n  private isReadyToRun(transaction: OfflineTransaction): boolean {\n    return Date.now() >= transaction.nextAttemptAt\n  }\n\n  markStarted(transaction: OfflineTransaction): void {\n    this.activeTransactionId = transaction.id\n  }\n\n  markCompleted(transaction: OfflineTransaction): void {\n    this.removeTransaction(transaction)\n    this.activeTransactionId = undefined\n  }\n\n  markFailed(_transaction: OfflineTransaction): void {\n    this.activeTransactionId = undefined\n  }\n\n  private removeTransaction(transaction: OfflineTransaction): void {\n    const index = this.pendingTransactions.findIndex(\n      (tx) => tx.id === transaction.id,\n    )\n    if (index >= 0) {\n      this.pendingTransactions.splice(index, 1)\n    }\n  }\n\n  updateTransaction(transaction: OfflineTransaction): void {\n    this.updateTransactions([transaction])\n  }\n\n  getPendingCount(): number {\n    return this.pendingTransactions.length\n  }\n\n  getRunningCount(): number {\n    return this.activeTransactionId === undefined ? 0 : 1\n  }\n\n  clear(): void {\n    this.pendingTransactions = []\n    this.activeTransactionId = undefined\n  }\n\n  /** @internal Reconcile one replay snapshot without canceling issued work. */\n  removePendingTransactions(transactionIds: Iterable<string>): Array<string> {\n    const ids = new Set(transactionIds)\n    if (this.activeTransactionId !== undefined)\n      ids.delete(this.activeTransactionId)\n    this.pendingTransactions = this.pendingTransactions.filter(\n      ({ id }) => !ids.has(id),\n    )\n    return [...ids]\n  }\n\n  getAllPendingTransactions(): Array<OfflineTransaction> {\n    return [...this.pendingTransactions]\n  }\n\n  updateTransactions(updatedTransactions: Array<OfflineTransaction>): void {\n    const updatedById = new Map(\n      updatedTransactions.map((transaction) => [transaction.id, transaction]),\n    )\n    this.pendingTransactions = this.pendingTransactions.map(\n      (transaction) => updatedById.get(transaction.id) ?? transaction,\n    )\n    // Re-sort to maintain FIFO order after updates\n    this.pendingTransactions.sort(\n      (a, b) => a.createdAt.getTime() - b.createdAt.getTime(),\n    )\n  }\n}\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa;AAAA,EAAnB,cAAA;AACL,SAAQ,sBAAiD,CAAA;AAAA,EAAC;AAAA,EAG1D,SAAS,aAA0C;AACjD,QACE,KAAK,oBAAoB,KAAK,CAAC,YAAY,QAAQ,OAAO,YAAY,EAAE,GACxE;AACA,aAAO;AAAA,IACT;AACA,SAAK,oBAAoB,KAAK,WAAW;AAEzC,SAAK,oBAAoB;AAAA,MACvB,CAAC,GAAG,MAAM,EAAE,UAAU,YAAY,EAAE,UAAU,QAAA;AAAA,IAAQ;AAExD,WAAO;AAAA,EACT;AAAA,EAEA,UAA0C;AACxC,QACE,KAAK,wBAAwB,UAC7B,KAAK,oBAAoB,WAAW,GACpC;AACA,aAAO;AAAA,IACT;AACA,UAAM,mBAAmB,KAAK,oBAAoB,CAAC;AACnD,WAAO,KAAK,aAAa,gBAAgB,IAAI,mBAAmB;AAAA,EAClE;AAAA,EAEQ,aAAa,aAA0C;AAC7D,WAAO,KAAK,SAAS,YAAY;AAAA,EACnC;AAAA,EAEA,YAAY,aAAuC;AACjD,SAAK,sBAAsB,YAAY;AAAA,EACzC;AAAA,EAEA,cAAc,aAAuC;AACnD,SAAK,kBAAkB,WAAW;AAClC,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,WAAW,cAAwC;AACjD,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEQ,kBAAkB,aAAuC;AAC/D,UAAM,QAAQ,KAAK,oBAAoB;AAAA,MACrC,CAAC,OAAO,GAAG,OAAO,YAAY;AAAA,IAAA;AAEhC,QAAI,SAAS,GAAG;AACd,WAAK,oBAAoB,OAAO,OAAO,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,kBAAkB,aAAuC;AACvD,SAAK,mBAAmB,CAAC,WAAW,CAAC;AAAA,EACvC;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK,oBAAoB;AAAA,EAClC;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK,wBAAwB,SAAY,IAAI;AAAA,EACtD;AAAA,EAEA,QAAc;AACZ,SAAK,sBAAsB,CAAA;AAC3B,SAAK,sBAAsB;AAAA,EAC7B;AAAA;AAAA,EAGA,0BAA0B,gBAAiD;AACzE,UAAM,MAAM,IAAI,IAAI,cAAc;AAClC,QAAI,KAAK,wBAAwB;AAC/B,UAAI,OAAO,KAAK,mBAAmB;AACrC,SAAK,sBAAsB,KAAK,oBAAoB;AAAA,MAClD,CAAC,EAAE,GAAA,MAAS,CAAC,IAAI,IAAI,EAAE;AAAA,IAAA;AAEzB,WAAO,CAAC,GAAG,GAAG;AAAA,EAChB;AAAA,EAEA,4BAAuD;AACrD,WAAO,CAAC,GAAG,KAAK,mBAAmB;AAAA,EACrC;AAAA,EAEA,mBAAmB,qBAAsD;AACvE,UAAM,cAAc,IAAI;AAAA,MACtB,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,YAAY,IAAI,WAAW,CAAC;AAAA,IAAA;AAExE,SAAK,sBAAsB,KAAK,oBAAoB;AAAA,MAClD,CAAC,gBAAgB,YAAY,IAAI,YAAY,EAAE,KAAK;AAAA,IAAA;AAGtD,SAAK,oBAAoB;AAAA,MACvB,CAAC,GAAG,MAAM,EAAE,UAAU,YAAY,EAAE,UAAU,QAAA;AAAA,IAAQ;AAAA,EAE1D;AACF;;"}