@ledgerhq/coin-canton 0.3.0 → 0.4.0-nightly.0

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/.env.integ.test.example +2 -2
  2. package/.eslintrc.js +1 -0
  3. package/.unimportedrc.json +5 -10
  4. package/CHANGELOG.md +17 -0
  5. package/README.md +11 -0
  6. package/jest.config.js +1 -0
  7. package/lib/api/getBalance.integ.test.d.ts +2 -0
  8. package/lib/api/getBalance.integ.test.d.ts.map +1 -0
  9. package/lib/api/getBalance.integ.test.js +24 -0
  10. package/lib/api/getBalance.integ.test.js.map +1 -0
  11. package/lib/api/lastBlock.integ.test.d.ts +2 -0
  12. package/lib/api/lastBlock.integ.test.d.ts.map +1 -0
  13. package/lib/api/lastBlock.integ.test.js +35 -0
  14. package/lib/api/lastBlock.integ.test.js.map +1 -0
  15. package/lib/bridge/createTransaction.test.js +1 -1
  16. package/lib/bridge/createTransaction.test.js.map +1 -1
  17. package/lib/bridge/getTransactionStatus.js +1 -1
  18. package/lib/bridge/getTransactionStatus.js.map +1 -1
  19. package/lib/bridge/sync.d.ts.map +1 -1
  20. package/lib/bridge/sync.js +3 -3
  21. package/lib/bridge/sync.js.map +1 -1
  22. package/lib/common-logic/account/getBalance.d.ts +1 -1
  23. package/lib/common-logic/account/getBalance.d.ts.map +1 -1
  24. package/lib/common-logic/account/getBalance.js +21 -5
  25. package/lib/common-logic/account/getBalance.js.map +1 -1
  26. package/lib/common-logic/account/getBalance.unit.test.d.ts +2 -0
  27. package/lib/common-logic/account/getBalance.unit.test.d.ts.map +1 -0
  28. package/lib/common-logic/account/getBalance.unit.test.js +88 -0
  29. package/lib/common-logic/account/getBalance.unit.test.js.map +1 -0
  30. package/lib/common-logic/history/lastBlock.d.ts.map +1 -1
  31. package/lib/common-logic/history/lastBlock.js +7 -4
  32. package/lib/common-logic/history/lastBlock.js.map +1 -1
  33. package/lib/common-logic/history/lastBlock.test.d.ts +2 -0
  34. package/lib/common-logic/history/lastBlock.test.d.ts.map +1 -0
  35. package/lib/common-logic/history/lastBlock.test.js +43 -0
  36. package/lib/common-logic/history/lastBlock.test.js.map +1 -0
  37. package/lib/config.d.ts +11 -5
  38. package/lib/config.d.ts.map +1 -1
  39. package/lib/config.js.map +1 -1
  40. package/lib/network/gateway.d.ts +77 -0
  41. package/lib/network/gateway.d.ts.map +1 -0
  42. package/lib/network/gateway.integ.test.d.ts +2 -0
  43. package/lib/network/gateway.integ.test.d.ts.map +1 -0
  44. package/lib/network/gateway.integ.test.js +61 -0
  45. package/lib/network/gateway.integ.test.js.map +1 -0
  46. package/lib/network/gateway.js +77 -0
  47. package/lib/network/gateway.js.map +1 -0
  48. package/lib/network/node.d.ts +2 -6
  49. package/lib/network/node.d.ts.map +1 -1
  50. package/lib/network/node.integ.test.d.ts +2 -0
  51. package/lib/network/node.integ.test.d.ts.map +1 -0
  52. package/lib/network/node.integ.test.js +42 -0
  53. package/lib/network/node.integ.test.js.map +1 -0
  54. package/lib/network/node.js +47 -24
  55. package/lib/network/node.js.map +1 -1
  56. package/lib/network/node.unit.test.d.ts +2 -0
  57. package/lib/network/node.unit.test.d.ts.map +1 -0
  58. package/lib/network/node.unit.test.js +31 -0
  59. package/lib/network/node.unit.test.js.map +1 -0
  60. package/lib/types/bridge.d.ts.map +1 -1
  61. package/lib-es/api/getBalance.integ.test.d.ts +2 -0
  62. package/lib-es/api/getBalance.integ.test.d.ts.map +1 -0
  63. package/lib-es/api/getBalance.integ.test.js +22 -0
  64. package/lib-es/api/getBalance.integ.test.js.map +1 -0
  65. package/lib-es/api/lastBlock.integ.test.d.ts +2 -0
  66. package/lib-es/api/lastBlock.integ.test.d.ts.map +1 -0
  67. package/lib-es/api/lastBlock.integ.test.js +33 -0
  68. package/lib-es/api/lastBlock.integ.test.js.map +1 -0
  69. package/lib-es/bridge/createTransaction.test.js +1 -1
  70. package/lib-es/bridge/createTransaction.test.js.map +1 -1
  71. package/lib-es/bridge/getTransactionStatus.js +1 -1
  72. package/lib-es/bridge/getTransactionStatus.js.map +1 -1
  73. package/lib-es/bridge/sync.d.ts.map +1 -1
  74. package/lib-es/bridge/sync.js +4 -4
  75. package/lib-es/bridge/sync.js.map +1 -1
  76. package/lib-es/common-logic/account/getBalance.d.ts +1 -1
  77. package/lib-es/common-logic/account/getBalance.d.ts.map +1 -1
  78. package/lib-es/common-logic/account/getBalance.js +18 -5
  79. package/lib-es/common-logic/account/getBalance.js.map +1 -1
  80. package/lib-es/common-logic/account/getBalance.unit.test.d.ts +2 -0
  81. package/lib-es/common-logic/account/getBalance.unit.test.d.ts.map +1 -0
  82. package/lib-es/common-logic/account/getBalance.unit.test.js +53 -0
  83. package/lib-es/common-logic/account/getBalance.unit.test.js.map +1 -0
  84. package/lib-es/common-logic/history/lastBlock.d.ts.map +1 -1
  85. package/lib-es/common-logic/history/lastBlock.js +5 -5
  86. package/lib-es/common-logic/history/lastBlock.js.map +1 -1
  87. package/lib-es/common-logic/history/lastBlock.test.d.ts +2 -0
  88. package/lib-es/common-logic/history/lastBlock.test.d.ts.map +1 -0
  89. package/lib-es/common-logic/history/lastBlock.test.js +38 -0
  90. package/lib-es/common-logic/history/lastBlock.test.js.map +1 -0
  91. package/lib-es/config.d.ts +11 -5
  92. package/lib-es/config.d.ts.map +1 -1
  93. package/lib-es/config.js.map +1 -1
  94. package/lib-es/network/gateway.d.ts +77 -0
  95. package/lib-es/network/gateway.d.ts.map +1 -0
  96. package/lib-es/network/gateway.integ.test.d.ts +2 -0
  97. package/lib-es/network/gateway.integ.test.d.ts.map +1 -0
  98. package/lib-es/network/gateway.integ.test.js +56 -0
  99. package/lib-es/network/gateway.integ.test.js.map +1 -0
  100. package/lib-es/network/gateway.js +65 -0
  101. package/lib-es/network/gateway.js.map +1 -0
  102. package/lib-es/network/node.d.ts +2 -6
  103. package/lib-es/network/node.d.ts.map +1 -1
  104. package/lib-es/network/node.integ.test.d.ts +2 -0
  105. package/lib-es/network/node.integ.test.d.ts.map +1 -0
  106. package/lib-es/network/node.integ.test.js +37 -0
  107. package/lib-es/network/node.integ.test.js.map +1 -0
  108. package/lib-es/network/node.js +40 -17
  109. package/lib-es/network/node.js.map +1 -1
  110. package/lib-es/network/node.unit.test.d.ts +2 -0
  111. package/lib-es/network/node.unit.test.d.ts.map +1 -0
  112. package/lib-es/network/node.unit.test.js +26 -0
  113. package/lib-es/network/node.unit.test.js.map +1 -0
  114. package/lib-es/types/bridge.d.ts.map +1 -1
  115. package/package.json +8 -8
  116. package/src/api/getBalance.integ.test.ts +28 -0
  117. package/src/api/lastBlock.integ.test.ts +39 -0
  118. package/src/bridge/createTransaction.test.ts +1 -1
  119. package/src/bridge/getTransactionStatus.ts +1 -1
  120. package/src/bridge/sync.ts +6 -4
  121. package/src/common-logic/account/getBalance.ts +20 -5
  122. package/src/common-logic/account/getBalance.unit.test.ts +63 -0
  123. package/src/common-logic/history/lastBlock.test.ts +47 -0
  124. package/src/common-logic/history/lastBlock.ts +6 -5
  125. package/src/config.ts +14 -4
  126. package/src/network/gateway.integ.test.ts +76 -0
  127. package/src/network/gateway.ts +168 -0
  128. package/src/network/node.integ.test.ts +40 -0
  129. package/src/network/node.ts +45 -23
  130. package/src/network/node.unit.test.ts +29 -0
  131. package/src/types/bridge.ts +0 -1
