{"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":25}},"2":{"start":{"line":10,"column":19},"end":{"line":10,"column":76}},"3":{"start":{"line":11,"column":19},"end":{"line":11,"column":76}},"4":{"start":{"line":12,"column":8},"end":{"line":12,"column":32}},"5":{"start":{"line":19,"column":8},"end":{"line":19,"column":96}},"6":{"start":{"line":25,"column":8},"end":{"line":38,"column":9}},"7":{"start":{"line":26,"column":12},"end":{"line":28,"column":13}},"8":{"start":{"line":27,"column":16},"end":{"line":27,"column":29}},"9":{"start":{"line":29,"column":12},"end":{"line":29,"column":42}},"10":{"start":{"line":30,"column":12},"end":{"line":30,"column":24}},"11":{"start":{"line":33,"column":12},"end":{"line":35,"column":13}},"12":{"start":{"line":34,"column":16},"end":{"line":34,"column":29}},"13":{"start":{"line":36,"column":12},"end":{"line":36,"column":42}},"14":{"start":{"line":37,"column":12},"end":{"line":37,"column":24}},"15":{"start":{"line":41,"column":0},"end":{"line":41,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":9,"column":21},"end":{"line":13,"column":5}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":4},"end":{"line":18,"column":5}},"loc":{"start":{"line":18,"column":21},"end":{"line":20,"column":5}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":4},"end":{"line":24,"column":5}},"loc":{"start":{"line":24,"column":29},"end":{"line":39,"column":5}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":19},"end":{"line":10,"column":76}},"type":"binary-expr","locations":[{"start":{"line":10,"column":20},"end":{"line":10,"column":38}},{"start":{"line":10,"column":42},"end":{"line":10,"column":70}},{"start":{"line":10,"column":75},"end":{"line":10,"column":76}}],"line":10},"1":{"loc":{"start":{"line":11,"column":19},"end":{"line":11,"column":76}},"type":"binary-expr","locations":[{"start":{"line":11,"column":20},"end":{"line":11,"column":38}},{"start":{"line":11,"column":42},"end":{"line":11,"column":70}},{"start":{"line":11,"column":75},"end":{"line":11,"column":76}}],"line":11},"2":{"loc":{"start":{"line":19,"column":15},"end":{"line":19,"column":95}},"type":"binary-expr","locations":[{"start":{"line":19,"column":15},"end":{"line":19,"column":29}},{"start":{"line":19,"column":33},"end":{"line":19,"column":47}},{"start":{"line":19,"column":51},"end":{"line":19,"column":95}}],"line":19},"3":{"loc":{"start":{"line":19,"column":54},"end":{"line":19,"column":94}},"type":"binary-expr","locations":[{"start":{"line":19,"column":54},"end":{"line":19,"column":72}},{"start":{"line":19,"column":76},"end":{"line":19,"column":94}}],"line":19},"4":{"loc":{"start":{"line":25,"column":8},"end":{"line":38,"column":9}},"type":"if","locations":[{"start":{"line":25,"column":8},"end":{"line":38,"column":9}},{"start":{"line":25,"column":8},"end":{"line":38,"column":9}}],"line":25},"5":{"loc":{"start":{"line":26,"column":12},"end":{"line":28,"column":13}},"type":"if","locations":[{"start":{"line":26,"column":12},"end":{"line":28,"column":13}},{"start":{"line":26,"column":12},"end":{"line":28,"column":13}}],"line":26},"6":{"loc":{"start":{"line":26,"column":16},"end":{"line":26,"column":87}},"type":"binary-expr","locations":[{"start":{"line":26,"column":16},"end":{"line":26,"column":34}},{"start":{"line":26,"column":38},"end":{"line":26,"column":87}}],"line":26},"7":{"loc":{"start":{"line":33,"column":12},"end":{"line":35,"column":13}},"type":"if","locations":[{"start":{"line":33,"column":12},"end":{"line":35,"column":13}},{"start":{"line":33,"column":12},"end":{"line":35,"column":13}}],"line":33},"8":{"loc":{"start":{"line":33,"column":16},"end":{"line":33,"column":87}},"type":"binary-expr","locations":[{"start":{"line":33,"column":16},"end":{"line":33,"column":34}},{"start":{"line":33,"column":38},"end":{"line":33,"column":87}}],"line":33}},"s":{"0":1,"1":1,"2":7,"3":7,"4":7,"5":4,"6":18,"7":9,"8":1,"9":8,"10":8,"11":9,"12":1,"13":8,"14":8,"15":1},"f":{"0":7,"1":4,"2":18},"b":{"0":[7,4,3],"1":[7,5,2],"2":[4,3,3],"3":[3,1],"4":[9,9],"5":[1,8],"6":[9,2],"7":[1,8],"8":[9,2]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel.ts"],"names":[],"mappings":";;;AAKA,MAAa,OAAO;IA8ChB;;;OAGG;IACH,IAAW,UAAU;QACjB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5F,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,QAAyB;QAC3C,IAAI,QAAQ,CAAC,SAAS,KAAK,CAAC,EAAE;YAC1B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE;gBACzE,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC9B,OAAO,IAAI,CAAC;SACf;aAAM;YACH,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE;gBACzE,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC9B,OAAO,IAAI,CAAC;SACf;IACL,CAAC;CACJ;AAlFD,0BAkFC","sourcesContent":["import { BitField } from \"@node-lightning/core\";\nimport { ShortChannelId } from \"@node-lightning/core\";\nimport { OutPoint } from \"@node-lightning/core\";\nimport { ChannelSettings } from \"./channel-settings\";\n\nexport class Channel {\n    /**\n     * Short channel identifier for the channel that points to the funding\n     * transaction on the blockchain.\n     */\n    public shortChannelId: ShortChannelId;\n\n    /**\n     * Obtained after verifying the transaction is a valid\n     * channel funding transaction and is still a UTXO\n     */\n    public channelPoint: OutPoint;\n\n    /**\n     * Public key of the first node, as ordered by DER encoding of the\n     * 33-byte secp256k1 public key.\n     */\n    public nodeId1: Buffer;\n\n    /**\n     * Public key of the second node, as ordered by DER encoding of the\n     * 33-byte secp256k1 public key.\n     */\n    public nodeId2: Buffer;\n\n    /**\n     * Channel features\n     */\n    public features: BitField;\n\n    /**\n     * Routing policy for the first node\n     */\n    public node1Settings: ChannelSettings;\n\n    /**\n     * Routing policy for the second node\n     */\n    public node2Settings: ChannelSettings;\n\n    /**\n     * Capacity of the channel as determined by the funding transaction\n     * output amount.\n     */\n    public capacity: bigint;\n\n    /**\n     * Gets the most recently updated timestamp based on the settings\n     * from the two nodes\n     */\n    public get lastUpdate(): number {\n        const t1 = (this.node1Settings && this.node1Settings.timestamp) || 0;\n        const t2 = (this.node2Settings && this.node2Settings.timestamp) || 0;\n        return Math.max(t1, t2);\n    }\n\n    /**\n     * Routable when nodes are known and validated and at least one\n     * node has broadcast its relay fees\n     */\n    get isRoutable(): boolean {\n        return !!this.nodeId1 && !!this.nodeId2 && !!(this.node1Settings || this.node2Settings);\n    }\n\n    /**\n     * Update channel settings\n     */\n    public updateSettings(settings: ChannelSettings): boolean {\n        if (settings.direction === 0) {\n            if (this.node1Settings && this.node1Settings.timestamp > settings.timestamp) {\n                return false;\n            }\n            this.node1Settings = settings;\n            return true;\n        } else {\n            if (this.node2Settings && this.node2Settings.timestamp > settings.timestamp) {\n                return false;\n            }\n            this.node2Settings = settings;\n            return true;\n        }\n    }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"e16f0903a5bca6b9031e698b063833599694b021"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel-settings.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel-settings.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":33}},"2":{"start":{"line":6,"column":8},"end":{"line":6,"column":30}},"3":{"start":{"line":9,"column":0},"end":{"line":9,"column":42}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":4},"end":{"line":5,"column":5}},"loc":{"start":{"line":5,"column":18},"end":{"line":7,"column":5}},"line":5}},"branchMap":{},"s":{"0":1,"1":1,"2":27,"3":1},"f":{"0":27},"b":{},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel-settings.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/channel-settings.ts"],"names":[],"mappings":";;;AAAA,MAAa,eAAe;IAA5B;QAQW,aAAQ,GAAY,KAAK,CAAC;IACrC,CAAC;CAAA;AATD,0CASC","sourcesContent":["export class ChannelSettings {\n    public direction: number;\n    public timestamp: number;\n    public cltvExpiryDelta: number;\n    public htlcMinimumMsat: bigint;\n    public htlcMaximumMsat: bigint;\n    public feeBaseMsat: number;\n    public feeProportionalMillionths: number;\n    public disabled: boolean = false;\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9634aa7b0f8b7e0fb688a29af4816547cf71112e"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-error.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-error.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":112}},"2":{"start":{"line":5,"column":0},"end":{"line":8,"column":77}},"3":{"start":{"line":6,"column":4},"end":{"line":6,"column":78}},"4":{"start":{"line":7,"column":4},"end":{"line":7,"column":72}},"5":{"start":{"line":11,"column":8},"end":{"line":11,"column":23}},"6":{"start":{"line":12,"column":8},"end":{"line":12,"column":25}},"7":{"start":{"line":15,"column":0},"end":{"line":15,"column":32}},"8":{"start":{"line":18,"column":20},"end":{"line":18,"column":58}},"9":{"start":{"line":19,"column":8},"end":{"line":19,"column":51}},"10":{"start":{"line":22,"column":0},"end":{"line":22,"column":52}},"11":{"start":{"line":25,"column":20},"end":{"line":25,"column":57}},"12":{"start":{"line":26,"column":8},"end":{"line":26,"column":48}},"13":{"start":{"line":29,"column":0},"end":{"line":29,"column":46}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":1},"end":{"line":5,"column":2}},"loc":{"start":{"line":5,"column":27},"end":{"line":8,"column":1}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":10,"column":4},"end":{"line":10,"column":5}},"loc":{"start":{"line":10,"column":31},"end":{"line":13,"column":5}},"line":10},"2":{"name":"(anonymous_2)","decl":{"start":{"line":17,"column":4},"end":{"line":17,"column":5}},"loc":{"start":{"line":17,"column":22},"end":{"line":20,"column":5}},"line":17},"3":{"name":"(anonymous_3)","decl":{"start":{"line":24,"column":4},"end":{"line":24,"column":5}},"loc":{"start":{"line":24,"column":24},"end":{"line":27,"column":5}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":20},"end":{"line":8,"column":75}},"type":"binary-expr","locations":[{"start":{"line":8,"column":20},"end":{"line":8,"column":42}},{"start":{"line":8,"column":47},"end":{"line":8,"column":74}}],"line":8}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":3,"6":3,"7":1,"8":1,"9":1,"10":1,"11":2,"12":2,"13":1},"f":{"0":1,"1":3,"2":1,"3":2},"b":{"0":[1,1]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-error.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-error.ts"],"names":[],"mappings":";;;AAGA,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,yEAAmB,CAAA;IACnB,mEAAgB,CAAA;AACpB,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED,MAAsB,UAAW,SAAQ,KAAK;IAG1C,YAAY,IAAoB,EAAE,OAAe;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ;AAPD,gCAOC;AAED,MAAa,oBAAqB,SAAQ,UAAU;IAChD,YAAY,IAAoB;QAC5B,MAAM,GAAG,GAAG,qBAAqB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnD,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;CACJ;AALD,oDAKC;AAED,MAAa,iBAAkB,SAAQ,UAAU;IAC7C,YAAY,MAAc;QACtB,MAAM,GAAG,GAAG,kBAAkB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;CACJ;AALD,8CAKC","sourcesContent":["// tslint:disable: max-classes-per-file\nimport { ShortChannelId } from \"@node-lightning/core\";\n\nexport enum GraphErrorCode {\n    ChannelNotFound = 1,\n    NodeNotFound = 2,\n}\n\nexport abstract class GraphError extends Error {\n    public code: GraphErrorCode;\n\n    constructor(code: GraphErrorCode, message: string) {\n        super(message);\n        this.code = code;\n    }\n}\n\nexport class ChannelNotFoundError extends GraphError {\n    constructor(scid: ShortChannelId) {\n        const msg = `channel_not_found ${scid.toString()}`;\n        super(GraphErrorCode.ChannelNotFound, msg);\n    }\n}\n\nexport class NodeNotFoundError extends GraphError {\n    constructor(nodeId: Buffer) {\n        const msg = `node_not_found ${nodeId.toString()}`;\n        super(GraphErrorCode.NodeNotFound, msg);\n    }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"719fdc757263e2a17a0e536bf032e04b53b4a909"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-manager.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-manager.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":30}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":46}},"3":{"start":{"line":5,"column":17},"end":{"line":5,"column":34}},"4":{"start":{"line":6,"column":31},"end":{"line":6,"column":76}},"5":{"start":{"line":7,"column":40},"end":{"line":7,"column":94}},"6":{"start":{"line":8,"column":16},"end":{"line":8,"column":34}},"7":{"start":{"line":9,"column":22},"end":{"line":9,"column":46}},"8":{"start":{"line":10,"column":15},"end":{"line":10,"column":32}},"9":{"start":{"line":18,"column":8},"end":{"line":18,"column":16}},"10":{"start":{"line":19,"column":8},"end":{"line":19,"column":27}},"11":{"start":{"line":20,"column":8},"end":{"line":20,"column":43}},"12":{"start":{"line":21,"column":8},"end":{"line":21,"column":69}},"13":{"start":{"line":28,"column":28},"end":{"line":28,"column":47}},"14":{"start":{"line":29,"column":8},"end":{"line":35,"column":9}},"15":{"start":{"line":30,"column":12},"end":{"line":34,"column":13}},"16":{"start":{"line":31,"column":16},"end":{"line":31,"column":50}},"17":{"start":{"line":32,"column":16},"end":{"line":32,"column":53}},"18":{"start":{"line":33,"column":16},"end":{"line":33,"column":23}},"19":{"start":{"line":44,"column":8},"end":{"line":68,"column":9}},"20":{"start":{"line":45,"column":28},"end":{"line":45,"column":74}},"21":{"start":{"line":47,"column":12},"end":{"line":49,"column":13}},"22":{"start":{"line":48,"column":16},"end":{"line":48,"column":23}},"23":{"start":{"line":51,"column":12},"end":{"line":56,"column":13}},"24":{"start":{"line":52,"column":30},"end":{"line":52,"column":47}},"25":{"start":{"line":53,"column":16},"end":{"line":53,"column":43}},"26":{"start":{"line":54,"column":16},"end":{"line":54,"column":42}},"27":{"start":{"line":55,"column":16},"end":{"line":55,"column":41}},"28":{"start":{"line":58,"column":12},"end":{"line":63,"column":13}},"29":{"start":{"line":59,"column":30},"end":{"line":59,"column":47}},"30":{"start":{"line":60,"column":16},"end":{"line":60,"column":43}},"31":{"start":{"line":61,"column":16},"end":{"line":61,"column":42}},"32":{"start":{"line":62,"column":16},"end":{"line":62,"column":41}},"33":{"start":{"line":65,"column":12},"end":{"line":65,"column":43}},"34":{"start":{"line":66,"column":12},"end":{"line":66,"column":42}},"35":{"start":{"line":67,"column":12},"end":{"line":67,"column":19}},"36":{"start":{"line":74,"column":8},"end":{"line":86,"column":9}},"37":{"start":{"line":76,"column":28},"end":{"line":76,"column":69}},"38":{"start":{"line":77,"column":12},"end":{"line":80,"column":13}},"39":{"start":{"line":78,"column":16},"end":{"line":78,"column":95}},"40":{"start":{"line":79,"column":16},"end":{"line":79,"column":23}},"41":{"start":{"line":82,"column":29},"end":{"line":82,"column":92}},"42":{"start":{"line":83,"column":12},"end":{"line":83,"column":45}},"43":{"start":{"line":84,"column":12},"end":{"line":84,"column":59}},"44":{"start":{"line":85,"column":12},"end":{"line":85,"column":19}},"45":{"start":{"line":90,"column":8},"end":{"line":103,"column":9}},"46":{"start":{"line":91,"column":23},"end":{"line":91,"column":53}},"47":{"start":{"line":92,"column":12},"end":{"line":96,"column":13}},"48":{"start":{"line":93,"column":16},"end":{"line":93,"column":41}},"49":{"start":{"line":94,"column":16},"end":{"line":94,"column":41}},"50":{"start":{"line":95,"column":16},"end":{"line":95,"column":41}},"51":{"start":{"line":97,"column":12},"end":{"line":97,"column":41}},"52":{"start":{"line":98,"column":12},"end":{"line":98,"column":44}},"53":{"start":{"line":99,"column":12},"end":{"line":99,"column":35}},"54":{"start":{"line":100,"column":12},"end":{"line":100,"column":41}},"55":{"start":{"line":101,"column":12},"end":{"line":101,"column":43}},"56":{"start":{"line":102,"column":12},"end":{"line":102,"column":36}},"57":{"start":{"line":106,"column":0},"end":{"line":106,"column":36}},"58":{"start":{"line":108,"column":4},"end":{"line":108,"column":63}},"59":{"start":{"line":111,"column":4},"end":{"line":111,"column":57}},"60":{"start":{"line":114,"column":4},"end":{"line":114,"column":60}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":17,"column":4},"end":{"line":17,"column":5}},"loc":{"start":{"line":17,"column":60},"end":{"line":22,"column":5}},"line":17},"1":{"name":"(anonymous_1)","decl":{"start":{"line":27,"column":4},"end":{"line":27,"column":5}},"loc":{"start":{"line":27,"column":28},"end":{"line":36,"column":5}},"line":27},"2":{"name":"(anonymous_2)","decl":{"start":{"line":37,"column":4},"end":{"line":37,"column":5}},"loc":{"start":{"line":37,"column":20},"end":{"line":104,"column":5}},"line":37},"3":{"name":"isChannelAnnouncment","decl":{"start":{"line":107,"column":9},"end":{"line":107,"column":29}},"loc":{"start":{"line":107,"column":35},"end":{"line":109,"column":1}},"line":107},"4":{"name":"isChannelUpdate","decl":{"start":{"line":110,"column":9},"end":{"line":110,"column":24}},"loc":{"start":{"line":110,"column":30},"end":{"line":112,"column":1}},"line":110},"5":{"name":"isNodeAnnouncement","decl":{"start":{"line":113,"column":9},"end":{"line":113,"column":27}},"loc":{"start":{"line":113,"column":33},"end":{"line":115,"column":1}},"line":113}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":31},"end":{"line":17,"column":58}},"type":"default-arg","locations":[{"start":{"line":17,"column":39},"end":{"line":17,"column":58}}],"line":17},"1":{"loc":{"start":{"line":30,"column":12},"end":{"line":34,"column":13}},"type":"if","locations":[{"start":{"line":30,"column":12},"end":{"line":34,"column":13}},{"start":{"line":30,"column":12},"end":{"line":34,"column":13}}],"line":30},"2":{"loc":{"start":{"line":44,"column":8},"end":{"line":68,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":8},"end":{"line":68,"column":9}},{"start":{"line":44,"column":8},"end":{"line":68,"column":9}}],"line":44},"3":{"loc":{"start":{"line":47,"column":12},"end":{"line":49,"column":13}},"type":"if","locations":[{"start":{"line":47,"column":12},"end":{"line":49,"column":13}},{"start":{"line":47,"column":12},"end":{"line":49,"column":13}}],"line":47},"4":{"loc":{"start":{"line":51,"column":12},"end":{"line":56,"column":13}},"type":"if","locations":[{"start":{"line":51,"column":12},"end":{"line":56,"column":13}},{"start":{"line":51,"column":12},"end":{"line":56,"column":13}}],"line":51},"5":{"loc":{"start":{"line":58,"column":12},"end":{"line":63,"column":13}},"type":"if","locations":[{"start":{"line":58,"column":12},"end":{"line":63,"column":13}},{"start":{"line":58,"column":12},"end":{"line":63,"column":13}}],"line":58},"6":{"loc":{"start":{"line":74,"column":8},"end":{"line":86,"column":9}},"type":"if","locations":[{"start":{"line":74,"column":8},"end":{"line":86,"column":9}},{"start":{"line":74,"column":8},"end":{"line":86,"column":9}}],"line":74},"7":{"loc":{"start":{"line":77,"column":12},"end":{"line":80,"column":13}},"type":"if","locations":[{"start":{"line":77,"column":12},"end":{"line":80,"column":13}},{"start":{"line":77,"column":12},"end":{"line":80,"column":13}}],"line":77},"8":{"loc":{"start":{"line":90,"column":8},"end":{"line":103,"column":9}},"type":"if","locations":[{"start":{"line":90,"column":8},"end":{"line":103,"column":9}},{"start":{"line":90,"column":8},"end":{"line":103,"column":9}}],"line":90},"9":{"loc":{"start":{"line":92,"column":12},"end":{"line":96,"column":13}},"type":"if","locations":[{"start":{"line":92,"column":12},"end":{"line":96,"column":13}},{"start":{"line":92,"column":12},"end":{"line":96,"column":13}}],"line":92}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":9,"10":9,"11":9,"12":9,"13":1,"14":1,"15":2,"16":1,"17":1,"18":1,"19":14,"20":8,"21":8,"22":1,"23":7,"24":6,"25":6,"26":6,"27":6,"28":7,"29":6,"30":6,"31":6,"32":6,"33":7,"34":7,"35":7,"36":6,"37":3,"38":3,"39":1,"40":1,"41":2,"42":2,"43":2,"44":2,"45":3,"46":3,"47":3,"48":2,"49":2,"50":2,"51":3,"52":3,"53":3,"54":3,"55":3,"56":3,"57":1,"58":14,"59":6,"60":3},"f":{"0":9,"1":1,"2":14,"3":14,"4":6,"5":3},"b":{"0":[9],"1":[1,1],"2":[8,6],"3":[1,7],"4":[6,1],"5":[6,1],"6":[3,3],"7":[1,2],"8":[3,0],"9":[2,1]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-manager.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { OutPoint } from \"@node-lightning/core\";\nimport { IGossipEmitter, IWireMessage, MessageType } from \"@node-lightning/wire\";\nimport { ChannelAnnouncementMessage } from \"@node-lightning/wire\";\nimport { ChannelUpdateMessage } from \"@node-lightning/wire\";\nimport { NodeAnnouncementMessage } from \"@node-lightning/wire\";\nimport { EventEmitter } from \"events\";\nimport { Channel } from \"./channel\";\nimport { ChannelSettings } from \"./channel-settings\";\nimport { channelFromMessage } from \"./deserialize/channel-from-message\";\nimport { channelSettingsFromMessage } from \"./deserialize/channel-settings-from-message\";\nimport { Graph } from \"./graph\";\nimport { ChannelNotFoundError } from \"./graph-error\";\nimport { GraphError } from \"./graph-error\";\nimport { Node } from \"./node\";\n\n// tslint:disable-next-line: interface-name\nexport declare interface GraphManager {\n    on(event: \"node\", fn: (node: Node) => void): this;\n    on(event: \"channel\", fn: (channel: Channel) => void): this;\n    on(event: \"channel_update\", fn: (channel: Channel, settings: ChannelSettings) => void): this;\n    on(event: \"error\", fn: (err: GraphError) => void): this;\n}\n\n/**\n * GraphManager is a facade around a Graph object. It converts in-bound\n * gossip messages from the wire into a graph representation. Channels\n * can also be removed by monitoring the block chain via a chainmon object.\n */\nexport class GraphManager extends EventEmitter {\n    public graph: Graph;\n    public gossipEmitter: IGossipEmitter;\n\n    constructor(gossipManager: IGossipEmitter, graph = new Graph()) {\n        super();\n        this.graph = graph;\n        this.gossipEmitter = gossipManager;\n        this.gossipEmitter.on(\"message\", this._onMessage.bind(this));\n    }\n\n    /**\n     * Closes channel via the outpoint\n     * @param outpoint\n     */\n    public removeChannel(outpoint: OutPoint) {\n        const outpointStr = outpoint.toString();\n        for (const channel of this.graph.channels.values()) {\n            if (outpointStr === channel?.channelPoint?.toString()) {\n                this.graph.removeChannel(channel);\n                this.emit(\"channel_closed\", channel);\n                return;\n            }\n        }\n    }\n\n    private _onMessage(msg: IWireMessage) {\n        // channel_announcement messages are processed by:\n        // First ensuring that we don't already have a duplicate channel.\n        // We then check to see if we need to insert node\n        // references. Inserting temporary node's is required because we\n        // may receieve a channel_announcement without ever receiving\n        // node_announcement messages.\n\n        if (isChannelAnnouncment(msg)) {\n            const channel = channelFromMessage(msg);\n\n            // abort processing if the channel already exists\n            if (this.graph.getChannel(msg.shortChannelId)) {\n                return;\n            }\n\n            // construct node1 if required\n            if (!this.graph.getNode(msg.nodeId1)) {\n                const node1 = new Node();\n                node1.nodeId = msg.nodeId1;\n                this.graph.addNode(node1);\n                this.emit(\"node\", node1);\n            }\n\n            // construct node2 if required\n            if (!this.graph.getNode(msg.nodeId2)) {\n                const node2 = new Node();\n                node2.nodeId = msg.nodeId2;\n                this.graph.addNode(node2);\n                this.emit(\"node\", node2);\n            }\n\n            // finally attach the channel\n            this.graph.addChannel(channel);\n            this.emit(\"channel\", channel);\n            return;\n        }\n\n        // channel_update messages are processed by:\n        // * looking for the existing channel, if it doesn't then an error is thrown.\n        // * updating the existing channel\n        // The GossipFilter in Wire should ensure that channel_announcement messages\n        // are always transmitted prior to channel_update messages being announced.\n        if (isChannelUpdate(msg)) {\n            // first validate we have a channel\n            const channel = this.graph.getChannel(msg.shortChannelId);\n            if (!channel) {\n                this.emit(\"error\", new ChannelNotFoundError(msg.shortChannelId));\n                return;\n            }\n\n            // construct the settings and update the channel\n            const settings = channelSettingsFromMessage(msg);\n            channel.updateSettings(settings);\n            this.emit(\"channel_update\", channel, settings);\n            return;\n        }\n\n        // node_announcement messages are processed by:\n        // * finding or creating the node (if it doesn't exist)\n        // * updating the node with values from the announcement\n        if (isNodeAnnouncement(msg)) {\n            let node = this.graph.getNode(msg.nodeId);\n            if (!node) {\n                node = new Node();\n                node.nodeId = msg.nodeId;\n                this.graph.addNode(node);\n            }\n            node.features = msg.features;\n            node.lastUpdate = msg.timestamp;\n            node.alias = msg.alias;\n            node.rgbColor = msg.rgbColor;\n            node.addresses = msg.addresses;\n            this.emit(\"node\", node);\n        }\n    }\n}\n\nfunction isChannelAnnouncment(msg: IWireMessage): msg is ChannelAnnouncementMessage {\n    return msg.type === MessageType.ChannelAnnouncement;\n}\n\nfunction isChannelUpdate(msg: IWireMessage): msg is ChannelUpdateMessage {\n    return msg.type === MessageType.ChannelUpdate;\n}\n\nfunction isNodeAnnouncement(msg: IWireMessage): msg is NodeAnnouncementMessage {\n    return msg.type === MessageType.NodeAnnouncement;\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"9c5ce34938169c75004fc0d74d86b1e3ae8bf00c"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-from-message.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-from-message.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":36}},"2":{"start":{"line":4,"column":18},"end":{"line":4,"column":39}},"3":{"start":{"line":11,"column":14},"end":{"line":11,"column":37}},"4":{"start":{"line":12,"column":4},"end":{"line":12,"column":42}},"5":{"start":{"line":13,"column":4},"end":{"line":13,"column":30}},"6":{"start":{"line":14,"column":4},"end":{"line":14,"column":28}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":28}},"8":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"9":{"start":{"line":17,"column":8},"end":{"line":17,"column":38}},"10":{"start":{"line":18,"column":8},"end":{"line":18,"column":34}},"11":{"start":{"line":20,"column":4},"end":{"line":20,"column":13}},"12":{"start":{"line":22,"column":0},"end":{"line":22,"column":48}}},"fnMap":{"0":{"name":"channelFromMessage","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":27}},"loc":{"start":{"line":10,"column":33},"end":{"line":21,"column":1}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":19,"column":5}},{"start":{"line":16,"column":4},"end":{"line":19,"column":5}}],"line":16}},"s":{"0":1,"1":1,"2":1,"3":8,"4":8,"5":8,"6":8,"7":8,"8":8,"9":2,"10":2,"11":8,"12":1},"f":{"0":8},"b":{"0":[2,6]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-from-message.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-from-message.ts"],"names":[],"mappings":";;;AAEA,wCAAqC;AAErC;;;;GAIG;AACH,SAAgB,kBAAkB,CAC9B,GAAoE;IAEpE,MAAM,CAAC,GAAG,IAAI,iBAAO,EAAE,CAAC;IACxB,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IACtC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC1B,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACxB,IAAI,UAAU,IAAI,GAAG,EAAE;QACnB,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;KAC7B;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAbD,gDAaC","sourcesContent":["import { ChannelAnnouncementMessage } from \"@node-lightning/wire\";\nimport { ExtendedChannelAnnouncementMessage } from \"@node-lightning/wire\";\nimport { Channel } from \"../channel\";\n\n/**\n * Constructs an incomplete channel from a node announcement message. The channel does\n * not include outpoint, capacity, or per node settings found in channel_update\n * messages. These values need to be set elsewhere.\n */\nexport function channelFromMessage(\n    msg: ChannelAnnouncementMessage | ExtendedChannelAnnouncementMessage,\n): Channel {\n    const c = new Channel();\n    c.shortChannelId = msg.shortChannelId;\n    c.features = msg.features;\n    c.nodeId1 = msg.nodeId1;\n    c.nodeId2 = msg.nodeId2;\n    if (\"outpoint\" in msg) {\n        c.channelPoint = msg.outpoint;\n        c.capacity = msg.capacity;\n    }\n    return c;\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"27d08dee5220ebd3547f41d38b4612e4827e4ffb"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-settings-from-message.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-settings-from-message.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":44}},"2":{"start":{"line":4,"column":27},"end":{"line":4,"column":57}},"3":{"start":{"line":10,"column":21},"end":{"line":10,"column":61}},"4":{"start":{"line":11,"column":4},"end":{"line":11,"column":39}},"5":{"start":{"line":12,"column":4},"end":{"line":12,"column":39}},"6":{"start":{"line":13,"column":4},"end":{"line":13,"column":51}},"7":{"start":{"line":14,"column":4},"end":{"line":14,"column":91}},"8":{"start":{"line":15,"column":4},"end":{"line":15,"column":91}},"9":{"start":{"line":16,"column":4},"end":{"line":16,"column":87}},"10":{"start":{"line":17,"column":4},"end":{"line":19,"column":15}},"11":{"start":{"line":20,"column":4},"end":{"line":20,"column":37}},"12":{"start":{"line":21,"column":4},"end":{"line":21,"column":20}},"13":{"start":{"line":23,"column":0},"end":{"line":23,"column":64}}},"fnMap":{"0":{"name":"channelSettingsFromMessage","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":35}},"loc":{"start":{"line":9,"column":41},"end":{"line":22,"column":1}},"line":9}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":31},"end":{"line":14,"column":90}},"type":"cond-expr","locations":[{"start":{"line":14,"column":53},"end":{"line":14,"column":78}},{"start":{"line":14,"column":81},"end":{"line":14,"column":90}}],"line":14},"1":{"loc":{"start":{"line":15,"column":31},"end":{"line":15,"column":90}},"type":"cond-expr","locations":[{"start":{"line":15,"column":53},"end":{"line":15,"column":78}},{"start":{"line":15,"column":81},"end":{"line":15,"column":90}}],"line":15},"2":{"loc":{"start":{"line":16,"column":27},"end":{"line":16,"column":86}},"type":"cond-expr","locations":[{"start":{"line":16,"column":45},"end":{"line":16,"column":74}},{"start":{"line":16,"column":77},"end":{"line":16,"column":86}}],"line":16},"3":{"loc":{"start":{"line":17,"column":41},"end":{"line":19,"column":14}},"type":"cond-expr","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":57}},{"start":{"line":19,"column":10},"end":{"line":19,"column":14}}],"line":17}},"s":{"0":1,"1":1,"2":1,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":1},"f":{"0":2},"b":{"0":[0,2],"1":[0,2],"2":[0,2],"3":[0,2]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-settings-from-message.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/deserialize/channel-settings-from-message.ts"],"names":[],"mappings":";;;AACA,0DAAsD;AAEtD;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,GAAyB;IAChE,MAAM,QAAQ,GAAG,IAAI,kCAAe,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACnC,QAAQ,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;IAC/C,QAAQ,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,QAAQ,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,QAAQ,CAAC,yBAAyB,GAAG,GAAG,CAAC,yBAAyB;QAC9D,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,SAAS,CAAC;QACjD,CAAC,CAAC,IAAI,CAAC;IACX,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,OAAO,QAAQ,CAAC;AACpB,CAAC;AAbD,gEAaC","sourcesContent":["import { ChannelUpdateMessage } from \"@node-lightning/wire\";\nimport { ChannelSettings } from \"../channel-settings\";\n\n/**\n * Creates channels settings from an update message\n * @param msg\n */\nexport function channelSettingsFromMessage(msg: ChannelUpdateMessage): ChannelSettings {\n    const instance = new ChannelSettings();\n    instance.direction = msg.direction;\n    instance.timestamp = msg.timestamp;\n    instance.cltvExpiryDelta = msg.cltvExpiryDelta;\n    instance.htlcMinimumMsat = msg.htlcMinimumMsat ? msg.htlcMinimumMsat.msats : undefined;\n    instance.htlcMaximumMsat = msg.htlcMaximumMsat ? msg.htlcMaximumMsat.msats : undefined;\n    instance.feeBaseMsat = msg.feeBaseMsat ? Number(msg.feeBaseMsat.msats) : undefined;\n    instance.feeProportionalMillionths = msg.feeProportionalMillionths\n        ? Number(msg.feeProportionalMillionths.microsats)\n        : null;\n    instance.disabled = msg.disabled;\n    return instance;\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"344492056ea8968f04b692ba1b59734950c7e0fc"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":23}},"2":{"start":{"line":4,"column":22},"end":{"line":4,"column":46}},"3":{"start":{"line":13,"column":8},"end":{"line":13,"column":31}},"4":{"start":{"line":17,"column":8},"end":{"line":17,"column":34}},"5":{"start":{"line":21,"column":8},"end":{"line":21,"column":28}},"6":{"start":{"line":27,"column":8},"end":{"line":27,"column":58}},"7":{"start":{"line":33,"column":22},"end":{"line":33,"column":51}},"8":{"start":{"line":34,"column":22},"end":{"line":34,"column":51}},"9":{"start":{"line":35,"column":8},"end":{"line":36,"column":71}},"10":{"start":{"line":36,"column":12},"end":{"line":36,"column":71}},"11":{"start":{"line":37,"column":8},"end":{"line":38,"column":71}},"12":{"start":{"line":38,"column":12},"end":{"line":38,"column":71}},"13":{"start":{"line":40,"column":20},"end":{"line":40,"column":53}},"14":{"start":{"line":41,"column":8},"end":{"line":41,"column":40}},"15":{"start":{"line":43,"column":8},"end":{"line":43,"column":35}},"16":{"start":{"line":45,"column":8},"end":{"line":45,"column":35}},"17":{"start":{"line":51,"column":8},"end":{"line":51,"column":54}},"18":{"start":{"line":57,"column":8},"end":{"line":57,"column":60}},"19":{"start":{"line":63,"column":20},"end":{"line":63,"column":53}},"20":{"start":{"line":64,"column":19},"end":{"line":64,"column":48}},"21":{"start":{"line":65,"column":19},"end":{"line":65,"column":48}},"22":{"start":{"line":67,"column":8},"end":{"line":67,"column":34}},"23":{"start":{"line":69,"column":8},"end":{"line":69,"column":34}},"24":{"start":{"line":71,"column":8},"end":{"line":71,"column":34}},"25":{"start":{"line":74,"column":0},"end":{"line":74,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":4},"end":{"line":9,"column":5}},"loc":{"start":{"line":9,"column":18},"end":{"line":22,"column":5}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":26,"column":4},"end":{"line":26,"column":5}},"loc":{"start":{"line":26,"column":18},"end":{"line":28,"column":5}},"line":26},"2":{"name":"(anonymous_2)","decl":{"start":{"line":32,"column":4},"end":{"line":32,"column":5}},"loc":{"start":{"line":32,"column":24},"end":{"line":46,"column":5}},"line":32},"3":{"name":"(anonymous_3)","decl":{"start":{"line":50,"column":4},"end":{"line":50,"column":5}},"loc":{"start":{"line":50,"column":20},"end":{"line":52,"column":5}},"line":50},"4":{"name":"(anonymous_4)","decl":{"start":{"line":56,"column":4},"end":{"line":56,"column":5}},"loc":{"start":{"line":56,"column":31},"end":{"line":58,"column":5}},"line":56},"5":{"name":"(anonymous_5)","decl":{"start":{"line":62,"column":4},"end":{"line":62,"column":5}},"loc":{"start":{"line":62,"column":27},"end":{"line":72,"column":5}},"line":62}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":8},"end":{"line":36,"column":71}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":36,"column":71}},{"start":{"line":35,"column":8},"end":{"line":36,"column":71}}],"line":35},"1":{"loc":{"start":{"line":37,"column":8},"end":{"line":38,"column":71}},"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":38,"column":71}},{"start":{"line":37,"column":8},"end":{"line":38,"column":71}}],"line":37}},"s":{"0":1,"1":1,"2":1,"3":23,"4":23,"5":23,"6":34,"7":17,"8":17,"9":17,"10":1,"11":16,"12":1,"13":15,"14":15,"15":15,"16":15,"17":65,"18":17,"19":4,"20":4,"21":4,"22":4,"23":4,"24":4,"25":1},"f":{"0":23,"1":34,"2":17,"3":65,"4":17,"5":4},"b":{"0":[1,16],"1":[1,15]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/graph.ts"],"names":[],"mappings":";;;AAEA,+CAAkD;AAGlD;;GAEG;AACH,MAAa,KAAK;IAAlB;QACI;;WAEG;QACI,UAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;QAE5C;;WAEG;QACI,aAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;QAElD;;WAEG;QACI,eAAU,GAAW,CAAC,CAAC;IA4DlC,CAAC;IA1DG;;OAEG;IACI,OAAO,CAAC,IAAU;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,OAAgB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,+BAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,+BAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,iBAAiB;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEhC,2BAA2B;QAC3B,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE3B,2BAA2B;QAC3B,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,cAA8B;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,OAAgB;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzC,4BAA4B;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE1B,qBAAqB;QACrB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE1B,qBAAqB;QACrB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;CACJ;AA1ED,sBA0EC","sourcesContent":["import { ShortChannelId } from \"@node-lightning/core\";\nimport { Channel } from \"./channel\";\nimport { NodeNotFoundError } from \"./graph-error\";\nimport { Node } from \"./node\";\n\n/**\n * Graph represents a\n */\nexport class Graph {\n    /**\n     * Map containing all nodes in the system\n     */\n    public nodes: Map<string, Node> = new Map();\n\n    /**\n     * Map containing all channels in the graph\n     */\n    public channels: Map<bigint, Channel> = new Map();\n\n    /**\n     * The height the graph has been synced through\n     */\n    public syncHeight: number = 0;\n\n    /**\n     * Adds a node to the graph\n     */\n    public addNode(node: Node) {\n        this.nodes.set(node.nodeId.toString(\"hex\"), node);\n    }\n\n    /**\n     * Adds a channgel to the graph\n     */\n    public addChannel(channel: Channel) {\n        const node1 = this.getNode(channel.nodeId1);\n        const node2 = this.getNode(channel.nodeId2);\n        if (!node1) throw new NodeNotFoundError(channel.nodeId1);\n        if (!node2) throw new NodeNotFoundError(channel.nodeId2);\n\n        // attach channel\n        const key = channel.shortChannelId.toNumber();\n        this.channels.set(key, channel);\n\n        // attach channel to node 1\n        node1.linkChannel(channel);\n\n        // attach channel to node 2\n        node2.linkChannel(channel);\n    }\n\n    /**\n     * Gets a node in the graph\n     */\n    public getNode(nodeId: Buffer): Node {\n        return this.nodes.get(nodeId.toString(\"hex\"));\n    }\n\n    /**\n     * Gets a node in the channel by shortChannelId\n     */\n    public getChannel(shortChannelId: ShortChannelId) {\n        return this.channels.get(shortChannelId.toNumber());\n    }\n\n    /**\n     * Removes the node from the graph\n     */\n    public removeChannel(channel: Channel) {\n        const key = channel.shortChannelId.toNumber();\n        const n1 = this.getNode(channel.nodeId1);\n        const n2 = this.getNode(channel.nodeId2);\n\n        // remove from channels list\n        this.channels.delete(key);\n\n        // detach from node 1\n        n1.unlinkChannel(channel);\n\n        // detach from node 2\n        n2.unlinkChannel(channel);\n    }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"3ad7fc97b27ecf470d8faa017bb57290dee7f0e5"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/node.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/node.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":22}},"2":{"start":{"line":9,"column":8},"end":{"line":9,"column":28}},"3":{"start":{"line":13,"column":8},"end":{"line":13,"column":34}},"4":{"start":{"line":19,"column":8},"end":{"line":19,"column":80}},"5":{"start":{"line":25,"column":8},"end":{"line":25,"column":79}},"6":{"start":{"line":31,"column":20},"end":{"line":31,"column":53}},"7":{"start":{"line":32,"column":8},"end":{"line":32,"column":40}},"8":{"start":{"line":38,"column":20},"end":{"line":38,"column":53}},"9":{"start":{"line":39,"column":8},"end":{"line":39,"column":34}},"10":{"start":{"line":42,"column":0},"end":{"line":42,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":4},"end":{"line":8,"column":5}},"loc":{"start":{"line":8,"column":18},"end":{"line":14,"column":5}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":4},"end":{"line":18,"column":5}},"loc":{"start":{"line":18,"column":22},"end":{"line":20,"column":5}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":4},"end":{"line":24,"column":5}},"loc":{"start":{"line":24,"column":25},"end":{"line":26,"column":5}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":30,"column":4},"end":{"line":30,"column":5}},"loc":{"start":{"line":30,"column":25},"end":{"line":33,"column":5}},"line":30},"4":{"name":"(anonymous_4)","decl":{"start":{"line":37,"column":4},"end":{"line":37,"column":5}},"loc":{"start":{"line":37,"column":27},"end":{"line":40,"column":5}},"line":37}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":15},"end":{"line":19,"column":79}},"type":"cond-expr","locations":[{"start":{"line":19,"column":28},"end":{"line":19,"column":74}},{"start":{"line":19,"column":77},"end":{"line":19,"column":79}}],"line":19},"1":{"loc":{"start":{"line":25,"column":15},"end":{"line":25,"column":78}},"type":"cond-expr","locations":[{"start":{"line":25,"column":31},"end":{"line":25,"column":66}},{"start":{"line":25,"column":69},"end":{"line":25,"column":78}}],"line":25}},"s":{"0":1,"1":1,"2":45,"3":45,"4":4,"5":4,"6":31,"7":31,"8":9,"9":9,"10":1},"f":{"0":45,"1":4,"2":4,"3":31,"4":9},"b":{"0":[4,0],"1":[4,0]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/node.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/node.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,IAAI;IAAjB;QAIW,cAAS,GAAc,EAAE,CAAC;QAIjC;;WAEG;QACI,aAAQ,GAAyB,IAAI,GAAG,EAAE,CAAC;IA+BtD,CAAC;IA7BG;;OAEG;IACH,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,OAAgB;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,OAAgB;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;CACJ;AA1CD,oBA0CC","sourcesContent":["import { BitField } from \"@node-lightning/core\";\nimport { Address } from \"@node-lightning/wire\";\nimport { Channel } from \"./channel\";\n\n/**\n * Reperesents a node in the p2p network.\n */\nexport class Node {\n    public nodeId: Buffer;\n    public lastUpdate: number;\n    public alias: Buffer;\n    public addresses: Address[] = [];\n    public rgbColor: Buffer;\n    public features: BitField;\n\n    /**\n     * Channels that the node belongs to\n     */\n    public channels: Map<bigint, Channel> = new Map();\n\n    /**\n     * Gets the alias as human readable string\n     */\n    get aliasString(): string {\n        return this.alias ? this.alias.toString(\"utf8\").replace(/\\0/g, \"\") : \"\";\n    }\n\n    /**\n     * Gets the color as a an RGB color string\n     */\n    get rgbColorString(): string {\n        return this.rgbColor ? \"#\" + this.rgbColor.toString(\"hex\") : \"#000000\";\n    }\n\n    /**\n     * Adds a channel to the node's channel list\n     */\n    public linkChannel(channel: Channel) {\n        const key = channel.shortChannelId.toNumber();\n        this.channels.set(key, channel);\n    }\n\n    /**\n     * Remove a channel from the node's channel list\n     */\n    public unlinkChannel(channel: Channel) {\n        const key = channel.shortChannelId.toNumber();\n        this.channels.delete(key);\n    }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"dc2e191bc008f7583c89fcc7251e55a656ce42f6"},"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/serializers/lnd-serializer.ts":{"path":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/serializers/lnd-serializer.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":31}},"2":{"start":{"line":12,"column":8},"end":{"line":15,"column":10}},"3":{"start":{"line":13,"column":60},"end":{"line":13,"column":84}},"4":{"start":{"line":14,"column":63},"end":{"line":14,"column":90}},"5":{"start":{"line":18,"column":20},"end":{"line":18,"column":36}},"6":{"start":{"line":19,"column":8},"end":{"line":19,"column":75}},"7":{"start":{"line":22,"column":8},"end":{"line":28,"column":10}},"8":{"start":{"line":26,"column":50},"end":{"line":26,"column":51}},"9":{"start":{"line":26,"column":68},"end":{"line":26,"column":98}},"10":{"start":{"line":31,"column":8},"end":{"line":34,"column":10}},"11":{"start":{"line":37,"column":8},"end":{"line":46,"column":10}},"12":{"start":{"line":49,"column":8},"end":{"line":50,"column":24}},"13":{"start":{"line":50,"column":12},"end":{"line":50,"column":24}},"14":{"start":{"line":51,"column":8},"end":{"line":59,"column":10}},"15":{"start":{"line":62,"column":0},"end":{"line":62,"column":38}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":16},"end":{"line":16,"column":5}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":52},"end":{"line":13,"column":53}},"loc":{"start":{"line":13,"column":60},"end":{"line":13,"column":84}},"line":13},"2":{"name":"(anonymous_2)","decl":{"start":{"line":14,"column":55},"end":{"line":14,"column":56}},"loc":{"start":{"line":14,"column":63},"end":{"line":14,"column":90}},"line":14},"3":{"name":"(anonymous_3)","decl":{"start":{"line":17,"column":4},"end":{"line":17,"column":5}},"loc":{"start":{"line":17,"column":29},"end":{"line":20,"column":5}},"line":17},"4":{"name":"(anonymous_4)","decl":{"start":{"line":21,"column":4},"end":{"line":21,"column":5}},"loc":{"start":{"line":21,"column":24},"end":{"line":29,"column":5}},"line":21},"5":{"name":"(anonymous_5)","decl":{"start":{"line":26,"column":45},"end":{"line":26,"column":46}},"loc":{"start":{"line":26,"column":50},"end":{"line":26,"column":51}},"line":26},"6":{"name":"(anonymous_6)","decl":{"start":{"line":26,"column":57},"end":{"line":26,"column":58}},"loc":{"start":{"line":26,"column":68},"end":{"line":26,"column":98}},"line":26},"7":{"name":"(anonymous_7)","decl":{"start":{"line":30,"column":4},"end":{"line":30,"column":5}},"loc":{"start":{"line":30,"column":30},"end":{"line":35,"column":5}},"line":30},"8":{"name":"(anonymous_8)","decl":{"start":{"line":36,"column":4},"end":{"line":36,"column":5}},"loc":{"start":{"line":36,"column":27},"end":{"line":47,"column":5}},"line":36},"9":{"name":"(anonymous_9)","decl":{"start":{"line":48,"column":4},"end":{"line":48,"column":5}},"loc":{"start":{"line":48,"column":35},"end":{"line":60,"column":5}},"line":48}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":14},"end":{"line":17,"column":27}},"type":"default-arg","locations":[{"start":{"line":17,"column":23},"end":{"line":17,"column":27}}],"line":17},"1":{"loc":{"start":{"line":19,"column":15},"end":{"line":19,"column":74}},"type":"cond-expr","locations":[{"start":{"line":19,"column":24},"end":{"line":19,"column":52}},{"start":{"line":19,"column":55},"end":{"line":19,"column":74}}],"line":19},"2":{"loc":{"start":{"line":39,"column":24},"end":{"line":39,"column":73}},"type":"binary-expr","locations":[{"start":{"line":39,"column":24},"end":{"line":39,"column":41}},{"start":{"line":39,"column":45},"end":{"line":39,"column":73}}],"line":39},"3":{"loc":{"start":{"line":43,"column":22},"end":{"line":43,"column":63}},"type":"binary-expr","locations":[{"start":{"line":43,"column":22},"end":{"line":43,"column":35}},{"start":{"line":43,"column":39},"end":{"line":43,"column":63}}],"line":43},"4":{"loc":{"start":{"line":49,"column":8},"end":{"line":50,"column":24}},"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":50,"column":24}},{"start":{"line":49,"column":8},"end":{"line":50,"column":24}}],"line":49},"5":{"loc":{"start":{"line":57,"column":27},"end":{"line":57,"column":91}},"type":"cond-expr","locations":[{"start":{"line":57,"column":52},"end":{"line":57,"column":85}},{"start":{"line":57,"column":88},"end":{"line":57,"column":91}}],"line":57}},"s":{"0":1,"1":1,"2":1,"3":2,"4":1,"5":0,"6":0,"7":3,"8":5,"9":5,"10":8,"11":2,"12":6,"13":1,"14":5,"15":1},"f":{"0":1,"1":2,"2":1,"3":0,"4":3,"5":5,"6":5,"7":8,"8":2,"9":6},"b":{"0":[0],"1":[0,0],"2":[2,2],"3":[2,2],"4":[1,5],"5":[4,1]},"inputSourceMap":{"version":3,"file":"/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/serializers/lnd-serializer.ts","sources":["/Users/bmancini/code/altangent/node-lightning/packages/graph/lib/serializers/lnd-serializer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Address } from \"@node-lightning/wire\";\nimport { Channel } from \"../channel\";\nimport { ChannelSettings } from \"../channel-settings\";\nimport { Graph } from \"../graph\";\nimport { Node } from \"../node\";\n\n/**\n * Performs JSON serialization of the graph in the same format\n * as used by LND and defined in LND API documentation:\n *\n * https://api.lightning.community/#simple-rpc-33\n */\nexport class LndSerializer {\n    public toObject(g: Graph) {\n        return {\n            nodes: Array.from(g.nodes.values()).map(node => this.serializeNode(node)),\n            edges: Array.from(g.channels.values()).map(chan => this.serializeChannel(chan)),\n        };\n    }\n\n    public toJSON(g: Graph, format: boolean = true) {\n        const obj = this.toObject(g);\n        return format ? JSON.stringify(obj, null, 2) : JSON.stringify(obj);\n    }\n\n    public serializeNode(node: Node) {\n        return {\n            last_update: node.lastUpdate,\n            pub_key: node.nodeId.toString(\"hex\"),\n            alias: node.aliasString,\n            addresses: node.addresses.filter(p => p).map(address => this.serializeAddress(address)),\n            color: node.rgbColorString,\n        };\n    }\n\n    public serializeAddress(address: Address) {\n        return {\n            network: \"tcp\",\n            addr: address.toString(),\n        };\n    }\n\n    public serializeChannel(chan: Channel) {\n        return {\n            channel_id: chan.shortChannelId.toNumber().toString(),\n            chan_point: chan.channelPoint && chan.channelPoint.toString(),\n            last_update: chan.lastUpdate,\n            node1_pub: chan.nodeId1.toString(\"hex\"),\n            node2_pub: chan.nodeId2.toString(\"hex\"),\n            capacity: chan.capacity && chan.capacity.toString(),\n            node1_policy: this.serializeRoutingPolicy(chan.node1Settings),\n            node2_policy: this.serializeRoutingPolicy(chan.node2Settings),\n        };\n    }\n\n    public serializeRoutingPolicy(policy: ChannelSettings) {\n        if (!policy) return null;\n        return {\n            time_lock_delta: policy.cltvExpiryDelta,\n            min_htlc: policy.htlcMinimumMsat.toString(),\n            fee_base_msat: policy.feeBaseMsat.toString(),\n            fee_rate_milli_msat: policy.feeProportionalMillionths.toString(),\n            disabled: policy.disabled,\n            max_htlc_msat: policy.htlcMaximumMsat ? policy.htlcMaximumMsat.toString() : \"0\",\n            last_update: policy.timestamp,\n        };\n    }\n}\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"1910ee320ff8e0411f8a32269143eda22f803221"}}