@ledgerhq/coin-hedera 1.16.0-nightly.20251212024049 → 1.16.0-nightly.20251213023821

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.
Files changed (131) hide show
  1. package/CHANGELOG.md +12 -10
  2. package/lib/api/index.d.ts.map +1 -1
  3. package/lib/api/index.js +4 -3
  4. package/lib/api/index.js.map +1 -1
  5. package/lib/bridge/buildOptimisticOperation.d.ts.map +1 -1
  6. package/lib/bridge/buildOptimisticOperation.js +14 -43
  7. package/lib/bridge/buildOptimisticOperation.js.map +1 -1
  8. package/lib/constants.d.ts +11 -6
  9. package/lib/constants.d.ts.map +1 -1
  10. package/lib/constants.js +20 -1
  11. package/lib/constants.js.map +1 -1
  12. package/lib/deviceTransactionConfig.d.ts.map +1 -1
  13. package/lib/deviceTransactionConfig.js +1 -3
  14. package/lib/deviceTransactionConfig.js.map +1 -1
  15. package/lib/logic/getBalance.d.ts.map +1 -1
  16. package/lib/logic/getBalance.js +21 -4
  17. package/lib/logic/getBalance.js.map +1 -1
  18. package/lib/logic/getBlock.d.ts.map +1 -1
  19. package/lib/logic/getBlock.js +39 -2
  20. package/lib/logic/getBlock.js.map +1 -1
  21. package/lib/logic/getValidators.d.ts +3 -0
  22. package/lib/logic/getValidators.d.ts.map +1 -0
  23. package/lib/logic/getValidators.js +24 -0
  24. package/lib/logic/getValidators.js.map +1 -0
  25. package/lib/logic/index.d.ts +1 -0
  26. package/lib/logic/index.d.ts.map +1 -1
  27. package/lib/logic/index.js +3 -1
  28. package/lib/logic/index.js.map +1 -1
  29. package/lib/logic/listOperations.d.ts.map +1 -1
  30. package/lib/logic/listOperations.js +16 -2
  31. package/lib/logic/listOperations.js.map +1 -1
  32. package/lib/logic/utils.d.ts +17 -1
  33. package/lib/logic/utils.d.ts.map +1 -1
  34. package/lib/logic/utils.js +54 -1
  35. package/lib/logic/utils.js.map +1 -1
  36. package/lib/network/api.d.ts +22 -2
  37. package/lib/network/api.d.ts.map +1 -1
  38. package/lib/network/api.js +49 -14
  39. package/lib/network/api.js.map +1 -1
  40. package/lib/preload.js +2 -2
  41. package/lib/preload.js.map +1 -1
  42. package/lib/test/fixtures/account.fixture.d.ts +8 -0
  43. package/lib/test/fixtures/account.fixture.d.ts.map +1 -1
  44. package/lib/test/fixtures/account.fixture.js +8 -0
  45. package/lib/test/fixtures/account.fixture.js.map +1 -1
  46. package/lib/test/fixtures/mirror.fixture.d.ts +2 -1
  47. package/lib/test/fixtures/mirror.fixture.d.ts.map +1 -1
  48. package/lib/test/fixtures/mirror.fixture.js +16 -1
  49. package/lib/test/fixtures/mirror.fixture.js.map +1 -1
  50. package/lib/types/bridge.d.ts +1 -0
  51. package/lib/types/bridge.d.ts.map +1 -1
  52. package/lib/types/logic.d.ts +6 -0
  53. package/lib/types/logic.d.ts.map +1 -1
  54. package/lib-es/api/index.d.ts.map +1 -1
  55. package/lib-es/api/index.js +5 -4
  56. package/lib-es/api/index.js.map +1 -1
  57. package/lib-es/bridge/buildOptimisticOperation.d.ts.map +1 -1
  58. package/lib-es/bridge/buildOptimisticOperation.js +15 -44
  59. package/lib-es/bridge/buildOptimisticOperation.js.map +1 -1
  60. package/lib-es/constants.d.ts +11 -6
  61. package/lib-es/constants.d.ts.map +1 -1
  62. package/lib-es/constants.js +19 -0
  63. package/lib-es/constants.js.map +1 -1
  64. package/lib-es/deviceTransactionConfig.d.ts.map +1 -1
  65. package/lib-es/deviceTransactionConfig.js +2 -4
  66. package/lib-es/deviceTransactionConfig.js.map +1 -1
  67. package/lib-es/logic/getBalance.d.ts.map +1 -1
  68. package/lib-es/logic/getBalance.js +21 -4
  69. package/lib-es/logic/getBalance.js.map +1 -1
  70. package/lib-es/logic/getBlock.d.ts.map +1 -1
  71. package/lib-es/logic/getBlock.js +40 -3
  72. package/lib-es/logic/getBlock.js.map +1 -1
  73. package/lib-es/logic/getValidators.d.ts +3 -0
  74. package/lib-es/logic/getValidators.d.ts.map +1 -0
  75. package/lib-es/logic/getValidators.js +20 -0
  76. package/lib-es/logic/getValidators.js.map +1 -0
  77. package/lib-es/logic/index.d.ts +1 -0
  78. package/lib-es/logic/index.d.ts.map +1 -1
  79. package/lib-es/logic/index.js +1 -0
  80. package/lib-es/logic/index.js.map +1 -1
  81. package/lib-es/logic/listOperations.d.ts.map +1 -1
  82. package/lib-es/logic/listOperations.js +17 -3
  83. package/lib-es/logic/listOperations.js.map +1 -1
  84. package/lib-es/logic/utils.d.ts +17 -1
  85. package/lib-es/logic/utils.d.ts.map +1 -1
  86. package/lib-es/logic/utils.js +52 -1
  87. package/lib-es/logic/utils.js.map +1 -1
  88. package/lib-es/network/api.d.ts +22 -2
  89. package/lib-es/network/api.d.ts.map +1 -1
  90. package/lib-es/network/api.js +49 -14
  91. package/lib-es/network/api.js.map +1 -1
  92. package/lib-es/preload.js +2 -2
  93. package/lib-es/preload.js.map +1 -1
  94. package/lib-es/test/fixtures/account.fixture.d.ts +8 -0
  95. package/lib-es/test/fixtures/account.fixture.d.ts.map +1 -1
  96. package/lib-es/test/fixtures/account.fixture.js +8 -0
  97. package/lib-es/test/fixtures/account.fixture.js.map +1 -1
  98. package/lib-es/test/fixtures/mirror.fixture.d.ts +2 -1
  99. package/lib-es/test/fixtures/mirror.fixture.d.ts.map +1 -1
  100. package/lib-es/test/fixtures/mirror.fixture.js +14 -0
  101. package/lib-es/test/fixtures/mirror.fixture.js.map +1 -1
  102. package/lib-es/types/bridge.d.ts +1 -0
  103. package/lib-es/types/bridge.d.ts.map +1 -1
  104. package/lib-es/types/logic.d.ts +6 -0
  105. package/lib-es/types/logic.d.ts.map +1 -1
  106. package/package.json +10 -10
  107. package/src/api/index.integ.test.ts +226 -1
  108. package/src/api/index.test.ts +5 -2
  109. package/src/api/index.ts +5 -5
  110. package/src/bridge/{buildOptimisticOperation.integration.test.ts → buildOptimisticOperation.test.ts} +23 -68
  111. package/src/bridge/buildOptimisticOperation.ts +16 -45
  112. package/src/constants.ts +23 -1
  113. package/src/deviceTransactionConfig.test.ts +59 -43
  114. package/src/deviceTransactionConfig.ts +2 -5
  115. package/src/logic/getBalance.test.ts +50 -0
  116. package/src/logic/getBalance.ts +21 -4
  117. package/src/logic/getBlock.test.ts +283 -1
  118. package/src/logic/getBlock.ts +57 -6
  119. package/src/logic/getValidators.test.ts +50 -0
  120. package/src/logic/getValidators.ts +22 -0
  121. package/src/logic/index.ts +1 -0
  122. package/src/logic/listOperations.ts +33 -3
  123. package/src/logic/utils.test.ts +113 -0
  124. package/src/logic/utils.ts +67 -1
  125. package/src/network/api.test.ts +55 -9
  126. package/src/network/api.ts +66 -14
  127. package/src/preload.ts +2 -2
  128. package/src/test/fixtures/account.fixture.ts +8 -0
  129. package/src/test/fixtures/mirror.fixture.ts +18 -0
  130. package/src/types/bridge.ts +1 -0
  131. package/src/types/logic.ts +7 -0
