@ledgerhq/device-signer-kit-bitcoin 0.0.0-rn-ble-pairing-removed-while-reconnecting-20250807094338 → 0.0.0-rnble-scan-permission-issue-20250929081059

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";var y=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},u=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of p(e))!f.call(t,a)&&a!==r&&y(t,a,{get:()=>e[a],enumerable:!(n=i(e,a))||n.enumerable});return t};var l=t=>u(y({},"__esModule",{value:!0}),t);var c={};b(c,{Key:()=>d});module.exports=l(c);var o=require("@ledgerhq/device-management-kit"),s=require("../../utils/Varint");class d{constructor(e,r=new Uint8Array){this.keyType=e;this.keyData=r}toHexaString(){const e=new o.ByteArrayBuilder().addBufferToData((0,s.encodeVarint)(this.keyType).unsafeCoerce()).addBufferToData(this.keyData).build();return(0,o.bufferToHexaString)(e).slice(2)}}0&&(module.exports={Key});
1
+ "use strict";var y=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},u=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of i(e))!p.call(t,a)&&a!==r&&y(t,a,{get:()=>e[a],enumerable:!(n=f(e,a))||n.enumerable});return t};var l=t=>u(y({},"__esModule",{value:!0}),t);var T={};b(T,{Key:()=>d});module.exports=l(T);var o=require("@ledgerhq/device-management-kit"),s=require("../../utils/Varint");class d{constructor(e,r=new Uint8Array){this.keyType=e;this.keyData=r}toHexaString(){const e=new o.ByteArrayBuilder().addBufferToData((0,s.encodeVarint)(this.keyType).unsafeCoerce()).addBufferToData(this.keyData).build();return(0,o.bufferToHexaString)(e,!1)}}0&&(module.exports={Key});
2
2
  //# sourceMappingURL=Key.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/psbt/model/Key.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type PsbtGlobal, type PsbtIn, type PsbtOut } from \"./Psbt\";\n\n/**\n * According to specification, key-pair is formatted as:\n * <keylen> <keytype> <keydata> <valuelen> <valuedata>\n * with:\n * <keylen>: The compact size unsigned integer containing the combined length of <keytype> and <keydata>\n * <keytype>: A compact size unsigned integer representing the type\n * <valuelen>: The compact size unsigned integer containing the length of <valuedata>\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport type KeyType = PsbtGlobal | PsbtIn | PsbtOut;\n\nexport class Key {\n constructor(\n readonly keyType: KeyType,\n readonly keyData: Uint8Array = new Uint8Array(),\n ) {}\n\n toHexaString(): string {\n // Safe to extract keyType here since its value is a valid PSBT key type.\n const buffer = new ByteArrayBuilder()\n .addBufferToData(encodeVarint(this.keyType).unsafeCoerce())\n .addBufferToData(this.keyData)\n .build();\n return bufferToHexaString(buffer).slice(2);\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAGO,2CAEPC,EAA6B,kCAgBtB,MAAMH,CAAI,CACf,YACWI,EACAC,EAAsB,IAAI,WACnC,CAFS,aAAAD,EACA,aAAAC,CACR,CAEH,cAAuB,CAErB,MAAMC,EAAS,IAAI,mBAAiB,EACjC,mBAAgB,gBAAa,KAAK,OAAO,EAAE,aAAa,CAAC,EACzD,gBAAgB,KAAK,OAAO,EAC5B,MAAM,EACT,SAAO,sBAAmBA,CAAM,EAAE,MAAM,CAAC,CAC3C,CACF",
4
+ "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type PsbtGlobal, type PsbtIn, type PsbtOut } from \"./Psbt\";\n\n/**\n * According to specification, key-pair is formatted as:\n * <keylen> <keytype> <keydata> <valuelen> <valuedata>\n * with:\n * <keylen>: The compact size unsigned integer containing the combined length of <keytype> and <keydata>\n * <keytype>: A compact size unsigned integer representing the type\n * <valuelen>: The compact size unsigned integer containing the length of <valuedata>\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport type KeyType = PsbtGlobal | PsbtIn | PsbtOut;\n\nexport class Key {\n constructor(\n readonly keyType: KeyType,\n readonly keyData: Uint8Array = new Uint8Array(),\n ) {}\n\n toHexaString(): string {\n // Safe to extract keyType here since its value is a valid PSBT key type.\n const buffer = new ByteArrayBuilder()\n .addBufferToData(encodeVarint(this.keyType).unsafeCoerce())\n .addBufferToData(this.keyData)\n .build();\n return bufferToHexaString(buffer, false);\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAGO,2CAEPC,EAA6B,kCAgBtB,MAAMH,CAAI,CACf,YACWI,EACAC,EAAsB,IAAI,WACnC,CAFS,aAAAD,EACA,aAAAC,CACR,CAEH,cAAuB,CAErB,MAAMC,EAAS,IAAI,mBAAiB,EACjC,mBAAgB,gBAAa,KAAK,OAAO,EAAE,aAAa,CAAC,EACzD,gBAAgB,KAAK,OAAO,EAC5B,MAAM,EACT,SAAO,sBAAmBA,EAAQ,EAAK,CACzC,CACF",
6
6
  "names": ["Key_exports", "__export", "Key", "__toCommonJS", "import_device_management_kit", "import_Varint", "keyType", "keyData", "buffer"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var b=(i,r)=>{for(var a in r)m(i,a,{get:r[a],enumerable:!0})},E=(i,r,a,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of x(r))!B.call(i,t)&&t!==a&&m(i,t,{get:()=>r[t],enumerable:!(e=y(r,t))||e.enumerable});return i};var U=i=>E(m({},"__esModule",{value:!0}),i),P=(i,r,a,e)=>{for(var t=e>1?void 0:e?y(r,a):r,p=i.length-1,s;p>=0;p--)(s=i[p])&&(t=(e?s(r,a,t):s(t))||t);return e&&t&&m(r,a,t),t},f=(i,r)=>(a,e)=>r(a,e,i);var w={};b(w,{DefaultPsbtSerializer:()=>u});module.exports=U(w);var l=require("@ledgerhq/device-management-kit"),z=require("bitcoinjs-lib"),M=require("inversify"),n=require("purify-ts"),g=require("../../../psbt/di/psbtTypes"),S=require("../../../psbt/model/Key"),T=require("../../../psbt/model/Psbt"),c=require("../../../psbt/model/Psbt");const d=Uint8Array.from([112,115,98,116,255]);let u=class{constructor(r,a){this.valueParser=r;this.keyPairSerializer=a}getValue(r,a){return n.Maybe.fromNullable(r.get(new S.Key(a).toHexaString()))}sortMap(r){return new Map(Array.from(r.entries()).sort((a,e)=>a[0].localeCompare(e[0])))}deserialize(r){const a=new l.ByteArrayParser(r);for(const o of d)if(a.extract8BitUInt()!==o)return(0,n.Left)(new Error("PSBT deserializer: Invalid magic bytes"));const e=[];for(;a.getUnparsedRemainingLength();)e.push(this.keyPairSerializer.deserializeMap(a));if(e.length===0)return(0,n.Left)(new Error("PSBT deserializer: No map found"));const t=e[0],p=this.getValue(t,c.PsbtGlobal.UNSIGNED_TX).chain(o=>n.Either.encase(()=>z.Transaction.fromHex((0,l.bufferToHexaString)(o.data).slice(2))).toMaybe()),s=this.getValue(t,c.PsbtGlobal.INPUT_COUNT).chain(o=>this.valueParser.getVarint(o.data)).alt(p.map(o=>o.ins.length)),h=this.getValue(t,c.PsbtGlobal.OUTPUT_COUNT).chain(o=>this.valueParser.getVarint(o.data)).alt(p.map(o=>o.outs.length));if(s.isJust()&&h.isJust()){if(e.length===1+s.extract()+h.extract()){const o=e.slice(1,1+s.extract()),V=e.slice(1+s.extract());return(0,n.Right)(new T.Psbt(t,o,V))}return(0,n.Left)(new Error("PSBT deserializer: map count don't match input and output count"))}return(0,n.Left)(new Error("PSBT deserializer: input or output count not found in global map or transaction"))}serialize(r){const a=new l.ByteArrayBuilder;return r.globalMap=this.sortMap(r.globalMap),r.inputMaps=r.inputMaps.map(e=>this.sortMap(e)),r.outputMaps=r.outputMaps.map(e=>this.sortMap(e)),a.addBufferToData(d),this.keyPairSerializer.serializeMap(a,r.globalMap),r.inputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),r.outputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),a.build()}};u=P([f(0,(0,M.inject)(g.psbtTypes.ValueParser)),f(1,(0,M.inject)(g.psbtTypes.KeyPairSerializer))],u);0&&(module.exports={DefaultPsbtSerializer});
