@ledgerhq/device-signer-kit-hyperliquid 0.0.0-develop-20260407153739 → 0.0.0-develop-20260409001459

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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendActionsTask.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, type vi } from \"vitest\";\n\nimport { SendActionCommand } from \"@internal/app-binder/command/SendActionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport { SendActionsTask } from \"./SendActionsTask\";\n\ndescribe(\"SendActionsTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n apiMock.sendCommand.mockClear();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n });\n\n it.each([\n {\n action: {\n type: \"order\",\n orders: [\n {\n a: 42,\n b: true,\n p: \"1992\",\n s: \"0.512\",\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n r: false,\n },\n ],\n grouping: \"na\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1770816625873,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"01012c\" +\n \"020101\" +\n \"81d00100\" +\n \"81da06019c4ce55cd1\" +\n \"81db4b\" +\n \"81dd26\" +\n \"81e00100\" +\n \"81d1012a\" +\n \"81e20101\" +\n \"81e30431393932\" +\n \"81e405302e353132\" +\n \"81e50100\" +\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n \"81ea0100\" + // GROUPING\n \"81eb1b\" + //BUILDER\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n /* eslint-enable prettier/prettier */\n },\n {\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\",\n },\n },\n },\n },\n ],\n nonce: 1773050015814,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00101\" + // ACTION_TYPE\n \"81da06019CD2043046\" + // NONCE\n \"81db45\" + // ACTION_STRUCTURE\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n action: {\n type: \"cancel\",\n cancels: [\n {\n a: 0,\n o: 340574409238,\n },\n ],\n nonce: 1772813983827,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00102\" + // ACTION_TYPE\n \"81da06019CC3F2A053\" + // NONCE\n \"81db12\" + // ACTION_STRUCTURE\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n ])(\n \"calls SendActionCommand once when actions has one item\",\n async ({ action, expectedSerialization }) => {\n // GIVEN one action\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [action] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n\n const expectedBytes = hexaStringToBuffer(expectedSerialization)!;\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendActionCommand({\n serializedAction: expectedBytes,\n }),\n );\n },\n );\n\n it.each([\n {\n actions: [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 42 }],\n nonce: 2,\n },\n {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010081da010181db2681dd1f81e0010081d1010081e2010181e3013181e4013181e5010081d70481e6010281ea0100\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010281da010281db1281d90f81d1010081dc08000000000000002a\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010381da010381db1381d1010081de010081ed08000000000000000a\",\n )!,\n ],\n },\n {\n actions: [\n {\n type: \"updateLeverage\",\n asset: 5,\n isCross: false,\n leverage: 3,\n nonce: 1773655934208,\n },\n {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010381da06019cf621c50081db1381d1010581de010081ed080000000000000003\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010081da06019cf621c50181db8183\" +\n \"81dd2781e0010081d1010581e2010181e30639352e33303281e404302e313681e5010081d70481e60101\" +\n \"81dd3481e0010181d1010581e2010081e3063130322e373881e404302e313681e5010181d71181e7010181e8063130322e373881e9010081ea010181eb1b81d314c0708cdd6cd166d51da264e3f49a0422be26e35b81ec0164\",\n )!,\n ],\n },\n ])(\n \"calls SendActionCommand multiple times in order when actions has several items\",\n async ({ actions, expectedSerializations }) => {\n // GIVEN several actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n await task.run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(actions.length);\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 1,\n new SendActionCommand({\n serializedAction: expectedSerializations[0]!,\n }),\n );\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 2,\n new SendActionCommand({\n serializedAction: expectedSerializations[1]!,\n }),\n );\n\n if (expectedSerializations[2]) {\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 3,\n new SendActionCommand({\n serializedAction: expectedSerializations[2]!,\n }),\n );\n }\n },\n );\n\n it(\"returns error result and stops on first SendActionCommand failure\", async () => {\n // GIVEN api returns success for first command then error for second\n const errorResult = CommandResultFactory({\n error: new UnknownDeviceExchangeError(),\n });\n (apiMock.sendCommand as ReturnType<typeof vi.fn>)\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(errorResult);\n\n const actions: HyperliquidAction[] = [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: false,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 1 }],\n nonce: 2,\n },\n ];\n\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n const result = await task.run();\n\n // THEN\n expect(result).toStrictEqual(errorResult);\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n });\n\n it(\"returns success when actions is empty\", async () => {\n // GIVEN empty actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, type vi } from \"vitest\";\n\nimport { SendActionCommand } from \"@internal/app-binder/command/SendActionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport { SendActionsTask } from \"./SendActionsTask\";\n\ndescribe(\"SendActionsTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n apiMock.sendCommand.mockClear();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n });\n\n it.each([\n {\n action: {\n type: \"order\",\n orders: [\n {\n a: 42,\n b: true,\n p: \"1992\",\n s: \"0.512\",\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n r: false,\n },\n ],\n grouping: \"na\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1770816625873,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n\n \"01012c\" +\n \"020101\" +\n \"81d00100\" +\n \"81da06019c4ce55cd1\" +\n \"81db4b\" +\n \"81dd26\" +\n \"81e00100\" +\n \"81d1012a\" +\n \"81e20101\" +\n \"81e30431393932\" +\n \"81e405302e353132\" +\n \"81e50100\" +\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n \"81ea0100\" + // GROUPING\n \"81eb1b\" + //BUILDER\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n },\n {\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\",\n },\n },\n },\n },\n ],\n nonce: 1773050015814,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00101\" + // ACTION_TYPE\n \"81da06019CD2043046\" + // NONCE\n \"81db45\" + // ACTION_STRUCTURE\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n },\n {\n action: {\n type: \"cancel\",\n cancels: [\n {\n a: 0,\n o: 340574409238,\n },\n ],\n nonce: 1772813983827,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00102\" + // ACTION_TYPE\n \"81da06019CC3F2A053\" + // NONCE\n \"81db12\" + // ACTION_STRUCTURE\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n },\n ])(\n \"calls SendActionCommand once when actions has one item\",\n async ({ action, expectedSerialization }) => {\n // GIVEN one action\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [action] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n\n const expectedBytes = hexaStringToBuffer(expectedSerialization)!;\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendActionCommand({\n serializedAction: expectedBytes,\n }),\n );\n },\n );\n\n it.each([\n {\n actions: [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 42 }],\n nonce: 2,\n },\n {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010081da010181db2681dd1f81e0010081d1010081e2010181e3013181e4013181e5010081d70481e6010281ea0100\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010281da010281db1281d90f81d1010081dc08000000000000002a\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010381da010381db1381d1010081de010081ed08000000000000000a\",\n )!,\n ],\n },\n {\n actions: [\n {\n type: \"updateLeverage\",\n asset: 5,\n isCross: false,\n leverage: 3,\n nonce: 1773655934208,\n },\n {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010381da06019cf621c50081db1381d1010581de010081ed080000000000000003\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010081da06019cf621c50181db8183\" +\n \"81dd2781e0010081d1010581e2010181e30639352e33303281e404302e313681e5010081d70481e60101\" +\n \"81dd3481e0010181d1010581e2010081e3063130322e373881e404302e313681e5010181d71181e7010181e8063130322e373881e9010081ea010181eb1b81d314c0708cdd6cd166d51da264e3f49a0422be26e35b81ec0164\",\n )!,\n ],\n },\n ])(\n \"calls SendActionCommand multiple times in order when actions has several items\",\n async ({ actions, expectedSerializations }) => {\n // GIVEN several actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n await task.run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(actions.length);\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 1,\n new SendActionCommand({\n serializedAction: expectedSerializations[0]!,\n }),\n );\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 2,\n new SendActionCommand({\n serializedAction: expectedSerializations[1]!,\n }),\n );\n\n if (expectedSerializations[2]) {\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 3,\n new SendActionCommand({\n serializedAction: expectedSerializations[2]!,\n }),\n );\n }\n },\n );\n\n it(\"returns error result and stops on first SendActionCommand failure\", async () => {\n // GIVEN api returns success for first command then error for second\n const errorResult = CommandResultFactory({\n error: new UnknownDeviceExchangeError(),\n });\n (apiMock.sendCommand as ReturnType<typeof vi.fn>)\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(errorResult);\n\n const actions: HyperliquidAction[] = [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: false,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 1 }],\n nonce: 2,\n },\n ];\n\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n const result = await task.run();\n\n // THEN\n expect(result).toStrictEqual(errorResult);\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n });\n\n it(\"returns success when actions is empty\", async () => {\n // GIVEN empty actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_vitest", "import_SendActionCommand", "import_makeInternalApi", "import_SendActionsTask", "apiMock", "action", "expectedSerialization", "result", "expectedBytes", "actions", "expectedSerializations", "errorResult"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/utils/actionTlvSerializer.test.ts"],
4
- "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport {\n buildActionStructure,\n serializeOrderToTlv,\n} from \"./actionTlvSerializer\";\n\ndescribe(\"serializeOrderToTlv\", () => {\n it.each([\n {\n name: \"order limit (Gtc)\",\n order: {\n a: 0,\n b: true,\n p: \"100\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e303313030\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\", // TIF\n },\n {\n name: \"order trigger (tp, isMarket)\",\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n expectedHex:\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\", // TRIGGER_TYPE\n },\n {\n name: \"order limit (Ioc)\",\n order: {\n a: 42,\n b: false,\n p: \"1992\",\n s: \"0.512\",\n r: false,\n t: { limit: { tif: \"Ioc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d1012a\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e30431393932\" + // PRICE\n \"81e405302E353132\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\", // TIF\n },\n ])(\"$name\", ({ order, expectedHex }) => {\n const result = serializeOrderToTlv(order);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n\ndescribe(\"buildActionStructure\", () => {\n it.each([\n {\n name: \"action type order (create_order)\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n ],\n grouping: \"na\",\n nonce: 1, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81dd1f\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30131\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\" + // TIF\n \"81ea0100\", // GROUPING\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type with multiple orders\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81dd27\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30639352E333032\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3063130322E3738\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d711\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8063130322E3738\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n\n \"81ea0101\" + // GROUPING\n \"81eb1b\" + // BUILDER_INFO\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type batchModify update_order\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type batchModify 2 update_orders\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d842\" + // UPDATE_ORDER\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\" + // ORDER_ID\n \"81d842\" + // UPDATE_ORDER 2\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type cancel\",\n action: {\n type: \"cancel\",\n cancels: [{ a: 0, o: 340574409238 }],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type with 2 cancels\",\n action: {\n type: \"cancel\",\n cancels: [\n { a: 0, o: 340574409238 },\n { a: 0, o: 340574409238 },\n ],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\" + // ORDER_ID\n \"81d90f\" + // CANCEL_ORDERS 2\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type updateLeverage\",\n action: {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n /* eslint-disable prettier/prettier */\n \"81d10100\" + // ASSET_ID\n \"81de0100\" + // IS_CROSS\n \"81ed08000000000000000a\", // LEVERAGE,\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type approveBuilderFee\",\n action: {\n type: \"approveBuilderFee\",\n hyperliquidChain: \"Mainnet\",\n signatureChainId: \"0xa4b1\",\n maxFeeRate: \"0.1000%\",\n builder: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n nonce: 1772440978175, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n \"2302a4b1\" + // CHAIN_ID\n \"81b007302E3130303025\" + // MAX_FEE\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\", // APPROVE_BUILDER_ADDRESS\n },\n {\n name: \"action type updateIsolatedMargin\",\n action: {\n type: \"updateIsolatedMargin\",\n asset: 0,\n isBuy: true,\n ntli: 10000000,\n nonce: 1772440978175,\n } satisfies HyperliquidAction,\n expectedHex:\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81d6080000000000989680\", // NTLI\n },\n ])(\"$name\", ({ action, expectedHex }) => {\n const result = buildActionStructure(action);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport {\n buildActionStructure,\n serializeOrderToTlv,\n} from \"./actionTlvSerializer\";\n\ndescribe(\"serializeOrderToTlv\", () => {\n it.each([\n {\n name: \"order limit (Gtc)\",\n order: {\n a: 0,\n b: true,\n p: \"100\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e303313030\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\", // TIF\n },\n {\n name: \"order trigger (tp, isMarket)\",\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n expectedHex:\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\", // TRIGGER_TYPE\n },\n {\n name: \"order limit (Ioc)\",\n order: {\n a: 42,\n b: false,\n p: \"1992\",\n s: \"0.512\",\n r: false,\n t: { limit: { tif: \"Ioc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d1012a\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e30431393932\" + // PRICE\n \"81e405302E353132\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\", // TIF\n },\n ])(\"$name\", ({ order, expectedHex }) => {\n const result = serializeOrderToTlv(order);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n\ndescribe(\"buildActionStructure\", () => {\n it.each([\n {\n name: \"action type order (create_order)\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n ],\n grouping: \"na\",\n nonce: 1, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81dd1f\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30131\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\" + // TIF\n \"81ea0100\", // GROUPING\n },\n {\n name: \"action type with multiple orders\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81dd27\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30639352E333032\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3063130322E3738\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d711\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8063130322E3738\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n\n \"81ea0101\" + // GROUPING\n \"81eb1b\" + // BUILDER_INFO\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n },\n {\n name: \"action type batchModify update_order\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n },\n {\n name: \"action type batchModify 2 update_orders\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d842\" + // UPDATE_ORDER\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\" + // ORDER_ID\n \"81d842\" + // UPDATE_ORDER 2\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n },\n {\n name: \"action type cancel\",\n action: {\n type: \"cancel\",\n cancels: [{ a: 0, o: 340574409238 }],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n },\n {\n name: \"action type with 2 cancels\",\n action: {\n type: \"cancel\",\n cancels: [\n { a: 0, o: 340574409238 },\n { a: 0, o: 340574409238 },\n ],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\" + // ORDER_ID\n \"81d90f\" + // CANCEL_ORDERS 2\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n },\n {\n name: \"action type updateLeverage\",\n action: {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n \"81d10100\" + // ASSET_ID\n \"81de0100\" + // IS_CROSS\n \"81ed08000000000000000a\", // LEVERAGE,\n },\n {\n name: \"action type approveBuilderFee\",\n action: {\n type: \"approveBuilderFee\",\n hyperliquidChain: \"Mainnet\",\n signatureChainId: \"0xa4b1\",\n maxFeeRate: \"0.1000%\",\n builder: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n nonce: 1772440978175, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n \"2302a4b1\" + // CHAIN_ID\n \"81b007302E3130303025\" + // MAX_FEE\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\", // APPROVE_BUILDER_ADDRESS\n },\n {\n name: \"action type updateIsolatedMargin\",\n action: {\n type: \"updateIsolatedMargin\",\n asset: 0,\n isBuy: true,\n ntli: 10000000,\n nonce: 1772440978175,\n } satisfies HyperliquidAction,\n expectedHex:\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81d6080000000000989680\", // NTLI\n },\n ])(\"$name\", ({ action, expectedHex }) => {\n const result = buildActionStructure(action);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_vitest", "import_actionTlvSerializer", "order", "expectedHex", "result", "expected", "action"]
7
7
  }
