{"version":3,"file":"helpers.cjs","sources":["../../../../src/plugins/rfqModule/helpers.ts"],"sourcesContent":["import { AccountMeta, PublicKey } from '@solana/web3.js';\nimport { Sha256 } from '@aws-crypto/sha256-js';\nimport {\n  ApiLeg,\n  FixedSize as SolitaFixedSize,\n  fixedSizeBeet,\n} from '@convergence-rfq/rfq';\nimport {\n  Confirmation,\n  Quote,\n  isFixedSizeBaseAsset,\n  isFixedSizeQuoteAsset,\n  isQuoteStandard,\n} from '../rfqModule/models';\nimport { UnparsedAccount, createSerializerFromFixableBeet } from '../../types';\nimport { Convergence } from '../../Convergence';\nimport {\n  LegInstrument,\n  getValidationAccounts,\n  instrumentToSolitaLeg,\n} from '../instrumentModule';\nimport { Rfq, Response, AuthoritySide, isFixedSizeOpen } from './models';\nimport { LEG_MULTIPLIER_DECIMALS } from './constants';\n\nexport function getPages<T extends UnparsedAccount | Rfq | Response>(\n  accounts: T[],\n  itemsPerPage?: number,\n  numPages?: number\n): T[][] {\n  const pages: T[][] = [];\n  const totalCount = accounts.length;\n\n  if (itemsPerPage) {\n    const totalPages = numPages ?? Math.ceil(totalCount / itemsPerPage);\n\n    for (let i = 0; i < totalPages; i++) {\n      const startIndex = i * itemsPerPage;\n      const page = accounts.slice(startIndex, startIndex + itemsPerPage);\n      pages.push(page);\n    }\n  } else if (numPages && !itemsPerPage) {\n    const itemsPerPage = 10;\n\n    for (let i = 0; i < numPages; i++) {\n      const startIndex = i * itemsPerPage;\n      const page = accounts.slice(startIndex, startIndex + itemsPerPage);\n      pages.push(page);\n    }\n  } else {\n    pages.push(accounts);\n  }\n\n  return pages as T[][];\n}\n\nexport const calculateExpectedLegsHash = (\n  serializedLegs: Buffer[]\n): Uint8Array => {\n  const lengthBuffer = Buffer.alloc(4);\n  lengthBuffer.writeInt32LE(serializedLegs.length);\n  const fullLegDataBuffer = Buffer.concat([lengthBuffer, ...serializedLegs]);\n\n  const hash = new Sha256();\n  hash.update(fullLegDataBuffer);\n  const expectedLegsHash = hash.digestSync();\n\n  return expectedLegsHash;\n};\n\nexport const calculateExpectedLegsSize = (serializedLegs: Buffer[]): number => {\n  return 4 + serializedLegs.map((leg) => leg.length).reduce((x, y) => x + y, 0);\n};\n\nexport const instrumentsToLegs = (instruments: LegInstrument[]): ApiLeg[] => {\n  return instruments.map((i) => instrumentToSolitaLeg(i));\n};\n\nexport const legsToBaseAssetAccounts = (\n  convergence: Convergence,\n  legs: ApiLeg[]\n): AccountMeta[] => {\n  const baseAssetAccounts: AccountMeta[] = [];\n\n  for (const leg of legs) {\n    const baseAsset = convergence\n      .protocol()\n      .pdas()\n      .baseAsset({ index: leg.baseAssetIndex.value });\n\n    const baseAssetAccount: AccountMeta = {\n      pubkey: baseAsset,\n      isSigner: false,\n      isWritable: false,\n    };\n\n    baseAssetAccounts.push(baseAssetAccount);\n  }\n\n  return baseAssetAccounts;\n};\n\n// TODO remove async part after option instruments refactoring\nexport const instrumentsToLegAccounts = async (\n  instruments: LegInstrument[]\n): Promise<AccountMeta[]> => {\n  const accounts = await Promise.all(\n    instruments.map((i) => getValidationAccounts(i))\n  );\n\n  return accounts.flat();\n};\n\nexport const sortByActiveAndExpiry = (rfqs: Rfq[]) => {\n  return rfqs\n    .sort((a, b) => {\n      return b.state === 'active' ? 1 : -1;\n    })\n    .sort((a, b) => {\n      if (a.state === b.state) {\n        const aTimeToExpiry = Number(a.creationTimestamp) + a.activeWindow;\n        const bTimeToExpiry = Number(b.creationTimestamp) + b.activeWindow;\n        return aTimeToExpiry - bTimeToExpiry;\n      }\n      return 0;\n    });\n};\n\nexport const getAuthoritySide = (\n  user: PublicKey,\n  rfq: Rfq,\n  response: Response\n): AuthoritySide | null => {\n  if (rfq.taker.equals(user)) {\n    return 'taker';\n  }\n\n  if (response.maker.equals(user)) {\n    return 'maker';\n  }\n\n  return null;\n};\n\nexport function extractLegsMultiplier(\n  rfq: Rfq,\n  quote: Quote,\n  confirmation?: Confirmation\n) {\n  const fixedSize = rfq.size;\n  if (confirmation?.overrideLegMultiplier) {\n    return confirmation.overrideLegMultiplier;\n  }\n  if (isFixedSizeOpen(fixedSize)) {\n    if (isQuoteStandard(quote)) {\n      return quote.legsMultiplier;\n    }\n    throw Error('Fixed size quote cannot be provided to non-fixed size rfq');\n  } else if (isFixedSizeBaseAsset(fixedSize)) {\n    if (isQuoteStandard(quote)) {\n      throw Error('Non fixed size quote cannot be provided to fixed size rfq');\n    }\n    return fixedSize.amount;\n  } else if (isFixedSizeQuoteAsset(fixedSize)) {\n    if (isQuoteStandard(quote)) {\n      throw Error('Non fixed size quote cannot be provided to fixed size rfq');\n    }\n\n    if (quote.price < 0) {\n      throw Error('Negative prices are not allowed for fixed quote amount rfq');\n    }\n    const amount = fixedSize.amount / quote.price;\n    const legsMultiplier = Number(amount.toFixed(LEG_MULTIPLIER_DECIMALS));\n    return legsMultiplier;\n  }\n  throw new Error('Invalid fixed size');\n}\n\nexport const serializeFixedSizeData = (fixedSize: SolitaFixedSize): Buffer => {\n  const fixedSizeSerializer = createSerializerFromFixableBeet(fixedSizeBeet);\n\n  return fixedSizeSerializer.serialize(fixedSize);\n};\n"],"names":["getPages","accounts","itemsPerPage","numPages","pages","totalCount","length","totalPages","Math","ceil","i","startIndex","page","slice","push","calculateExpectedLegsHash","serializedLegs","lengthBuffer","Buffer","alloc","writeInt32LE","fullLegDataBuffer","concat","_toConsumableArray","hash","Sha256","update","expectedLegsHash","digestSync","calculateExpectedLegsSize","map","leg","reduce","x","y","instrumentsToLegs","instruments","instrumentToSolitaLeg","legsToBaseAssetAccounts","convergence","legs","baseAssetAccounts","_iterator","_createForOfIteratorHelper","_step","s","n","done","value","baseAsset","protocol","pdas","index","baseAssetIndex","baseAssetAccount","pubkey","isSigner","isWritable","err","e","f","instrumentsToLegAccounts","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","Promise","all","getValidationAccounts","sent","abrupt","flat","stop","_x","apply","arguments","sortByActiveAndExpiry","rfqs","sort","a","b","state","aTimeToExpiry","Number","creationTimestamp","activeWindow","bTimeToExpiry","getAuthoritySide","user","rfq","response","taker","equals","maker","extractLegsMultiplier","quote","confirmation","fixedSize","size","overrideLegMultiplier","isFixedSizeOpen","isQuoteStandard","legsMultiplier","Error","isFixedSizeBaseAsset","amount","isFixedSizeQuoteAsset","price","toFixed","LEG_MULTIPLIER_DECIMALS","serializeFixedSizeData","fixedSizeSerializer","createSerializerFromFixableBeet","fixedSizeBeet","serialize"],"mappings":"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"}