1
+ "use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var b=(i,r)=>{for(var a in r)m(i,a,{get:r[a],enumerable:!0})},E=(i,r,a,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of x(r))!B.call(i,t)&&t!==a&&m(i,t,{get:()=>r[t],enumerable:!(e=y(r,t))||e.enumerable});return i};var U=i=>E(m({},"__esModule",{value:!0}),i),P=(i,r,a,e)=>{for(var t=e>1?void 0:e?y(r,a):r,p=i.length-1,s;p>=0;p--)(s=i[p])&&(t=(e?s(r,a,t):s(t))||t);return e&&t&&m(r,a,t),t},f=(i,r)=>(a,e)=>r(a,e,i);var w={};b(w,{DefaultPsbtSerializer:()=>u});module.exports=U(w);var l=require("@ledgerhq/device-management-kit"),z=require("bitcoinjs-lib"),M=require("inversify"),n=require("purify-ts"),g=require("../../../psbt/di/psbtTypes"),S=require("../../../psbt/model/Key"),T=require("../../../psbt/model/Psbt"),c=require("../../../psbt/model/Psbt");const d=Uint8Array.from([112,115,98,116,255]);let u=class{constructor(r,a){this.valueParser=r;this.keyPairSerializer=a}getValue(r,a){return n.Maybe.fromNullable(r.get(new S.Key(a).toHexaString()))}sortMap(r){return new Map(Array.from(r.entries()).sort((a,e)=>a[0].localeCompare(e[0])))}deserialize(r){const a=new l.ByteArrayParser(r);for(const o of d)if(a.extract8BitUInt()!==o)return(0,n.Left)(new Error("PSBT deserializer: Invalid magic bytes"));const e=[];for(;a.getUnparsedRemainingLength();)e.push(this.keyPairSerializer.deserializeMap(a));if(e.length===0)return(0,n.Left)(new Error("PSBT deserializer: No map found"));const t=e[0],p=this.getValue(t,c.PsbtGlobal.UNSIGNED_TX).chain(o=>n.Either.encase(()=>z.Transaction.fromHex((0,l.bufferToHexaString)(o.data,!1))).toMaybe()),s=this.getValue(t,c.PsbtGlobal.INPUT_COUNT).chain(o=>this.valueParser.getVarint(o.data)).alt(p.map(o=>o.ins.length)),h=this.getValue(t,c.PsbtGlobal.OUTPUT_COUNT).chain(o=>this.valueParser.getVarint(o.data)).alt(p.map(o=>o.outs.length));if(s.isJust()&&h.isJust()){if(e.length===1+s.extract()+h.extract()){const o=e.slice(1,1+s.extract()),V=e.slice(1+s.extract());return(0,n.Right)(new T.Psbt(t,o,V))}return(0,n.Left)(new Error("PSBT deserializer: map count don't match input and output count"))}return(0,n.Left)(new Error("PSBT deserializer: input or output count not found in global map or transaction"))}serialize(r){const a=new l.ByteArrayBuilder;return r.globalMap=this.sortMap(r.globalMap),r.inputMaps=r.inputMaps.map(e=>this.sortMap(e)),r.outputMaps=r.outputMaps.map(e=>this.sortMap(e)),a.addBufferToData(d),this.keyPairSerializer.serializeMap(a,r.globalMap),r.inputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),r.outputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),a.build()}};u=P([f(0,(0,M.inject)(g.psbtTypes.ValueParser)),f(1,(0,M.inject)(g.psbtTypes.KeyPairSerializer))],u);0&&(module.exports={DefaultPsbtSerializer});
2
2
  //# sourceMappingURL=DefaultPsbtSerializer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/psbt/service/psbt/DefaultPsbtSerializer.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type KeyPairSerializer } from \"@internal/psbt/service/key-pair/KeyPairSerializer\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\nimport { type PsbtSerializer } from \"./PsbtSerializer\";\n\n// PSBT magic bytes\nconst PSBT_MAGIC_BYTES = Uint8Array.from([0x70, 0x73, 0x62, 0x74, 0xff]);\n\n/**\n * According to specification, psbt is formatted as:\n * <magic> <global-map> <input-map>* <output-map>*\n * with:\n * <magic>: 0x70 0x73 0x62 0x74 0xFF\n * <map>: <keypair>* 0x00\n * For <keypair> serialization, it's done in KeyPair class.\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport class DefaultPsbtSerializer implements PsbtSerializer {\n constructor(\n @inject(psbtTypes.ValueParser)\n private readonly valueParser: ValueParser,\n @inject(psbtTypes.KeyPairSerializer)\n private readonly keyPairSerializer: KeyPairSerializer,\n ) {}\n\n private getValue(map: Map<string, Value>, keyType: number): Maybe<Value> {\n return Maybe.fromNullable(map.get(new Key(keyType).toHexaString()));\n }\n\n private sortMap(map: Map<string, Value>): Map<string, Value> {\n return new Map(\n Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0])),\n );\n }\n\n deserialize(buffer: Uint8Array): Either<Error, Psbt> {\n const parser = new ByteArrayParser(buffer);\n\n // Read PSBT magic\n for (const magicByte of PSBT_MAGIC_BYTES) {\n if (parser.extract8BitUInt() !== magicByte) {\n return Left(new Error(\"PSBT deserializer: Invalid magic bytes\"));\n }\n }\n\n // Read all the maps available in that PSBT\n const maps: Map<string, Value>[] = [];\n while (parser.getUnparsedRemainingLength()) {\n maps.push(this.keyPairSerializer.deserializeMap(parser));\n }\n if (maps.length === 0) {\n return Left(new Error(\"PSBT deserializer: No map found\"));\n }\n\n // Get global map\n const globalMap = maps[0]!;\n\n // Get inputs and outpus count, either from the global map, or within the tx\n const transaction = this.getValue(globalMap, PsbtGlobal.UNSIGNED_TX).chain(\n (value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data).slice(2)),\n ).toMaybe(),\n );\n const inputCount = this.getValue(globalMap, PsbtGlobal.INPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.ins.length));\n const outputCount = this.getValue(globalMap, PsbtGlobal.OUTPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.outs.length));\n\n // Get inputs map and outputs map\n if (inputCount.isJust() && outputCount.isJust()) {\n if (maps.length === 1 + inputCount.extract() + outputCount.extract()) {\n const inputMaps = maps.slice(1, 1 + inputCount.extract());\n const outputMaps = maps.slice(1 + inputCount.extract());\n return Right(new Psbt(globalMap, inputMaps, outputMaps));\n }\n return Left(\n new Error(\n \"PSBT deserializer: map count don't match input and output count\",\n ),\n );\n }\n return Left(\n new Error(\n \"PSBT deserializer: input or output count not found in global map or transaction\",\n ),\n );\n }\n\n serialize(psbt: Psbt): Uint8Array {\n const builder = new ByteArrayBuilder();\n\n // Start by ordering all the maps, in case some values were added\n psbt.globalMap = this.sortMap(psbt.globalMap);\n psbt.inputMaps = psbt.inputMaps.map((input) => this.sortMap(input));\n psbt.outputMaps = psbt.outputMaps.map((output) => this.sortMap(output));\n\n // Serialize PSBT magic\n builder.addBufferToData(PSBT_MAGIC_BYTES);\n\n // Serialize all the maps\n this.keyPairSerializer.serializeMap(builder, psbt.globalMap);\n psbt.inputMaps.forEach((input) =>\n this.keyPairSerializer.serializeMap(builder, input),\n );\n psbt.outputMaps.forEach((output) =>\n this.keyPairSerializer.serializeMap(builder, output),\n );\n\n return builder.build();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type KeyPairSerializer } from \"@internal/psbt/service/key-pair/KeyPairSerializer\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\nimport { type PsbtSerializer } from \"./PsbtSerializer\";\n\n// PSBT magic bytes\nconst PSBT_MAGIC_BYTES = Uint8Array.from([0x70, 0x73, 0x62, 0x74, 0xff]);\n\n/**\n * According to specification, psbt is formatted as:\n * <magic> <global-map> <input-map>* <output-map>*\n * with:\n * <magic>: 0x70 0x73 0x62 0x74 0xFF\n * <map>: <keypair>* 0x00\n * For <keypair> serialization, it's done in KeyPair class.\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport class DefaultPsbtSerializer implements PsbtSerializer {\n constructor(\n @inject(psbtTypes.ValueParser)\n private readonly valueParser: ValueParser,\n @inject(psbtTypes.KeyPairSerializer)\n private readonly keyPairSerializer: KeyPairSerializer,\n ) {}\n\n private getValue(map: Map<string, Value>, keyType: number): Maybe<Value> {\n return Maybe.fromNullable(map.get(new Key(keyType).toHexaString()));\n }\n\n private sortMap(map: Map<string, Value>): Map<string, Value> {\n return new Map(\n Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0])),\n );\n }\n\n deserialize(buffer: Uint8Array): Either<Error, Psbt> {\n const parser = new ByteArrayParser(buffer);\n\n // Read PSBT magic\n for (const magicByte of PSBT_MAGIC_BYTES) {\n if (parser.extract8BitUInt() !== magicByte) {\n return Left(new Error(\"PSBT deserializer: Invalid magic bytes\"));\n }\n }\n\n // Read all the maps available in that PSBT\n const maps: Map<string, Value>[] = [];\n while (parser.getUnparsedRemainingLength()) {\n maps.push(this.keyPairSerializer.deserializeMap(parser));\n }\n if (maps.length === 0) {\n return Left(new Error(\"PSBT deserializer: No map found\"));\n }\n\n // Get global map\n const globalMap = maps[0]!;\n\n // Get inputs and outpus count, either from the global map, or within the tx\n const transaction = this.getValue(globalMap, PsbtGlobal.UNSIGNED_TX).chain(\n (value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data, false)),\n ).toMaybe(),\n );\n const inputCount = this.getValue(globalMap, PsbtGlobal.INPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.ins.length));\n const outputCount = this.getValue(globalMap, PsbtGlobal.OUTPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.outs.length));\n\n // Get inputs map and outputs map\n if (inputCount.isJust() && outputCount.isJust()) {\n if (maps.length === 1 + inputCount.extract() + outputCount.extract()) {\n const inputMaps = maps.slice(1, 1 + inputCount.extract());\n const outputMaps = maps.slice(1 + inputCount.extract());\n return Right(new Psbt(globalMap, inputMaps, outputMaps));\n }\n return Left(\n new Error(\n \"PSBT deserializer: map count don't match input and output count\",\n ),\n );\n }\n return Left(\n new Error(\n \"PSBT deserializer: input or output count not found in global map or transaction\",\n ),\n );\n }\n\n serialize(psbt: Psbt): Uint8Array {\n const builder = new ByteArrayBuilder();\n\n // Start by ordering all the maps, in case some values were added\n psbt.globalMap = this.sortMap(psbt.globalMap);\n psbt.inputMaps = psbt.inputMaps.map((input) => this.sortMap(input));\n psbt.outputMaps = psbt.outputMaps.map((output) => this.sortMap(output));\n\n // Serialize PSBT magic\n builder.addBufferToData(PSBT_MAGIC_BYTES);\n\n // Serialize all the maps\n this.keyPairSerializer.serializeMap(builder, psbt.globalMap);\n psbt.inputMaps.forEach((input) =>\n this.keyPairSerializer.serializeMap(builder, input),\n );\n psbt.outputMaps.forEach((output) =>\n this.keyPairSerializer.serializeMap(builder, output),\n );\n\n return builder.build();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["DefaultPsbtSerializer_exports", "__export", "DefaultPsbtSerializer", "__toCommonJS", "import_device_management_kit", "import_bitcoinjs_lib", "import_inversify", "import_purify_ts", "import_psbtTypes", "import_Key", "import_Psbt", "PSBT_MAGIC_BYTES", "DefaultPsbtSerializer", "valueParser", "keyPairSerializer", "map", "keyType", "b", "buffer", "parser", "magicByte", "maps", "globalMap", "transaction", "value", "inputCount", "tx", "outputCount", "inputMaps", "outputMaps", "psbt", "builder", "input", "output", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var h=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var M=(n,t)=>{for(var o in t)h(n,o,{get:t[o],enumerable:!0})},O=(n,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of F(t))!L.call(n,r)&&r!==o&&h(n,r,{get:()=>t[r],enumerable:!(i=y(t,r))||i.enumerable});return n};var b=n=>O(h({},"__esModule",{value:!0}),n),S=(n,t,o,i)=>{for(var r=i>1?void 0:i?y(t,o):t,T=n.length-1,u;T>=0;T--)(u=n[T])&&(r=(i?u(t,o,r):u(r))||r);return i&&r&&h(t,o,r),r},I=(n,t)=>(o,i)=>t(o,i,n);var N={};M(N,{DefaultPsbtV2Normalizer:()=>E});module.exports=b(N);var U=require("@ledgerhq/device-management-kit"),V=require("bitcoinjs-lib"),p=require("inversify"),s=require("purify-ts"),d=require("../../../psbt/di/psbtTypes"),g=require("../../../psbt/model/Key"),a=require("../../../psbt/model/Psbt"),v=require("../../../psbt/model/Value");let E=class{constructor(t,o){this.valueParser=t;this.valueFactory=o}normalize(t){const o=t.getGlobalValue(a.PsbtGlobal.VERSION).chain(e=>this.valueParser.getInt32LE(e.data)).orDefault(0);if(o===2)return(0,s.Right)(t);if(o!==0)return(0,s.Left)(new Error("PSBT normalizer: unsupported PSBT version"));const i=t.getGlobalValue(a.PsbtGlobal.UNSIGNED_TX).toEither(new Error("PSBT normalizer: PSBTv0 should contain a transaction")).chain(e=>s.Either.encase(()=>V.Transaction.fromHex((0,U.bufferToHexaString)(e.data).slice(2))).mapLeft(c=>new Error(`PSBT normalizer: failed to parse transaction (${c})`)));if(i.isLeft())return i;const r=i.unsafeCoerce();let u=[[a.PsbtGlobal.VERSION,this.valueFactory.fromInt32LE(2)],[a.PsbtGlobal.TX_VERSION,this.valueFactory.fromInt32LE(r.version)],[a.PsbtGlobal.FALLBACK_LOCKTIME,this.valueFactory.fromUInt32LE(r.locktime)],[a.PsbtGlobal.INPUT_COUNT,this.valueFactory.fromVarint(r.ins.length)],[a.PsbtGlobal.OUTPUT_COUNT,this.valueFactory.fromVarint(r.outs.length)]].reduce((e,[c,l])=>(l.ifJust(f=>t.setGlobalValue(c,f)),e&&l.isJust()),!0);for(let e=0;e<r.ins.length;e++)u=[[a.PsbtIn.PREVIOUS_TXID,(0,s.Just)(new v.Value(r.ins[e].hash))],[a.PsbtIn.OUTPUT_INDEX,this.valueFactory.fromUInt32LE(r.ins[e].index)],[a.PsbtIn.SEQUENCE,this.valueFactory.fromUInt32LE(r.ins[e].sequence)]].reduce((l,[f,m])=>(m.ifJust(P=>t.setInputValue(e,f,P)),l&&m.isJust()),u);for(let e=0;e<r.outs.length;e++)u=[[a.PsbtOut.AMOUNT,this.valueFactory.fromInt64LE(r.outs[e].value)],[a.PsbtOut.SCRIPT,(0,s.Just)(new v.Value(r.outs[e].script))]].reduce((l,[f,m])=>(m.ifJust(P=>t.setOutputValue(e,f,P)),l&&m.isJust()),u);return t.globalMap.delete(new g.Key(a.PsbtGlobal.UNSIGNED_TX).toHexaString()),u?(0,s.Right)(t):(0,s.Left)(new Error("PSBT normalizer: failed to update the \xA8PSBT"))}};E=S([(0,p.injectable)(),I(0,(0,p.inject)(d.psbtTypes.ValueParser)),I(1,(0,p.inject)(d.psbtTypes.ValueFactory))],E);0&&(module.exports={DefaultPsbtV2Normalizer});