@@ -1,18 +1,54 @@
1
1
  import { SimulationError } from "../types/errors";
2
- import network from "@ledgerhq/live-network/network";
2
+ import network from "@ledgerhq/live-network";
3
+ import type { LiveNetworkRequest } from "@ledgerhq/live-network/network";
3
4
  import { getEnv } from "@ledgerhq/live-env";
4
5
  import coinConfig from "../config";
5
6
  import { AccountInfoResponse, SubmitReponse } from "./types";
7
+ import crypto from "crypto";
6
8
 
7
- const getNodeUrl = () => coinConfig.getCoinConfig().nodeUrl;
9
+ const getNodeUrl = () => coinConfig.getCoinConfig().nodeUrl || "";
10
+ const getNetworkType = () => coinConfig.getCoinConfig().networkType;
8
11
 
9
- // NOTE: add NODE_BOILERPLATE to libs/env/src/env.ts
12
+ // JWT generation for localnet
13
+ export const generateJWT = () => {
14
+ const encode = (obj: Record<string, unknown>) =>
15
+ Buffer.from(JSON.stringify(obj))
16
+ .toString("base64")
17
+ .replace(/[+/=]/g, c => ({ "+": "-", "/": "_", "=": "" })[c] || "");
18
+ const header = encode({ alg: "HS256", typ: "JWT" });
19
+ const payload = encode({
20
+ sub: "ledger-api-user",
21
+ aud: "https://canton.network.global",
22
+ iss: "unsafe-issuer",
23
+ exp: Math.floor(Date.now() / 1000) + 3600,
24
+ iat: Math.floor(Date.now() / 1000),
25
+ });
26
+ const data = `${header}.${payload}`;
27
+ const signature = crypto
28
+ .createHmac("sha256", "unsafe")
29
+ .update(data)
30
+ .digest("base64")
31
+ .replace(/[+/=]/g, c => ({ "+": "-", "/": "_", "=": "" })[c] || "");
32
+ return `${data}.${signature}`;
33
+ };
34
+
35
+ const networkW = <T>(req: LiveNetworkRequest<T>) => {
36
+ const envJwt = process.env[getNetworkType().toUpperCase() + "_JWT"];
37
+ const bearerJwt = envJwt !== undefined ? envJwt : generateJWT();
38
+ return network<T>({
39
+ ...req,
40
+ headers: {
41
+ ...(req.headers || {}),
42
+ Authorization: `Bearer ${bearerJwt}`,
43
+ },
44
+ });
45
+ };
10
46
 
