{"version":3,"sources":["../../src/signer.ts"],"sourcesContent":["import {\n  Account,\n  Ed25519PrivateKey,\n  Aptos,\n  AptosConfig,\n  SimpleTransaction,\n  AccountAuthenticator,\n  PrivateKey,\n  PrivateKeyVariants,\n  type PendingTransactionResponse,\n} from \"@aptos-labs/ts-sdk\";\nimport { getAptosNetwork, getAptosRpcUrl } from \"./constants\";\n\n/**\n * Client-side signer for creating and signing Aptos transactions\n */\nexport type ClientAptosSigner = Account;\n\n/**\n * Configuration for client operations\n */\nexport type ClientAptosConfig = {\n  /**\n   * Optional custom RPC URL for the client to use\n   */\n  rpcUrl?: string;\n};\n\n/**\n * Minimal facilitator signer interface for Aptos operations\n */\nexport type FacilitatorAptosSigner = {\n  /**\n   * Get all addresses this facilitator can use for signing\n   */\n  getAddresses(): readonly string[];\n\n  /**\n   * Sign a transaction as the fee payer and submit it\n   */\n  signAndSubmitAsFeePayer(\n    transaction: SimpleTransaction,\n    senderAuthenticator: AccountAuthenticator,\n    network: string,\n  ): Promise<PendingTransactionResponse>;\n\n  /**\n   * Submit a fully-signed transaction (non-sponsored)\n   */\n  submitTransaction(\n    transaction: SimpleTransaction,\n    senderAuthenticator: AccountAuthenticator,\n    network: string,\n  ): Promise<PendingTransactionResponse>;\n\n  /**\n   * Simulate a transaction to verify it would succeed\n   */\n  simulateTransaction(transaction: SimpleTransaction, network: string): Promise<void>;\n\n  /**\n   * Wait for transaction confirmation\n   */\n  waitForTransaction(txHash: string, network: string): Promise<void>;\n};\n\n/**\n * Creates a client signer from a private key\n *\n * @param privateKey - The private key as a hex string or AIP-80 format\n * @returns An Aptos Account instance\n */\nexport async function createClientSigner(privateKey: string): Promise<ClientAptosSigner> {\n  const formattedKey = PrivateKey.formatPrivateKey(privateKey, PrivateKeyVariants.Ed25519);\n  const privateKeyBytes = new Ed25519PrivateKey(formattedKey);\n  return Account.fromPrivateKey({ privateKey: privateKeyBytes });\n}\n\n/**\n * Create a facilitator signer from an Aptos Account\n *\n * @param account - The Aptos Account that will act as fee payer\n * @param rpcConfig - Optional RPC configuration\n * @returns FacilitatorAptosSigner instance\n */\nexport function toFacilitatorAptosSigner(\n  account: Account,\n  rpcConfig?: { defaultRpcUrl?: string } | Record<string, string>,\n): FacilitatorAptosSigner {\n  const getRpcUrl = (network: string): string => {\n    if (rpcConfig) {\n      if (\"defaultRpcUrl\" in rpcConfig && rpcConfig.defaultRpcUrl) {\n        return rpcConfig.defaultRpcUrl;\n      }\n      if (network in rpcConfig) {\n        return (rpcConfig as Record<string, string>)[network];\n      }\n    }\n    return getAptosRpcUrl(getAptosNetwork(network));\n  };\n\n  const getAptos = (network: string): Aptos => {\n    const aptosNetwork = getAptosNetwork(network);\n    const rpcUrl = getRpcUrl(network);\n    return new Aptos(new AptosConfig({ network: aptosNetwork, fullnode: rpcUrl }));\n  };\n\n  return {\n    getAddresses: () => [account.accountAddress.toStringLong()],\n\n    signAndSubmitAsFeePayer: async (\n      transaction: SimpleTransaction,\n      senderAuthenticator: AccountAuthenticator,\n      network: string,\n    ) => {\n      const aptos = getAptos(network);\n      transaction.feePayerAddress = account.accountAddress;\n      const feePayerAuthenticator = aptos.transaction.signAsFeePayer({\n        signer: account,\n        transaction,\n      });\n      return aptos.transaction.submit.simple({\n        transaction,\n        senderAuthenticator,\n        feePayerAuthenticator,\n      });\n    },\n\n    submitTransaction: async (\n      transaction: SimpleTransaction,\n      senderAuthenticator: AccountAuthenticator,\n      network: string,\n    ) => {\n      const aptos = getAptos(network);\n      return aptos.transaction.submit.simple({ transaction, senderAuthenticator });\n    },\n\n    simulateTransaction: async (transaction: SimpleTransaction, network: string) => {\n      const aptos = getAptos(network);\n      const results = await aptos.transaction.simulate.simple({ transaction });\n      if (results.length === 0 || !results[0].success) {\n        throw new Error(`Simulation failed: ${results[0]?.vm_status || \"unknown error\"}`);\n      }\n    },\n\n    waitForTransaction: async (txHash: string, network: string) => {\n      const aptos = getAptos(network);\n      await aptos.waitForTransaction({ transactionHash: txHash });\n    },\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OAEK;AA8DP,eAAsB,mBAAmB,YAAgD;AACvF,QAAM,eAAe,WAAW,iBAAiB,YAAY,mBAAmB,OAAO;AACvF,QAAM,kBAAkB,IAAI,kBAAkB,YAAY;AAC1D,SAAO,QAAQ,eAAe,EAAE,YAAY,gBAAgB,CAAC;AAC/D;AASO,SAAS,yBACd,SACA,WACwB;AACxB,QAAM,YAAY,CAAC,YAA4B;AAC7C,QAAI,WAAW;AACb,UAAI,mBAAmB,aAAa,UAAU,eAAe;AAC3D,eAAO,UAAU;AAAA,MACnB;AACA,UAAI,WAAW,WAAW;AACxB,eAAQ,UAAqC,OAAO;AAAA,MACtD;AAAA,IACF;AACA,WAAO,eAAe,gBAAgB,OAAO,CAAC;AAAA,EAChD;AAEA,QAAM,WAAW,CAAC,YAA2B;AAC3C,UAAM,eAAe,gBAAgB,OAAO;AAC5C,UAAM,SAAS,UAAU,OAAO;AAChC,WAAO,IAAI,MAAM,IAAI,YAAY,EAAE,SAAS,cAAc,UAAU,OAAO,CAAC,CAAC;AAAA,EAC/E;AAEA,SAAO;AAAA,IACL,cAAc,MAAM,CAAC,QAAQ,eAAe,aAAa,CAAC;AAAA,IAE1D,yBAAyB,OACvB,aACA,qBACA,YACG;AACH,YAAM,QAAQ,SAAS,OAAO;AAC9B,kBAAY,kBAAkB,QAAQ;AACtC,YAAM,wBAAwB,MAAM,YAAY,eAAe;AAAA,QAC7D,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AACD,aAAO,MAAM,YAAY,OAAO,OAAO;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,mBAAmB,OACjB,aACA,qBACA,YACG;AACH,YAAM,QAAQ,SAAS,OAAO;AAC9B,aAAO,MAAM,YAAY,OAAO,OAAO,EAAE,aAAa,oBAAoB,CAAC;AAAA,IAC7E;AAAA,IAEA,qBAAqB,OAAO,aAAgC,YAAoB;AAC9E,YAAM,QAAQ,SAAS,OAAO;AAC9B,YAAM,UAAU,MAAM,MAAM,YAAY,SAAS,OAAO,EAAE,YAAY,CAAC;AACvE,UAAI,QAAQ,WAAW,KAAK,CAAC,QAAQ,CAAC,EAAE,SAAS;AAC/C,cAAM,IAAI,MAAM,sBAAsB,QAAQ,CAAC,GAAG,aAAa,eAAe,EAAE;AAAA,MAClF;AAAA,IACF;AAAA,IAEA,oBAAoB,OAAO,QAAgB,YAAoB;AAC7D,YAAM,QAAQ,SAAS,OAAO;AAC9B,YAAM,MAAM,mBAAmB,EAAE,iBAAiB,OAAO,CAAC;AAAA,IAC5D;AAAA,EACF;AACF;","names":[]}