@@ -1,5 +1,6 @@
1
- import type { HederaMirrorCoinTransfer, HederaMirrorToken, HederaMirrorTokenTransfer } from "../../types";
1
+ import type { HederaMirrorAccount, HederaMirrorCoinTransfer, HederaMirrorToken, HederaMirrorTokenTransfer } from "../../types";
2
2
  export declare const getMockedMirrorToken: (overrides?: Partial<HederaMirrorToken>) => HederaMirrorToken;
3
+ export declare const getMockedMirrorAccount: (overrides?: Partial<HederaMirrorAccount>) => HederaMirrorAccount;
3
4
  export declare const createMirrorCoinTransfer: (account: string, amount: number) => HederaMirrorCoinTransfer;
4
5
  export declare const createMirrorTokenTransfer: (account: string, amount: number, tokenId: string) => HederaMirrorTokenTransfer;
5
6
  //# sourceMappingURL=mirror.fixture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mirror.fixture.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/mirror.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,oBAAoB,eAAgB,QAAQ,iBAAiB,CAAC,KAAG,iBAW7E,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,MAAM,UACP,MAAM,KACb,wBAGD,CAAC;AAEH,eAAO,MAAM,yBAAyB,YAC3B,MAAM,UACP,MAAM,WACL,MAAM,KACd,yBAID,CAAC"}
