@ledgerhq/device-signer-kit-bitcoin 0.0.0-intent-queue-6-20251114101759 → 0.0.0-intent-queue-6-20251204103625
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.
- package/lib/cjs/internal/psbt/service/key-pair/DefaultKeyPairSerializer.test.js +1 -1
- package/lib/cjs/internal/psbt/service/key-pair/DefaultKeyPairSerializer.test.js.map +1 -1
- package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtSerializer.js.map +1 -1
- package/lib/cjs/package.json +43 -39
- package/lib/esm/internal/psbt/service/key-pair/DefaultKeyPairSerializer.test.js +1 -1
- package/lib/esm/internal/psbt/service/key-pair/DefaultKeyPairSerializer.test.js.map +1 -1
- package/lib/esm/internal/psbt/service/psbt/DefaultPsbtSerializer.js.map +1 -1
- package/lib/esm/package.json +43 -39
- package/lib/types/internal/psbt/service/psbt/DefaultPsbtSerializer.d.ts +2 -2
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +38 -34
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var t=require("@ledgerhq/device-management-kit"),i=require("purify-ts"),s=require("../../../psbt/service/key/DefaultKeySerializer"),n=require("../../../psbt/service/value/DefaultValueParser"),u=require("./DefaultKeyPairSerializer");describe("DefaultKeyPairSerializer",()=>{let r;const l=new n.DefaultValueParser;beforeEach(()=>{const e=new s.DefaultKeySerializer;r=new u.DefaultKeyPairSerializer(e)}),it("Invalid key",()=>{const e=r.deserialize(new t.ByteArrayParser(Uint8Array.from([])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid valueLen",()=>{const e=r.deserialize(new t.ByteArrayParser(Uint8Array.from([7,42,0,1,2,3,4,5])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid value",()=>{const e=r.deserialize(new t.ByteArrayParser(Uint8Array.from([7,42,0,1,2,3,4,5,2,7])));expect(e.isJust()).toStrictEqual(!1)}),it("Serialize and deserialize a
|
|
1
|
+
"use strict";var t=require("@ledgerhq/device-management-kit"),i=require("purify-ts"),s=require("../../../psbt/service/key/DefaultKeySerializer"),n=require("../../../psbt/service/value/DefaultValueParser"),u=require("./DefaultKeyPairSerializer");describe("DefaultKeyPairSerializer",()=>{let r;const l=new n.DefaultValueParser;beforeEach(()=>{const e=new s.DefaultKeySerializer;r=new u.DefaultKeyPairSerializer(e)}),it("Invalid key",()=>{const e=r.deserialize(new t.ByteArrayParser(Uint8Array.from([])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid valueLen",()=>{const e=r.deserialize(new t.ByteArrayParser(Uint8Array.from([7,42,0,1,2,3,4,5])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid value",()=>{const e=r.deserialize(new t.ByteArrayParser(Uint8Array.from([7,42,0,1,2,3,4,5,2,7])));expect(e.isJust()).toStrictEqual(!1)}),it("Serialize and deserialize a keyPair",()=>{const e=new t.ByteArrayParser(Uint8Array.from([7,42,0,1,2,3,4,5,5,254,145,69,220,0,42])),c=r.deserialize(e);expect(c.isJust()).toStrictEqual(!0);const a=c.unsafeCoerce();expect(a.key.keyType).toStrictEqual(42),expect(a.key.keyData).toStrictEqual(Uint8Array.from([0,1,2,3,4,5])),expect(a.value.data).toStrictEqual(Uint8Array.from([254,145,69,220,0])),expect(l.getInt32LE(a.value.data)).toStrictEqual((0,i.Just)(-599420418)),expect(l.getVarint(a.value.data)).toStrictEqual((0,i.Just)(14435729)),expect(e.extract8BitUInt()).toStrictEqual(42);const o=new t.ByteArrayBuilder;r.serialize(o,a),expect(o.build()).toStrictEqual(Uint8Array.from([7,42,0,1,2,3,4,5,5,254,145,69,220,0]))})});
|
|
2
2
|
//# sourceMappingURL=DefaultKeyPairSerializer.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/psbt/service/key-pair/DefaultKeyPairSerializer.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just } from \"purify-ts\";\n\nimport { DefaultKeySerializer } from \"@internal/psbt/service/key/DefaultKeySerializer\";\nimport { DefaultValueParser } from \"@internal/psbt/service/value/DefaultValueParser\";\n\nimport { DefaultKeyPairSerializer } from \"./DefaultKeyPairSerializer\";\n\ndescribe(\"DefaultKeyPairSerializer\", () => {\n let service: DefaultKeyPairSerializer;\n const valueParser = new DefaultValueParser();\n\n beforeEach(() => {\n const keySerializerService = new DefaultKeySerializer();\n service = new DefaultKeyPairSerializer(keySerializerService);\n });\n\n it(\"Invalid key\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid valueLen\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid value\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5, 2, 7])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Serialize and deserialize a
|
|
4
|
+
"sourcesContent": ["import {\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just } from \"purify-ts\";\n\nimport { DefaultKeySerializer } from \"@internal/psbt/service/key/DefaultKeySerializer\";\nimport { DefaultValueParser } from \"@internal/psbt/service/value/DefaultValueParser\";\n\nimport { DefaultKeyPairSerializer } from \"./DefaultKeyPairSerializer\";\n\ndescribe(\"DefaultKeyPairSerializer\", () => {\n let service: DefaultKeyPairSerializer;\n const valueParser = new DefaultValueParser();\n\n beforeEach(() => {\n const keySerializerService = new DefaultKeySerializer();\n service = new DefaultKeyPairSerializer(keySerializerService);\n });\n\n it(\"Invalid key\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid valueLen\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid value\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5, 2, 7])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Serialize and deserialize a keyPair\", () => {\n // Deserialize a valid keyPair\n const parser = new ByteArrayParser(\n Uint8Array.from([\n 7, 42, 0, 1, 2, 3, 4, 5, 5, 0xfe, 0x91, 0x45, 0xdc, 0x00, 42,\n ]),\n );\n\n const maybeKeyPair = service.deserialize(parser);\n expect(maybeKeyPair.isJust()).toStrictEqual(true);\n const keyPair = maybeKeyPair.unsafeCoerce();\n expect(keyPair.key.keyType).toStrictEqual(42);\n expect(keyPair.key.keyData).toStrictEqual(\n Uint8Array.from([0, 1, 2, 3, 4, 5]),\n );\n expect(keyPair.value.data).toStrictEqual(\n Uint8Array.from([0xfe, 0x91, 0x45, 0xdc, 0x00]),\n );\n expect(valueParser.getInt32LE(keyPair.value.data)).toStrictEqual(\n Just(-599420418),\n );\n expect(valueParser.getVarint(keyPair.value.data)).toStrictEqual(\n Just(0xdc4591),\n );\n expect(parser.extract8BitUInt()).toStrictEqual(42);\n\n // Re-serialize\n const builder = new ByteArrayBuilder();\n service.serialize(builder, keyPair);\n expect(builder.build()).toStrictEqual(\n Uint8Array.from([\n 7, 42, 0, 1, 2, 3, 4, 5, 5, 0xfe, 0x91, 0x45, 0xdc, 0x00,\n ]),\n );\n });\n});\n"],
|
|
5
5
|
"mappings": "aAAA,IAAAA,EAGO,2CACPC,EAAqB,qBAErBC,EAAqC,2DACrCC,EAAmC,2DAEnCC,EAAyC,sCAEzC,SAAS,2BAA4B,IAAM,CACzC,IAAIC,EACJ,MAAMC,EAAc,IAAI,qBAExB,WAAW,IAAM,CACf,MAAMC,EAAuB,IAAI,uBACjCF,EAAU,IAAI,2BAAyBE,CAAoB,CAC7D,CAAC,EAED,GAAG,cAAe,IAAM,CACtB,MAAMC,EAAUH,EAAQ,YACtB,IAAI,kBAAgB,WAAW,KAAK,CAAC,CAAC,CAAC,CACzC,EACA,OAAOG,EAAQ,OAAO,CAAC,EAAE,cAAc,EAAK,CAC9C,CAAC,EAED,GAAG,mBAAoB,IAAM,CAC3B,MAAMA,EAAUH,EAAQ,YACtB,IAAI,kBAAgB,WAAW,KAAK,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CAChE,EACA,OAAOG,EAAQ,OAAO,CAAC,EAAE,cAAc,EAAK,CAC9C,CAAC,EAED,GAAG,gBAAiB,IAAM,CACxB,MAAMA,EAAUH,EAAQ,YACtB,IAAI,kBAAgB,WAAW,KAAK,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CACtE,EACA,OAAOG,EAAQ,OAAO,CAAC,EAAE,cAAc,EAAK,CAC9C,CAAC,EAED,GAAG,sCAAuC,IAAM,CAE9C,MAAMC,EAAS,IAAI,kBACjB,WAAW,KAAK,CACd,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAM,IAAM,GAAM,IAAM,EAAM,EAC5D,CAAC,CACH,EAEMC,EAAeL,EAAQ,YAAYI,CAAM,EAC/C,OAAOC,EAAa,OAAO,CAAC,EAAE,cAAc,EAAI,EAChD,MAAMF,EAAUE,EAAa,aAAa,EAC1C,OAAOF,EAAQ,IAAI,OAAO,EAAE,cAAc,EAAE,EAC5C,OAAOA,EAAQ,IAAI,OAAO,EAAE,cAC1B,WAAW,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CACpC,EACA,OAAOA,EAAQ,MAAM,IAAI,EAAE,cACzB,WAAW,KAAK,CAAC,IAAM,IAAM,GAAM,IAAM,CAAI,CAAC,CAChD,EACA,OAAOF,EAAY,WAAWE,EAAQ,MAAM,IAAI,CAAC,EAAE,iBACjD,QAAK,UAAU,CACjB,EACA,OAAOF,EAAY,UAAUE,EAAQ,MAAM,IAAI,CAAC,EAAE,iBAChD,QAAK,QAAQ,CACf,EACA,OAAOC,EAAO,gBAAgB,CAAC,EAAE,cAAc,EAAE,EAGjD,MAAME,EAAU,IAAI,mBACpBN,EAAQ,UAAUM,EAASH,CAAO,EAClC,OAAOG,EAAQ,MAAM,CAAC,EAAE,cACtB,WAAW,KAAK,CACd,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAM,IAAM,GAAM,IAAM,CACtD,CAAC,CACH,CACF,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_device_management_kit", "import_purify_ts", "import_DefaultKeySerializer", "import_DefaultValueParser", "import_DefaultKeyPairSerializer", "service", "valueParser", "keySerializerService", "keyPair", "parser", "maybeKeyPair", "builder"]
|
|
7
7
|
}
|
|
@@ -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>: <
|
|
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
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
|
}
|
package/lib/cjs/package.json
CHANGED
|
@@ -1,63 +1,67 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
"dependencies": {
|
|
3
|
+
"@types/crypto-js": "catalog:",
|
|
4
|
+
"crypto-js": "catalog:",
|
|
5
|
+
"inversify": "catalog:",
|
|
6
|
+
"purify-ts": "catalog:",
|
|
7
|
+
"reflect-metadata": "catalog:",
|
|
8
|
+
"xstate": "catalog:"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@ledgerhq/device-management-kit": "workspace:^",
|
|
12
|
+
"@ledgerhq/eslint-config-dsdk": "workspace:^",
|
|
13
|
+
"@ledgerhq/ldmk-tool": "workspace:^",
|
|
14
|
+
"@ledgerhq/prettier-config-dsdk": "workspace:^",
|
|
15
|
+
"@ledgerhq/signer-utils": "workspace:^",
|
|
16
|
+
"@ledgerhq/tsconfig-dsdk": "workspace:^",
|
|
17
|
+
"@ledgerhq/vitest-config-dmk": "workspace:^",
|
|
18
|
+
"bitcoinjs-lib": "catalog:",
|
|
19
|
+
"rxjs": "catalog:",
|
|
20
|
+
"ts-node": "catalog:"
|
|
21
|
+
},
|
|
8
22
|
"exports": {
|
|
9
23
|
".": {
|
|
10
|
-
"types": "./lib/types/index.d.ts",
|
|
11
24
|
"import": "./lib/esm/index.js",
|
|
12
|
-
"require": "./lib/cjs/index.js"
|
|
25
|
+
"require": "./lib/cjs/index.js",
|
|
26
|
+
"types": "./lib/types/index.d.ts"
|
|
13
27
|
},
|
|
14
28
|
"./*": {
|
|
15
|
-
"types": "./lib/types/*",
|
|
16
29
|
"import": "./lib/esm/*",
|
|
17
|
-
"require": "./lib/cjs/*"
|
|
30
|
+
"require": "./lib/cjs/*",
|
|
31
|
+
"types": "./lib/types/*"
|
|
18
32
|
}
|
|
19
33
|
},
|
|
20
34
|
"files": [
|
|
21
35
|
"./lib"
|
|
22
36
|
],
|
|
37
|
+
"license": "Apache-2.0",
|
|
38
|
+
"main": "lib/cjs/index.js",
|
|
39
|
+
"name": "@ledgerhq/device-signer-kit-bitcoin",
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@ledgerhq/device-management-kit": "workspace:^",
|
|
42
|
+
"bitcoinjs-lib": "^6.1.6"
|
|
43
|
+
},
|
|
44
|
+
"private": false,
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/LedgerHQ/device-sdk-ts.git"
|
|
48
|
+
},
|
|
23
49
|
"scripts": {
|
|
24
|
-
"prebuild": "rimraf lib",
|
|
25
50
|
"build": "pnpm ldmk-tool build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
26
51
|
"dev": "concurrently \"pnpm watch:builds\" \"pnpm watch:types\"",
|
|
27
|
-
"watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
28
|
-
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\"",
|
|
29
52
|
"lint": "eslint",
|
|
30
53
|
"lint:fix": "pnpm lint --fix",
|
|
31
54
|
"postpack": "find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",
|
|
55
|
+
"prebuild": "rimraf lib",
|
|
32
56
|
"prettier": "prettier . --check",
|
|
33
57
|
"prettier:fix": "prettier . --write",
|
|
34
|
-
"typecheck": "tsc --noEmit",
|
|
35
58
|
"test": "vitest run",
|
|
59
|
+
"test:coverage": "vitest run --coverage",
|
|
36
60
|
"test:watch": "vitest",
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"@types/crypto-js": "catalog:",
|
|
41
|
-
"crypto-js": "catalog:",
|
|
42
|
-
"inversify": "catalog:",
|
|
43
|
-
"purify-ts": "catalog:",
|
|
44
|
-
"reflect-metadata": "catalog:",
|
|
45
|
-
"xstate": "catalog:"
|
|
46
|
-
},
|
|
47
|
-
"devDependencies": {
|
|
48
|
-
"@ledgerhq/device-management-kit": "workspace:*",
|
|
49
|
-
"@ledgerhq/ldmk-tool": "workspace:*",
|
|
50
|
-
"@ledgerhq/eslint-config-dsdk": "workspace:*",
|
|
51
|
-
"@ledgerhq/prettier-config-dsdk": "workspace:*",
|
|
52
|
-
"@ledgerhq/signer-utils": "workspace:*",
|
|
53
|
-
"@ledgerhq/tsconfig-dsdk": "workspace:*",
|
|
54
|
-
"@ledgerhq/vitest-config-dmk": "workspace:*",
|
|
55
|
-
"bitcoinjs-lib": "catalog:",
|
|
56
|
-
"rxjs": "catalog:",
|
|
57
|
-
"ts-node": "catalog:"
|
|
61
|
+
"typecheck": "tsc --noEmit",
|
|
62
|
+
"watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
63
|
+
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
58
64
|
},
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"bitcoinjs-lib": "^6.1.6"
|
|
62
|
-
}
|
|
65
|
+
"types": "lib/cjs/index.d.ts",
|
|
66
|
+
"version": "0.0.0-intent-queue-6-20251204103625"
|
|
63
67
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ByteArrayBuilder as s,ByteArrayParser as a}from"@ledgerhq/device-management-kit";import{Just as o}from"purify-ts";import{DefaultKeySerializer as n}from"../../../psbt/service/key/DefaultKeySerializer";import{DefaultValueParser as u}from"../../../psbt/service/value/DefaultValueParser";import{DefaultKeyPairSerializer as y}from"./DefaultKeyPairSerializer";describe("DefaultKeyPairSerializer",()=>{let t;const i=new u;beforeEach(()=>{const e=new n;t=new y(e)}),it("Invalid key",()=>{const e=t.deserialize(new a(Uint8Array.from([])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid valueLen",()=>{const e=t.deserialize(new a(Uint8Array.from([7,42,0,1,2,3,4,5])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid value",()=>{const e=t.deserialize(new a(Uint8Array.from([7,42,0,1,2,3,4,5,2,7])));expect(e.isJust()).toStrictEqual(!1)}),it("Serialize and deserialize a
|
|
1
|
+
import{ByteArrayBuilder as s,ByteArrayParser as a}from"@ledgerhq/device-management-kit";import{Just as o}from"purify-ts";import{DefaultKeySerializer as n}from"../../../psbt/service/key/DefaultKeySerializer";import{DefaultValueParser as u}from"../../../psbt/service/value/DefaultValueParser";import{DefaultKeyPairSerializer as y}from"./DefaultKeyPairSerializer";describe("DefaultKeyPairSerializer",()=>{let t;const i=new u;beforeEach(()=>{const e=new n;t=new y(e)}),it("Invalid key",()=>{const e=t.deserialize(new a(Uint8Array.from([])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid valueLen",()=>{const e=t.deserialize(new a(Uint8Array.from([7,42,0,1,2,3,4,5])));expect(e.isJust()).toStrictEqual(!1)}),it("Invalid value",()=>{const e=t.deserialize(new a(Uint8Array.from([7,42,0,1,2,3,4,5,2,7])));expect(e.isJust()).toStrictEqual(!1)}),it("Serialize and deserialize a keyPair",()=>{const e=new a(Uint8Array.from([7,42,0,1,2,3,4,5,5,254,145,69,220,0,42])),l=t.deserialize(e);expect(l.isJust()).toStrictEqual(!0);const r=l.unsafeCoerce();expect(r.key.keyType).toStrictEqual(42),expect(r.key.keyData).toStrictEqual(Uint8Array.from([0,1,2,3,4,5])),expect(r.value.data).toStrictEqual(Uint8Array.from([254,145,69,220,0])),expect(i.getInt32LE(r.value.data)).toStrictEqual(o(-599420418)),expect(i.getVarint(r.value.data)).toStrictEqual(o(14435729)),expect(e.extract8BitUInt()).toStrictEqual(42);const c=new s;t.serialize(c,r),expect(c.build()).toStrictEqual(Uint8Array.from([7,42,0,1,2,3,4,5,5,254,145,69,220,0]))})});
|
|
2
2
|
//# sourceMappingURL=DefaultKeyPairSerializer.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/psbt/service/key-pair/DefaultKeyPairSerializer.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just } from \"purify-ts\";\n\nimport { DefaultKeySerializer } from \"@internal/psbt/service/key/DefaultKeySerializer\";\nimport { DefaultValueParser } from \"@internal/psbt/service/value/DefaultValueParser\";\n\nimport { DefaultKeyPairSerializer } from \"./DefaultKeyPairSerializer\";\n\ndescribe(\"DefaultKeyPairSerializer\", () => {\n let service: DefaultKeyPairSerializer;\n const valueParser = new DefaultValueParser();\n\n beforeEach(() => {\n const keySerializerService = new DefaultKeySerializer();\n service = new DefaultKeyPairSerializer(keySerializerService);\n });\n\n it(\"Invalid key\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid valueLen\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid value\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5, 2, 7])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Serialize and deserialize a
|
|
4
|
+
"sourcesContent": ["import {\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just } from \"purify-ts\";\n\nimport { DefaultKeySerializer } from \"@internal/psbt/service/key/DefaultKeySerializer\";\nimport { DefaultValueParser } from \"@internal/psbt/service/value/DefaultValueParser\";\n\nimport { DefaultKeyPairSerializer } from \"./DefaultKeyPairSerializer\";\n\ndescribe(\"DefaultKeyPairSerializer\", () => {\n let service: DefaultKeyPairSerializer;\n const valueParser = new DefaultValueParser();\n\n beforeEach(() => {\n const keySerializerService = new DefaultKeySerializer();\n service = new DefaultKeyPairSerializer(keySerializerService);\n });\n\n it(\"Invalid key\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid valueLen\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Invalid value\", () => {\n const keyPair = service.deserialize(\n new ByteArrayParser(Uint8Array.from([7, 42, 0, 1, 2, 3, 4, 5, 2, 7])),\n );\n expect(keyPair.isJust()).toStrictEqual(false);\n });\n\n it(\"Serialize and deserialize a keyPair\", () => {\n // Deserialize a valid keyPair\n const parser = new ByteArrayParser(\n Uint8Array.from([\n 7, 42, 0, 1, 2, 3, 4, 5, 5, 0xfe, 0x91, 0x45, 0xdc, 0x00, 42,\n ]),\n );\n\n const maybeKeyPair = service.deserialize(parser);\n expect(maybeKeyPair.isJust()).toStrictEqual(true);\n const keyPair = maybeKeyPair.unsafeCoerce();\n expect(keyPair.key.keyType).toStrictEqual(42);\n expect(keyPair.key.keyData).toStrictEqual(\n Uint8Array.from([0, 1, 2, 3, 4, 5]),\n );\n expect(keyPair.value.data).toStrictEqual(\n Uint8Array.from([0xfe, 0x91, 0x45, 0xdc, 0x00]),\n );\n expect(valueParser.getInt32LE(keyPair.value.data)).toStrictEqual(\n Just(-599420418),\n );\n expect(valueParser.getVarint(keyPair.value.data)).toStrictEqual(\n Just(0xdc4591),\n );\n expect(parser.extract8BitUInt()).toStrictEqual(42);\n\n // Re-serialize\n const builder = new ByteArrayBuilder();\n service.serialize(builder, keyPair);\n expect(builder.build()).toStrictEqual(\n Uint8Array.from([\n 7, 42, 0, 1, 2, 3, 4, 5, 5, 0xfe, 0x91, 0x45, 0xdc, 0x00,\n ]),\n );\n });\n});\n"],
|
|
5
5
|
"mappings": "AAAA,OACE,oBAAAA,EACA,mBAAAC,MACK,kCACP,OAAS,QAAAC,MAAY,YAErB,OAAS,wBAAAC,MAA4B,kDACrC,OAAS,sBAAAC,MAA0B,kDAEnC,OAAS,4BAAAC,MAAgC,6BAEzC,SAAS,2BAA4B,IAAM,CACzC,IAAIC,EACJ,MAAMC,EAAc,IAAIH,EAExB,WAAW,IAAM,CACf,MAAMI,EAAuB,IAAIL,EACjCG,EAAU,IAAID,EAAyBG,CAAoB,CAC7D,CAAC,EAED,GAAG,cAAe,IAAM,CACtB,MAAMC,EAAUH,EAAQ,YACtB,IAAIL,EAAgB,WAAW,KAAK,CAAC,CAAC,CAAC,CACzC,EACA,OAAOQ,EAAQ,OAAO,CAAC,EAAE,cAAc,EAAK,CAC9C,CAAC,EAED,GAAG,mBAAoB,IAAM,CAC3B,MAAMA,EAAUH,EAAQ,YACtB,IAAIL,EAAgB,WAAW,KAAK,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CAChE,EACA,OAAOQ,EAAQ,OAAO,CAAC,EAAE,cAAc,EAAK,CAC9C,CAAC,EAED,GAAG,gBAAiB,IAAM,CACxB,MAAMA,EAAUH,EAAQ,YACtB,IAAIL,EAAgB,WAAW,KAAK,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,CACtE,EACA,OAAOQ,EAAQ,OAAO,CAAC,EAAE,cAAc,EAAK,CAC9C,CAAC,EAED,GAAG,sCAAuC,IAAM,CAE9C,MAAMC,EAAS,IAAIT,EACjB,WAAW,KAAK,CACd,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAM,IAAM,GAAM,IAAM,EAAM,EAC5D,CAAC,CACH,EAEMU,EAAeL,EAAQ,YAAYI,CAAM,EAC/C,OAAOC,EAAa,OAAO,CAAC,EAAE,cAAc,EAAI,EAChD,MAAMF,EAAUE,EAAa,aAAa,EAC1C,OAAOF,EAAQ,IAAI,OAAO,EAAE,cAAc,EAAE,EAC5C,OAAOA,EAAQ,IAAI,OAAO,EAAE,cAC1B,WAAW,KAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CACpC,EACA,OAAOA,EAAQ,MAAM,IAAI,EAAE,cACzB,WAAW,KAAK,CAAC,IAAM,IAAM,GAAM,IAAM,CAAI,CAAC,CAChD,EACA,OAAOF,EAAY,WAAWE,EAAQ,MAAM,IAAI,CAAC,EAAE,cACjDP,EAAK,UAAU,CACjB,EACA,OAAOK,EAAY,UAAUE,EAAQ,MAAM,IAAI,CAAC,EAAE,cAChDP,EAAK,QAAQ,CACf,EACA,OAAOQ,EAAO,gBAAgB,CAAC,EAAE,cAAc,EAAE,EAGjD,MAAME,EAAU,IAAIZ,EACpBM,EAAQ,UAAUM,EAASH,CAAO,EAClC,OAAOG,EAAQ,MAAM,CAAC,EAAE,cACtB,WAAW,KAAK,CACd,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAM,IAAM,GAAM,IAAM,CACtD,CAAC,CACH,CACF,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["ByteArrayBuilder", "ByteArrayParser", "Just", "DefaultKeySerializer", "DefaultValueParser", "DefaultKeyPairSerializer", "service", "valueParser", "keySerializerService", "keyPair", "parser", "maybeKeyPair", "builder"]
|
|
7
7
|
}
|
|
@@ -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>: <
|
|
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
5
|
"mappings": "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",
|
|
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
|
}
|
package/lib/esm/package.json
CHANGED
|
@@ -1,63 +1,67 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
"dependencies": {
|
|
3
|
+
"@types/crypto-js": "catalog:",
|
|
4
|
+
"crypto-js": "catalog:",
|
|
5
|
+
"inversify": "catalog:",
|
|
6
|
+
"purify-ts": "catalog:",
|
|
7
|
+
"reflect-metadata": "catalog:",
|
|
8
|
+
"xstate": "catalog:"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@ledgerhq/device-management-kit": "workspace:^",
|
|
12
|
+
"@ledgerhq/eslint-config-dsdk": "workspace:^",
|
|
13
|
+
"@ledgerhq/ldmk-tool": "workspace:^",
|
|
14
|
+
"@ledgerhq/prettier-config-dsdk": "workspace:^",
|
|
15
|
+
"@ledgerhq/signer-utils": "workspace:^",
|
|
16
|
+
"@ledgerhq/tsconfig-dsdk": "workspace:^",
|
|
17
|
+
"@ledgerhq/vitest-config-dmk": "workspace:^",
|
|
18
|
+
"bitcoinjs-lib": "catalog:",
|
|
19
|
+
"rxjs": "catalog:",
|
|
20
|
+
"ts-node": "catalog:"
|
|
21
|
+
},
|
|
8
22
|
"exports": {
|
|
9
23
|
".": {
|
|
10
|
-
"types": "./lib/types/index.d.ts",
|
|
11
24
|
"import": "./lib/esm/index.js",
|
|
12
|
-
"require": "./lib/cjs/index.js"
|
|
25
|
+
"require": "./lib/cjs/index.js",
|
|
26
|
+
"types": "./lib/types/index.d.ts"
|
|
13
27
|
},
|
|
14
28
|
"./*": {
|
|
15
|
-
"types": "./lib/types/*",
|
|
16
29
|
"import": "./lib/esm/*",
|
|
17
|
-
"require": "./lib/cjs/*"
|
|
30
|
+
"require": "./lib/cjs/*",
|
|
31
|
+
"types": "./lib/types/*"
|
|
18
32
|
}
|
|
19
33
|
},
|
|
20
34
|
"files": [
|
|
21
35
|
"./lib"
|
|
22
36
|
],
|
|
37
|
+
"license": "Apache-2.0",
|
|
38
|
+
"main": "lib/cjs/index.js",
|
|
39
|
+
"name": "@ledgerhq/device-signer-kit-bitcoin",
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@ledgerhq/device-management-kit": "workspace:^",
|
|
42
|
+
"bitcoinjs-lib": "^6.1.6"
|
|
43
|
+
},
|
|
44
|
+
"private": false,
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/LedgerHQ/device-sdk-ts.git"
|
|
48
|
+
},
|
|
23
49
|
"scripts": {
|
|
24
|
-
"prebuild": "rimraf lib",
|
|
25
50
|
"build": "pnpm ldmk-tool build --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
26
51
|
"dev": "concurrently \"pnpm watch:builds\" \"pnpm watch:types\"",
|
|
27
|
-
"watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
28
|
-
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\"",
|
|
29
52
|
"lint": "eslint",
|
|
30
53
|
"lint:fix": "pnpm lint --fix",
|
|
31
54
|
"postpack": "find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",
|
|
55
|
+
"prebuild": "rimraf lib",
|
|
32
56
|
"prettier": "prettier . --check",
|
|
33
57
|
"prettier:fix": "prettier . --write",
|
|
34
|
-
"typecheck": "tsc --noEmit",
|
|
35
58
|
"test": "vitest run",
|
|
59
|
+
"test:coverage": "vitest run --coverage",
|
|
36
60
|
"test:watch": "vitest",
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"@types/crypto-js": "catalog:",
|
|
41
|
-
"crypto-js": "catalog:",
|
|
42
|
-
"inversify": "catalog:",
|
|
43
|
-
"purify-ts": "catalog:",
|
|
44
|
-
"reflect-metadata": "catalog:",
|
|
45
|
-
"xstate": "catalog:"
|
|
46
|
-
},
|
|
47
|
-
"devDependencies": {
|
|
48
|
-
"@ledgerhq/device-management-kit": "workspace:*",
|
|
49
|
-
"@ledgerhq/ldmk-tool": "workspace:*",
|
|
50
|
-
"@ledgerhq/eslint-config-dsdk": "workspace:*",
|
|
51
|
-
"@ledgerhq/prettier-config-dsdk": "workspace:*",
|
|
52
|
-
"@ledgerhq/signer-utils": "workspace:*",
|
|
53
|
-
"@ledgerhq/tsconfig-dsdk": "workspace:*",
|
|
54
|
-
"@ledgerhq/vitest-config-dmk": "workspace:*",
|
|
55
|
-
"bitcoinjs-lib": "catalog:",
|
|
56
|
-
"rxjs": "catalog:",
|
|
57
|
-
"ts-node": "catalog:"
|
|
61
|
+
"typecheck": "tsc --noEmit",
|
|
62
|
+
"watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
63
|
+
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
58
64
|
},
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"bitcoinjs-lib": "^6.1.6"
|
|
62
|
-
}
|
|
65
|
+
"types": "lib/cjs/index.d.ts",
|
|
66
|
+
"version": "0.0.0-intent-queue-6-20251204103625"
|
|
63
67
|
}
|
|
@@ -8,8 +8,8 @@ import { type PsbtSerializer } from "./PsbtSerializer";
|
|
|
8
8
|
* <magic> <global-map> <input-map>* <output-map>*
|
|
9
9
|
* with:
|
|
10
10
|
* <magic>: 0x70 0x73 0x62 0x74 0xFF
|
|
11
|
-
* <map>: <
|
|
12
|
-
* For <
|
|
11
|
+
* <map>: <keyPair>* 0x00
|
|
12
|
+
* For <keyPair> serialization, it's done in KeyPair class.
|
|
13
13
|
* For more informations:
|
|
14
14
|
* https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification
|
|
15
15
|
*/
|