1
+ "use strict";var h=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var M=(n,t)=>{for(var o in t)h(n,o,{get:t[o],enumerable:!0})},O=(n,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of F(t))!L.call(n,r)&&r!==o&&h(n,r,{get:()=>t[r],enumerable:!(i=y(t,r))||i.enumerable});return n};var b=n=>O(h({},"__esModule",{value:!0}),n),S=(n,t,o,i)=>{for(var r=i>1?void 0:i?y(t,o):t,T=n.length-1,u;T>=0;T--)(u=n[T])&&(r=(i?u(t,o,r):u(r))||r);return i&&r&&h(t,o,r),r},I=(n,t)=>(o,i)=>t(o,i,n);var N={};M(N,{DefaultPsbtV2Normalizer:()=>E});module.exports=b(N);var U=require("@ledgerhq/device-management-kit"),V=require("bitcoinjs-lib"),p=require("inversify"),s=require("purify-ts"),d=require("../../../psbt/di/psbtTypes"),g=require("../../../psbt/model/Key"),a=require("../../../psbt/model/Psbt"),v=require("../../../psbt/model/Value");let E=class{constructor(t,o){this.valueParser=t;this.valueFactory=o}normalize(t){const o=t.getGlobalValue(a.PsbtGlobal.VERSION).chain(e=>this.valueParser.getInt32LE(e.data)).orDefault(0);if(o===2)return(0,s.Right)(t);if(o!==0)return(0,s.Left)(new Error("PSBT normalizer: unsupported PSBT version"));const i=t.getGlobalValue(a.PsbtGlobal.UNSIGNED_TX).toEither(new Error("PSBT normalizer: PSBTv0 should contain a transaction")).chain(e=>s.Either.encase(()=>V.Transaction.fromHex((0,U.bufferToHexaString)(e.data,!1))).mapLeft(c=>new Error(`PSBT normalizer: failed to parse transaction (${c})`)));if(i.isLeft())return i;const r=i.unsafeCoerce();let u=[[a.PsbtGlobal.VERSION,this.valueFactory.fromInt32LE(2)],[a.PsbtGlobal.TX_VERSION,this.valueFactory.fromInt32LE(r.version)],[a.PsbtGlobal.FALLBACK_LOCKTIME,this.valueFactory.fromUInt32LE(r.locktime)],[a.PsbtGlobal.INPUT_COUNT,this.valueFactory.fromVarint(r.ins.length)],[a.PsbtGlobal.OUTPUT_COUNT,this.valueFactory.fromVarint(r.outs.length)]].reduce((e,[c,l])=>(l.ifJust(f=>t.setGlobalValue(c,f)),e&&l.isJust()),!0);for(let e=0;e<r.ins.length;e++)u=[[a.PsbtIn.PREVIOUS_TXID,(0,s.Just)(new v.Value(r.ins[e].hash))],[a.PsbtIn.OUTPUT_INDEX,this.valueFactory.fromUInt32LE(r.ins[e].index)],[a.PsbtIn.SEQUENCE,this.valueFactory.fromUInt32LE(r.ins[e].sequence)]].reduce((l,[f,m])=>(m.ifJust(P=>t.setInputValue(e,f,P)),l&&m.isJust()),u);for(let e=0;e<r.outs.length;e++)u=[[a.PsbtOut.AMOUNT,this.valueFactory.fromInt64LE(r.outs[e].value)],[a.PsbtOut.SCRIPT,(0,s.Just)(new v.Value(r.outs[e].script))]].reduce((l,[f,m])=>(m.ifJust(P=>t.setOutputValue(e,f,P)),l&&m.isJust()),u);return t.globalMap.delete(new g.Key(a.PsbtGlobal.UNSIGNED_TX).toHexaString()),u?(0,s.Right)(t):(0,s.Left)(new Error("PSBT normalizer: failed to update the \xA8PSBT"))}};E=S([(0,p.injectable)(),I(0,(0,p.inject)(d.psbtTypes.ValueParser)),I(1,(0,p.inject)(d.psbtTypes.ValueFactory))],E);0&&(module.exports={DefaultPsbtV2Normalizer});
2
2
  //# sourceMappingURL=DefaultPsbtV2Normalizer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/psbt/service/psbt/DefaultPsbtV2Normalizer.ts"],
4
- "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Just, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal, PsbtIn, PsbtOut } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type ValueFactory } from \"@internal/psbt/service/value/ValueFactory\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\n/**\n * Normalize a PSBTv2 from any input PSBT, according to specification:\n * https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki\n */\n@injectable()\nexport class DefaultPsbtV2Normalizer {\n constructor(\n @inject(psbtTypes.ValueParser) private valueParser: ValueParser,\n @inject(psbtTypes.ValueFactory) private valueFactory: ValueFactory,\n ) {}\n\n normalize(psbt: Psbt): Either<Error, Psbt> {\n // Get current PSBT version\n const version = psbt\n .getGlobalValue(PsbtGlobal.VERSION)\n .chain((value) => this.valueParser.getInt32LE(value.data))\n .orDefault(0);\n if (version === 2) {\n return Right(psbt);\n } else if (version !== 0) {\n return Left(new Error(\"PSBT normalizer: unsupported PSBT version\"));\n }\n\n // Get the unsigned transaction to extract its metadata\n const transaction = psbt\n .getGlobalValue(PsbtGlobal.UNSIGNED_TX)\n .toEither(\n new Error(\"PSBT normalizer: PSBTv0 should contain a transaction\"),\n )\n .chain((value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data).slice(2)),\n ).mapLeft(\n (error) =>\n new Error(\n `PSBT normalizer: failed to parse transaction (${error})`,\n ),\n ),\n );\n if (transaction.isLeft()) {\n return transaction;\n }\n const tx = transaction.unsafeCoerce();\n\n // Update global map with transaction metadata\n const globalMetadata: [PsbtGlobal, Maybe<Value>][] = [\n [PsbtGlobal.VERSION, this.valueFactory.fromInt32LE(2)],\n [PsbtGlobal.TX_VERSION, this.valueFactory.fromInt32LE(tx.version)],\n [\n PsbtGlobal.FALLBACK_LOCKTIME,\n this.valueFactory.fromUInt32LE(tx.locktime),\n ],\n [PsbtGlobal.INPUT_COUNT, this.valueFactory.fromVarint(tx.ins.length)],\n [PsbtGlobal.OUTPUT_COUNT, this.valueFactory.fromVarint(tx.outs.length)],\n ];\n let result = globalMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setGlobalValue(key, value));\n return success && maybeValue.isJust();\n }, true);\n\n // Update inputs metadata\n for (let i = 0; i < tx.ins.length; i++) {\n const inputMetadata: [PsbtIn, Maybe<Value>][] = [\n [PsbtIn.PREVIOUS_TXID, Just(new Value(tx.ins[i]!.hash))],\n [PsbtIn.OUTPUT_INDEX, this.valueFactory.fromUInt32LE(tx.ins[i]!.index)],\n [PsbtIn.SEQUENCE, this.valueFactory.fromUInt32LE(tx.ins[i]!.sequence)],\n ];\n result = inputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setInputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Update outputs metadata\n for (let i = 0; i < tx.outs.length; i++) {\n const outputMetadata: [PsbtOut, Maybe<Value>][] = [\n [PsbtOut.AMOUNT, this.valueFactory.fromInt64LE(tx.outs[i]!.value)],\n [PsbtOut.SCRIPT, Just(new Value(tx.outs[i]!.script))],\n ];\n result = outputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setOutputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Remove UNSIGNED_TX from the transaction since it's deprecated in V2\n psbt.globalMap.delete(new Key(PsbtGlobal.UNSIGNED_TX).toHexaString());\n return result\n ? Right(psbt)\n : Left(new Error(\"PSBT normalizer: failed to update the \u00A8PSBT\"));\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Just, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal, PsbtIn, PsbtOut } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type ValueFactory } from \"@internal/psbt/service/value/ValueFactory\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\n/**\n * Normalize a PSBTv2 from any input PSBT, according to specification:\n * https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki\n */\n@injectable()\nexport class DefaultPsbtV2Normalizer {\n constructor(\n @inject(psbtTypes.ValueParser) private valueParser: ValueParser,\n @inject(psbtTypes.ValueFactory) private valueFactory: ValueFactory,\n ) {}\n\n normalize(psbt: Psbt): Either<Error, Psbt> {\n // Get current PSBT version\n const version = psbt\n .getGlobalValue(PsbtGlobal.VERSION)\n .chain((value) => this.valueParser.getInt32LE(value.data))\n .orDefault(0);\n if (version === 2) {\n return Right(psbt);\n } else if (version !== 0) {\n return Left(new Error(\"PSBT normalizer: unsupported PSBT version\"));\n }\n\n // Get the unsigned transaction to extract its metadata\n const transaction = psbt\n .getGlobalValue(PsbtGlobal.UNSIGNED_TX)\n .toEither(\n new Error(\"PSBT normalizer: PSBTv0 should contain a transaction\"),\n )\n .chain((value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data, false)),\n ).mapLeft(\n (error) =>\n new Error(\n `PSBT normalizer: failed to parse transaction (${error})`,\n ),\n ),\n );\n if (transaction.isLeft()) {\n return transaction;\n }\n const tx = transaction.unsafeCoerce();\n\n // Update global map with transaction metadata\n const globalMetadata: [PsbtGlobal, Maybe<Value>][] = [\n [PsbtGlobal.VERSION, this.valueFactory.fromInt32LE(2)],\n [PsbtGlobal.TX_VERSION, this.valueFactory.fromInt32LE(tx.version)],\n [\n PsbtGlobal.FALLBACK_LOCKTIME,\n this.valueFactory.fromUInt32LE(tx.locktime),\n ],\n [PsbtGlobal.INPUT_COUNT, this.valueFactory.fromVarint(tx.ins.length)],\n [PsbtGlobal.OUTPUT_COUNT, this.valueFactory.fromVarint(tx.outs.length)],\n ];\n let result = globalMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setGlobalValue(key, value));\n return success && maybeValue.isJust();\n }, true);\n\n // Update inputs metadata\n for (let i = 0; i < tx.ins.length; i++) {\n const inputMetadata: [PsbtIn, Maybe<Value>][] = [\n [PsbtIn.PREVIOUS_TXID, Just(new Value(tx.ins[i]!.hash))],\n [PsbtIn.OUTPUT_INDEX, this.valueFactory.fromUInt32LE(tx.ins[i]!.index)],\n [PsbtIn.SEQUENCE, this.valueFactory.fromUInt32LE(tx.ins[i]!.sequence)],\n ];\n result = inputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setInputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Update outputs metadata\n for (let i = 0; i < tx.outs.length; i++) {\n const outputMetadata: [PsbtOut, Maybe<Value>][] = [\n [PsbtOut.AMOUNT, this.valueFactory.fromInt64LE(tx.outs[i]!.value)],\n [PsbtOut.SCRIPT, Just(new Value(tx.outs[i]!.script))],\n ];\n result = outputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setOutputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Remove UNSIGNED_TX from the transaction since it's deprecated in V2\n psbt.globalMap.delete(new Key(PsbtGlobal.UNSIGNED_TX).toHexaString());\n return result\n ? Right(psbt)\n : Left(new Error(\"PSBT normalizer: failed to update the \u00A8PSBT\"));\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["DefaultPsbtV2Normalizer_exports", "__export", "DefaultPsbtV2Normalizer", "__toCommonJS", "import_device_management_kit", "import_bitcoinjs_lib", "import_inversify", "import_purify_ts", "import_psbtTypes", "import_Key", "import_Psbt", "import_Value", "DefaultPsbtV2Normalizer", "valueParser", "valueFactory", "psbt", "version", "value", "transaction", "error", "tx", "result", "success", "key", "maybeValue", "i", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var s=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var g=(n,e)=>{for(var t in e)s(n,t,{get:e[t],enumerable:!0})},x=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of B(e))!M.call(n,r)&&r!==t&&s(n,r,{get:()=>e[r],enumerable:!(i=c(e,r))||i.enumerable});return n};var W=n=>x(s({},"__esModule",{value:!0}),n),p=(n,e,t,i)=>{for(var r=i>1?void 0:i?c(e,t):e,l=n.length-1,o;l>=0;l--)(o=n[l])&&(r=(i?o(e,t,r):o(r))||r);return i&&r&&s(e,t,r),r},f=(n,e)=>(t,i)=>e(t,i,n);var v={};g(v,{DefaultWalletBuilder:()=>m});module.exports=W(v);var k=require("@ledgerhq/device-management-kit"),a=require("inversify"),d=require("../../../api/model/Wallet"),T=require("../../merkle-tree/di/merkleTreeTypes"),y=require("../../wallet/model/Wallet");let m=class{constructor(e){this.merkleTreeBuilder=e}fromRegisteredWallet(e){const t=new TextEncoder,i=e.keys.map(o=>t.encode(o)),r=this.merkleTreeBuilder.build(i),l=t.encode(e.descriptorTemplate);return new y.Wallet({name:e.name,descriptorTemplate:e.descriptorTemplate,keys:e.keys,hmac:e.hmac,keysTree:r,descriptorBuffer:l})}fromDefaultWallet(e,t,i){const o=`${`[${(0,k.bufferToHexaString)(e).slice(2)}/${i.derivationPath}]`}${t}`,u="",h=new Uint8Array(32).fill(0);return this.fromRegisteredWallet(new d.RegisteredWallet(u,i.template,[o],h))}};m=p([(0,a.injectable)(),f(0,(0,a.inject)(T.merkleTreeTypes.MerkleTreeBuilder))],m);0&&(module.exports={DefaultWalletBuilder});
1
+ "use strict";var s=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var g=(n,e)=>{for(var t in e)s(n,t,{get:e[t],enumerable:!0})},x=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of B(e))!M.call(n,r)&&r!==t&&s(n,r,{get:()=>e[r],enumerable:!(i=c(e,r))||i.enumerable});return n};var W=n=>x(s({},"__esModule",{value:!0}),n),p=(n,e,t,i)=>{for(var r=i>1?void 0:i?c(e,t):e,l=n.length-1,o;l>=0;l--)(o=n[l])&&(r=(i?o(e,t,r):o(r))||r);return i&&r&&s(e,t,r),r},f=(n,e)=>(t,i)=>e(t,i,n);var v={};g(v,{DefaultWalletBuilder:()=>m});module.exports=W(v);var k=require("@ledgerhq/device-management-kit"),a=require("inversify"),d=require("../../../api/model/Wallet"),T=require("../../merkle-tree/di/merkleTreeTypes"),y=require("../../wallet/model/Wallet");let m=class{constructor(e){this.merkleTreeBuilder=e}fromRegisteredWallet(e){const t=new TextEncoder,i=e.keys.map(o=>t.encode(o)),r=this.merkleTreeBuilder.build(i),l=t.encode(e.descriptorTemplate);return new y.Wallet({name:e.name,descriptorTemplate:e.descriptorTemplate,keys:e.keys,hmac:e.hmac,keysTree:r,descriptorBuffer:l})}fromDefaultWallet(e,t,i){const o=`${`[${(0,k.bufferToHexaString)(e,!1)}/${i.derivationPath}]`}${t}`,u="",h=new Uint8Array(32).fill(0);return this.fromRegisteredWallet(new d.RegisteredWallet(u,i.template,[o],h))}};m=p([(0,a.injectable)(),f(0,(0,a.inject)(T.merkleTreeTypes.MerkleTreeBuilder))],m);0&&(module.exports={DefaultWalletBuilder});
2
2
  //# sourceMappingURL=DefaultWalletBuilder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/wallet/service/DefaultWalletBuilder.ts"],