1
+ {"version":3,"file":"mirror.fixture.d.ts","sourceRoot":"","sources":["../../../src/test/fixtures/mirror.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,oBAAoB,eAAgB,QAAQ,iBAAiB,CAAC,KAAG,iBAW7E,CAAC;AAEF,eAAO,MAAM,sBAAsB,eACrB,QAAQ,mBAAmB,CAAC,KACvC,mBAaF,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,MAAM,UACP,MAAM,KACb,wBAGD,CAAC;AAEH,eAAO,MAAM,yBAAyB,YAC3B,MAAM,UACP,MAAM,WACL,MAAM,KACd,yBAID,CAAC"}
@@ -10,6 +10,20 @@ export const getMockedMirrorToken = (overrides) => {
10
10
  ...overrides,
11
11
  };
12
12
  };
13
+ export const getMockedMirrorAccount = (overrides) => {
14
+ return {
15
+ account: "0.0.12345",
16
+ balance: {
17
+ balance: 1000,
18
+ timestamp: "1764932745.835883000",
19
+ tokens: [],
20
+ },
21
+ max_automatic_token_associations: -1,
22
+ pending_reward: 0,
23
+ staked_node_id: null,
24
+ ...overrides,
25
+ };
26
+ };
13
27
  export const createMirrorCoinTransfer = (account, amount) => ({
14
28
  account,
15
29
  amount,
@@ -1 +1 @@
1
- {"version":3,"file":"mirror.fixture.js","sourceRoot":"","sources":["../../../src/test/fixtures/mirror.fixture.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAsC,EAAqB,EAAE;IAChG,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,KAAK;QACxB,qBAAqB,EAAE,KAAK;QAC5B,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,gBAAgB;QAC/B,UAAU,EAAE,gBAAgB;QAC5B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACf,MAAc,EACY,EAAE,CAAC,CAAC;IAC9B,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAAe,EACf,MAAc,EACd,OAAe,EACY,EAAE,CAAC,CAAC;IAC/B,QAAQ,EAAE,OAAO;IACjB,OAAO;IACP,MAAM;CACP,CAAC,CAAC"}
1
+ {"version":3,"file":"mirror.fixture.js","sourceRoot":"","sources":["../../../src/test/fixtures/mirror.fixture.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAsC,EAAqB,EAAE;IAChG,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,KAAK;QACxB,qBAAqB,EAAE,KAAK;QAC5B,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,gBAAgB;QAC/B,UAAU,EAAE,gBAAgB;QAC5B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,SAAwC,EACnB,EAAE;IACvB,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,sBAAsB;YACjC,MAAM,EAAE,EAAE;SACX;QACD,gCAAgC,EAAE,CAAC,CAAC;QACpC,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,IAAI;QACpB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACf,MAAc,EACY,EAAE,CAAC,CAAC;IAC9B,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAAe,EACf,MAAc,EACd,OAAe,EACY,EAAE,CAAC,CAAC;IAC/B,QAAQ,EAAE,OAAO;IACjB,OAAO;IACP,MAAM;CACP,CAAC,CAAC"}
@@ -125,6 +125,7 @@ export type HederaOperationExtra = {
125
125
  memo?: string | null;
126
126
  targetStakingNodeId?: number | null;
127
127
  previousStakingNodeId?: number | null;
128
+ stakedAmount?: BigNumber;
128
129
  };
129
130
  export type HederaValidator = {
130
131
  nodeId: number;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"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"}
@@ -40,4 +40,10 @@ export interface OperationDetailsExtraField {
40
40
  key: string;
41
41
  value: string | number;
42
42
  }
43
+ export interface StakingAnalysis {
44
+ operationType: OperationType;
45
+ targetStakingNodeId: number | null;
46
+ previousStakingNodeId: number | null;
47
+ stakedAmount: bigint;
48
+ }
43
49
  //# sourceMappingURL=logic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../src/types/logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;CACrF,GACD;IACE,aAAa,EAAE,sBAAsB,CAAC,YAAY,CAAC;IACnD,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEN,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,mBAAmB,EAAE,yBAAyB,CAAC;IAC/C,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,kBAAkB,EAAE,8BAA8B,CAAC;IACnD,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../src/types/logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;CACrF,GACD;IACE,aAAa,EAAE,sBAAsB,CAAC,YAAY,CAAC;IACnD,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEN,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,mBAAmB,EAAE,yBAAyB,CAAC;IAC/C,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,kBAAkB,EAAE,8BAA8B,CAAC;IACnD,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-hedera",
3
- "version": "1.16.0-nightly.20251212024049",
3
+ "version": "1.16.0-nightly.20251213023821",
4
4
  "description": "Ledger Hedera Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -82,15 +82,15 @@
82
82
  "lodash": "^4.17.21",
83
83
  "rxjs": "7.8.2",
84
84
  "viem": "^2.27.0",
85
- "@ledgerhq/coin-framework": "^6.11.0-nightly.20251212024049",
86
- "@ledgerhq/cryptoassets": "^13.35.0-nightly.20251212024049",
87
- "@ledgerhq/devices": "8.8.0-nightly.20251212024049",
88
- "@ledgerhq/errors": "^6.28.0-nightly.20251212024049",
89
- "@ledgerhq/live-countervalues": "^0.10.2-nightly.20251212024049",
90
- "@ledgerhq/live-env": "^2.23.0-nightly.20251212024049",
91
- "@ledgerhq/live-network": "^2.1.3-nightly.20251212024049",
85
+ "@ledgerhq/coin-framework": "^6.11.0-nightly.20251213023821",
86
+ "@ledgerhq/cryptoassets": "^13.35.0-nightly.20251213023821",
87
+ "@ledgerhq/devices": "8.8.0-nightly.20251213023821",
88
+ "@ledgerhq/errors": "^6.28.0-nightly.20251213023821",
89
+ "@ledgerhq/live-countervalues": "^0.10.2-nightly.20251213023821",
90
+ "@ledgerhq/live-env": "^2.23.0-nightly.20251213023821",
91
+ "@ledgerhq/live-network": "^2.1.3-nightly.20251213023821",
92
92
  "@ledgerhq/logs": "^6.13.0",
93
- "@ledgerhq/types-live": "^6.91.0-nightly.20251212024049"
93
+ "@ledgerhq/types-live": "^6.91.0-nightly.20251213023821"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@types/invariant": "^2.2.2",
@@ -100,7 +100,7 @@
100
100
  "jest": "^29.7.0",
101
101
  "ts-jest": "^29.1.1",
102
102
  "@ledgerhq/disable-network-setup": "^0.1.0",
103
- "@ledgerhq/types-cryptoassets": "^7.31.0-nightly.20251212024049"
103
+ "@ledgerhq/types-cryptoassets": "^7.31.0-nightly.20251213023821"
104
104
  },
105
105
  "scripts": {
106
106
  "clean": "rimraf lib lib-es",
@@ -7,6 +7,7 @@ import {
7
7
  Long,
8
8
  TokenAssociateTransaction,
9
9
  TransferTransaction,
10
+ AccountUpdateTransaction,
10
11
  } from "@hashgraph/sdk";
11
12
  import type { FeeEstimation, Pagination } from "@ledgerhq/coin-framework/api/types";
12
13
  import { createApi } from "../api";
@@ -121,6 +122,37 @@ describe("createApi", () => {
121
122
  expect(rawTx.transactionMemo).toBe("token association");
122
123
  });
123
124
 
125
+ it.each([HEDERA_TRANSACTION_MODES.Delegate, HEDERA_TRANSACTION_MODES.Undelegate])(
126
+ "returns serialized %s transaction",
127
+ async type => {
128
+ const { transaction: hex } = await api.craftTransaction({
129
+ intentType: "transaction",
130
+ asset: {
131
+ type: "native",
132
+ },
133
+ type,
134
+ amount: BigInt(0),
135
+ sender: MAINNET_TEST_ACCOUNTS.withoutTokens.accountId,
136
+ senderPublicKey: MAINNET_TEST_ACCOUNTS.withoutTokens.publicKey,
137
+ recipient: MAINNET_TEST_ACCOUNTS.withoutTokens.accountId,
138
+ memo: {
139
+ kind: "text",
140
+ type: "string",
141
+ value: type,
142
+ },
143
+ });
144
+
145
+ const rawTx = AccountUpdateTransaction.fromBytes(Buffer.from(hex, "hex"));
146
+
147
+ expect(rawTx).toBeInstanceOf(AccountUpdateTransaction);
148
+ invariant(rawTx instanceof AccountUpdateTransaction, "AccountUpdateTransaction type guard");
149
+ expect(rawTx.accountId).toEqual(
150
+ AccountId.fromString(MAINNET_TEST_ACCOUNTS.withoutTokens.accountId),
151
+ );
152
+ expect(rawTx.transactionMemo).toBe(type);
153
+ },
154
+ );
155
+
124
156
  it("applies customFees properly", async () => {
125
157
  const customFees: FeeEstimation = {
126
158
  value: BigInt(1000),
@@ -220,6 +252,32 @@ describe("createApi", () => {
220
252
 
221
253
  expect(fees.value).toBeGreaterThanOrEqual(0n);
222
254
  });
255
+
256
+ it.each([
257
+ HEDERA_TRANSACTION_MODES.Delegate,
258
+ HEDERA_TRANSACTION_MODES.Undelegate,
259
+ HEDERA_TRANSACTION_MODES.ClaimRewards,
260
+ HEDERA_TRANSACTION_MODES.Redelegate,
261
+ ])("returns fee for %s transaction", async type => {
262
+ const fees = await api.estimateFees({
263
+ intentType: "transaction",
264
+ asset: {
265
+ type: "native",
266
+ },
267
+ type,
268
+ sender: MAINNET_TEST_ACCOUNTS.withoutTokens.accountId,
269
+ senderPublicKey: MAINNET_TEST_ACCOUNTS.withoutTokens.publicKey,
270
+ amount: BigInt(100),
271
+ recipient: MAINNET_TEST_ACCOUNTS.withTokens.accountId,
272
+ memo: {
273
+ kind: "text",
274
+ type: "string",
275
+ value: type,
276
+ },
277
+ });
278
+
279
+ expect(fees.value).toBeGreaterThanOrEqual(0n);
280
+ });
223
281
  });
224
282
 
225
283
  describe("getBalance", () => {
@@ -268,6 +326,29 @@ describe("createApi", () => {
268
326
  expect(associatedTokenWithoutBalance?.value).toBe(0n);
269
327
  expect(notAssociatedToken?.value).toBe(undefined);
270
328
  });
329
+
330
+ it("returns stake information for delegated account", async () => {
331
+ const balances = await api.getBalance(MAINNET_TEST_ACCOUNTS.activeStaking.accountId);
332
+ const nativeBalance = balances.find(b => b.asset.type === "native");
333
+
334
+ expect(nativeBalance?.stake).toMatchObject({
335
+ uid: MAINNET_TEST_ACCOUNTS.activeStaking.accountId,
336
+ address: MAINNET_TEST_ACCOUNTS.activeStaking.accountId,
337
+ asset: { type: "native" },
338
+ state: "active",
339
+ amount: expect.any(BigInt),
340
+ amountDeposited: expect.any(BigInt),
341
+ amountRewarded: expect.any(BigInt),
342
+ delegate: expect.any(String),
343
+ });
344
+ });
345
+
346
+ it("returns no stake information for non-delegated account", async () => {
347
+ const balances = await api.getBalance(MAINNET_TEST_ACCOUNTS.inactiveStaking.accountId);
348
+ const nativeBalance = balances.find(b => b.asset.type === "native");
349
+
350
+ expect(nativeBalance?.stake).toBe(undefined);
351
+ });
271
352
  });
272
353
 
273
354
  describe("getBlock", () => {
@@ -304,7 +385,7 @@ describe("createApi", () => {
304
385
  asset: {
305
386
  type: "native",
306
387
  },
307
- amount: -2000000n, // 3176695n - 1176695n fee
388
+ amount: -2000000n, // -3176695n + 1176695n fee
308
389
  },
309
390
  {
310
391
  type: "transfer",
@@ -395,6 +476,90 @@ describe("createApi", () => {
395
476
 
396
477
  expect(transaction?.details?.memo).toBe("test");
397
478
  });
479
+
480
+ it("correctly identifies staking operations in blocks", async () => {
481
+ const [delegateBlock, undelegateBlock, redelegateBlock, rewardsBlock] = await Promise.all([
482
+ api.getBlock(176220207),
483
+ api.getBlock(176220201),
484
+ api.getBlock(176220211),
485
+ api.getBlock(176397349),
486
+ ]);
487
+
488
+ const delegateOperations = delegateBlock.transactions
489
+ .flatMap(tx => tx.operations)
490
+ .filter(op => op.type === "other");
491
+ const undelegateOperations = undelegateBlock.transactions
492
+ .flatMap(tx => tx.operations)
493
+ .filter(op => op.type === "other");
494
+ const redelegateOperations = redelegateBlock.transactions
495
+ .flatMap(tx => tx.operations)
496
+ .filter(op => op.type === "other");
497
+ const rewardsTransaction = rewardsBlock.transactions.find(
498
+ tx => tx.hash === "Axie2CIoLVxhU6gcHEDJEdNbQ0BW1AqYXqUu97ume44JGvdfSTvF9go2Svc/lms8",
499
+ );
500
+
501
+ expect(delegateOperations).toEqual([
502
+ {
503
+ type: "other",
504
+ operationType: "DELEGATE",
505
+ stakedNodeId: 34,
506
+ previousStakedNodeId: null,
507
+ stakedAmount: BigInt(21083561014),
508
+ },
509
+ ]);
510
+ expect(undelegateOperations).toEqual([
511
+ {
512
+ type: "other",
513
+ operationType: "UNDELEGATE",
514
+ stakedNodeId: null,
515
+ previousStakedNodeId: 22,
516
+ stakedAmount: BigInt(21083561014),
517
+ },
518
+ ]);
519
+ expect(redelegateOperations).toEqual([
520
+ {
521
+ type: "other",
522
+ operationType: "REDELEGATE",
523
+ stakedNodeId: 6,
524
+ previousStakedNodeId: 34,
525
+ stakedAmount: BigInt(21083561014),
526
+ },
527
+ ]);
528
+ expect(rewardsTransaction?.operations).toEqual([
529
+ {
530
+ type: "transfer",
531
+ address: "0.0.800",
532
+ amount: BigInt(-6013422),
533
+ asset: {
534
+ type: "native",
535
+ },
536
+ },
537
+ {
538
+ type: "transfer",
539
+ address: "0.0.801",
540
+ amount: BigInt(1968210),
541
+ asset: {
542
+ type: "native",
543
+ },
544
+ },
545
+ {
546
+ type: "transfer",
547
+ address: "0.0.8835924",
548
+ amount: BigInt(4045212 + 1968210),
549
+ asset: {
550
+ type: "native",
551
+ },
552
+ },
553
+ {
554
+ type: "transfer",
555
+ address: "0.0.8835924",
556
+ amount: BigInt(6013422),
557
+ asset: {
558
+ type: "native",
559
+ },
560
+ },
561
+ ]);
562
+ });
398
563
  });
399
564
 
400
565
  describe("lastBlock", () => {
@@ -485,6 +650,46 @@ describe("createApi", () => {
485
650
  });
486
651
  });
487
652
 
653
+ it("returns staking operations with correct metadata", async () => {
654
+ const lastPagingToken = "1762202113.000000000";
655
+ const block = await api.lastBlock();
656
+ const [ops] = await api.listOperations(MAINNET_TEST_ACCOUNTS.activeStaking.accountId, {
657
+ minHeight: block.height,
658
+ order: "desc",
659
+ limit: 30,
660
+ lastPagingToken,
661
+ });
662
+
663
+ const rewardOp = ops.find(op => op.type === "REWARD");
664
+ const delegateOp = ops.find(op => op.type === "DELEGATE");
665
+ const undelegateOp = ops.find(op => op.type === "UNDELEGATE");
666
+ const redelegateOp = ops.find(op => op.type === "REDELEGATE");
667
+
668
+ expect(delegateOp?.value).toBeGreaterThan(BigInt(0));
669
+ expect(delegateOp?.tx.fees).toBeGreaterThan(BigInt(0));
670
+ expect(delegateOp?.details).toMatchObject({
671
+ previousStakingNodeId: null,
672
+ targetStakingNodeId: expect.any(Number),
673
+ stakedAmount: expect.any(BigInt),
674
+ });
675
+ expect(undelegateOp?.value).toBeGreaterThan(BigInt(0));
676
+ expect(undelegateOp?.tx.fees).toBeGreaterThan(BigInt(0));
677
+ expect(undelegateOp?.details).toMatchObject({
678
+ previousStakingNodeId: expect.any(Number),
679
+ targetStakingNodeId: null,
680
+ stakedAmount: expect.any(BigInt),
681
+ });
682
+ expect(redelegateOp?.value).toBeGreaterThan(BigInt(0));
683
+ expect(redelegateOp?.tx.fees).toBeGreaterThan(BigInt(0));
684
+ expect(redelegateOp?.details).toMatchObject({
685
+ previousStakingNodeId: expect.any(Number),
686
+ targetStakingNodeId: expect.any(Number),
687
+ stakedAmount: expect.any(BigInt),
688
+ });
689
+ expect(rewardOp?.value).toBeGreaterThan(BigInt(0));
690
+ expect(rewardOp?.tx.fees).toBe(BigInt(0));
691
+ });
692
+
488
693
  it.each(["desc", "asc"] as const)(
489
694
  "returns paginated operations for account with high activity (%s)",
490
695
  async order => {
@@ -533,4 +738,24 @@ describe("createApi", () => {
533
738
  },
534
739
  );
535
740
  });
741
+
742
+ describe("getValidators", () => {
743
+ it("returns validators with APY information", async () => {
744
+ const result = await api.getValidators();
745
+
746
+ expect(result.items.length).toBeGreaterThan(0);
747
+ result.items.forEach(item => {
748
+ expect(item).toMatchObject({
749
+ address: expect.any(String),
750
+ nodeId: expect.any(String),
751
+ name: expect.any(String),
752
+ description: expect.any(String),
753
+ balance: expect.any(BigInt),
754
+ apy: expect.any(Number),
755
+ });
756
+ expect(item.apy).toBeGreaterThanOrEqual(0);
757
+ expect(item.apy).toBeLessThanOrEqual(1);
758
+ });
759
+ });
760
+ });
536
761
  });
@@ -21,10 +21,13 @@ describe("createApi", () => {
21
21
  expect(api.combine).toBeInstanceOf(Function);
22
22
  expect(api.craftTransaction).toBeInstanceOf(Function);
23
23
  expect(api.estimateFees).toBeInstanceOf(Function);
24
+ expect(api.getAssetFromToken).toBeInstanceOf(Function);
24
25
  expect(api.getBalance).toBeInstanceOf(Function);
26
+ expect(api.getBlock).toBeInstanceOf(Function);
27
+ expect(api.getBlockInfo).toBeInstanceOf(Function);
28
+ expect(api.getTokenFromAsset).toBeInstanceOf(Function);
29
+ expect(api.getValidators).toBeInstanceOf(Function);
25
30
  expect(api.lastBlock).toBeInstanceOf(Function);
26
31
  expect(api.listOperations).toBeInstanceOf(Function);
27
- expect(api.getAssetFromToken).toBeInstanceOf(Function);
28
- expect(api.getTokenFromAsset).toBeInstanceOf(Function);
29
32
  });
30
33
  });
package/src/api/index.ts CHANGED
@@ -1,13 +1,11 @@
1
1
  import type {
2
2
  Api,
3
3
  CraftedTransaction,
4
- Cursor,
5
4
  Operation,
6
5
  Page,
7
6
  Reward,
8
7
  Stake,
9
8
  TransactionValidation,
10
- Validator,
11
9
  } from "@ledgerhq/coin-framework/api/index";
12
10
  import { getCryptoCurrencyById } from "@ledgerhq/cryptoassets/currencies";
13
11
  import coinConfig from "../config";
@@ -24,6 +22,7 @@ import {
24
22
  getAssetFromToken,
25
23
  getTokenFromAsset,
26
24
  lastBlock,
25
+ getValidators,
27
26
  } from "../logic/index";
28
27
  import { mapIntentToSDKOperation, getOperationValue } from "../logic/utils";
29
28
  import { apiClient } from "../network/api";
@@ -116,6 +115,9 @@ export function createApi(config: Record<string, never>): Api<HederaMemo> {
116
115
  ...liveOp.extra,
117
116
  ledgerOpType: liveOp.type,
118
117
  ...(asset.type !== "native" && { assetAmount: liveOp.value.toFixed(0) }),
118
+ ...(liveOp.extra.stakedAmount && {
119
+ stakedAmount: BigInt(liveOp.extra.stakedAmount.toFixed(0)),
120
+ }),
119
121
  },
120
122
  tx: {
121
123
  hash: liveOp.hash,
@@ -133,6 +135,7 @@ export function createApi(config: Record<string, never>): Api<HederaMemo> {
133
135
  },
134
136
  getTokenFromAsset: asset => getTokenFromAsset(currency, asset),
135
137
  getAssetFromToken,
138
+ getValidators: cursor => getValidators(cursor),
136
139
  validateIntent: async (_transactionIntent, _customFees): Promise<TransactionValidation> => {
137
140
  throw new Error("validateIntent is not supported");
138
141
  },
@@ -145,8 +148,5 @@ export function createApi(config: Record<string, never>): Api<HederaMemo> {
145
148
  getRewards: async (_address, _cursor): Promise<Page<Reward>> => {
146
149
  throw new Error("getRewards is not supported");
147
150
  },
148
- getValidators(_cursor?: Cursor): Promise<Page<Validator>> {
149
- throw new Error("getValidators is not supported");
150
- },
151
151
  };
152
152
  }