11
47
  // txPayload needs to be unsigned
12
48
  export const simulate = async (serializedTx: string): Promise<number> => {
13
49
  // @ts-expect-error: add NODE_BOILERPLATE to libs/env/src/env.ts
14
50
  const url = `${getEnv("NODE_BOILERPLATE")}/simulate`;
15
- const { data } = await network({
51
+ const { data } = await network<{ error: string; fees: number }>({
16
52
  url,
17
53
  method: "POST",
18
54
  data: {
@@ -30,7 +66,7 @@ export const getNextSequence = async (address: string): Promise<number> => {
30
66
  // @ts-expect-error: add NODE_BOILERPLATE to libs/env/src/env.ts
31
67
  const url = `${getEnv("NODE_BOILERPLATE")}/${address}/sequence`;
32
68
  try {
33
- const { data } = await network({
69
+ const { data } = await network<{ sequence: number }>({
34
70
  url,
35
71
  method: "GET",
36
72
  });
@@ -40,28 +76,14 @@ export const getNextSequence = async (address: string): Promise<number> => {
40
76
  }
41
77
  };
42
78
 
43
- export const getBlockHeight = async (): Promise<number> => {
44
- // @ts-expect-error: add NODE_BOILERPLATE to libs/env/src/env.ts
45
- const url = `${getEnv("NODE_BOILERPLATE")}/blockheight`;
46
- const { data } = await network({
79
+ export const getLedgerEnd = async (): Promise<number> => {
80
+ const url = `${getNodeUrl()}/state/ledger-end`;
81
+ const { data } = await networkW<{ offset: number }>({
47
82
  url,
48
83
  method: "GET",
49
84
  });
50
- return data.blockHeight;
51
- };
52
85
 
53
- export const getLastBlock = async (): Promise<{
54
- blockHeight: number;
55
- blockHash: string;
56
- timestamp: number;
57
- }> => {
58
- // @ts-expect-error: add NODE_BOILERPLATE to libs/env/src/env.ts
59
- const url = `${getEnv("NODE_BOILERPLATE")}/block/current`;
60
- const { data } = await network({
61
- url,
62
- method: "GET",
63
- });
64
- return data;
86
+ return data.offset;
65
87
  };
66
88
 
67
89
  export const submit = async (signedTx: string): Promise<SubmitReponse> => {
@@ -0,0 +1,29 @@
1
+ // myModule.test.ts
2
+ import { getLedgerEnd, generateJWT } from "./node";
3
+ import coinConfig from "../config";
4
+
5
+ jest.mock("@ledgerhq/live-network", () => jest.fn().mockResolvedValue({ data: { offset: 12345 } }));
6
+
7
+ describe("generateJWT", () => {
8
+ it("should generate a valid JWT format", () => {
9
+ const jwt = generateJWT();
10
+ expect(jwt.split(".")).toHaveLength(3);
11
+ });
12
+ });
13
+
14
+ describe("getLedgerEnd", () => {
15
+ beforeAll(() => {
16
+ coinConfig.setCoinConfig(() => ({
17
+ nodeUrl: "http://node-url",
18
+ networkType: "mainnet",
19
+ status: {
20
+ type: "active",
21
+ },
22
+ }));
23
+ });
24
+
25
+ it("should return the ledger offset from API response", async () => {
26
+ const result = await getLedgerEnd();
27
+ expect(result).toBe(12345);
28
+ });
29
+ });
@@ -1,5 +1,4 @@
1
1
  import type { BigNumber } from "bignumber.js";
2
- import type { Unit } from "@ledgerhq/types-cryptoassets";
3
2
  import type {
4
3
  TransactionCommon,
5
4
  TransactionCommonRaw,