4
- "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { DefaultWallet, RegisteredWallet } from \"@api/model/Wallet\";\nimport { merkleTreeTypes } from \"@internal/merkle-tree/di/merkleTreeTypes\";\nimport type { MerkleTreeBuilder } from \"@internal/merkle-tree/service/MerkleTreeBuilder\";\nimport { Wallet } from \"@internal/wallet/model/Wallet\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\n\n@injectable()\nexport class DefaultWalletBuilder implements WalletBuilder {\n constructor(\n @inject(merkleTreeTypes.MerkleTreeBuilder)\n private merkleTreeBuilder: MerkleTreeBuilder,\n ) {}\n\n fromRegisteredWallet(registeredWallet: RegisteredWallet): Wallet {\n const encoder = new TextEncoder();\n const keyBuffers = registeredWallet.keys.map((key) => encoder.encode(key));\n const keysTree = this.merkleTreeBuilder.build(keyBuffers);\n const descriptorBuffer = encoder.encode(\n registeredWallet.descriptorTemplate,\n );\n return new Wallet({\n name: registeredWallet.name,\n descriptorTemplate: registeredWallet.descriptorTemplate,\n keys: registeredWallet.keys,\n hmac: registeredWallet.hmac,\n keysTree: keysTree,\n descriptorBuffer,\n });\n }\n\n fromDefaultWallet(\n masterFingerprint: Uint8Array,\n extendedPublicKey: string,\n wallet: DefaultWallet,\n ): Wallet {\n // For internal keys, the xpub should be put after key origin informations\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md#keys-information-vector\n const hexMasterFingerprint = bufferToHexaString(masterFingerprint).slice(2);\n const keyOrigin = `[${hexMasterFingerprint}/${wallet.derivationPath}]`;\n const key = `${keyOrigin}${extendedPublicKey}`;\n // Empty name for default wallets\n const name = \"\";\n // Default wallets hmac should be exactly 32 zeros as described here:\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md#get_wallet_address\n const hmac = new Uint8Array(32).fill(0);\n\n return this.fromRegisteredWallet(\n new RegisteredWallet(name, wallet.template, [key], hmac),\n );\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,2CACnCC,EAAmC,qBAEnCC,EAAgD,6BAChDC,EAAgC,oDAEhCD,EAAuB,yCAIhB,IAAME,EAAN,KAAoD,CACzD,YAEUC,EACR,CADQ,uBAAAA,CACP,CAEH,qBAAqBC,EAA4C,CAC/D,MAAMC,EAAU,IAAI,YACdC,EAAaF,EAAiB,KAAK,IAAKG,GAAQF,EAAQ,OAAOE,CAAG,CAAC,EACnEC,EAAW,KAAK,kBAAkB,MAAMF,CAAU,EAClDG,EAAmBJ,EAAQ,OAC/BD,EAAiB,kBACnB,EACA,OAAO,IAAI,SAAO,CAChB,KAAMA,EAAiB,KACvB,mBAAoBA,EAAiB,mBACrC,KAAMA,EAAiB,KACvB,KAAMA,EAAiB,KACvB,SAAUI,EACV,iBAAAC,CACF,CAAC,CACH,CAEA,kBACEC,EACAC,EACAC,EACQ,CAKR,MAAML,EAAM,GADM,OADW,sBAAmBG,CAAiB,EAAE,MAAM,CAAC,CAChC,IAAIE,EAAO,cAAc,GAC3C,GAAGD,CAAiB,GAEtCE,EAAO,GAGPC,EAAO,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC,EAEtC,OAAO,KAAK,qBACV,IAAI,mBAAiBD,EAAMD,EAAO,SAAU,CAACL,CAAG,EAAGO,CAAI,CACzD,CACF,CACF,EA3CaZ,EAANa,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,kBAAgB,iBAAiB,IAFhCd",
4
+ "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { DefaultWallet, RegisteredWallet } from \"@api/model/Wallet\";\nimport { merkleTreeTypes } from \"@internal/merkle-tree/di/merkleTreeTypes\";\nimport type { MerkleTreeBuilder } from \"@internal/merkle-tree/service/MerkleTreeBuilder\";\nimport { Wallet } from \"@internal/wallet/model/Wallet\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\n\n@injectable()\nexport class DefaultWalletBuilder implements WalletBuilder {\n constructor(\n @inject(merkleTreeTypes.MerkleTreeBuilder)\n private merkleTreeBuilder: MerkleTreeBuilder,\n ) {}\n\n fromRegisteredWallet(registeredWallet: RegisteredWallet): Wallet {\n const encoder = new TextEncoder();\n const keyBuffers = registeredWallet.keys.map((key) => encoder.encode(key));\n const keysTree = this.merkleTreeBuilder.build(keyBuffers);\n const descriptorBuffer = encoder.encode(\n registeredWallet.descriptorTemplate,\n );\n return new Wallet({\n name: registeredWallet.name,\n descriptorTemplate: registeredWallet.descriptorTemplate,\n keys: registeredWallet.keys,\n hmac: registeredWallet.hmac,\n keysTree: keysTree,\n descriptorBuffer,\n });\n }\n\n fromDefaultWallet(\n masterFingerprint: Uint8Array,\n extendedPublicKey: string,\n wallet: DefaultWallet,\n ): Wallet {\n // For internal keys, the xpub should be put after key origin informations\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md#keys-information-vector\n const hexMasterFingerprint = bufferToHexaString(masterFingerprint, false);\n const keyOrigin = `[${hexMasterFingerprint}/${wallet.derivationPath}]`;\n const key = `${keyOrigin}${extendedPublicKey}`;\n // Empty name for default wallets\n const name = \"\";\n // Default wallets hmac should be exactly 32 zeros as described here:\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md#get_wallet_address\n const hmac = new Uint8Array(32).fill(0);\n\n return this.fromRegisteredWallet(\n new RegisteredWallet(name, wallet.template, [key], hmac),\n );\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,2CACnCC,EAAmC,qBAEnCC,EAAgD,6BAChDC,EAAgC,oDAEhCD,EAAuB,yCAIhB,IAAME,EAAN,KAAoD,CACzD,YAEUC,EACR,CADQ,uBAAAA,CACP,CAEH,qBAAqBC,EAA4C,CAC/D,MAAMC,EAAU,IAAI,YACdC,EAAaF,EAAiB,KAAK,IAAKG,GAAQF,EAAQ,OAAOE,CAAG,CAAC,EACnEC,EAAW,KAAK,kBAAkB,MAAMF,CAAU,EAClDG,EAAmBJ,EAAQ,OAC/BD,EAAiB,kBACnB,EACA,OAAO,IAAI,SAAO,CAChB,KAAMA,EAAiB,KACvB,mBAAoBA,EAAiB,mBACrC,KAAMA,EAAiB,KACvB,KAAMA,EAAiB,KACvB,SAAUI,EACV,iBAAAC,CACF,CAAC,CACH,CAEA,kBACEC,EACAC,EACAC,EACQ,CAKR,MAAML,EAAM,GADM,OADW,sBAAmBG,EAAmB,EAAK,CAC9B,IAAIE,EAAO,cAAc,GAC3C,GAAGD,CAAiB,GAEtCE,EAAO,GAGPC,EAAO,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC,EAEtC,OAAO,KAAK,qBACV,IAAI,mBAAiBD,EAAMD,EAAO,SAAU,CAACL,CAAG,EAAGO,CAAI,CACzD,CACF,CACF,EA3CaZ,EAANa,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,kBAAgB,iBAAiB,IAFhCd",
6
6
  "names": ["DefaultWalletBuilder_exports", "__export", "DefaultWalletBuilder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_Wallet", "import_merkleTreeTypes", "DefaultWalletBuilder", "merkleTreeBuilder", "registeredWallet", "encoder", "keyBuffers", "key", "keysTree", "descriptorBuffer", "masterFingerprint", "extendedPublicKey", "wallet", "name", "hmac", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{bufferToHexaString as t,ByteArrayBuilder as r}from"@ledgerhq/device-management-kit";import{encodeVarint as a}from"../../utils/Varint";class i{constructor(e,y=new Uint8Array){this.keyType=e;this.keyData=y}toHexaString(){const e=new r().addBufferToData(a(this.keyType).unsafeCoerce()).addBufferToData(this.keyData).build();return t(e).slice(2)}}export{i as Key};
1
+ import{bufferToHexaString as t,ByteArrayBuilder as r}from"@ledgerhq/device-management-kit";import{encodeVarint as a}from"../../utils/Varint";class f{constructor(e,y=new Uint8Array){this.keyType=e;this.keyData=y}toHexaString(){const e=new r().addBufferToData(a(this.keyType).unsafeCoerce()).addBufferToData(this.keyData).build();return t(e,!1)}}export{f as Key};
2
2
  //# sourceMappingURL=Key.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/psbt/model/Key.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type PsbtGlobal, type PsbtIn, type PsbtOut } from \"./Psbt\";\n\n/**\n * According to specification, key-pair is formatted as:\n * <keylen> <keytype> <keydata> <valuelen> <valuedata>\n * with:\n * <keylen>: The compact size unsigned integer containing the combined length of <keytype> and <keydata>\n * <keytype>: A compact size unsigned integer representing the type\n * <valuelen>: The compact size unsigned integer containing the length of <valuedata>\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport type KeyType = PsbtGlobal | PsbtIn | PsbtOut;\n\nexport class Key {\n constructor(\n readonly keyType: KeyType,\n readonly keyData: Uint8Array = new Uint8Array(),\n ) {}\n\n toHexaString(): string {\n // Safe to extract keyType here since its value is a valid PSBT key type.\n const buffer = new ByteArrayBuilder()\n .addBufferToData(encodeVarint(this.keyType).unsafeCoerce())\n .addBufferToData(this.keyData)\n .build();\n return bufferToHexaString(buffer).slice(2);\n }\n}\n"],
5
- "mappings": "AAAA,OACE,sBAAAA,EACA,oBAAAC,MACK,kCAEP,OAAS,gBAAAC,MAAoB,yBAgBtB,MAAMC,CAAI,CACf,YACWC,EACAC,EAAsB,IAAI,WACnC,CAFS,aAAAD,EACA,aAAAC,CACR,CAEH,cAAuB,CAErB,MAAMC,EAAS,IAAIL,EAAiB,EACjC,gBAAgBC,EAAa,KAAK,OAAO,EAAE,aAAa,CAAC,EACzD,gBAAgB,KAAK,OAAO,EAC5B,MAAM,EACT,OAAOF,EAAmBM,CAAM,EAAE,MAAM,CAAC,CAC3C,CACF",
4
+ "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type PsbtGlobal, type PsbtIn, type PsbtOut } from \"./Psbt\";\n\n/**\n * According to specification, key-pair is formatted as:\n * <keylen> <keytype> <keydata> <valuelen> <valuedata>\n * with:\n * <keylen>: The compact size unsigned integer containing the combined length of <keytype> and <keydata>\n * <keytype>: A compact size unsigned integer representing the type\n * <valuelen>: The compact size unsigned integer containing the length of <valuedata>\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport type KeyType = PsbtGlobal | PsbtIn | PsbtOut;\n\nexport class Key {\n constructor(\n readonly keyType: KeyType,\n readonly keyData: Uint8Array = new Uint8Array(),\n ) {}\n\n toHexaString(): string {\n // Safe to extract keyType here since its value is a valid PSBT key type.\n const buffer = new ByteArrayBuilder()\n .addBufferToData(encodeVarint(this.keyType).unsafeCoerce())\n .addBufferToData(this.keyData)\n .build();\n return bufferToHexaString(buffer, false);\n }\n}\n"],
5
+ "mappings": "AAAA,OACE,sBAAAA,EACA,oBAAAC,MACK,kCAEP,OAAS,gBAAAC,MAAoB,yBAgBtB,MAAMC,CAAI,CACf,YACWC,EACAC,EAAsB,IAAI,WACnC,CAFS,aAAAD,EACA,aAAAC,CACR,CAEH,cAAuB,CAErB,MAAMC,EAAS,IAAIL,EAAiB,EACjC,gBAAgBC,EAAa,KAAK,OAAO,EAAE,aAAa,CAAC,EACzD,gBAAgB,KAAK,OAAO,EAC5B,MAAM,EACT,OAAOF,EAAmBM,EAAQ,EAAK,CACzC,CACF",
6
6
  "names": ["bufferToHexaString", "ByteArrayBuilder", "encodeVarint", "Key", "keyType", "keyData", "buffer"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var P=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var f=(s,r,a,e)=>{for(var i=e>1?void 0:e?d(r,a):r,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(e?o(r,a,i):o(i))||i);return e&&i&&P(r,a,i),i},u=(s,r)=>(a,e)=>r(a,e,s);import{bufferToHexaString as z,ByteArrayBuilder as S,ByteArrayParser as T}from"@ledgerhq/device-management-kit";import{Transaction as V}from"bitcoinjs-lib";import{inject as M}from"inversify";import{Either as x,Left as p,Maybe as B,Right as b}from"purify-ts";import{psbtTypes as g}from"../../../psbt/di/psbtTypes";import{Key as E}from"../../../psbt/model/Key";import{Psbt as U}from"../../../psbt/model/Psbt";import{PsbtGlobal as m}from"../../../psbt/model/Psbt";const h=Uint8Array.from([112,115,98,116,255]);let l=class{constructor(r,a){this.valueParser=r;this.keyPairSerializer=a}getValue(r,a){return B.fromNullable(r.get(new E(a).toHexaString()))}sortMap(r){return new Map(Array.from(r.entries()).sort((a,e)=>a[0].localeCompare(e[0])))}deserialize(r){const a=new T(r);for(const t of h)if(a.extract8BitUInt()!==t)return p(new Error("PSBT deserializer: Invalid magic bytes"));const e=[];for(;a.getUnparsedRemainingLength();)e.push(this.keyPairSerializer.deserializeMap(a));if(e.length===0)return p(new Error("PSBT deserializer: No map found"));const i=e[0],n=this.getValue(i,m.UNSIGNED_TX).chain(t=>x.encase(()=>V.fromHex(z(t.data).slice(2))).toMaybe()),o=this.getValue(i,m.INPUT_COUNT).chain(t=>this.valueParser.getVarint(t.data)).alt(n.map(t=>t.ins.length)),c=this.getValue(i,m.OUTPUT_COUNT).chain(t=>this.valueParser.getVarint(t.data)).alt(n.map(t=>t.outs.length));if(o.isJust()&&c.isJust()){if(e.length===1+o.extract()+c.extract()){const t=e.slice(1,1+o.extract()),y=e.slice(1+o.extract());return b(new U(i,t,y))}return p(new Error("PSBT deserializer: map count don't match input and output count"))}return p(new Error("PSBT deserializer: input or output count not found in global map or transaction"))}serialize(r){const a=new S;return r.globalMap=this.sortMap(r.globalMap),r.inputMaps=r.inputMaps.map(e=>this.sortMap(e)),r.outputMaps=r.outputMaps.map(e=>this.sortMap(e)),a.addBufferToData(h),this.keyPairSerializer.serializeMap(a,r.globalMap),r.inputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),r.outputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),a.build()}};l=f([u(0,M(g.ValueParser)),u(1,M(g.KeyPairSerializer))],l);export{l as DefaultPsbtSerializer};
