{"version":3,"file":"plugin.mjs","sources":["../../../../src/plugins/instrumentModule/plugin.ts"],"sourcesContent":["import { Leg as SolitaLeg } from '@convergence-rfq/rfq';\n\nimport { Protocol } from '../protocolModule';\nimport { LegInstrument, LegInstrumentParser } from './types';\nimport type { Convergence } from '@/Convergence';\nimport { ConvergencePlugin, Program, PublicKey } from '@/types';\n\n/** @group Plugins */\nexport const instrumentModule = (): ConvergencePlugin => ({\n  install(convergence: Convergence) {\n    const legInstrumentParsers = new Map<String, LegInstrumentParser>();\n\n    convergence.addLegInstrument = function (\n      instrumentProgramAddress: PublicKey,\n      factory: LegInstrumentParser\n    ) {\n      if (legInstrumentParsers.has(instrumentProgramAddress.toBase58())) {\n        throw new Error(\n          `Instrument for program ${instrumentProgramAddress} is already added!`\n        );\n      }\n\n      legInstrumentParsers.set(instrumentProgramAddress.toBase58(), factory);\n    };\n\n    convergence.parseLegInstrument = function (\n      leg: SolitaLeg,\n      protocol: Protocol\n    ) {\n      if (leg.settlementTypeMetadata.__kind !== 'Instrument') {\n        throw new Error(\n          'Leg is not settled as escrow, cannot parse as instrument'\n        );\n      }\n\n      const { instrumentIndex } = leg.settlementTypeMetadata;\n      const instrumentProgram =\n        protocol.instruments[instrumentIndex].programKey;\n\n      const factory = legInstrumentParsers.get(instrumentProgram.toBase58());\n\n      if (!factory) {\n        throw new Error(\n          `Missing leg instrument for program ${instrumentProgram}`\n        );\n      }\n\n      return factory.parseFromLeg(convergence, leg, instrumentIndex);\n    };\n  },\n});\n\ndeclare module '../../Convergence' {\n  interface Convergence {\n    addLegInstrument(\n      instrumentProgramAddress: PublicKey,\n      factory: LegInstrumentParser\n    ): void;\n    parseLegInstrument(leg: SolitaLeg, protocol: Protocol): LegInstrument;\n  }\n}\n\ndeclare module '../programModule/ProgramClient' {\n  interface ProgramClient {\n    // TODO remove\n    getSpotInstrument(programs?: Program[]): Program;\n  }\n}\n"],"names":["instrumentModule","install","convergence","legInstrumentParsers","Map","addLegInstrument","instrumentProgramAddress","factory","has","toBase58","Error","concat","set","parseLegInstrument","leg","protocol","settlementTypeMetadata","__kind","instrumentIndex","instrumentProgram","instruments","programKey","get","parseFromLeg"],"mappings":"AAOA;AACaA,IAAAA,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAAA;EAAA,OAA6B;IACxDC,OAAO,EAAA,SAAAA,OAACC,CAAAA,WAAwB,EAAE;AAChC,MAAA,IAAMC,oBAAoB,GAAG,IAAIC,GAAG,EAA+B,CAAA;AAEnEF,MAAAA,WAAW,CAACG,gBAAgB,GAAG,UAC7BC,wBAAmC,EACnCC,OAA4B,EAC5B;QACA,IAAIJ,oBAAoB,CAACK,GAAG,CAACF,wBAAwB,CAACG,QAAQ,EAAE,CAAC,EAAE;AACjE,UAAA,MAAM,IAAIC,KAAK,CAAA,yBAAA,CAAAC,MAAA,CACaL,wBAAwB,uBACpD,CAAC,CAAA;AACH,SAAA;QAEAH,oBAAoB,CAACS,GAAG,CAACN,wBAAwB,CAACG,QAAQ,EAAE,EAAEF,OAAO,CAAC,CAAA;OACvE,CAAA;AAEDL,MAAAA,WAAW,CAACW,kBAAkB,GAAG,UAC/BC,GAAc,EACdC,QAAkB,EAClB;AACA,QAAA,IAAID,GAAG,CAACE,sBAAsB,CAACC,MAAM,KAAK,YAAY,EAAE;AACtD,UAAA,MAAM,IAAIP,KAAK,CACb,0DACF,CAAC,CAAA;AACH,SAAA;AAEA,QAAA,IAAQQ,eAAe,GAAKJ,GAAG,CAACE,sBAAsB,CAA9CE,eAAe,CAAA;QACvB,IAAMC,iBAAiB,GACrBJ,QAAQ,CAACK,WAAW,CAACF,eAAe,CAAC,CAACG,UAAU,CAAA;QAElD,IAAMd,OAAO,GAAGJ,oBAAoB,CAACmB,GAAG,CAACH,iBAAiB,CAACV,QAAQ,EAAE,CAAC,CAAA;QAEtE,IAAI,CAACF,OAAO,EAAE;AACZ,UAAA,MAAM,IAAIG,KAAK,CAAA,qCAAA,CAAAC,MAAA,CACyBQ,iBAAiB,CACzD,CAAC,CAAA;AACH,SAAA;QAEA,OAAOZ,OAAO,CAACgB,YAAY,CAACrB,WAAW,EAAEY,GAAG,EAAEI,eAAe,CAAC,CAAA;OAC/D,CAAA;AACH,KAAA;GACD,CAAA;AAAA;;;;"}