{"version":3,"file":"TransactionBuilder.cjs","sources":["../../../src/utils/TransactionBuilder.ts"],"sourcesContent":["import {\n  BlockhashWithExpiryBlockHeight,\n  ComputeBudgetProgram,\n  ConfirmOptions,\n  Keypair,\n  PACKET_DATA_SIZE,\n  SignaturePubkeyPair,\n  Transaction,\n  TransactionInstruction,\n} from '@solana/web3.js';\nimport { SendAndConfirmTransactionResponse } from '../plugins/rpcModule';\nimport type { Convergence } from '../Convergence';\nimport type { OperationOptions, Signer } from '../types';\nimport { COMPUTE_UNIT_PRICE_IN_MICRO_LAMPORTS_MAP } from '../constants';\n\nexport const DUMMY_BLOCKHASH = 'H9cCgV1suCbdxMGDGUecdgJPZzdCe4CbNYa6ijP1uBLS';\n\nexport type InstructionWithSigners = {\n  instruction: TransactionInstruction;\n  signers: Signer[];\n  key?: string;\n};\n\ntype TransactionOptions = {\n  /** Additional signatures. */\n  signatures?: Array<SignaturePubkeyPair>;\n};\n\nexport type TransactionBuilderOptions = Pick<\n  OperationOptions,\n  'programs' | 'payer'\n>;\n\nexport class TransactionBuilder<C extends object = object> {\n  /** The list of all instructions and their respective signers. */\n  protected records: InstructionWithSigners[] = [];\n\n  /** Options used when building the transaction. */\n  protected transactionOptions: TransactionOptions;\n\n  /** The signer to use to pay for transaction fees. */\n  protected feePayer: Signer | undefined = undefined;\n\n  /** Any additional context gathered when creating the transaction builder. */\n  protected context: C = {} as C;\n\n  constructor(transactionOptions: TransactionOptions = {}) {\n    this.transactionOptions = transactionOptions;\n  }\n\n  checkTransactionFits = () => {\n    const transaction = this.toTransaction({\n      blockhash: DUMMY_BLOCKHASH,\n      lastValidBlockHeight: 0,\n    });\n    const message = transaction.compileMessage();\n\n    const serializedMessage = message.serialize();\n    const txSize =\n      1 + 64 * message.header.numRequiredSignatures + serializedMessage.length;\n    if (txSize > PACKET_DATA_SIZE) {\n      return false;\n    }\n\n    return true;\n  };\n\n  static make<C extends object = object>(\n    transactionOptions?: TransactionOptions\n  ): TransactionBuilder<C> {\n    return new TransactionBuilder<C>(transactionOptions);\n  }\n\n  prepend(\n    ...txs: (InstructionWithSigners | TransactionBuilder)[]\n  ): TransactionBuilder<C> {\n    const newRecords = txs.flatMap((tx) =>\n      tx instanceof TransactionBuilder ? tx.getInstructionsWithSigners() : [tx]\n    );\n    this.records = [...newRecords, ...this.records];\n\n    return this;\n  }\n\n  append(\n    ...txs: (InstructionWithSigners | TransactionBuilder)[]\n  ): TransactionBuilder<C> {\n    const newRecords = txs.flatMap((tx) =>\n      tx instanceof TransactionBuilder ? tx.getInstructionsWithSigners() : [tx]\n    );\n    this.records = [...this.records, ...newRecords];\n\n    return this;\n  }\n\n  add(\n    ...txs: (InstructionWithSigners | TransactionBuilder)[]\n  ): TransactionBuilder<C> {\n    return this.append(...txs);\n  }\n\n  splitUsingKey(\n    key: string,\n    include = true\n  ): [TransactionBuilder, TransactionBuilder] {\n    const firstBuilder = new TransactionBuilder(this.transactionOptions);\n    const secondBuilder = new TransactionBuilder(this.transactionOptions);\n    let keyPosition = this.records.findIndex((record) => record.key === key);\n\n    if (keyPosition > -1) {\n      keyPosition += include ? 1 : 0;\n      firstBuilder.add(...this.records.slice(0, keyPosition));\n      firstBuilder.add(...this.records.slice(keyPosition));\n    } else {\n      firstBuilder.add(this);\n    }\n\n    return [firstBuilder, secondBuilder];\n  }\n\n  splitBeforeKey(key: string): [TransactionBuilder, TransactionBuilder] {\n    return this.splitUsingKey(key, false);\n  }\n\n  splitAfterKey(key: string): [TransactionBuilder, TransactionBuilder] {\n    return this.splitUsingKey(key, true);\n  }\n\n  getInstructionsWithSigners(): InstructionWithSigners[] {\n    return this.records;\n  }\n\n  getInstructions(): TransactionInstruction[] {\n    return this.records.map((record) => record.instruction);\n  }\n\n  getInstructionCount(): number {\n    return this.records.length;\n  }\n\n  isEmpty(): boolean {\n    return this.getInstructionCount() === 0;\n  }\n\n  getSigners(): Signer[] {\n    const feePayer = this.feePayer == null ? [] : [this.feePayer];\n    const signers = this.records.flatMap((record) => record.signers);\n\n    return [...feePayer, ...signers];\n  }\n\n  setTransactionOptions(\n    transactionOptions: TransactionOptions\n  ): TransactionBuilder<C> {\n    this.transactionOptions = transactionOptions;\n\n    return this;\n  }\n\n  getTransactionOptions(): TransactionOptions | undefined {\n    return this.transactionOptions;\n  }\n\n  setFeePayer(feePayer: Signer): TransactionBuilder<C> {\n    this.feePayer = feePayer;\n\n    return this;\n  }\n\n  getFeePayer(): Signer | undefined {\n    return this.feePayer;\n  }\n\n  setContext(context: C): TransactionBuilder<C> {\n    this.context = context;\n\n    return this;\n  }\n\n  getContext(): C {\n    return this.context;\n  }\n\n  when(\n    condition: boolean,\n    callback: (tx: TransactionBuilder<C>) => TransactionBuilder<C>\n  ) {\n    return condition ? callback(this) : this;\n  }\n\n  unless(\n    condition: boolean,\n    callback: (tx: TransactionBuilder<C>) => TransactionBuilder<C>\n  ) {\n    return this.when(!condition, callback);\n  }\n\n  toTransaction(\n    blockhashWithExpiryBlockHeight: BlockhashWithExpiryBlockHeight,\n    options: TransactionOptions = {}\n  ): Transaction {\n    options = { ...this.getTransactionOptions(), ...options };\n\n    const transaction = new Transaction({\n      feePayer: this.getFeePayer()?.publicKey,\n      signatures: options.signatures,\n      blockhash: blockhashWithExpiryBlockHeight.blockhash,\n      lastValidBlockHeight: blockhashWithExpiryBlockHeight.lastValidBlockHeight,\n    });\n\n    transaction.add(...this.getInstructions());\n\n    return transaction;\n  }\n\n  toPartiallySignedTransaction(\n    blockhashWithExpiryBlockHeight: BlockhashWithExpiryBlockHeight,\n    options: TransactionOptions = {}\n  ): Transaction {\n    const transaction = this.toTransaction(\n      blockhashWithExpiryBlockHeight,\n      options\n    );\n    const keypairSigners = this.getSigners().filter(\n      (s): s is Keypair => s instanceof Keypair\n    );\n    if (keypairSigners.length > 0) {\n      transaction.partialSign(...keypairSigners);\n    }\n\n    return transaction;\n  }\n\n  protected cloneWithoutRecords(): TransactionBuilder<C> {\n    const result = TransactionBuilder.make<C>(this.transactionOptions);\n    if (this.feePayer !== undefined) {\n      result.setFeePayer(this.feePayer);\n    }\n\n    result.setContext(this.context);\n\n    return result;\n  }\n\n  divideToMultipleBuildersThatFit(): TransactionBuilder<C>[] {\n    if (this.checkTransactionFits()) {\n      return [this];\n    }\n\n    if (this.records.length === 0) {\n      return [];\n    }\n\n    const builders: TransactionBuilder<C>[] = [];\n    let unprocessedRecords = [...this.records];\n\n    while (unprocessedRecords.length > 0) {\n      let builderAdded = false;\n      for (\n        let recordsToTake = unprocessedRecords.length;\n        recordsToTake > 0;\n        recordsToTake--\n      ) {\n        const records = unprocessedRecords.slice(0, recordsToTake);\n        const builder = this.cloneWithoutRecords().append(...records);\n\n        if (builder.checkTransactionFits()) {\n          builders.push(builder);\n          unprocessedRecords = unprocessedRecords.slice(recordsToTake);\n          builderAdded = true;\n          break;\n        }\n      }\n\n      if (!builderAdded) {\n        throw new Error(\n          `Instruction ${unprocessedRecords[0].key} is too big to fit into the transaction`\n        );\n      }\n    }\n\n    return builders;\n  }\n\n  async sendAndConfirm(\n    convergence: Convergence,\n    confirmOptions?: ConfirmOptions\n  ): Promise<{ response: SendAndConfirmTransactionResponse } & C> {\n    const response = await convergence\n      .rpc()\n      .sendAndConfirmTransaction(this, [], confirmOptions);\n\n    return {\n      response,\n      ...this.getContext(),\n    };\n  }\n\n  addStaticComputeBudgetIxs(\n    convergence: Convergence,\n    computeUnits: number,\n    disableSettingComputeUnits?: boolean\n  ) {\n    if (convergence.transactionPriority === 'dynamic') {\n      return this;\n    }\n    const txPriorityInMicroLamports =\n      typeof convergence.transactionPriority === 'number'\n        ? convergence.transactionPriority\n        : COMPUTE_UNIT_PRICE_IN_MICRO_LAMPORTS_MAP[\n            convergence.transactionPriority\n          ];\n\n    if (disableSettingComputeUnits) {\n      return this.prepend({\n        instruction: ComputeBudgetProgram.setComputeUnitPrice({\n          microLamports: txPriorityInMicroLamports,\n        }),\n        signers: [],\n      });\n    }\n    return this.prepend({\n      instruction: ComputeBudgetProgram.setComputeUnitPrice({\n        microLamports: txPriorityInMicroLamports,\n      }),\n      signers: [],\n    }).prepend({\n      instruction: ComputeBudgetProgram.setComputeUnitLimit({\n        units: computeUnits,\n      }),\n      signers: [],\n    });\n  }\n\n  addDynamicComputeBudgetIxs(\n    microLamports: number,\n    computeUnits: number,\n    disableSettingComputeUnits?: boolean\n  ) {\n    if (disableSettingComputeUnits) {\n      return this.prepend({\n        instruction: ComputeBudgetProgram.setComputeUnitPrice({\n          microLamports,\n        }),\n        signers: [],\n      });\n    }\n    return this.prepend({\n      instruction: ComputeBudgetProgram.setComputeUnitPrice({\n        microLamports,\n      }),\n      signers: [],\n    }).prepend({\n      instruction: ComputeBudgetProgram.setComputeUnitLimit({\n        units: computeUnits,\n      }),\n      signers: [],\n    });\n  }\n}\n"],"names":["DUMMY_BLOCKHASH","TransactionBuilder","_this","transactionOptions","arguments","length","undefined","_classCallCheck","_defineProperty","transaction","toTransaction","blockhash","lastValidBlockHeight","message","compileMessage","serializedMessage","serialize","txSize","header","numRequiredSignatures","PACKET_DATA_SIZE","_createClass","key","value","prepend","_len","txs","Array","_key","newRecords","flatMap","tx","getInstructionsWithSigners","records","concat","_toConsumableArray","append","_len2","_key2","add","apply","splitUsingKey","include","firstBuilder","secondBuilder","keyPosition","findIndex","record","slice","splitBeforeKey","splitAfterKey","getInstructions","map","instruction","getInstructionCount","isEmpty","getSigners","feePayer","signers","setTransactionOptions","getTransactionOptions","setFeePayer","getFeePayer","setContext","context","getContext","when","condition","callback","unless","blockhashWithExpiryBlockHeight","_this$getFeePayer","options","_objectSpread","Transaction","publicKey","signatures","toPartiallySignedTransaction","keypairSigners","filter","s","Keypair","partialSign","cloneWithoutRecords","result","make","divideToMultipleBuildersThatFit","checkTransactionFits","builders","unprocessedRecords","builderAdded","recordsToTake","_this$cloneWithoutRec","builder","push","Error","_sendAndConfirm","_asyncToGenerator","_regeneratorRuntime","mark","_callee","convergence","confirmOptions","response","wrap","_callee$","_context","prev","next","rpc","sendAndConfirmTransaction","sent","abrupt","stop","sendAndConfirm","_x","_x2","addStaticComputeBudgetIxs","computeUnits","disableSettingComputeUnits","transactionPriority","txPriorityInMicroLamports","COMPUTE_UNIT_PRICE_IN_MICRO_LAMPORTS_MAP","ComputeBudgetProgram","setComputeUnitPrice","microLamports","setComputeUnitLimit","units","addDynamicComputeBudgetIxs"],"mappings":"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"}