1
+ var P=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var f=(s,r,a,e)=>{for(var i=e>1?void 0:e?d(r,a):r,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(e?o(r,a,i):o(i))||i);return e&&i&&P(r,a,i),i},u=(s,r)=>(a,e)=>r(a,e,s);import{bufferToHexaString as z,ByteArrayBuilder as S,ByteArrayParser as T}from"@ledgerhq/device-management-kit";import{Transaction as V}from"bitcoinjs-lib";import{inject as M}from"inversify";import{Either as x,Left as p,Maybe as B,Right as b}from"purify-ts";import{psbtTypes as g}from"../../../psbt/di/psbtTypes";import{Key as E}from"../../../psbt/model/Key";import{Psbt as U}from"../../../psbt/model/Psbt";import{PsbtGlobal as m}from"../../../psbt/model/Psbt";const h=Uint8Array.from([112,115,98,116,255]);let l=class{constructor(r,a){this.valueParser=r;this.keyPairSerializer=a}getValue(r,a){return B.fromNullable(r.get(new E(a).toHexaString()))}sortMap(r){return new Map(Array.from(r.entries()).sort((a,e)=>a[0].localeCompare(e[0])))}deserialize(r){const a=new T(r);for(const t of h)if(a.extract8BitUInt()!==t)return p(new Error("PSBT deserializer: Invalid magic bytes"));const e=[];for(;a.getUnparsedRemainingLength();)e.push(this.keyPairSerializer.deserializeMap(a));if(e.length===0)return p(new Error("PSBT deserializer: No map found"));const i=e[0],n=this.getValue(i,m.UNSIGNED_TX).chain(t=>x.encase(()=>V.fromHex(z(t.data,!1))).toMaybe()),o=this.getValue(i,m.INPUT_COUNT).chain(t=>this.valueParser.getVarint(t.data)).alt(n.map(t=>t.ins.length)),c=this.getValue(i,m.OUTPUT_COUNT).chain(t=>this.valueParser.getVarint(t.data)).alt(n.map(t=>t.outs.length));if(o.isJust()&&c.isJust()){if(e.length===1+o.extract()+c.extract()){const t=e.slice(1,1+o.extract()),y=e.slice(1+o.extract());return b(new U(i,t,y))}return p(new Error("PSBT deserializer: map count don't match input and output count"))}return p(new Error("PSBT deserializer: input or output count not found in global map or transaction"))}serialize(r){const a=new S;return r.globalMap=this.sortMap(r.globalMap),r.inputMaps=r.inputMaps.map(e=>this.sortMap(e)),r.outputMaps=r.outputMaps.map(e=>this.sortMap(e)),a.addBufferToData(h),this.keyPairSerializer.serializeMap(a,r.globalMap),r.inputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),r.outputMaps.forEach(e=>this.keyPairSerializer.serializeMap(a,e)),a.build()}};l=f([u(0,M(g.ValueParser)),u(1,M(g.KeyPairSerializer))],l);export{l as DefaultPsbtSerializer};
2
2
  //# sourceMappingURL=DefaultPsbtSerializer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/psbt/service/psbt/DefaultPsbtSerializer.ts"],
