{"version":3,"file":"Collateral.mjs","sources":["../../../../../src/plugins/collateralModule/models/Collateral.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js';\nimport { BN } from 'bn.js';\n\nimport { Mint } from '../../tokenModule/models/Mint';\nimport { CollateralAccount } from '../accounts';\nimport { assert } from '../../../utils/assert';\nimport { removeDecimals } from '../../../utils/conversions';\n\n/**\n * This model captures all the relevant information about a collateral account\n * on the Solana blockchain.\n *\n * @group Models\n */\nexport type Collateral = {\n  /** A model identifier to distinguish models in the SDK. */\n  readonly model: 'collateral';\n\n  /** The address of the collateral account. */\n  readonly address: PublicKey;\n\n  /** The owner of the Collateral account. */\n  readonly user: PublicKey;\n\n  // NOTE: Removed bump and token account bump\n\n  /** The amount of locked tokens. */\n  readonly lockedTokensAmount: number;\n};\n\n/** @group Model Helpers */\nexport const isCollateral = (value: any): value is Collateral =>\n  typeof value === 'object' && value.model === 'collateral';\n\n/** @group Model Helpers */\nexport function assertCollateral(value: any): asserts value is Collateral {\n  assert(isCollateral(value), 'Expected collateral model');\n}\n\nfunction getLockedTokensAmount(value: unknown, mint: Mint | undefined): number {\n  if (typeof mint === 'undefined') {\n    return 0;\n  }\n  if (typeof value === 'number') {\n    return removeDecimals(value, mint.decimals);\n  }\n  if (value instanceof BN) {\n    return removeDecimals(value.toNumber(), mint.decimals);\n  }\n  return 0;\n}\n\n/** @group Model Helpers */\nexport const toCollateral = (\n  account: CollateralAccount,\n  mint?: Mint\n): Collateral => ({\n  model: 'collateral',\n  address: account.publicKey,\n  user: account.data.user,\n  lockedTokensAmount: getLockedTokensAmount(\n    account.data.lockedTokensAmount,\n    mint\n  ),\n});\n"],"names":["isCollateral","value","_typeof","model","assertCollateral","assert","getLockedTokensAmount","mint","removeDecimals","decimals","BN","toNumber","toCollateral","account","address","publicKey","user","data","lockedTokensAmount"],"mappings":";;;;;AAQA;AACA;AACA;AACA;AACA;AACA;;AAiBA;IACaA,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAU,EAAA;EAAA,OACrCC,OAAA,CAAOD,KAAK,CAAK,KAAA,QAAQ,IAAIA,KAAK,CAACE,KAAK,KAAK,YAAY,CAAA;AAAA,EAAA;;AAE3D;AACO,SAASC,gBAAgBA,CAACH,KAAU,EAA+B;AACxEI,EAAAA,MAAM,CAACL,YAAY,CAACC,KAAK,CAAC,EAAE,2BAA2B,CAAC,CAAA;AAC1D,CAAA;AAEA,SAASK,qBAAqBA,CAACL,KAAc,EAAEM,IAAsB,EAAU;AAC7E,EAAA,IAAI,OAAOA,IAAI,KAAK,WAAW,EAAE;AAC/B,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;AACA,EAAA,IAAI,OAAON,KAAK,KAAK,QAAQ,EAAE;AAC7B,IAAA,OAAOO,cAAc,CAACP,KAAK,EAAEM,IAAI,CAACE,QAAQ,CAAC,CAAA;AAC7C,GAAA;EACA,IAAIR,KAAK,YAAYS,EAAE,EAAE;IACvB,OAAOF,cAAc,CAACP,KAAK,CAACU,QAAQ,EAAE,EAAEJ,IAAI,CAACE,QAAQ,CAAC,CAAA;AACxD,GAAA;AACA,EAAA,OAAO,CAAC,CAAA;AACV,CAAA;;AAEA;AACO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CACvBC,OAA0B,EAC1BN,IAAW,EAAA;EAAA,OACK;AAChBJ,IAAAA,KAAK,EAAE,YAAY;IACnBW,OAAO,EAAED,OAAO,CAACE,SAAS;AAC1BC,IAAAA,IAAI,EAAEH,OAAO,CAACI,IAAI,CAACD,IAAI;IACvBE,kBAAkB,EAAEZ,qBAAqB,CACvCO,OAAO,CAACI,IAAI,CAACC,kBAAkB,EAC/BX,IACF,CAAA;GACD,CAAA;AAAA;;;;"}