@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.
- package/.env.integ.test.example +2 -2
- package/.eslintrc.js +1 -0
- package/.unimportedrc.json +5 -10
- package/CHANGELOG.md +17 -0
- package/README.md +11 -0
- package/jest.config.js +1 -0
- package/lib/api/getBalance.integ.test.d.ts +2 -0
- package/lib/api/getBalance.integ.test.d.ts.map +1 -0
- package/lib/api/getBalance.integ.test.js +24 -0
- package/lib/api/getBalance.integ.test.js.map +1 -0
- package/lib/api/lastBlock.integ.test.d.ts +2 -0
- package/lib/api/lastBlock.integ.test.d.ts.map +1 -0
- package/lib/api/lastBlock.integ.test.js +35 -0
- package/lib/api/lastBlock.integ.test.js.map +1 -0
- package/lib/bridge/createTransaction.test.js +1 -1
- package/lib/bridge/createTransaction.test.js.map +1 -1
- package/lib/bridge/getTransactionStatus.js +1 -1
- package/lib/bridge/getTransactionStatus.js.map +1 -1
- package/lib/bridge/sync.d.ts.map +1 -1
- package/lib/bridge/sync.js +3 -3
- package/lib/bridge/sync.js.map +1 -1
- package/lib/common-logic/account/getBalance.d.ts +1 -1
- package/lib/common-logic/account/getBalance.d.ts.map +1 -1
- package/lib/common-logic/account/getBalance.js +21 -5
- package/lib/common-logic/account/getBalance.js.map +1 -1
- package/lib/common-logic/account/getBalance.unit.test.d.ts +2 -0
- package/lib/common-logic/account/getBalance.unit.test.d.ts.map +1 -0
- package/lib/common-logic/account/getBalance.unit.test.js +88 -0
- package/lib/common-logic/account/getBalance.unit.test.js.map +1 -0
- package/lib/common-logic/history/lastBlock.d.ts.map +1 -1
- package/lib/common-logic/history/lastBlock.js +7 -4
- package/lib/common-logic/history/lastBlock.js.map +1 -1
- package/lib/common-logic/history/lastBlock.test.d.ts +2 -0
- package/lib/common-logic/history/lastBlock.test.d.ts.map +1 -0
- package/lib/common-logic/history/lastBlock.test.js +43 -0
- package/lib/common-logic/history/lastBlock.test.js.map +1 -0
- package/lib/config.d.ts +11 -5
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js.map +1 -1
- package/lib/network/gateway.d.ts +77 -0
- package/lib/network/gateway.d.ts.map +1 -0
- package/lib/network/gateway.integ.test.d.ts +2 -0
- package/lib/network/gateway.integ.test.d.ts.map +1 -0
- package/lib/network/gateway.integ.test.js +61 -0
- package/lib/network/gateway.integ.test.js.map +1 -0
- package/lib/network/gateway.js +77 -0
- package/lib/network/gateway.js.map +1 -0
- package/lib/network/node.d.ts +2 -6
- package/lib/network/node.d.ts.map +1 -1
- package/lib/network/node.integ.test.d.ts +2 -0
- package/lib/network/node.integ.test.d.ts.map +1 -0
- package/lib/network/node.integ.test.js +42 -0
- package/lib/network/node.integ.test.js.map +1 -0
- package/lib/network/node.js +47 -24
- package/lib/network/node.js.map +1 -1
- package/lib/network/node.unit.test.d.ts +2 -0
- package/lib/network/node.unit.test.d.ts.map +1 -0
- package/lib/network/node.unit.test.js +31 -0
- package/lib/network/node.unit.test.js.map +1 -0
- package/lib/types/bridge.d.ts.map +1 -1
- package/lib-es/api/getBalance.integ.test.d.ts +2 -0
- package/lib-es/api/getBalance.integ.test.d.ts.map +1 -0
- package/lib-es/api/getBalance.integ.test.js +22 -0
- package/lib-es/api/getBalance.integ.test.js.map +1 -0
- package/lib-es/api/lastBlock.integ.test.d.ts +2 -0
- package/lib-es/api/lastBlock.integ.test.d.ts.map +1 -0
- package/lib-es/api/lastBlock.integ.test.js +33 -0
- package/lib-es/api/lastBlock.integ.test.js.map +1 -0
- package/lib-es/bridge/createTransaction.test.js +1 -1
- package/lib-es/bridge/createTransaction.test.js.map +1 -1
- package/lib-es/bridge/getTransactionStatus.js +1 -1
- package/lib-es/bridge/getTransactionStatus.js.map +1 -1
- package/lib-es/bridge/sync.d.ts.map +1 -1
- package/lib-es/bridge/sync.js +4 -4
- package/lib-es/bridge/sync.js.map +1 -1
- package/lib-es/common-logic/account/getBalance.d.ts +1 -1
- package/lib-es/common-logic/account/getBalance.d.ts.map +1 -1
- package/lib-es/common-logic/account/getBalance.js +18 -5
- package/lib-es/common-logic/account/getBalance.js.map +1 -1
- package/lib-es/common-logic/account/getBalance.unit.test.d.ts +2 -0
- package/lib-es/common-logic/account/getBalance.unit.test.d.ts.map +1 -0
- package/lib-es/common-logic/account/getBalance.unit.test.js +53 -0
- package/lib-es/common-logic/account/getBalance.unit.test.js.map +1 -0
- package/lib-es/common-logic/history/lastBlock.d.ts.map +1 -1
- package/lib-es/common-logic/history/lastBlock.js +5 -5
- package/lib-es/common-logic/history/lastBlock.js.map +1 -1
- package/lib-es/common-logic/history/lastBlock.test.d.ts +2 -0
- package/lib-es/common-logic/history/lastBlock.test.d.ts.map +1 -0
- package/lib-es/common-logic/history/lastBlock.test.js +38 -0
- package/lib-es/common-logic/history/lastBlock.test.js.map +1 -0
- package/lib-es/config.d.ts +11 -5
- package/lib-es/config.d.ts.map +1 -1
- package/lib-es/config.js.map +1 -1
- package/lib-es/network/gateway.d.ts +77 -0
- package/lib-es/network/gateway.d.ts.map +1 -0
- package/lib-es/network/gateway.integ.test.d.ts +2 -0
- package/lib-es/network/gateway.integ.test.d.ts.map +1 -0
- package/lib-es/network/gateway.integ.test.js +56 -0
- package/lib-es/network/gateway.integ.test.js.map +1 -0
- package/lib-es/network/gateway.js +65 -0
- package/lib-es/network/gateway.js.map +1 -0
- package/lib-es/network/node.d.ts +2 -6
- package/lib-es/network/node.d.ts.map +1 -1
- package/lib-es/network/node.integ.test.d.ts +2 -0
- package/lib-es/network/node.integ.test.d.ts.map +1 -0
- package/lib-es/network/node.integ.test.js +37 -0
- package/lib-es/network/node.integ.test.js.map +1 -0
- package/lib-es/network/node.js +40 -17
- package/lib-es/network/node.js.map +1 -1
- package/lib-es/network/node.unit.test.d.ts +2 -0
- package/lib-es/network/node.unit.test.d.ts.map +1 -0
- package/lib-es/network/node.unit.test.js +26 -0
- package/lib-es/network/node.unit.test.js.map +1 -0
- package/lib-es/types/bridge.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/api/getBalance.integ.test.ts +28 -0
- package/src/api/lastBlock.integ.test.ts +39 -0
- package/src/bridge/createTransaction.test.ts +1 -1
- package/src/bridge/getTransactionStatus.ts +1 -1
- package/src/bridge/sync.ts +6 -4
- package/src/common-logic/account/getBalance.ts +20 -5
- package/src/common-logic/account/getBalance.unit.test.ts +63 -0
- package/src/common-logic/history/lastBlock.test.ts +47 -0
- package/src/common-logic/history/lastBlock.ts +6 -5
- package/src/config.ts +14 -4
- package/src/network/gateway.integ.test.ts +76 -0
- package/src/network/gateway.ts +168 -0
- package/src/network/node.integ.test.ts +40 -0
- package/src/network/node.ts +45 -23
- package/src/network/node.unit.test.ts +29 -0
- package/src/types/bridge.ts +0 -1
package/src/network/node.ts
CHANGED
|
@@ -1,18 +1,54 @@
|
|
|
1
1
|
import { SimulationError } from "../types/errors";
|
|
2
|
-
import network from "@ledgerhq/live-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
|
-
//
|
|
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
|
|
44
|
-
|
|
45
|
-
const
|
|
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
|
-
|
|
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
|
+
});
|