{"version":3,"sources":["../src/listener.ts","../src/utils.ts"],"names":["Redis","callback"],"mappings":";;;;;;;;;;AAmBO,IAAM,iBAAN,MAAqB;AAAA,EAClB,KAAA;AAAA,EACA,cAAA,uBAAuE,GAAA,EAAI;AAAA,EAEnF,WAAA,CACE,UACA,YAAA,EACA;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAIA,sBAAA,CAAM,QAAQ,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,WACE,QAAA,EACM;AACN,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,QAAQ,CAAA;AAEhC,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,IAAA,KAAS,CAAA,EAAG;AAElC,MAAA,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,kBAAA,EAAoB,CAAC,GAAA,KAAQ;AAChD,QAAA,IAAI,KAAK,MAAM,GAAA;AAAA,MACjB,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,SAAA,EAAW,OAAO,SAAS,OAAA,KAAY;AACnD,QAAA,IAAI,YAAY,kBAAA,EAAoB;AAClC,UAAA,MAAM,KAAA,GAA2B,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACnD,UAAA,KAAA,MAAWC,SAAAA,IAAY,KAAK,cAAA,EAAgB;AAC1C,YAAA,MAAMA,UAAS,KAAK,CAAA;AAAA,UACtB;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,QAAA,EAA8B,OAAA,EAAgC;AACjF,IAAA,MAAM,KAAK,KAAA,CAAM,OAAA;AAAA,MACf,mBAAmB,OAAO,CAAA,CAAA;AAAA,MAC1B,IAAA,CAAK,UAAU,QAAQ;AAAA,KACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,aAAA,EAAsC;AACxD,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,kBAAA,EAAoB,KAAK,SAAA,CAAU;AAAA,MAC1D,cAAA,EAAgB,aAAA;AAAA,MAChB,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAC,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,CAAK,MAAM,IAAA,EAAK;AAAA,EACxB;AACF;;;ACpEO,SAAS,cAAA,CACd,EAAA,EACA,IAAA,EACA,EAAA,EACA,UACA,MAAA,EACM;AAMN,EAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AACzE;AAKO,SAAS,uBAAuB,QAAA,EAA0B;AAC/D,EAAA,OAAO,iBAAiB,QAAQ,CAAA,CAAA;AAClC;AAKA,eAAsB,UAAU,KAAA,EAAoC;AAClE,EAAA,MAAM,aAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,KAAqB,CAAA;AAC9E,EAAA,OAAO,MAAM,IAAA,CAAK,IAAI,WAAW,UAAU,CAAC,EACzC,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CACxC,KAAK,EAAE,CAAA;AACZ","file":"index.cjs","sourcesContent":["import Redis from 'ioredis';\nimport type { SolutionSubmission } from '@intenus/common';\nimport type { IntenusWalrusClient } from '@intenus/walrus';\n\n/**\n * Batch notification message structure\n */\nexport interface BatchNotification {\n  batch_id: string;\n  epoch: number;\n  intent_ids: string[];\n  solver_window_ms: number;\n  created_at: number;\n}\n\n/**\n * OPTIONAL: Redis listener for batch notifications\n * Solvers can implement their own or use this\n */\nexport class SolverListener {\n  private redis: Redis;\n  private batchCallbacks: Set<(batch: BatchNotification) => Promise<void>> = new Set();\n\n  constructor(\n    redisUrl: string,\n    walrusClient?: IntenusWalrusClient\n  ) {\n    this.redis = new Redis(redisUrl);\n  }\n\n  /**\n   * Subscribe to new batch notifications\n   */\n  onNewBatch(\n    callback: (batch: BatchNotification) => Promise<void>\n  ): void {\n    this.batchCallbacks.add(callback);\n\n    if (this.batchCallbacks.size === 1) {\n      // First subscriber, start listening\n      this.redis.subscribe('solver:batch:new', (err) => {\n        if (err) throw err;\n      });\n\n      this.redis.on('message', async (channel, message) => {\n        if (channel === 'solver:batch:new') {\n          const batch: BatchNotification = JSON.parse(message);\n          for (const callback of this.batchCallbacks) {\n            await callback(batch);\n          }\n        }\n      });\n    }\n  }\n\n  /**\n   * Submit solution to backend\n   */\n  async submitSolution(solution: SolutionSubmission, batchId: string): Promise<void> {\n    await this.redis.publish(\n      `solver:solution:${batchId}`,\n      JSON.stringify(solution)\n    );\n  }\n  \n  /**\n   * Send heartbeat\n   */\n  async sendHeartbeat(solverAddress: string): Promise<void> {\n    await this.redis.publish('solver:heartbeat', JSON.stringify({\n      solver_address: solverAddress,\n      timestamp: Date.now(),\n    }));\n  }\n  \n  async close(): Promise<void> {\n    await this.redis.quit();\n  }\n}\n","import { Transaction } from '@mysten/sui/transactions';\n\n/**\n * OPTIONAL: Helper functions for Sui Tx operations\n * Solvers can use Sui SDK directly if preferred\n */\n\n/**\n * Add P2P transfer to Tx\n */\nexport function addP2PTransfer(\n  tx: Transaction,\n  from: string,\n  to: string,\n  coinType: string,\n  amount: string\n): void {\n  // Note: This is a simplified example. Real implementation should use proper Sui SDK methods\n  // const [coin] = tx.splitCoins(tx.gas, [tx.pure(amount)]);\n  // tx.transferObjects([coin], tx.pure(to));\n  \n  // TODO: Update with correct Sui SDK v1.44+ API\n  throw new Error('addP2PTransfer needs to be updated for Sui SDK v1.44+');\n}\n\n/**\n * Get Seal policy ID for intent\n */\nexport function getSealPolicyForIntent(intentId: string): string {\n  return `intent-policy-${intentId}`;\n}\n\n/**\n * Hash bytes using SHA-256\n */\nexport async function hashBytes(bytes: Uint8Array): Promise<string> {\n  const hashBuffer = await crypto.subtle.digest('SHA-256', bytes as BufferSource);\n  return Array.from(new Uint8Array(hashBuffer))\n    .map(b => b.toString(16).padStart(2, '0'))\n    .join('');\n}\n"]}