{"version":3,"file":"BaseAsset.mjs","sources":["../../../../../src/plugins/protocolModule/models/BaseAsset.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js';\nimport {\n  BaseAssetIndex as SolitaBaseAssetIndex,\n  RiskCategory as SolitaRiskCategory,\n  OracleSource as SolitaOracleSource,\n} from '@convergence-rfq/rfq';\n\nimport { BaseAssetAccount } from '../accounts';\nimport { assert } from '../../../utils/assert';\n\nexport type RiskCategory =\n  | 'very-low'\n  | 'low'\n  | 'medium'\n  | 'high'\n  | 'very-high'\n  | 'custom-1'\n  | 'custom-2'\n  | 'custom-3';\n\nexport const isRiskCategory = (value: string): value is RiskCategory => {\n  return [\n    'very-low',\n    'low',\n    'medium',\n    'high',\n    'very-high',\n    'custom-1',\n    'custom-2',\n    'custom-3',\n  ].includes(value);\n};\n\nexport type OracleSource = 'switchboard' | 'pyth' | 'in-place';\n\nexport const isOracleSource = (value: string): value is OracleSource => {\n  return ['switchboard', 'pyth', 'in-place'].includes(value);\n};\n\n/**\n * This model captures all the relevant information about a Solita base asset\n * on the Solana blockchain.\n *\n * @group Models\n */\nexport type BaseAsset = {\n  /** A model identifier to distinguish models in the SDK. */\n  readonly model: 'baseAsset';\n\n  /** The address of the base asset. */\n  readonly address: PublicKey;\n\n  /** The PDA bump of the base asset. */\n  readonly bump: number;\n\n  /** The base asset index. */\n  readonly index: number;\n\n  /** The risk category for the base asset */\n  readonly riskCategory: RiskCategory;\n\n  /** Is base asset enabled or disabled. */\n  readonly enabled: boolean;\n\n  /** The price oracle source for the base asset. */\n  readonly oracleSource: OracleSource;\n\n  /** The switchboard oracle. */\n  readonly switchboardOracle?: PublicKey;\n\n  /** The pyth oracle. */\n  readonly pythOracle?: PublicKey;\n\n  /** The in-place price. */\n  readonly inPlacePrice?: number;\n\n  /** Is strict asset. */\n  readonly strict: boolean;\n\n  /** The ticker for the base asset. */\n  readonly ticker: string;\n};\n\n/** @group Model Helpers */\nexport const isBaseAsset = (value: any): value is BaseAsset =>\n  typeof value === 'object' && value.model === 'baseAsset';\n\n/** @group Model Helpers */\nexport function assertBaseAsset(value: any): asserts value is BaseAsset {\n  assert(isBaseAsset(value), 'Expected BaseAsset model');\n}\n\n/** @group Model Helpers */\nexport const toBaseAssetIndex = (\n  solitaBaseAssetIndex: SolitaBaseAssetIndex\n): number => {\n  return solitaBaseAssetIndex.value;\n};\n\n/** @group Model Helpers */\nexport const toRiskCategory = (\n  solitaRiskCategory: SolitaRiskCategory\n): RiskCategory => {\n  switch (solitaRiskCategory) {\n    case SolitaRiskCategory.VeryLow:\n      return 'very-low';\n    case SolitaRiskCategory.Low:\n      return 'low';\n    case SolitaRiskCategory.Medium:\n      return 'medium';\n    case SolitaRiskCategory.High:\n      return 'high';\n    case SolitaRiskCategory.VeryHigh:\n      return 'very-high';\n    case SolitaRiskCategory.Custom1:\n      return 'custom-1';\n    case SolitaRiskCategory.Custom2:\n      return 'custom-2';\n    case SolitaRiskCategory.Custom3:\n      return 'custom-3';\n  }\n};\n\nexport const toOracleSource = (\n  oracleSource: SolitaOracleSource\n): OracleSource => {\n  switch (oracleSource) {\n    case SolitaOracleSource.Switchboard:\n      return 'switchboard';\n    case SolitaOracleSource.Pyth:\n      return 'pyth';\n    case SolitaOracleSource.InPlace:\n      return 'in-place';\n    default:\n      throw new Error(`Unsupported oracle source: ${oracleSource}`);\n  }\n};\n\nexport const toSolitaOracleSource = (\n  oracleSource: OracleSource\n): SolitaOracleSource => {\n  switch (oracleSource) {\n    case 'switchboard':\n      return SolitaOracleSource.Switchboard;\n    case 'pyth':\n      return SolitaOracleSource.Pyth;\n    case 'in-place':\n      return SolitaOracleSource.InPlace;\n    default:\n      throw new Error(`Unsupported oracle source: ${oracleSource}`);\n  }\n};\n\nexport const toSolitaRiskCategory = (riskCategory: RiskCategory) => {\n  switch (riskCategory) {\n    case 'very-low':\n      return SolitaRiskCategory.VeryLow;\n    case 'low':\n      return SolitaRiskCategory.Low;\n    case 'medium':\n      return SolitaRiskCategory.Medium;\n    case 'high':\n      return SolitaRiskCategory.High;\n    case 'very-high':\n      return SolitaRiskCategory.VeryHigh;\n    case 'custom-1':\n      return SolitaRiskCategory.Custom1;\n    case 'custom-2':\n      return SolitaRiskCategory.Custom2;\n    case 'custom-3':\n      return SolitaRiskCategory.Custom3;\n    default:\n      throw new Error(`Unsupported risk category: ${riskCategory}`);\n  }\n};\n\n/** @group Model Helpers */\nexport const toBaseAsset = (account: BaseAssetAccount): BaseAsset => ({\n  model: 'baseAsset',\n  address: account.publicKey,\n  bump: account.data.bump,\n  index: toBaseAssetIndex(account.data.index),\n  enabled: account.data.enabled,\n  riskCategory: toRiskCategory(account.data.riskCategory),\n  oracleSource: toOracleSource(account.data.oracleSource),\n  switchboardOracle: !account.data.switchboardOracle.equals(PublicKey.default)\n    ? account.data.switchboardOracle\n    : undefined,\n  pythOracle: !account.data.pythOracle.equals(PublicKey.default)\n    ? account.data.pythOracle\n    : undefined,\n  inPlacePrice:\n    account.data.inPlacePrice !== 0 ? account.data.inPlacePrice : undefined,\n  strict: !account.data.nonStrict,\n  ticker: account.data.ticker,\n});\n"],"names":["isRiskCategory","value","includes","isOracleSource","isBaseAsset","_typeof","model","assertBaseAsset","assert","toBaseAssetIndex","solitaBaseAssetIndex","toRiskCategory","solitaRiskCategory","SolitaRiskCategory","VeryLow","Low","Medium","High","VeryHigh","Custom1","Custom2","Custom3","toOracleSource","oracleSource","SolitaOracleSource","Switchboard","Pyth","InPlace","Error","concat","toSolitaOracleSource","toSolitaRiskCategory","riskCategory","toBaseAsset","account","address","publicKey","bump","data","index","enabled","switchboardOracle","equals","PublicKey","undefined","pythOracle","inPlacePrice","strict","nonStrict","ticker"],"mappings":";;;;;IAoBaA,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,KAAa,EAA4B;EACtE,OAAO,CACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,MAAM,EACN,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,CACX,CAACC,QAAQ,CAACD,KAAK,CAAC,CAAA;AACnB,EAAC;IAIYE,cAAc,GAAG,SAAjBA,cAAcA,CAAIF,KAAa,EAA4B;EACtE,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAACC,QAAQ,CAACD,KAAK,CAAC,CAAA;AAC5D,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAuCA;IACaG,WAAW,GAAG,SAAdA,WAAWA,CAAIH,KAAU,EAAA;EAAA,OACpCI,OAAA,CAAOJ,KAAK,CAAK,KAAA,QAAQ,IAAIA,KAAK,CAACK,KAAK,KAAK,WAAW,CAAA;AAAA,EAAA;;AAE1D;AACO,SAASC,eAAeA,CAACN,KAAU,EAA8B;AACtEO,EAAAA,MAAM,CAACJ,WAAW,CAACH,KAAK,CAAC,EAAE,0BAA0B,CAAC,CAAA;AACxD,CAAA;;AAEA;IACaQ,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAC3BC,oBAA0C,EAC/B;EACX,OAAOA,oBAAoB,CAACT,KAAK,CAAA;AACnC,EAAC;;AAED;IACaU,cAAc,GAAG,SAAjBA,cAAcA,CACzBC,kBAAsC,EACrB;AACjB,EAAA,QAAQA,kBAAkB;IACxB,KAAKC,YAAkB,CAACC,OAAO;AAC7B,MAAA,OAAO,UAAU,CAAA;IACnB,KAAKD,YAAkB,CAACE,GAAG;AACzB,MAAA,OAAO,KAAK,CAAA;IACd,KAAKF,YAAkB,CAACG,MAAM;AAC5B,MAAA,OAAO,QAAQ,CAAA;IACjB,KAAKH,YAAkB,CAACI,IAAI;AAC1B,MAAA,OAAO,MAAM,CAAA;IACf,KAAKJ,YAAkB,CAACK,QAAQ;AAC9B,MAAA,OAAO,WAAW,CAAA;IACpB,KAAKL,YAAkB,CAACM,OAAO;AAC7B,MAAA,OAAO,UAAU,CAAA;IACnB,KAAKN,YAAkB,CAACO,OAAO;AAC7B,MAAA,OAAO,UAAU,CAAA;IACnB,KAAKP,YAAkB,CAACQ,OAAO;AAC7B,MAAA,OAAO,UAAU,CAAA;AACrB,GAAA;AACF,EAAC;IAEYC,cAAc,GAAG,SAAjBA,cAAcA,CACzBC,YAAgC,EACf;AACjB,EAAA,QAAQA,YAAY;IAClB,KAAKC,YAAkB,CAACC,WAAW;AACjC,MAAA,OAAO,aAAa,CAAA;IACtB,KAAKD,YAAkB,CAACE,IAAI;AAC1B,MAAA,OAAO,MAAM,CAAA;IACf,KAAKF,YAAkB,CAACG,OAAO;AAC7B,MAAA,OAAO,UAAU,CAAA;AACnB,IAAA;AACE,MAAA,MAAM,IAAIC,KAAK,CAAA,6BAAA,CAAAC,MAAA,CAA+BN,YAAY,CAAE,CAAC,CAAA;AACjE,GAAA;AACF,EAAC;IAEYO,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAC/BP,YAA0B,EACH;AACvB,EAAA,QAAQA,YAAY;AAClB,IAAA,KAAK,aAAa;MAChB,OAAOC,YAAkB,CAACC,WAAW,CAAA;AACvC,IAAA,KAAK,MAAM;MACT,OAAOD,YAAkB,CAACE,IAAI,CAAA;AAChC,IAAA,KAAK,UAAU;MACb,OAAOF,YAAkB,CAACG,OAAO,CAAA;AACnC,IAAA;AACE,MAAA,MAAM,IAAIC,KAAK,CAAA,6BAAA,CAAAC,MAAA,CAA+BN,YAAY,CAAE,CAAC,CAAA;AACjE,GAAA;AACF,EAAC;IAEYQ,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,YAA0B,EAAK;AAClE,EAAA,QAAQA,YAAY;AAClB,IAAA,KAAK,UAAU;MACb,OAAOnB,YAAkB,CAACC,OAAO,CAAA;AACnC,IAAA,KAAK,KAAK;MACR,OAAOD,YAAkB,CAACE,GAAG,CAAA;AAC/B,IAAA,KAAK,QAAQ;MACX,OAAOF,YAAkB,CAACG,MAAM,CAAA;AAClC,IAAA,KAAK,MAAM;MACT,OAAOH,YAAkB,CAACI,IAAI,CAAA;AAChC,IAAA,KAAK,WAAW;MACd,OAAOJ,YAAkB,CAACK,QAAQ,CAAA;AACpC,IAAA,KAAK,UAAU;MACb,OAAOL,YAAkB,CAACM,OAAO,CAAA;AACnC,IAAA,KAAK,UAAU;MACb,OAAON,YAAkB,CAACO,OAAO,CAAA;AACnC,IAAA,KAAK,UAAU;MACb,OAAOP,YAAkB,CAACQ,OAAO,CAAA;AACnC,IAAA;AACE,MAAA,MAAM,IAAIO,KAAK,CAAA,6BAAA,CAAAC,MAAA,CAA+BG,YAAY,CAAE,CAAC,CAAA;AACjE,GAAA;AACF,EAAC;;AAED;IACaC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,OAAyB,EAAA;EAAA,OAAiB;AACpE5B,IAAAA,KAAK,EAAE,WAAW;IAClB6B,OAAO,EAAED,OAAO,CAACE,SAAS;AAC1BC,IAAAA,IAAI,EAAEH,OAAO,CAACI,IAAI,CAACD,IAAI;IACvBE,KAAK,EAAE9B,gBAAgB,CAACyB,OAAO,CAACI,IAAI,CAACC,KAAK,CAAC;AAC3CC,IAAAA,OAAO,EAAEN,OAAO,CAACI,IAAI,CAACE,OAAO;IAC7BR,YAAY,EAAErB,cAAc,CAACuB,OAAO,CAACI,IAAI,CAACN,YAAY,CAAC;IACvDT,YAAY,EAAED,cAAc,CAACY,OAAO,CAACI,IAAI,CAACf,YAAY,CAAC;IACvDkB,iBAAiB,EAAE,CAACP,OAAO,CAACI,IAAI,CAACG,iBAAiB,CAACC,MAAM,CAACC,SAAS,CAAQ,SAAA,CAAA,CAAC,GACxET,OAAO,CAACI,IAAI,CAACG,iBAAiB,GAC9BG,SAAS;IACbC,UAAU,EAAE,CAACX,OAAO,CAACI,IAAI,CAACO,UAAU,CAACH,MAAM,CAACC,SAAS,CAAQ,SAAA,CAAA,CAAC,GAC1DT,OAAO,CAACI,IAAI,CAACO,UAAU,GACvBD,SAAS;AACbE,IAAAA,YAAY,EACVZ,OAAO,CAACI,IAAI,CAACQ,YAAY,KAAK,CAAC,GAAGZ,OAAO,CAACI,IAAI,CAACQ,YAAY,GAAGF,SAAS;AACzEG,IAAAA,MAAM,EAAE,CAACb,OAAO,CAACI,IAAI,CAACU,SAAS;AAC/BC,IAAAA,MAAM,EAAEf,OAAO,CAACI,IAAI,CAACW,MAAAA;GACtB,CAAA;AAAA;;;;"}