{"version":3,"file":"getRfqStateAndAction.cjs","sources":["../../../../../src/plugins/rfqModule/operations/getRfqStateAndAction.ts"],"sourcesContent":["import { Rfq } from '../models';\nimport { Operation, SyncOperationHandler, useOperation } from '../../../types';\nconst Key = 'GetRfqStateAndAction' as const;\n\nexport type RfqState =\n  | 'Active'\n  | 'Cancelled'\n  | 'Constructed'\n  | 'Expired'\n  | 'Settling'\n  | 'SettlingEnded';\n\nexport type RfqAction =\n  | 'Cancel'\n  | 'UnlockCollateral'\n  | 'Cleanup'\n  | 'FinalizeConstruction'\n  | 'Respond'\n  | 'ViewResponses'\n  | null;\n/**\n * getRfqStateAndAction.\n *\n * ```ts\n * const result = await convergence.rfqs().getRfqStateAndAction({\n * rfq,\n * caller: 'maker' | 'taker',\n * })\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const getRfqStateAndActionOperation =\n  useOperation<GetRfqStateAndAction>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type GetRfqStateAndAction = Operation<\n  typeof Key,\n  GetRfqStateAndActionInput,\n  GetRfqStateAndActionOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type GetRfqStateAndActionInput = {\n  rfq: Rfq;\n  caller: 'maker' | 'taker';\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type GetRfqStateAndActionOutput = {\n  rfqState: RfqState;\n  rfqAction: RfqAction;\n  rfqStateValidUntil: Date | null;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const getRfqStateAndActionHandler: SyncOperationHandler<GetRfqStateAndAction> =\n  {\n    handle: (operation: GetRfqStateAndAction): GetRfqStateAndActionOutput => {\n      const { rfq, caller } = operation.input;\n      const timestampStart = new Date(Number(rfq.creationTimestamp));\n      const timestampExpiry = new Date(\n        timestampStart.getTime() + Number(rfq.activeWindow) * 1000\n      );\n      const timestampSettlement = new Date(\n        timestampExpiry.getTime() + Number(rfq.settlingWindow) * 1000\n      );\n      const rfqState = getRfqState(rfq, timestampExpiry, timestampSettlement);\n      const rfqStateValidUntil = getRfqStateValidity(\n        rfqState,\n        rfq,\n        timestampExpiry,\n        timestampSettlement\n      );\n      const rfqAction = getRfqAction(rfq, rfqState, caller);\n      return { rfqState, rfqStateValidUntil, rfqAction };\n    },\n  };\n\nconst getRfqStateValidity = (\n  rfqState: RfqState,\n  rfq: Rfq,\n  timestampExpiry: Date,\n  timestampSettlement: Date\n) => {\n  if (rfqState === 'Active') {\n    return timestampExpiry;\n  }\n  if (rfqState === 'Settling') {\n    return timestampSettlement;\n  }\n  return null;\n};\n\nconst getRfqState = (\n  rfq: Rfq,\n  timestampExpiry: Date,\n  timestampSettlement: Date\n): RfqState => {\n  const rfqExpired = timestampExpiry.getTime() <= Date.now();\n  const settlementWindowElapsed = timestampSettlement.getTime() <= Date.now();\n  switch (rfq.state) {\n    case 'constructed':\n      return 'Constructed';\n    case 'canceled':\n      return 'Cancelled';\n    case 'active': {\n      if (!rfqExpired) return 'Active';\n      if (rfqExpired) return 'Expired';\n      if (!settlementWindowElapsed) return 'Settling';\n      if (settlementWindowElapsed) return 'SettlingEnded';\n    }\n  }\n  throw new Error('Invalid Rfq state');\n};\n\nconst getRfqAction = (\n  rfq: Rfq,\n  rfqState: RfqState,\n  caller: 'maker' | 'taker'\n): RfqAction => {\n  const pendingResponses = rfq.totalResponses - rfq.clearedResponses;\n\n  switch (rfqState) {\n    case 'Active':\n      if (caller === 'maker') return 'Respond';\n      if (caller === 'taker' && pendingResponses > 0) return 'ViewResponses';\n      if (caller === 'taker' && pendingResponses === 0) return 'Cancel';\n      break;\n    case 'Constructed':\n      if (caller === 'maker') return null;\n      if (caller === 'taker') return 'FinalizeConstruction';\n      break;\n    case 'Expired':\n      if (caller === 'maker') return null;\n      if (caller === 'taker' && pendingResponses > 0) return 'ViewResponses';\n      if (\n        caller === 'taker' &&\n        pendingResponses === 0 &&\n        rfq.totalTakerCollateralLocked > 0\n      )\n        return 'UnlockCollateral';\n      if (\n        caller === 'taker' &&\n        pendingResponses === 0 &&\n        rfq.totalTakerCollateralLocked == 0\n      )\n        return 'Cleanup';\n      break;\n    case 'Cancelled':\n      if (caller === 'maker') return null;\n      if (\n        caller === 'taker' &&\n        pendingResponses === 0 &&\n        rfq.totalTakerCollateralLocked > 0\n      )\n        return 'UnlockCollateral';\n      if (\n        caller === 'taker' &&\n        pendingResponses === 0 &&\n        rfq.totalTakerCollateralLocked == 0\n      )\n        return 'Cleanup';\n      break;\n    default:\n      return null;\n  }\n  return null;\n};\n"],"names":["Key","getRfqStateAndActionOperation","useOperation","getRfqStateAndActionHandler","handle","operation","_operation$input","input","rfq","caller","timestampStart","Date","Number","creationTimestamp","timestampExpiry","getTime","activeWindow","timestampSettlement","settlingWindow","rfqState","getRfqState","rfqStateValidUntil","getRfqStateValidity","rfqAction","getRfqAction","rfqExpired","now","settlementWindowElapsed","state","Error","pendingResponses","totalResponses","clearedResponses","totalTakerCollateralLocked"],"mappings":"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"}