4
- "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type KeyPairSerializer } from \"@internal/psbt/service/key-pair/KeyPairSerializer\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\nimport { type PsbtSerializer } from \"./PsbtSerializer\";\n\n// PSBT magic bytes\nconst PSBT_MAGIC_BYTES = Uint8Array.from([0x70, 0x73, 0x62, 0x74, 0xff]);\n\n/**\n * According to specification, psbt is formatted as:\n * <magic> <global-map> <input-map>* <output-map>*\n * with:\n * <magic>: 0x70 0x73 0x62 0x74 0xFF\n * <map>: <keypair>* 0x00\n * For <keypair> serialization, it's done in KeyPair class.\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport class DefaultPsbtSerializer implements PsbtSerializer {\n constructor(\n @inject(psbtTypes.ValueParser)\n private readonly valueParser: ValueParser,\n @inject(psbtTypes.KeyPairSerializer)\n private readonly keyPairSerializer: KeyPairSerializer,\n ) {}\n\n private getValue(map: Map<string, Value>, keyType: number): Maybe<Value> {\n return Maybe.fromNullable(map.get(new Key(keyType).toHexaString()));\n }\n\n private sortMap(map: Map<string, Value>): Map<string, Value> {\n return new Map(\n Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0])),\n );\n }\n\n deserialize(buffer: Uint8Array): Either<Error, Psbt> {\n const parser = new ByteArrayParser(buffer);\n\n // Read PSBT magic\n for (const magicByte of PSBT_MAGIC_BYTES) {\n if (parser.extract8BitUInt() !== magicByte) {\n return Left(new Error(\"PSBT deserializer: Invalid magic bytes\"));\n }\n }\n\n // Read all the maps available in that PSBT\n const maps: Map<string, Value>[] = [];\n while (parser.getUnparsedRemainingLength()) {\n maps.push(this.keyPairSerializer.deserializeMap(parser));\n }\n if (maps.length === 0) {\n return Left(new Error(\"PSBT deserializer: No map found\"));\n }\n\n // Get global map\n const globalMap = maps[0]!;\n\n // Get inputs and outpus count, either from the global map, or within the tx\n const transaction = this.getValue(globalMap, PsbtGlobal.UNSIGNED_TX).chain(\n (value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data).slice(2)),\n ).toMaybe(),\n );\n const inputCount = this.getValue(globalMap, PsbtGlobal.INPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.ins.length));\n const outputCount = this.getValue(globalMap, PsbtGlobal.OUTPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.outs.length));\n\n // Get inputs map and outputs map\n if (inputCount.isJust() && outputCount.isJust()) {\n if (maps.length === 1 + inputCount.extract() + outputCount.extract()) {\n const inputMaps = maps.slice(1, 1 + inputCount.extract());\n const outputMaps = maps.slice(1 + inputCount.extract());\n return Right(new Psbt(globalMap, inputMaps, outputMaps));\n }\n return Left(\n new Error(\n \"PSBT deserializer: map count don't match input and output count\",\n ),\n );\n }\n return Left(\n new Error(\n \"PSBT deserializer: input or output count not found in global map or transaction\",\n ),\n );\n }\n\n serialize(psbt: Psbt): Uint8Array {\n const builder = new ByteArrayBuilder();\n\n // Start by ordering all the maps, in case some values were added\n psbt.globalMap = this.sortMap(psbt.globalMap);\n psbt.inputMaps = psbt.inputMaps.map((input) => this.sortMap(input));\n psbt.outputMaps = psbt.outputMaps.map((output) => this.sortMap(output));\n\n // Serialize PSBT magic\n builder.addBufferToData(PSBT_MAGIC_BYTES);\n\n // Serialize all the maps\n this.keyPairSerializer.serializeMap(builder, psbt.globalMap);\n psbt.inputMaps.forEach((input) =>\n this.keyPairSerializer.serializeMap(builder, input),\n );\n psbt.outputMaps.forEach((output) =>\n this.keyPairSerializer.serializeMap(builder, output),\n );\n\n return builder.build();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject } from \"inversify\";\nimport { Either, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type KeyPairSerializer } from \"@internal/psbt/service/key-pair/KeyPairSerializer\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\nimport { type PsbtSerializer } from \"./PsbtSerializer\";\n\n// PSBT magic bytes\nconst PSBT_MAGIC_BYTES = Uint8Array.from([0x70, 0x73, 0x62, 0x74, 0xff]);\n\n/**\n * According to specification, psbt is formatted as:\n * <magic> <global-map> <input-map>* <output-map>*\n * with:\n * <magic>: 0x70 0x73 0x62 0x74 0xFF\n * <map>: <keypair>* 0x00\n * For <keypair> serialization, it's done in KeyPair class.\n * For more informations:\n * https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification\n */\nexport class DefaultPsbtSerializer implements PsbtSerializer {\n constructor(\n @inject(psbtTypes.ValueParser)\n private readonly valueParser: ValueParser,\n @inject(psbtTypes.KeyPairSerializer)\n private readonly keyPairSerializer: KeyPairSerializer,\n ) {}\n\n private getValue(map: Map<string, Value>, keyType: number): Maybe<Value> {\n return Maybe.fromNullable(map.get(new Key(keyType).toHexaString()));\n }\n\n private sortMap(map: Map<string, Value>): Map<string, Value> {\n return new Map(\n Array.from(map.entries()).sort((a, b) => a[0].localeCompare(b[0])),\n );\n }\n\n deserialize(buffer: Uint8Array): Either<Error, Psbt> {\n const parser = new ByteArrayParser(buffer);\n\n // Read PSBT magic\n for (const magicByte of PSBT_MAGIC_BYTES) {\n if (parser.extract8BitUInt() !== magicByte) {\n return Left(new Error(\"PSBT deserializer: Invalid magic bytes\"));\n }\n }\n\n // Read all the maps available in that PSBT\n const maps: Map<string, Value>[] = [];\n while (parser.getUnparsedRemainingLength()) {\n maps.push(this.keyPairSerializer.deserializeMap(parser));\n }\n if (maps.length === 0) {\n return Left(new Error(\"PSBT deserializer: No map found\"));\n }\n\n // Get global map\n const globalMap = maps[0]!;\n\n // Get inputs and outpus count, either from the global map, or within the tx\n const transaction = this.getValue(globalMap, PsbtGlobal.UNSIGNED_TX).chain(\n (value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data, false)),\n ).toMaybe(),\n );\n const inputCount = this.getValue(globalMap, PsbtGlobal.INPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.ins.length));\n const outputCount = this.getValue(globalMap, PsbtGlobal.OUTPUT_COUNT)\n .chain((value) => this.valueParser.getVarint(value.data))\n .alt(transaction.map((tx) => tx.outs.length));\n\n // Get inputs map and outputs map\n if (inputCount.isJust() && outputCount.isJust()) {\n if (maps.length === 1 + inputCount.extract() + outputCount.extract()) {\n const inputMaps = maps.slice(1, 1 + inputCount.extract());\n const outputMaps = maps.slice(1 + inputCount.extract());\n return Right(new Psbt(globalMap, inputMaps, outputMaps));\n }\n return Left(\n new Error(\n \"PSBT deserializer: map count don't match input and output count\",\n ),\n );\n }\n return Left(\n new Error(\n \"PSBT deserializer: input or output count not found in global map or transaction\",\n ),\n );\n }\n\n serialize(psbt: Psbt): Uint8Array {\n const builder = new ByteArrayBuilder();\n\n // Start by ordering all the maps, in case some values were added\n psbt.globalMap = this.sortMap(psbt.globalMap);\n psbt.inputMaps = psbt.inputMaps.map((input) => this.sortMap(input));\n psbt.outputMaps = psbt.outputMaps.map((output) => this.sortMap(output));\n\n // Serialize PSBT magic\n builder.addBufferToData(PSBT_MAGIC_BYTES);\n\n // Serialize all the maps\n this.keyPairSerializer.serializeMap(builder, psbt.globalMap);\n psbt.inputMaps.forEach((input) =>\n this.keyPairSerializer.serializeMap(builder, input),\n );\n psbt.outputMaps.forEach((output) =>\n this.keyPairSerializer.serializeMap(builder, output),\n );\n\n return builder.build();\n }\n}\n"],
5
+ "mappings": "iOAAA,OACE,sBAAAA,EACA,oBAAAC,EACA,mBAAAC,MACK,kCACP,OAAS,eAAAC,MAAmB,gBAC5B,OAAS,UAAAC,MAAc,YACvB,OAAS,UAAAC,EAAQ,QAAAC,EAAM,SAAAC,EAAO,SAAAC,MAAa,YAE3C,OAAS,aAAAC,MAAiB,8BAC1B,OAAS,OAAAC,MAAW,2BACpB,OAAS,QAAAC,MAAY,4BACrB,OAAS,cAAAC,MAAkB,4BAQ3B,MAAMC,EAAmB,WAAW,KAAK,CAAC,IAAM,IAAM,GAAM,IAAM,GAAI,CAAC,EAYhE,IAAMC,EAAN,KAAsD,CAC3D,YAEmBC,EAEAC,EACjB,CAHiB,iBAAAD,EAEA,uBAAAC,CAChB,CAEK,SAASC,EAAyBC,EAA+B,CACvE,OAAOC,EAAM,aAAaF,EAAI,IAAI,IAAIG,EAAIF,CAAO,EAAE,aAAa,CAAC,CAAC,CACpE,CAEQ,QAAQD,EAA6C,CAC3D,OAAO,IAAI,IACT,MAAM,KAAKA,EAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,EAAGI,IAAM,EAAE,CAAC,EAAE,cAAcA,EAAE,CAAC,CAAC,CAAC,CACnE,CACF,CAEA,YAAYC,EAAyC,CACnD,MAAMC,EAAS,IAAIC,EAAgBF,CAAM,EAGzC,UAAWG,KAAaZ,EACtB,GAAIU,EAAO,gBAAgB,IAAME,EAC/B,OAAOC,EAAK,IAAI,MAAM,wCAAwC,CAAC,EAKnE,MAAMC,EAA6B,CAAC,EACpC,KAAOJ,EAAO,2BAA2B,GACvCI,EAAK,KAAK,KAAK,kBAAkB,eAAeJ,CAAM,CAAC,EAEzD,GAAII,EAAK,SAAW,EAClB,OAAOD,EAAK,IAAI,MAAM,iCAAiC,CAAC,EAI1D,MAAME,EAAYD,EAAK,CAAC,EAGlBE,EAAc,KAAK,SAASD,EAAWE,EAAW,WAAW,EAAE,MAClEC,GACCC,EAAO,OAAO,IACZC,EAAY,QAAQC,EAAmBH,EAAM,KAAM,EAAK,CAAC,CAC3D,EAAE,QAAQ,CACd,EACMI,EAAa,KAAK,SAASP,EAAWE,EAAW,WAAW,EAC/D,MAAOC,GAAU,KAAK,YAAY,UAAUA,EAAM,IAAI,CAAC,EACvD,IAAIF,EAAY,IAAKO,GAAOA,EAAG,IAAI,MAAM,CAAC,EACvCC,EAAc,KAAK,SAAST,EAAWE,EAAW,YAAY,EACjE,MAAOC,GAAU,KAAK,YAAY,UAAUA,EAAM,IAAI,CAAC,EACvD,IAAIF,EAAY,IAAKO,GAAOA,EAAG,KAAK,MAAM,CAAC,EAG9C,GAAID,EAAW,OAAO,GAAKE,EAAY,OAAO,EAAG,CAC/C,GAAIV,EAAK,SAAW,EAAIQ,EAAW,QAAQ,EAAIE,EAAY,QAAQ,EAAG,CACpE,MAAMC,EAAYX,EAAK,MAAM,EAAG,EAAIQ,EAAW,QAAQ,CAAC,EAClDI,EAAaZ,EAAK,MAAM,EAAIQ,EAAW,QAAQ,CAAC,EACtD,OAAOK,EAAM,IAAIC,EAAKb,EAAWU,EAAWC,CAAU,CAAC,CACzD,CACA,OAAOb,EACL,IAAI,MACF,iEACF,CACF,CACF,CACA,OAAOA,EACL,IAAI,MACF,iFACF,CACF,CACF,CAEA,UAAUgB,EAAwB,CAChC,MAAMC,EAAU,IAAIC,EAGpB,OAAAF,EAAK,UAAY,KAAK,QAAQA,EAAK,SAAS,EAC5CA,EAAK,UAAYA,EAAK,UAAU,IAAKG,GAAU,KAAK,QAAQA,CAAK,CAAC,EAClEH,EAAK,WAAaA,EAAK,WAAW,IAAKI,GAAW,KAAK,QAAQA,CAAM,CAAC,EAGtEH,EAAQ,gBAAgB9B,CAAgB,EAGxC,KAAK,kBAAkB,aAAa8B,EAASD,EAAK,SAAS,EAC3DA,EAAK,UAAU,QAASG,GACtB,KAAK,kBAAkB,aAAaF,EAASE,CAAK,CACpD,EACAH,EAAK,WAAW,QAASI,GACvB,KAAK,kBAAkB,aAAaH,EAASG,CAAM,CACrD,EAEOH,EAAQ,MAAM,CACvB,CACF,EAhGa7B,EAANiC,EAAA,CAEFC,EAAA,EAAAC,EAAOC,EAAU,WAAW,GAE5BF,EAAA,EAAAC,EAAOC,EAAU,iBAAiB,IAJ1BpC",
6
6
  "names": ["bufferToHexaString", "ByteArrayBuilder", "ByteArrayParser", "Transaction", "inject", "Either", "Left", "Maybe", "Right", "psbtTypes", "Key", "Psbt", "PsbtGlobal", "PSBT_MAGIC_BYTES", "DefaultPsbtSerializer", "valueParser", "keyPairSerializer", "map", "keyType", "Maybe", "Key", "b", "buffer", "parser", "ByteArrayParser", "magicByte", "Left", "maps", "globalMap", "transaction", "PsbtGlobal", "value", "Either", "Transaction", "bufferToHexaString", "inputCount", "tx", "outputCount", "inputMaps", "outputMaps", "Right", "Psbt", "psbt", "builder", "ByteArrayBuilder", "input", "output", "__decorateClass", "__decorateParam", "inject", "psbtTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var g=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var P=(u,e,o,a)=>{for(var t=a>1?void 0:a?F(e,o):e,m=u.length-1,n;m>=0;m--)(n=u[m])&&(t=(a?n(e,o,t):n(t))||t);return a&&t&&g(e,o,t),t},T=(u,e)=>(o,a)=>e(o,a,u);import{bufferToHexaString as L}from"@ledgerhq/device-management-kit";import{Transaction as M}from"bitcoinjs-lib";import{inject as I,injectable as O}from"inversify";import{Either as b,Just as d,Left as v,Right as y}from"purify-ts";import{psbtTypes as S}from"../../../psbt/di/psbtTypes";import{Key as N}from"../../../psbt/model/Key";import{PsbtGlobal as i,PsbtIn as h,PsbtOut as U}from"../../../psbt/model/Psbt";import{Value as V}from"../../../psbt/model/Value";let E=class{constructor(e,o){this.valueParser=e;this.valueFactory=o}normalize(e){const o=e.getGlobalValue(i.VERSION).chain(r=>this.valueParser.getInt32LE(r.data)).orDefault(0);if(o===2)return y(e);if(o!==0)return v(new Error("PSBT normalizer: unsupported PSBT version"));const a=e.getGlobalValue(i.UNSIGNED_TX).toEither(new Error("PSBT normalizer: PSBTv0 should contain a transaction")).chain(r=>b.encase(()=>M.fromHex(L(r.data).slice(2))).mapLeft(l=>new Error(`PSBT normalizer: failed to parse transaction (${l})`)));if(a.isLeft())return a;const t=a.unsafeCoerce();let n=[[i.VERSION,this.valueFactory.fromInt32LE(2)],[i.TX_VERSION,this.valueFactory.fromInt32LE(t.version)],[i.FALLBACK_LOCKTIME,this.valueFactory.fromUInt32LE(t.locktime)],[i.INPUT_COUNT,this.valueFactory.fromVarint(t.ins.length)],[i.OUTPUT_COUNT,this.valueFactory.fromVarint(t.outs.length)]].reduce((r,[l,s])=>(s.ifJust(c=>e.setGlobalValue(l,c)),r&&s.isJust()),!0);for(let r=0;r<t.ins.length;r++)n=[[h.PREVIOUS_TXID,d(new V(t.ins[r].hash))],[h.OUTPUT_INDEX,this.valueFactory.fromUInt32LE(t.ins[r].index)],[h.SEQUENCE,this.valueFactory.fromUInt32LE(t.ins[r].sequence)]].reduce((s,[c,f])=>(f.ifJust(p=>e.setInputValue(r,c,p)),s&&f.isJust()),n);for(let r=0;r<t.outs.length;r++)n=[[U.AMOUNT,this.valueFactory.fromInt64LE(t.outs[r].value)],[U.SCRIPT,d(new V(t.outs[r].script))]].reduce((s,[c,f])=>(f.ifJust(p=>e.setOutputValue(r,c,p)),s&&f.isJust()),n);return e.globalMap.delete(new N(i.UNSIGNED_TX).toHexaString()),n?y(e):v(new Error("PSBT normalizer: failed to update the \xA8PSBT"))}};E=P([O(),T(0,I(S.ValueParser)),T(1,I(S.ValueFactory))],E);export{E as DefaultPsbtV2Normalizer};
1
+ var g=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var P=(u,e,o,a)=>{for(var t=a>1?void 0:a?F(e,o):e,m=u.length-1,n;m>=0;m--)(n=u[m])&&(t=(a?n(e,o,t):n(t))||t);return a&&t&&g(e,o,t),t},T=(u,e)=>(o,a)=>e(o,a,u);import{bufferToHexaString as L}from"@ledgerhq/device-management-kit";import{Transaction as M}from"bitcoinjs-lib";import{inject as I,injectable as O}from"inversify";import{Either as b,Just as d,Left as v,Right as y}from"purify-ts";import{psbtTypes as S}from"../../../psbt/di/psbtTypes";import{Key as N}from"../../../psbt/model/Key";import{PsbtGlobal as i,PsbtIn as h,PsbtOut as U}from"../../../psbt/model/Psbt";import{Value as V}from"../../../psbt/model/Value";let E=class{constructor(e,o){this.valueParser=e;this.valueFactory=o}normalize(e){const o=e.getGlobalValue(i.VERSION).chain(r=>this.valueParser.getInt32LE(r.data)).orDefault(0);if(o===2)return y(e);if(o!==0)return v(new Error("PSBT normalizer: unsupported PSBT version"));const a=e.getGlobalValue(i.UNSIGNED_TX).toEither(new Error("PSBT normalizer: PSBTv0 should contain a transaction")).chain(r=>b.encase(()=>M.fromHex(L(r.data,!1))).mapLeft(l=>new Error(`PSBT normalizer: failed to parse transaction (${l})`)));if(a.isLeft())return a;const t=a.unsafeCoerce();let n=[[i.VERSION,this.valueFactory.fromInt32LE(2)],[i.TX_VERSION,this.valueFactory.fromInt32LE(t.version)],[i.FALLBACK_LOCKTIME,this.valueFactory.fromUInt32LE(t.locktime)],[i.INPUT_COUNT,this.valueFactory.fromVarint(t.ins.length)],[i.OUTPUT_COUNT,this.valueFactory.fromVarint(t.outs.length)]].reduce((r,[l,s])=>(s.ifJust(c=>e.setGlobalValue(l,c)),r&&s.isJust()),!0);for(let r=0;r<t.ins.length;r++)n=[[h.PREVIOUS_TXID,d(new V(t.ins[r].hash))],[h.OUTPUT_INDEX,this.valueFactory.fromUInt32LE(t.ins[r].index)],[h.SEQUENCE,this.valueFactory.fromUInt32LE(t.ins[r].sequence)]].reduce((s,[c,f])=>(f.ifJust(p=>e.setInputValue(r,c,p)),s&&f.isJust()),n);for(let r=0;r<t.outs.length;r++)n=[[U.AMOUNT,this.valueFactory.fromInt64LE(t.outs[r].value)],[U.SCRIPT,d(new V(t.outs[r].script))]].reduce((s,[c,f])=>(f.ifJust(p=>e.setOutputValue(r,c,p)),s&&f.isJust()),n);return e.globalMap.delete(new N(i.UNSIGNED_TX).toHexaString()),n?y(e):v(new Error("PSBT normalizer: failed to update the \xA8PSBT"))}};E=P([O(),T(0,I(S.ValueParser)),T(1,I(S.ValueFactory))],E);export{E as DefaultPsbtV2Normalizer};
2
2
  //# sourceMappingURL=DefaultPsbtV2Normalizer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/psbt/service/psbt/DefaultPsbtV2Normalizer.ts"],
4
- "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Just, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal, PsbtIn, PsbtOut } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type ValueFactory } from \"@internal/psbt/service/value/ValueFactory\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\n/**\n * Normalize a PSBTv2 from any input PSBT, according to specification:\n * https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki\n */\n@injectable()\nexport class DefaultPsbtV2Normalizer {\n constructor(\n @inject(psbtTypes.ValueParser) private valueParser: ValueParser,\n @inject(psbtTypes.ValueFactory) private valueFactory: ValueFactory,\n ) {}\n\n normalize(psbt: Psbt): Either<Error, Psbt> {\n // Get current PSBT version\n const version = psbt\n .getGlobalValue(PsbtGlobal.VERSION)\n .chain((value) => this.valueParser.getInt32LE(value.data))\n .orDefault(0);\n if (version === 2) {\n return Right(psbt);\n } else if (version !== 0) {\n return Left(new Error(\"PSBT normalizer: unsupported PSBT version\"));\n }\n\n // Get the unsigned transaction to extract its metadata\n const transaction = psbt\n .getGlobalValue(PsbtGlobal.UNSIGNED_TX)\n .toEither(\n new Error(\"PSBT normalizer: PSBTv0 should contain a transaction\"),\n )\n .chain((value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data).slice(2)),\n ).mapLeft(\n (error) =>\n new Error(\n `PSBT normalizer: failed to parse transaction (${error})`,\n ),\n ),\n );\n if (transaction.isLeft()) {\n return transaction;\n }\n const tx = transaction.unsafeCoerce();\n\n // Update global map with transaction metadata\n const globalMetadata: [PsbtGlobal, Maybe<Value>][] = [\n [PsbtGlobal.VERSION, this.valueFactory.fromInt32LE(2)],\n [PsbtGlobal.TX_VERSION, this.valueFactory.fromInt32LE(tx.version)],\n [\n PsbtGlobal.FALLBACK_LOCKTIME,\n this.valueFactory.fromUInt32LE(tx.locktime),\n ],\n [PsbtGlobal.INPUT_COUNT, this.valueFactory.fromVarint(tx.ins.length)],\n [PsbtGlobal.OUTPUT_COUNT, this.valueFactory.fromVarint(tx.outs.length)],\n ];\n let result = globalMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setGlobalValue(key, value));\n return success && maybeValue.isJust();\n }, true);\n\n // Update inputs metadata\n for (let i = 0; i < tx.ins.length; i++) {\n const inputMetadata: [PsbtIn, Maybe<Value>][] = [\n [PsbtIn.PREVIOUS_TXID, Just(new Value(tx.ins[i]!.hash))],\n [PsbtIn.OUTPUT_INDEX, this.valueFactory.fromUInt32LE(tx.ins[i]!.index)],\n [PsbtIn.SEQUENCE, this.valueFactory.fromUInt32LE(tx.ins[i]!.sequence)],\n ];\n result = inputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setInputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Update outputs metadata\n for (let i = 0; i < tx.outs.length; i++) {\n const outputMetadata: [PsbtOut, Maybe<Value>][] = [\n [PsbtOut.AMOUNT, this.valueFactory.fromInt64LE(tx.outs[i]!.value)],\n [PsbtOut.SCRIPT, Just(new Value(tx.outs[i]!.script))],\n ];\n result = outputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setOutputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Remove UNSIGNED_TX from the transaction since it's deprecated in V2\n psbt.globalMap.delete(new Key(PsbtGlobal.UNSIGNED_TX).toHexaString());\n return result\n ? Right(psbt)\n : Left(new Error(\"PSBT normalizer: failed to update the \u00A8PSBT\"));\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { Transaction } from \"bitcoinjs-lib\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Just, Left, Maybe, Right } from \"purify-ts\";\n\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport { Key } from \"@internal/psbt/model/Key\";\nimport { Psbt } from \"@internal/psbt/model/Psbt\";\nimport { PsbtGlobal, PsbtIn, PsbtOut } from \"@internal/psbt/model/Psbt\";\nimport { Value } from \"@internal/psbt/model/Value\";\nimport { type ValueFactory } from \"@internal/psbt/service/value/ValueFactory\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\n\n/**\n * Normalize a PSBTv2 from any input PSBT, according to specification:\n * https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki\n */\n@injectable()\nexport class DefaultPsbtV2Normalizer {\n constructor(\n @inject(psbtTypes.ValueParser) private valueParser: ValueParser,\n @inject(psbtTypes.ValueFactory) private valueFactory: ValueFactory,\n ) {}\n\n normalize(psbt: Psbt): Either<Error, Psbt> {\n // Get current PSBT version\n const version = psbt\n .getGlobalValue(PsbtGlobal.VERSION)\n .chain((value) => this.valueParser.getInt32LE(value.data))\n .orDefault(0);\n if (version === 2) {\n return Right(psbt);\n } else if (version !== 0) {\n return Left(new Error(\"PSBT normalizer: unsupported PSBT version\"));\n }\n\n // Get the unsigned transaction to extract its metadata\n const transaction = psbt\n .getGlobalValue(PsbtGlobal.UNSIGNED_TX)\n .toEither(\n new Error(\"PSBT normalizer: PSBTv0 should contain a transaction\"),\n )\n .chain((value) =>\n Either.encase(() =>\n Transaction.fromHex(bufferToHexaString(value.data, false)),\n ).mapLeft(\n (error) =>\n new Error(\n `PSBT normalizer: failed to parse transaction (${error})`,\n ),\n ),\n );\n if (transaction.isLeft()) {\n return transaction;\n }\n const tx = transaction.unsafeCoerce();\n\n // Update global map with transaction metadata\n const globalMetadata: [PsbtGlobal, Maybe<Value>][] = [\n [PsbtGlobal.VERSION, this.valueFactory.fromInt32LE(2)],\n [PsbtGlobal.TX_VERSION, this.valueFactory.fromInt32LE(tx.version)],\n [\n PsbtGlobal.FALLBACK_LOCKTIME,\n this.valueFactory.fromUInt32LE(tx.locktime),\n ],\n [PsbtGlobal.INPUT_COUNT, this.valueFactory.fromVarint(tx.ins.length)],\n [PsbtGlobal.OUTPUT_COUNT, this.valueFactory.fromVarint(tx.outs.length)],\n ];\n let result = globalMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setGlobalValue(key, value));\n return success && maybeValue.isJust();\n }, true);\n\n // Update inputs metadata\n for (let i = 0; i < tx.ins.length; i++) {\n const inputMetadata: [PsbtIn, Maybe<Value>][] = [\n [PsbtIn.PREVIOUS_TXID, Just(new Value(tx.ins[i]!.hash))],\n [PsbtIn.OUTPUT_INDEX, this.valueFactory.fromUInt32LE(tx.ins[i]!.index)],\n [PsbtIn.SEQUENCE, this.valueFactory.fromUInt32LE(tx.ins[i]!.sequence)],\n ];\n result = inputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setInputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Update outputs metadata\n for (let i = 0; i < tx.outs.length; i++) {\n const outputMetadata: [PsbtOut, Maybe<Value>][] = [\n [PsbtOut.AMOUNT, this.valueFactory.fromInt64LE(tx.outs[i]!.value)],\n [PsbtOut.SCRIPT, Just(new Value(tx.outs[i]!.script))],\n ];\n result = outputMetadata.reduce((success, [key, maybeValue]) => {\n maybeValue.ifJust((value) => psbt.setOutputValue(i, key, value));\n return success && maybeValue.isJust();\n }, result);\n }\n\n // Remove UNSIGNED_TX from the transaction since it's deprecated in V2\n psbt.globalMap.delete(new Key(PsbtGlobal.UNSIGNED_TX).toHexaString());\n return result\n ? Right(psbt)\n : Left(new Error(\"PSBT normalizer: failed to update the \u00A8PSBT\"));\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["bufferToHexaString", "Transaction", "inject", "injectable", "Either", "Just", "Left", "Right", "psbtTypes", "Key", "PsbtGlobal", "PsbtIn", "PsbtOut", "Value", "DefaultPsbtV2Normalizer", "valueParser", "valueFactory", "psbt", "version", "PsbtGlobal", "value", "Right", "Left", "transaction", "Either", "Transaction", "bufferToHexaString", "error", "tx", "result", "success", "key", "maybeValue", "i", "PsbtIn", "Just", "Value", "PsbtOut", "Key", "__decorateClass", "injectable", "__decorateParam", "inject", "psbtTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var f=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var s=(l,e,t,r)=>{for(var i=r>1?void 0:r?k(e,t):e,o=l.length-1,n;o>=0;o--)(n=l[o])&&(i=(r?n(e,t,i):n(i))||i);return r&&i&&f(e,t,i),i},a=(l,e)=>(t,r)=>e(t,r,l);import{bufferToHexaString as d}from"@ledgerhq/device-management-kit";import{inject as T,injectable as y}from"inversify";import{RegisteredWallet as u}from"../../../api/model/Wallet";import{merkleTreeTypes as h}from"../../merkle-tree/di/merkleTreeTypes";import{Wallet as B}from"../../wallet/model/Wallet";let m=class{constructor(e){this.merkleTreeBuilder=e}fromRegisteredWallet(e){const t=new TextEncoder,r=e.keys.map(n=>t.encode(n)),i=this.merkleTreeBuilder.build(r),o=t.encode(e.descriptorTemplate);return new B({name:e.name,descriptorTemplate:e.descriptorTemplate,keys:e.keys,hmac:e.hmac,keysTree:i,descriptorBuffer:o})}fromDefaultWallet(e,t,r){const n=`${`[${d(e).slice(2)}/${r.derivationPath}]`}${t}`,c="",p=new Uint8Array(32).fill(0);return this.fromRegisteredWallet(new u(c,r.template,[n],p))}};m=s([y(),a(0,T(h.MerkleTreeBuilder))],m);export{m as DefaultWalletBuilder};
1
+ var f=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var s=(l,e,t,r)=>{for(var i=r>1?void 0:r?k(e,t):e,o=l.length-1,n;o>=0;o--)(n=l[o])&&(i=(r?n(e,t,i):n(i))||i);return r&&i&&f(e,t,i),i},a=(l,e)=>(t,r)=>e(t,r,l);import{bufferToHexaString as d}from"@ledgerhq/device-management-kit";import{inject as T,injectable as y}from"inversify";import{RegisteredWallet as u}from"../../../api/model/Wallet";import{merkleTreeTypes as h}from"../../merkle-tree/di/merkleTreeTypes";import{Wallet as B}from"../../wallet/model/Wallet";let m=class{constructor(e){this.merkleTreeBuilder=e}fromRegisteredWallet(e){const t=new TextEncoder,r=e.keys.map(n=>t.encode(n)),i=this.merkleTreeBuilder.build(r),o=t.encode(e.descriptorTemplate);return new B({name:e.name,descriptorTemplate:e.descriptorTemplate,keys:e.keys,hmac:e.hmac,keysTree:i,descriptorBuffer:o})}fromDefaultWallet(e,t,r){const n=`${`[${d(e,!1)}/${r.derivationPath}]`}${t}`,c="",p=new Uint8Array(32).fill(0);return this.fromRegisteredWallet(new u(c,r.template,[n],p))}};m=s([y(),a(0,T(h.MerkleTreeBuilder))],m);export{m as DefaultWalletBuilder};
2
2
  //# sourceMappingURL=DefaultWalletBuilder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/wallet/service/DefaultWalletBuilder.ts"],
4
- "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { DefaultWallet, RegisteredWallet } from \"@api/model/Wallet\";\nimport { merkleTreeTypes } from \"@internal/merkle-tree/di/merkleTreeTypes\";\nimport type { MerkleTreeBuilder } from \"@internal/merkle-tree/service/MerkleTreeBuilder\";\nimport { Wallet } from \"@internal/wallet/model/Wallet\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\n\n@injectable()\nexport class DefaultWalletBuilder implements WalletBuilder {\n constructor(\n @inject(merkleTreeTypes.MerkleTreeBuilder)\n private merkleTreeBuilder: MerkleTreeBuilder,\n ) {}\n\n fromRegisteredWallet(registeredWallet: RegisteredWallet): Wallet {\n const encoder = new TextEncoder();\n const keyBuffers = registeredWallet.keys.map((key) => encoder.encode(key));\n const keysTree = this.merkleTreeBuilder.build(keyBuffers);\n const descriptorBuffer = encoder.encode(\n registeredWallet.descriptorTemplate,\n );\n return new Wallet({\n name: registeredWallet.name,\n descriptorTemplate: registeredWallet.descriptorTemplate,\n keys: registeredWallet.keys,\n hmac: registeredWallet.hmac,\n keysTree: keysTree,\n descriptorBuffer,\n });\n }\n\n fromDefaultWallet(\n masterFingerprint: Uint8Array,\n extendedPublicKey: string,\n wallet: DefaultWallet,\n ): Wallet {\n // For internal keys, the xpub should be put after key origin informations\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md#keys-information-vector\n const hexMasterFingerprint = bufferToHexaString(masterFingerprint).slice(2);\n const keyOrigin = `[${hexMasterFingerprint}/${wallet.derivationPath}]`;\n const key = `${keyOrigin}${extendedPublicKey}`;\n // Empty name for default wallets\n const name = \"\";\n // Default wallets hmac should be exactly 32 zeros as described here:\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md#get_wallet_address\n const hmac = new Uint8Array(32).fill(0);\n\n return this.fromRegisteredWallet(\n new RegisteredWallet(name, wallet.template, [key], hmac),\n );\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,sBAAAA,MAA0B,kCACnC,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAwB,oBAAAC,MAAwB,oBAChD,OAAS,mBAAAC,MAAuB,2CAEhC,OAAS,UAAAC,MAAc,gCAIhB,IAAMC,EAAN,KAAoD,CACzD,YAEUC,EACR,CADQ,uBAAAA,CACP,CAEH,qBAAqBC,EAA4C,CAC/D,MAAMC,EAAU,IAAI,YACdC,EAAaF,EAAiB,KAAK,IAAKG,GAAQF,EAAQ,OAAOE,CAAG,CAAC,EACnEC,EAAW,KAAK,kBAAkB,MAAMF,CAAU,EAClDG,EAAmBJ,EAAQ,OAC/BD,EAAiB,kBACnB,EACA,OAAO,IAAIM,EAAO,CAChB,KAAMN,EAAiB,KACvB,mBAAoBA,EAAiB,mBACrC,KAAMA,EAAiB,KACvB,KAAMA,EAAiB,KACvB,SAAUI,EACV,iBAAAC,CACF,CAAC,CACH,CAEA,kBACEE,EACAC,EACAC,EACQ,CAKR,MAAMN,EAAM,GADM,IADWO,EAAmBH,CAAiB,EAAE,MAAM,CAAC,CAChC,IAAIE,EAAO,cAAc,GAC3C,GAAGD,CAAiB,GAEtCG,EAAO,GAGPC,EAAO,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC,EAEtC,OAAO,KAAK,qBACV,IAAIC,EAAiBF,EAAMF,EAAO,SAAU,CAACN,CAAG,EAAGS,CAAI,CACzD,CACF,CACF,EA3Cad,EAANgB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAgB,iBAAiB,IAFhCpB",
4
+ "sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { DefaultWallet, RegisteredWallet } from \"@api/model/Wallet\";\nimport { merkleTreeTypes } from \"@internal/merkle-tree/di/merkleTreeTypes\";\nimport type { MerkleTreeBuilder } from \"@internal/merkle-tree/service/MerkleTreeBuilder\";\nimport { Wallet } from \"@internal/wallet/model/Wallet\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\n\n@injectable()\nexport class DefaultWalletBuilder implements WalletBuilder {\n constructor(\n @inject(merkleTreeTypes.MerkleTreeBuilder)\n private merkleTreeBuilder: MerkleTreeBuilder,\n ) {}\n\n fromRegisteredWallet(registeredWallet: RegisteredWallet): Wallet {\n const encoder = new TextEncoder();\n const keyBuffers = registeredWallet.keys.map((key) => encoder.encode(key));\n const keysTree = this.merkleTreeBuilder.build(keyBuffers);\n const descriptorBuffer = encoder.encode(\n registeredWallet.descriptorTemplate,\n );\n return new Wallet({\n name: registeredWallet.name,\n descriptorTemplate: registeredWallet.descriptorTemplate,\n keys: registeredWallet.keys,\n hmac: registeredWallet.hmac,\n keysTree: keysTree,\n descriptorBuffer,\n });\n }\n\n fromDefaultWallet(\n masterFingerprint: Uint8Array,\n extendedPublicKey: string,\n wallet: DefaultWallet,\n ): Wallet {\n // For internal keys, the xpub should be put after key origin informations\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md#keys-information-vector\n const hexMasterFingerprint = bufferToHexaString(masterFingerprint, false);\n const keyOrigin = `[${hexMasterFingerprint}/${wallet.derivationPath}]`;\n const key = `${keyOrigin}${extendedPublicKey}`;\n // Empty name for default wallets\n const name = \"\";\n // Default wallets hmac should be exactly 32 zeros as described here:\n // https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md#get_wallet_address\n const hmac = new Uint8Array(32).fill(0);\n\n return this.fromRegisteredWallet(\n new RegisteredWallet(name, wallet.template, [key], hmac),\n );\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,sBAAAA,MAA0B,kCACnC,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAwB,oBAAAC,MAAwB,oBAChD,OAAS,mBAAAC,MAAuB,2CAEhC,OAAS,UAAAC,MAAc,gCAIhB,IAAMC,EAAN,KAAoD,CACzD,YAEUC,EACR,CADQ,uBAAAA,CACP,CAEH,qBAAqBC,EAA4C,CAC/D,MAAMC,EAAU,IAAI,YACdC,EAAaF,EAAiB,KAAK,IAAKG,GAAQF,EAAQ,OAAOE,CAAG,CAAC,EACnEC,EAAW,KAAK,kBAAkB,MAAMF,CAAU,EAClDG,EAAmBJ,EAAQ,OAC/BD,EAAiB,kBACnB,EACA,OAAO,IAAIM,EAAO,CAChB,KAAMN,EAAiB,KACvB,mBAAoBA,EAAiB,mBACrC,KAAMA,EAAiB,KACvB,KAAMA,EAAiB,KACvB,SAAUI,EACV,iBAAAC,CACF,CAAC,CACH,CAEA,kBACEE,EACAC,EACAC,EACQ,CAKR,MAAMN,EAAM,GADM,IADWO,EAAmBH,EAAmB,EAAK,CAC9B,IAAIE,EAAO,cAAc,GAC3C,GAAGD,CAAiB,GAEtCG,EAAO,GAGPC,EAAO,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC,EAEtC,OAAO,KAAK,qBACV,IAAIC,EAAiBF,EAAMF,EAAO,SAAU,CAACN,CAAG,EAAGS,CAAI,CACzD,CACF,CACF,EA3Cad,EAANgB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAgB,iBAAiB,IAFhCpB",
6
6
  "names": ["bufferToHexaString", "inject", "injectable", "RegisteredWallet", "merkleTreeTypes", "Wallet", "DefaultWalletBuilder", "merkleTreeBuilder", "registeredWallet", "encoder", "keyBuffers", "key", "keysTree", "descriptorBuffer", "Wallet", "masterFingerprint", "extendedPublicKey", "wallet", "bufferToHexaString", "name", "hmac", "RegisteredWallet", "__decorateClass", "injectable", "__decorateParam", "inject", "merkleTreeTypes"]
7
7
  }