@@ -59,5 +59,5 @@
59
59
  "watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
60
60
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
61
61
  },
62
- "version": "0.0.0-develop-20260407153739"
62
+ "version": "0.0.0-develop-20260409001459"
63
63
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendActionsTask.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, type vi } from \"vitest\";\n\nimport { SendActionCommand } from \"@internal/app-binder/command/SendActionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport { SendActionsTask } from \"./SendActionsTask\";\n\ndescribe(\"SendActionsTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n apiMock.sendCommand.mockClear();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n });\n\n it.each([\n {\n action: {\n type: \"order\",\n orders: [\n {\n a: 42,\n b: true,\n p: \"1992\",\n s: \"0.512\",\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n r: false,\n },\n ],\n grouping: \"na\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1770816625873,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"01012c\" +\n \"020101\" +\n \"81d00100\" +\n \"81da06019c4ce55cd1\" +\n \"81db4b\" +\n \"81dd26\" +\n \"81e00100\" +\n \"81d1012a\" +\n \"81e20101\" +\n \"81e30431393932\" +\n \"81e405302e353132\" +\n \"81e50100\" +\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n \"81ea0100\" + // GROUPING\n \"81eb1b\" + //BUILDER\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n /* eslint-enable prettier/prettier */\n },\n {\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\",\n },\n },\n },\n },\n ],\n nonce: 1773050015814,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00101\" + // ACTION_TYPE\n \"81da06019CD2043046\" + // NONCE\n \"81db45\" + // ACTION_STRUCTURE\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n action: {\n type: \"cancel\",\n cancels: [\n {\n a: 0,\n o: 340574409238,\n },\n ],\n nonce: 1772813983827,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00102\" + // ACTION_TYPE\n \"81da06019CC3F2A053\" + // NONCE\n \"81db12\" + // ACTION_STRUCTURE\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n ])(\n \"calls SendActionCommand once when actions has one item\",\n async ({ action, expectedSerialization }) => {\n // GIVEN one action\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [action] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n\n const expectedBytes = hexaStringToBuffer(expectedSerialization)!;\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendActionCommand({\n serializedAction: expectedBytes,\n }),\n );\n },\n );\n\n it.each([\n {\n actions: [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 42 }],\n nonce: 2,\n },\n {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010081da010181db2681dd1f81e0010081d1010081e2010181e3013181e4013181e5010081d70481e6010281ea0100\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010281da010281db1281d90f81d1010081dc08000000000000002a\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010381da010381db1381d1010081de010081ed08000000000000000a\",\n )!,\n ],\n },\n {\n actions: [\n {\n type: \"updateLeverage\",\n asset: 5,\n isCross: false,\n leverage: 3,\n nonce: 1773655934208,\n },\n {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010381da06019cf621c50081db1381d1010581de010081ed080000000000000003\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010081da06019cf621c50181db8183\" +\n \"81dd2781e0010081d1010581e2010181e30639352e33303281e404302e313681e5010081d70481e60101\" +\n \"81dd3481e0010181d1010581e2010081e3063130322e373881e404302e313681e5010181d71181e7010181e8063130322e373881e9010081ea010181eb1b81d314c0708cdd6cd166d51da264e3f49a0422be26e35b81ec0164\",\n )!,\n ],\n },\n ])(\n \"calls SendActionCommand multiple times in order when actions has several items\",\n async ({ actions, expectedSerializations }) => {\n // GIVEN several actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n await task.run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(actions.length);\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 1,\n new SendActionCommand({\n serializedAction: expectedSerializations[0]!,\n }),\n );\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 2,\n new SendActionCommand({\n serializedAction: expectedSerializations[1]!,\n }),\n );\n\n if (expectedSerializations[2]) {\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 3,\n new SendActionCommand({\n serializedAction: expectedSerializations[2]!,\n }),\n );\n }\n },\n );\n\n it(\"returns error result and stops on first SendActionCommand failure\", async () => {\n // GIVEN api returns success for first command then error for second\n const errorResult = CommandResultFactory({\n error: new UnknownDeviceExchangeError(),\n });\n (apiMock.sendCommand as ReturnType<typeof vi.fn>)\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(errorResult);\n\n const actions: HyperliquidAction[] = [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: false,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 1 }],\n nonce: 2,\n },\n ];\n\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n const result = await task.run();\n\n // THEN\n expect(result).toStrictEqual(errorResult);\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n });\n\n it(\"returns success when actions is empty\", async () => {\n // GIVEN empty actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalled();\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n hexaStringToBuffer,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { beforeEach, describe, expect, it, type vi } from \"vitest\";\n\nimport { SendActionCommand } from \"@internal/app-binder/command/SendActionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport { SendActionsTask } from \"./SendActionsTask\";\n\ndescribe(\"SendActionsTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n apiMock.sendCommand.mockClear();\n apiMock.sendCommand.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n });\n\n it.each([\n {\n action: {\n type: \"order\",\n orders: [\n {\n a: 42,\n b: true,\n p: \"1992\",\n s: \"0.512\",\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n r: false,\n },\n ],\n grouping: \"na\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1770816625873,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n\n \"01012c\" +\n \"020101\" +\n \"81d00100\" +\n \"81da06019c4ce55cd1\" +\n \"81db4b\" +\n \"81dd26\" +\n \"81e00100\" +\n \"81d1012a\" +\n \"81e20101\" +\n \"81e30431393932\" +\n \"81e405302e353132\" +\n \"81e50100\" +\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n \"81ea0100\" + // GROUPING\n \"81eb1b\" + //BUILDER\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n },\n {\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\",\n },\n },\n },\n },\n ],\n nonce: 1773050015814,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00101\" + // ACTION_TYPE\n \"81da06019CD2043046\" + // NONCE\n \"81db45\" + // ACTION_STRUCTURE\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n },\n {\n action: {\n type: \"cancel\",\n cancels: [\n {\n a: 0,\n o: 340574409238,\n },\n ],\n nonce: 1772813983827,\n } satisfies HyperliquidAction,\n expectedSerialization:\n // prettier-ignore\n\n \"01012c\" + // STRUCTURE_TYPE\n \"020101\" + // VERSION\n \"81d00102\" + // ACTION_TYPE\n \"81da06019CC3F2A053\" + // NONCE\n \"81db12\" + // ACTION_STRUCTURE\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n },\n ])(\n \"calls SendActionCommand once when actions has one item\",\n async ({ action, expectedSerialization }) => {\n // GIVEN one action\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [action] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n\n const expectedBytes = hexaStringToBuffer(expectedSerialization)!;\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n new SendActionCommand({\n serializedAction: expectedBytes,\n }),\n );\n },\n );\n\n it.each([\n {\n actions: [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 42 }],\n nonce: 2,\n },\n {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010081da010181db2681dd1f81e0010081d1010081e2010181e3013181e4013181e5010081d70481e6010281ea0100\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010281da010281db1281d90f81d1010081dc08000000000000002a\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010381da010381db1381d1010081de010081ed08000000000000000a\",\n )!,\n ],\n },\n {\n actions: [\n {\n type: \"updateLeverage\",\n asset: 5,\n isCross: false,\n leverage: 3,\n nonce: 1773655934208,\n },\n {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n },\n ] satisfies HyperliquidAction[],\n expectedSerializations: [\n hexaStringToBuffer(\n \"01012c02010181d0010381da06019cf621c50081db1381d1010581de010081ed080000000000000003\",\n )!,\n hexaStringToBuffer(\n \"01012c02010181d0010081da06019cf621c50181db8183\" +\n \"81dd2781e0010081d1010581e2010181e30639352e33303281e404302e313681e5010081d70481e60101\" +\n \"81dd3481e0010181d1010581e2010081e3063130322e373881e404302e313681e5010181d71181e7010181e8063130322e373881e9010081ea010181eb1b81d314c0708cdd6cd166d51da264e3f49a0422be26e35b81ec0164\",\n )!,\n ],\n },\n ])(\n \"calls SendActionCommand multiple times in order when actions has several items\",\n async ({ actions, expectedSerializations }) => {\n // GIVEN several actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n await task.run();\n\n // THEN\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(actions.length);\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 1,\n new SendActionCommand({\n serializedAction: expectedSerializations[0]!,\n }),\n );\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 2,\n new SendActionCommand({\n serializedAction: expectedSerializations[1]!,\n }),\n );\n\n if (expectedSerializations[2]) {\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 3,\n new SendActionCommand({\n serializedAction: expectedSerializations[2]!,\n }),\n );\n }\n },\n );\n\n it(\"returns error result and stops on first SendActionCommand failure\", async () => {\n // GIVEN api returns success for first command then error for second\n const errorResult = CommandResultFactory({\n error: new UnknownDeviceExchangeError(),\n });\n (apiMock.sendCommand as ReturnType<typeof vi.fn>)\n .mockResolvedValueOnce(CommandResultFactory({ data: undefined }))\n .mockResolvedValueOnce(errorResult);\n\n const actions: HyperliquidAction[] = [\n {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: false,\n p: \"1\",\n s: \"1\",\n t: { limit: { tif: \"Gtc\" } },\n r: false,\n },\n ],\n grouping: \"na\",\n nonce: 1,\n },\n {\n type: \"cancel\",\n cancels: [{ a: 0, o: 1 }],\n nonce: 2,\n },\n ];\n\n // WHEN\n const task = new SendActionsTask(apiMock, { actions });\n const result = await task.run();\n\n // THEN\n expect(result).toStrictEqual(errorResult);\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n });\n\n it(\"returns success when actions is empty\", async () => {\n // GIVEN empty actions\n // WHEN\n const task = new SendActionsTask(apiMock, { actions: [] });\n const result = await task.run();\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: undefined,\n }),\n );\n expect(apiMock.sendCommand).not.toHaveBeenCalled();\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["CommandResultFactory", "hexaStringToBuffer", "UnknownDeviceExchangeError", "beforeEach", "describe", "expect", "it", "SendActionCommand", "makeDeviceActionInternalApiMock", "SendActionsTask", "apiMock", "action", "expectedSerialization", "result", "expectedBytes", "actions", "expectedSerializations", "errorResult"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/utils/actionTlvSerializer.test.ts"],
4
- "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport {\n buildActionStructure,\n serializeOrderToTlv,\n} from \"./actionTlvSerializer\";\n\ndescribe(\"serializeOrderToTlv\", () => {\n it.each([\n {\n name: \"order limit (Gtc)\",\n order: {\n a: 0,\n b: true,\n p: \"100\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e303313030\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\", // TIF\n },\n {\n name: \"order trigger (tp, isMarket)\",\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n expectedHex:\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\", // TRIGGER_TYPE\n },\n {\n name: \"order limit (Ioc)\",\n order: {\n a: 42,\n b: false,\n p: \"1992\",\n s: \"0.512\",\n r: false,\n t: { limit: { tif: \"Ioc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d1012a\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e30431393932\" + // PRICE\n \"81e405302E353132\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\", // TIF\n },\n ])(\"$name\", ({ order, expectedHex }) => {\n const result = serializeOrderToTlv(order);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n\ndescribe(\"buildActionStructure\", () => {\n it.each([\n {\n name: \"action type order (create_order)\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n ],\n grouping: \"na\",\n nonce: 1, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81dd1f\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30131\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\" + // TIF\n \"81ea0100\", // GROUPING\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type with multiple orders\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81dd27\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30639352E333032\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3063130322E3738\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d711\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8063130322E3738\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n\n \"81ea0101\" + // GROUPING\n \"81eb1b\" + // BUILDER_INFO\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type batchModify update_order\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type batchModify 2 update_orders\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d842\" + // UPDATE_ORDER\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\" + // ORDER_ID\n \"81d842\" + // UPDATE_ORDER 2\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type cancel\",\n action: {\n type: \"cancel\",\n cancels: [{ a: 0, o: 340574409238 }],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type with 2 cancels\",\n action: {\n type: \"cancel\",\n cancels: [\n { a: 0, o: 340574409238 },\n { a: 0, o: 340574409238 },\n ],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n /* eslint-disable prettier/prettier */\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\" + // ORDER_ID\n \"81d90f\" + // CANCEL_ORDERS 2\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type updateLeverage\",\n action: {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n /* eslint-disable prettier/prettier */\n \"81d10100\" + // ASSET_ID\n \"81de0100\" + // IS_CROSS\n \"81ed08000000000000000a\", // LEVERAGE,\n /* eslint-enable prettier/prettier */\n },\n {\n name: \"action type approveBuilderFee\",\n action: {\n type: \"approveBuilderFee\",\n hyperliquidChain: \"Mainnet\",\n signatureChainId: \"0xa4b1\",\n maxFeeRate: \"0.1000%\",\n builder: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n nonce: 1772440978175, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n \"2302a4b1\" + // CHAIN_ID\n \"81b007302E3130303025\" + // MAX_FEE\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\", // APPROVE_BUILDER_ADDRESS\n },\n {\n name: \"action type updateIsolatedMargin\",\n action: {\n type: \"updateIsolatedMargin\",\n asset: 0,\n isBuy: true,\n ntli: 10000000,\n nonce: 1772440978175,\n } satisfies HyperliquidAction,\n expectedHex:\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81d6080000000000989680\", // NTLI\n },\n ])(\"$name\", ({ action, expectedHex }) => {\n const result = buildActionStructure(action);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport type { HyperliquidAction } from \"@internal/app-binder/di/appBinderTypes\";\n\nimport {\n buildActionStructure,\n serializeOrderToTlv,\n} from \"./actionTlvSerializer\";\n\ndescribe(\"serializeOrderToTlv\", () => {\n it.each([\n {\n name: \"order limit (Gtc)\",\n order: {\n a: 0,\n b: true,\n p: \"100\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e303313030\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\", // TIF\n },\n {\n name: \"order trigger (tp, isMarket)\",\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n expectedHex:\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\", // TRIGGER_TYPE\n },\n {\n name: \"order limit (Ioc)\",\n order: {\n a: 42,\n b: false,\n p: \"1992\",\n s: \"0.512\",\n r: false,\n t: { limit: { tif: \"Ioc\" as const } },\n },\n expectedHex:\n \"81e00100\" + // ORDER_TYPE\n \"81d1012a\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e30431393932\" + // PRICE\n \"81e405302E353132\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\", // TIF\n },\n ])(\"$name\", ({ order, expectedHex }) => {\n const result = serializeOrderToTlv(order);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n\ndescribe(\"buildActionStructure\", () => {\n it.each([\n {\n name: \"action type order (create_order)\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 0,\n b: true,\n p: \"1\",\n s: \"1\",\n r: false,\n t: { limit: { tif: \"Gtc\" as const } },\n },\n ],\n grouping: \"na\",\n nonce: 1, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81dd1f\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30131\" + // PRICE\n \"81e40131\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60102\" + // TIF\n \"81ea0100\", // GROUPING\n },\n {\n name: \"action type with multiple orders\",\n action: {\n type: \"order\",\n orders: [\n {\n a: 5,\n b: true,\n p: \"95.302\",\n s: \"0.16\",\n r: false,\n t: {\n limit: {\n tif: \"Ioc\",\n },\n },\n },\n {\n a: 5,\n b: false,\n p: \"102.78\",\n s: \"0.16\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"102.78\",\n tpsl: \"tp\",\n },\n },\n },\n ],\n grouping: \"normalTpsl\",\n builder: {\n b: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n f: 100,\n },\n nonce: 1773655934209,\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81dd27\" + // ORDER\n \"81e00100\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81e30639352E333032\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50100\" + // REDUCE_ONLY\n \"81d704\" + // ORDER_DETAIL\n \"81e60101\" + // TIF\n\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10105\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3063130322E3738\" + // PRICE\n \"81e404302E3136\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d711\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8063130322E3738\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n\n \"81ea0101\" + // GROUPING\n \"81eb1b\" + // BUILDER_INFO\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\" + // BUILDER_ADDRESS\n \"81ec0164\", // BUILDER_FEE\n },\n {\n name: \"action type batchModify update_order\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d842\" + // UPDATE_ORDERS\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n },\n {\n name: \"action type batchModify 2 update_orders\",\n action: {\n type: \"batchModify\",\n modifies: [\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n {\n oid: 343050796655,\n order: {\n a: 0,\n b: false,\n p: \"85169\",\n s: \"0.0005\",\n r: true,\n t: {\n trigger: {\n isMarket: true,\n triggerPx: \"85169\",\n tpsl: \"tp\" as const,\n },\n },\n },\n },\n ],\n nonce: 1773050015814, // Not serialized with this fuction call // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d842\" + // UPDATE_ORDER\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\" + // ORDER_ID\n \"81d842\" + // UPDATE_ORDER 2\n \"81dd34\" + // ORDER\n \"81e00101\" + // ORDER_TYPE\n \"81d10100\" + // ASSET_ID\n \"81e20100\" + // BUY_OR_NOT\n \"81e3053835313639\" + // PRICE\n \"81e406302E30303035\" + // SIZE\n \"81e50101\" + // REDUCE_ONLY\n \"81d710\" + // ORDER_DETAIL\n \"81e70101\" + // TRIGGER_MARKET\n \"81e8053835313639\" + // TRIGGER_PRICE\n \"81e90100\" + // TRIGGER_TYPE\n \"81dc080000004FDF6BBE6F\", // ORDER_ID\n },\n {\n name: \"action type cancel\",\n action: {\n type: \"cancel\",\n cancels: [{ a: 0, o: 340574409238 }],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n },\n {\n name: \"action type with 2 cancels\",\n action: {\n type: \"cancel\",\n cancels: [\n { a: 0, o: 340574409238 },\n { a: 0, o: 340574409238 },\n ],\n nonce: 1772813983827, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n // prettier-ignore\n\n \"81d90f\" + // CANCEL_ORDERS\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\" + // ORDER_ID\n \"81d90f\" + // CANCEL_ORDERS 2\n \"81d10100\" + // ASSET_ID\n \"81dc080000004F4BD11216\", // ORDER_ID\n },\n {\n name: \"action type updateLeverage\",\n action: {\n type: \"updateLeverage\",\n asset: 0,\n isCross: false,\n leverage: 10,\n nonce: 3, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n \"81d10100\" + // ASSET_ID\n \"81de0100\" + // IS_CROSS\n \"81ed08000000000000000a\", // LEVERAGE,\n },\n {\n name: \"action type approveBuilderFee\",\n action: {\n type: \"approveBuilderFee\",\n hyperliquidChain: \"Mainnet\",\n signatureChainId: \"0xa4b1\",\n maxFeeRate: \"0.1000%\",\n builder: \"0xc0708cdd6cd166d51da264e3f49a0422be26e35b\",\n nonce: 1772440978175, // Not serialized with this fuction call\n } satisfies HyperliquidAction,\n expectedHex:\n \"2302a4b1\" + // CHAIN_ID\n \"81b007302E3130303025\" + // MAX_FEE\n \"81d314c0708cdd6cd166d51da264e3f49a0422be26e35b\", // APPROVE_BUILDER_ADDRESS\n },\n {\n name: \"action type updateIsolatedMargin\",\n action: {\n type: \"updateIsolatedMargin\",\n asset: 0,\n isBuy: true,\n ntli: 10000000,\n nonce: 1772440978175,\n } satisfies HyperliquidAction,\n expectedHex:\n \"81d10100\" + // ASSET_ID\n \"81e20101\" + // BUY_OR_NOT\n \"81d6080000000000989680\", // NTLI\n },\n ])(\"$name\", ({ action, expectedHex }) => {\n const result = buildActionStructure(action);\n\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBeGreaterThan(0);\n const expected = hexaStringToBuffer(expectedHex);\n expect(result).toEqual(expected);\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["hexaStringToBuffer", "describe", "expect", "it", "buildActionStructure", "serializeOrderToTlv", "order", "expectedHex", "result", "expected", "action"]
7
7
  }
@@ -59,5 +59,5 @@
59
59
  "watch:builds": "pnpm ldmk-tool watch --entryPoints src/index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
60
60
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
61
61
  },
62
- "version": "0.0.0-develop-20260407153739"
62
+ "version": "0.0.0-develop-20260409001459"
63
63
  }