@ledgerhq/coin-canton 0.8.0-nightly.7 → 0.8.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 (213) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +36 -66
  3. package/lib/api/getBalance.integ.test.d.ts +2 -0
  4. package/lib/api/getBalance.integ.test.d.ts.map +1 -0
  5. package/lib/api/getBalance.integ.test.js +28 -0
  6. package/lib/api/getBalance.integ.test.js.map +1 -0
  7. package/lib/api/index.test.d.ts +2 -0
  8. package/lib/api/index.test.d.ts.map +1 -0
  9. package/lib/api/index.test.js +16 -0
  10. package/lib/api/index.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 +22 -0
  14. package/lib/api/lastBlock.integ.test.js.map +1 -0
  15. package/lib/api/listOperations.integ.test.d.ts +2 -0
  16. package/lib/api/listOperations.integ.test.d.ts.map +1 -0
  17. package/lib/api/listOperations.integ.test.js +24 -0
  18. package/lib/api/listOperations.integ.test.js.map +1 -0
  19. package/lib/bridge/broadcast.test.d.ts +2 -0
  20. package/lib/bridge/broadcast.test.d.ts.map +1 -0
  21. package/lib/bridge/broadcast.test.js +44 -0
  22. package/lib/bridge/broadcast.test.js.map +1 -0
  23. package/lib/bridge/createTransaction.test.d.ts +2 -0
  24. package/lib/bridge/createTransaction.test.d.ts.map +1 -0
  25. package/lib/bridge/createTransaction.test.js +12 -0
  26. package/lib/bridge/createTransaction.test.js.map +1 -0
  27. package/lib/bridge/deviceTransactionConfig.test.d.ts +2 -0
  28. package/lib/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  29. package/lib/bridge/deviceTransactionConfig.test.js +22 -0
  30. package/lib/bridge/deviceTransactionConfig.test.js.map +1 -0
  31. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  32. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  33. package/lib/bridge/getTransactionStatus.test.js +365 -0
  34. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  35. package/lib/bridge/index.test.d.ts +2 -0
  36. package/lib/bridge/index.test.d.ts.map +1 -0
  37. package/lib/bridge/index.test.js +31 -0
  38. package/lib/bridge/index.test.js.map +1 -0
  39. package/lib/bridge/onboard.d.ts +1 -1
  40. package/lib/bridge/onboard.d.ts.map +1 -1
  41. package/lib/bridge/onboard.integ.test.d.ts +2 -0
  42. package/lib/bridge/onboard.integ.test.d.ts.map +1 -0
  43. package/lib/bridge/onboard.integ.test.js +182 -0
  44. package/lib/bridge/onboard.integ.test.js.map +1 -0
  45. package/lib/bridge/onboard.js +9 -23
  46. package/lib/bridge/onboard.js.map +1 -1
  47. package/lib/bridge/onboard.test.d.ts +2 -0
  48. package/lib/bridge/onboard.test.d.ts.map +1 -0
  49. package/lib/bridge/onboard.test.js +84 -0
  50. package/lib/bridge/onboard.test.js.map +1 -0
  51. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  52. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  53. package/lib/bridge/prepareTransaction.test.js +42 -0
  54. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  55. package/lib/bridge/sync.d.ts.map +1 -1
  56. package/lib/bridge/sync.integ.test.d.ts +2 -0
  57. package/lib/bridge/sync.integ.test.d.ts.map +1 -0
  58. package/lib/bridge/sync.integ.test.js +198 -0
  59. package/lib/bridge/sync.integ.test.js.map +1 -0
  60. package/lib/bridge/sync.js +2 -4
  61. package/lib/bridge/sync.js.map +1 -1
  62. package/lib/bridge/sync.test.d.ts +2 -0
  63. package/lib/bridge/sync.test.d.ts.map +1 -0
  64. package/lib/bridge/sync.test.js +201 -0
  65. package/lib/bridge/sync.test.js.map +1 -0
  66. package/lib/common-logic/account/getBalance.unit.test.d.ts +2 -0
  67. package/lib/common-logic/account/getBalance.unit.test.d.ts.map +1 -0
  68. package/lib/common-logic/account/getBalance.unit.test.js +91 -0
  69. package/lib/common-logic/account/getBalance.unit.test.js.map +1 -0
  70. package/lib/common-logic/history/lastBlock.test.d.ts +2 -0
  71. package/lib/common-logic/history/lastBlock.test.d.ts.map +1 -0
  72. package/lib/common-logic/history/lastBlock.test.js +46 -0
  73. package/lib/common-logic/history/lastBlock.test.js.map +1 -0
  74. package/lib/common-logic/transaction/broadcast.test.d.ts +2 -0
  75. package/lib/common-logic/transaction/broadcast.test.d.ts.map +1 -0
  76. package/lib/common-logic/transaction/broadcast.test.js +71 -0
  77. package/lib/common-logic/transaction/broadcast.test.js.map +1 -0
  78. package/lib/common-logic/transaction/combine.test.d.ts +2 -0
  79. package/lib/common-logic/transaction/combine.test.d.ts.map +1 -0
  80. package/lib/common-logic/transaction/combine.test.js +18 -0
  81. package/lib/common-logic/transaction/combine.test.js.map +1 -0
  82. package/lib/common-logic/transaction/estimateFees.test.d.ts +2 -0
  83. package/lib/common-logic/transaction/estimateFees.test.d.ts.map +1 -0
  84. package/lib/common-logic/transaction/estimateFees.test.js +72 -0
  85. package/lib/common-logic/transaction/estimateFees.test.js.map +1 -0
  86. package/lib/common-logic/utils.test.d.ts +2 -0
  87. package/lib/common-logic/utils.test.d.ts.map +1 -0
  88. package/lib/common-logic/utils.test.js +104 -0
  89. package/lib/common-logic/utils.test.js.map +1 -0
  90. package/lib/network/gateway.integ.test.d.ts +2 -0
  91. package/lib/network/gateway.integ.test.d.ts.map +1 -0
  92. package/lib/network/gateway.integ.test.js +190 -0
  93. package/lib/network/gateway.integ.test.js.map +1 -0
  94. package/lib/network/gateway.test.d.ts +2 -0
  95. package/lib/network/gateway.test.d.ts.map +1 -0
  96. package/lib/network/gateway.test.js +59 -0
  97. package/lib/network/gateway.test.js.map +1 -0
  98. package/lib/network/node.integ.test.d.ts +2 -0
  99. package/lib/network/node.integ.test.d.ts.map +1 -0
  100. package/lib/network/node.integ.test.js +44 -0
  101. package/lib/network/node.integ.test.js.map +1 -0
  102. package/lib/network/node.unit.test.d.ts +2 -0
  103. package/lib/network/node.unit.test.d.ts.map +1 -0
  104. package/lib/network/node.unit.test.js +32 -0
  105. package/lib/network/node.unit.test.js.map +1 -0
  106. package/lib-es/api/getBalance.integ.test.d.ts +2 -0
  107. package/lib-es/api/getBalance.integ.test.d.ts.map +1 -0
  108. package/lib-es/api/getBalance.integ.test.js +26 -0
  109. package/lib-es/api/getBalance.integ.test.js.map +1 -0
  110. package/lib-es/api/index.test.d.ts +2 -0
  111. package/lib-es/api/index.test.d.ts.map +1 -0
  112. package/lib-es/api/index.test.js +14 -0
  113. package/lib-es/api/index.test.js.map +1 -0
  114. package/lib-es/api/lastBlock.integ.test.d.ts +2 -0
  115. package/lib-es/api/lastBlock.integ.test.d.ts.map +1 -0
  116. package/lib-es/api/lastBlock.integ.test.js +20 -0
  117. package/lib-es/api/lastBlock.integ.test.js.map +1 -0
  118. package/lib-es/api/listOperations.integ.test.d.ts +2 -0
  119. package/lib-es/api/listOperations.integ.test.d.ts.map +1 -0
  120. package/lib-es/api/listOperations.integ.test.js +22 -0
  121. package/lib-es/api/listOperations.integ.test.js.map +1 -0
  122. package/lib-es/bridge/broadcast.test.d.ts +2 -0
  123. package/lib-es/bridge/broadcast.test.d.ts.map +1 -0
  124. package/lib-es/bridge/broadcast.test.js +42 -0
  125. package/lib-es/bridge/broadcast.test.js.map +1 -0
  126. package/lib-es/bridge/createTransaction.test.d.ts +2 -0
  127. package/lib-es/bridge/createTransaction.test.d.ts.map +1 -0
  128. package/lib-es/bridge/createTransaction.test.js +10 -0
  129. package/lib-es/bridge/createTransaction.test.js.map +1 -0
  130. package/lib-es/bridge/deviceTransactionConfig.test.d.ts +2 -0
  131. package/lib-es/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  132. package/lib-es/bridge/deviceTransactionConfig.test.js +17 -0
  133. package/lib-es/bridge/deviceTransactionConfig.test.js.map +1 -0
  134. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  135. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  136. package/lib-es/bridge/getTransactionStatus.test.js +360 -0
  137. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  138. package/lib-es/bridge/index.test.d.ts +2 -0
  139. package/lib-es/bridge/index.test.d.ts.map +1 -0
  140. package/lib-es/bridge/index.test.js +29 -0
  141. package/lib-es/bridge/index.test.js.map +1 -0
  142. package/lib-es/bridge/onboard.d.ts +1 -1
  143. package/lib-es/bridge/onboard.d.ts.map +1 -1
  144. package/lib-es/bridge/onboard.integ.test.d.ts +2 -0
  145. package/lib-es/bridge/onboard.integ.test.d.ts.map +1 -0
  146. package/lib-es/bridge/onboard.integ.test.js +177 -0
  147. package/lib-es/bridge/onboard.integ.test.js.map +1 -0
  148. package/lib-es/bridge/onboard.js +7 -21
  149. package/lib-es/bridge/onboard.js.map +1 -1
  150. package/lib-es/bridge/onboard.test.d.ts +2 -0
  151. package/lib-es/bridge/onboard.test.d.ts.map +1 -0
  152. package/lib-es/bridge/onboard.test.js +49 -0
  153. package/lib-es/bridge/onboard.test.js.map +1 -0
  154. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  155. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  156. package/lib-es/bridge/prepareTransaction.test.js +37 -0
  157. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  158. package/lib-es/bridge/sync.d.ts.map +1 -1
  159. package/lib-es/bridge/sync.integ.test.d.ts +2 -0
  160. package/lib-es/bridge/sync.integ.test.d.ts.map +1 -0
  161. package/lib-es/bridge/sync.integ.test.js +160 -0
  162. package/lib-es/bridge/sync.integ.test.js.map +1 -0
  163. package/lib-es/bridge/sync.js +3 -5
  164. package/lib-es/bridge/sync.js.map +1 -1
  165. package/lib-es/bridge/sync.test.d.ts +2 -0
  166. package/lib-es/bridge/sync.test.d.ts.map +1 -0
  167. package/lib-es/bridge/sync.test.js +163 -0
  168. package/lib-es/bridge/sync.test.js.map +1 -0
  169. package/lib-es/common-logic/account/getBalance.unit.test.d.ts +2 -0
  170. package/lib-es/common-logic/account/getBalance.unit.test.d.ts.map +1 -0
  171. package/lib-es/common-logic/account/getBalance.unit.test.js +56 -0
  172. package/lib-es/common-logic/account/getBalance.unit.test.js.map +1 -0
  173. package/lib-es/common-logic/history/lastBlock.test.d.ts +2 -0
  174. package/lib-es/common-logic/history/lastBlock.test.d.ts.map +1 -0
  175. package/lib-es/common-logic/history/lastBlock.test.js +41 -0
  176. package/lib-es/common-logic/history/lastBlock.test.js.map +1 -0
  177. package/lib-es/common-logic/transaction/broadcast.test.d.ts +2 -0
  178. package/lib-es/common-logic/transaction/broadcast.test.d.ts.map +1 -0
  179. package/lib-es/common-logic/transaction/broadcast.test.js +36 -0
  180. package/lib-es/common-logic/transaction/broadcast.test.js.map +1 -0
  181. package/lib-es/common-logic/transaction/combine.test.d.ts +2 -0
  182. package/lib-es/common-logic/transaction/combine.test.d.ts.map +1 -0
  183. package/lib-es/common-logic/transaction/combine.test.js +16 -0
  184. package/lib-es/common-logic/transaction/combine.test.js.map +1 -0
  185. package/lib-es/common-logic/transaction/estimateFees.test.d.ts +2 -0
  186. package/lib-es/common-logic/transaction/estimateFees.test.d.ts.map +1 -0
  187. package/lib-es/common-logic/transaction/estimateFees.test.js +37 -0
  188. package/lib-es/common-logic/transaction/estimateFees.test.js.map +1 -0
  189. package/lib-es/common-logic/utils.test.d.ts +2 -0
  190. package/lib-es/common-logic/utils.test.d.ts.map +1 -0
  191. package/lib-es/common-logic/utils.test.js +99 -0
  192. package/lib-es/common-logic/utils.test.js.map +1 -0
  193. package/lib-es/network/gateway.integ.test.d.ts +2 -0
  194. package/lib-es/network/gateway.integ.test.d.ts.map +1 -0
  195. package/lib-es/network/gateway.integ.test.js +185 -0
  196. package/lib-es/network/gateway.integ.test.js.map +1 -0
  197. package/lib-es/network/gateway.test.d.ts +2 -0
  198. package/lib-es/network/gateway.test.d.ts.map +1 -0
  199. package/lib-es/network/gateway.test.js +54 -0
  200. package/lib-es/network/gateway.test.js.map +1 -0
  201. package/lib-es/network/node.integ.test.d.ts +2 -0
  202. package/lib-es/network/node.integ.test.d.ts.map +1 -0
  203. package/lib-es/network/node.integ.test.js +39 -0
  204. package/lib-es/network/node.integ.test.js.map +1 -0
  205. package/lib-es/network/node.unit.test.d.ts +2 -0
  206. package/lib-es/network/node.unit.test.d.ts.map +1 -0
  207. package/lib-es/network/node.unit.test.js +27 -0
  208. package/lib-es/network/node.unit.test.js.map +1 -0
  209. package/package.json +9 -9
  210. package/src/bridge/onboard.test.ts +4 -4
  211. package/src/bridge/onboard.ts +7 -26
  212. package/src/bridge/sync.test.ts +1 -1
  213. package/src/bridge/sync.ts +3 -5
@@ -0,0 +1,185 @@
1
+ import coinConfig from "../config";
2
+ import { generateMockKeyPair } from "../test/cantonTestUtils";
3
+ import { getLedgerEnd, prepareOnboarding, getBalance, getOperations, getPartyById, getPartyByPubKey, submitOnboarding, prepareTapRequest, submitTapRequest, preparePreApprovalTransaction, submitPreApprovalTransaction, } from "./gateway";
4
+ const mockCurrency = {
5
+ id: "canton_network",
6
+ };
7
+ describe("gateway (devnet)", () => {
8
+ let onboardedAccount = null;
9
+ let prepareResponse = null;
10
+ beforeAll(async () => {
11
+ coinConfig.setCoinConfig(() => ({
12
+ gatewayUrl: "https://canton-gateway.api.live.ledger-test.com",
13
+ useGateway: true,
14
+ nativeInstrumentId: "Amulet",
15
+ networkType: "devnet",
16
+ status: {
17
+ type: "active",
18
+ },
19
+ }));
20
+ });
21
+ const getOnboardedAccount = () => {
22
+ if (!onboardedAccount) {
23
+ throw new Error("Shared onboarded account not available. Check beforeAll setup.");
24
+ }
25
+ return onboardedAccount;
26
+ };
27
+ describe("prepareOnboarding", () => {
28
+ it("should prepare onboarding", async () => {
29
+ // GIVEN
30
+ const keyPair = generateMockKeyPair();
31
+ // Save onboarded account for all tests that need a valid party ID
32
+ onboardedAccount = {
33
+ keyPair,
34
+ partyId: "", // set in next test
35
+ };
36
+ // WHEN
37
+ const response = await prepareOnboarding(mockCurrency, keyPair.publicKeyHex);
38
+ // THEN
39
+ expect(response).toHaveProperty("party_id");
40
+ expect(response).toHaveProperty("party_name");
41
+ expect(response).toHaveProperty("public_key_fingerprint");
42
+ expect(response).toHaveProperty("transactions");
43
+ expect(response.transactions).toHaveProperty("combined_hash");
44
+ expect(response.party_name).toBeDefined();
45
+ expect(typeof response.party_name).toBe("string");
46
+ expect(response.public_key_fingerprint).toBe(keyPair.fingerprint);
47
+ });
48
+ });
49
+ describe("submitOnboarding", () => {
50
+ it("should submit onboarding with proper signature", async () => {
51
+ // GIVEN
52
+ const { keyPair } = getOnboardedAccount();
53
+ // Save prepare response for next test
54
+ prepareResponse = await prepareOnboarding(mockCurrency, keyPair.publicKeyHex);
55
+ const signature = keyPair.sign(prepareResponse.transactions.combined_hash);
56
+ // WHEN
57
+ const response = await submitOnboarding(mockCurrency, keyPair.publicKeyHex, prepareResponse, signature);
58
+ // Save onboarded account for next tests that need a valid party ID
59
+ onboardedAccount = {
60
+ keyPair,
61
+ partyId: response.party.party_id,
62
+ };
63
+ // THEN
64
+ expect(response).toHaveProperty("party");
65
+ expect(response.party).toHaveProperty("party_id");
66
+ expect(response.party).toHaveProperty("public_key");
67
+ expect(response.party.public_key).toBe(keyPair.publicKeyHex);
68
+ }, 30000);
69
+ const testIfPrepared = prepareResponse ? it.skip : it;
70
+ testIfPrepared("should not throw when already onboarded", async () => {
71
+ // GIVEN
72
+ const { keyPair } = getOnboardedAccount();
73
+ const signature = keyPair.sign(prepareResponse.transactions.combined_hash);
74
+ // WHEN
75
+ const response = await submitOnboarding(mockCurrency, keyPair.publicKeyHex, prepareResponse, signature);
76
+ // THEN
77
+ expect(response).toHaveProperty("party");
78
+ expect(response.party).toHaveProperty("party_id");
79
+ expect(response.party).toHaveProperty("public_key");
80
+ expect(response.party.public_key).toBe(keyPair.publicKeyHex);
81
+ }, 30000);
82
+ });
83
+ describe("getLedgerEnd", () => {
84
+ it("should return ledger end", async () => {
85
+ const end = await getLedgerEnd(mockCurrency);
86
+ expect(end).toBeGreaterThanOrEqual(0);
87
+ });
88
+ });
89
+ describe("getBalance", () => {
90
+ it("should return user balance", async () => {
91
+ const { partyId } = getOnboardedAccount();
92
+ const balance = await getBalance(mockCurrency, partyId);
93
+ expect(balance.length).toBeGreaterThanOrEqual(0);
94
+ if (balance.length > 0) {
95
+ expect(balance[0].amount).toBeGreaterThanOrEqual(0);
96
+ expect(balance[0]).toHaveProperty("instrument_id");
97
+ }
98
+ });
99
+ });
100
+ describe("getPartyById", () => {
101
+ it("should return party info", async () => {
102
+ const party = await getPartyById(mockCurrency, "ldg::12208b12fa34be8a079bcbb68bba828e58313046c4208855b39885fab48661322e68");
103
+ expect(party).toBeDefined();
104
+ });
105
+ });
106
+ describe("getPartyByPubKey", () => {
107
+ it("should return party info", async () => {
108
+ const party = await getPartyByPubKey(mockCurrency, "c5cdb19624833f9a929a0125978c886ec4297320c14cea6bf667dc1d23a8e650");
109
+ expect(party).toBeDefined();
110
+ });
111
+ });
112
+ describe("getOperations", () => {
113
+ it("should return user transactions", async () => {
114
+ const { operations } = await getOperations(mockCurrency, "party-5f29bb32e9939939::12202becd8062a1d170209956cfd977fca76fcb4d2a892d08c77a7483f35a11d6440", {});
115
+ expect(operations.length).toBeGreaterThanOrEqual(0);
116
+ });
117
+ });
118
+ describe("prepareTapRequest", () => {
119
+ it.skip("should prepare tap request for onboarded party", async () => {
120
+ // GIVEN
121
+ const { partyId } = getOnboardedAccount();
122
+ const amount = 1000;
123
+ // WHEN
124
+ const response = await prepareTapRequest(mockCurrency, { partyId, amount });
125
+ // THEN
126
+ expect(response).toHaveProperty("serialized");
127
+ expect(response).toHaveProperty("hash");
128
+ expect(typeof response.serialized).toBe("string");
129
+ expect(typeof response.hash).toBe("string");
130
+ });
131
+ });
132
+ describe("submitTapRequest", () => {
133
+ it.skip("should submit tap request with proper signature", async () => {
134
+ // GIVEN
135
+ const { keyPair, partyId } = getOnboardedAccount();
136
+ const tapPrepareResponse = await prepareTapRequest(mockCurrency, {
137
+ partyId,
138
+ amount: 1000,
139
+ });
140
+ const tapSignature = keyPair.sign(tapPrepareResponse.hash);
141
+ // WHEN
142
+ const response = await submitTapRequest(mockCurrency, {
143
+ partyId,
144
+ serialized: tapPrepareResponse.serialized,
145
+ signature: tapSignature,
146
+ });
147
+ // THEN
148
+ expect(response).toHaveProperty("submission_id");
149
+ expect(response).toHaveProperty("update_id");
150
+ expect(typeof response.submission_id).toBe("string");
151
+ expect(typeof response.update_id).toBe("string");
152
+ });
153
+ });
154
+ describe("preparePreApprovalTransaction", () => {
155
+ it("should prepare pre-approval transaction for onboarded party", async () => {
156
+ // GIVEN
157
+ const { partyId } = getOnboardedAccount();
158
+ // WHEN
159
+ const response = await preparePreApprovalTransaction(mockCurrency, partyId);
160
+ // THEN
161
+ expect(response).toHaveProperty("serialized");
162
+ expect(response).toHaveProperty("hash");
163
+ expect(typeof response.serialized).toBe("string");
164
+ expect(typeof response.hash).toBe("string");
165
+ });
166
+ });
167
+ describe("submitPreApprovalTransaction", () => {
168
+ it("should submit pre-approval transaction with proper signature", async () => {
169
+ // GIVEN
170
+ const { keyPair, partyId } = getOnboardedAccount();
171
+ const preparedTransaction = await preparePreApprovalTransaction(mockCurrency, partyId);
172
+ const preApprovalSignature = keyPair.sign(preparedTransaction.hash);
173
+ // WHEN
174
+ const response = await submitPreApprovalTransaction(mockCurrency, partyId, preparedTransaction, preApprovalSignature);
175
+ // THEN
176
+ expect(response).toHaveProperty("isApproved");
177
+ expect(response).toHaveProperty("submissionId");
178
+ expect(response).toHaveProperty("updateId");
179
+ expect(response.isApproved).toBe(true);
180
+ expect(typeof response.submissionId).toBe("string");
181
+ expect(typeof response.updateId).toBe("string");
182
+ });
183
+ });
184
+ });
185
+ //# sourceMappingURL=gateway.integ.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.integ.test.js","sourceRoot":"","sources":["../../src/network/gateway.integ.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gateway.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.test.d.ts","sourceRoot":"","sources":["../../src/network/gateway.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { getBalance } from "./gateway";
2
+ import coinConfig from "../config";
3
+ jest.mock("@ledgerhq/live-network", () => ({
4
+ __esModule: true,
5
+ default: jest.fn(),
6
+ }));
7
+ import network from "@ledgerhq/live-network";
8
+ const mockBalances = [
9
+ {
10
+ instrument_id: "Amulet",
11
+ amount: "10000000000000000000000000000000000000000",
12
+ locked: false,
13
+ },
14
+ {
15
+ instrument_id: "LockedAmulet",
16
+ amount: "5000000000000000000000000000000000000000",
17
+ locked: true,
18
+ },
19
+ ];
20
+ describe("getBalance", () => {
21
+ const mockCurrency = {
22
+ id: "canton_network",
23
+ };
24
+ const mockNetwork = network;
25
+ beforeAll(() => {
26
+ coinConfig.setCoinConfig(() => ({
27
+ gatewayUrl: "https://canton-gateway.api.live.ledger-test.com",
28
+ useGateway: true,
29
+ networkType: "devnet",
30
+ nativeInstrumentId: "Amulet",
31
+ status: {
32
+ type: "active",
33
+ },
34
+ }));
35
+ });
36
+ beforeEach(() => {
37
+ jest.clearAllMocks();
38
+ });
39
+ it("should return an array of balances (backwards compatibility)", async () => {
40
+ mockNetwork.mockResolvedValue({ data: mockBalances, status: 200 });
41
+ const result = await getBalance(mockCurrency, "test-party-id");
42
+ expect(result).toEqual(mockBalances);
43
+ });
44
+ it("should return and object with balances property", async () => {
45
+ const mockResponse = {
46
+ at_round: 123,
47
+ balances: mockBalances,
48
+ };
49
+ mockNetwork.mockResolvedValue({ data: mockResponse, status: 200 });
50
+ const result = await getBalance(mockCurrency, "test-party-id");
51
+ expect(result).toEqual(mockResponse.balances);
52
+ });
53
+ });
54
+ //# sourceMappingURL=gateway.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.test.js","sourceRoot":"","sources":["../../src/network/gateway.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmD,MAAM,WAAW,CAAC;AAExF,OAAO,UAAU,MAAM,WAAW,CAAC;AAEnC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;CACnB,CAAC,CAAC,CAAC;AAEJ,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAE7C,MAAM,YAAY,GAAwB;IACxC;QACE,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,2CAA2C;QACnD,MAAM,EAAE,KAAK;KACd;IACD;QACE,aAAa,EAAE,cAAc;QAC7B,MAAM,EAAE,0CAA0C;QAClD,MAAM,EAAE,IAAI;KACb;CACF,CAAC;AAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,YAAY,GAAG;QACnB,EAAE,EAAE,gBAAgB;KACQ,CAAC;IAE/B,MAAM,WAAW,GAAG,OAA8C,CAAC;IAEnE,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9B,UAAU,EAAE,iDAAiD;YAC7D,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,QAAQ;YAC5B,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;SACF,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,WAAW,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,YAAY,GAAuB;YACvC,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,YAAY;SACvB,CAAC;QAEF,WAAW,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node.integ.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.integ.test.d.ts","sourceRoot":"","sources":["../../src/network/node.integ.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import coinConfig from "../config";
2
+ import { getLedgerEnd } from "./node";
3
+ // enable manually, as it requires a running node locally
4
+ describe.skip("Node (localnet)", () => {
5
+ beforeAll(() => {
6
+ coinConfig.setCoinConfig(() => ({
7
+ gatewayUrl: "http://gateway.url",
8
+ nodeUrl: "http://localhost:2975/v2",
9
+ nativeInstrumentId: "Amulet",
10
+ networkType: "localnet",
11
+ status: { type: "active" },
12
+ }));
13
+ });
14
+ describe("getLedgerEnd", () => {
15
+ it("should return ledger end", async () => {
16
+ const end = await getLedgerEnd();
17
+ expect(end).toBeGreaterThan(0);
18
+ });
19
+ });
20
+ });
21
+ // enable manually, as it requires an auth token in env variable
22
+ describe.skip("Node (devnet)", () => {
23
+ beforeAll(() => {
24
+ coinConfig.setCoinConfig(() => ({
25
+ nodeUrl: "https://wallet-validator-devnet-canton.ledger-test.com/v2",
26
+ networkType: "devnet",
27
+ nativeInstrumentId: "Amulet",
28
+ status: { type: "active" },
29
+ gatewayUrl: "http://gateway.url",
30
+ }));
31
+ });
32
+ describe("getLedgerEnd", () => {
33
+ it("should return ledger end", async () => {
34
+ const end = await getLedgerEnd();
35
+ expect(end).toBeGreaterThan(0);
36
+ });
37
+ });
38
+ });
39
+ //# sourceMappingURL=node.integ.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.integ.test.js","sourceRoot":"","sources":["../../src/network/node.integ.test.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,yDAAyD;AACzD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9B,UAAU,EAAE,oBAAoB;YAChC,OAAO,EAAE,0BAA0B;YACnC,kBAAkB,EAAE,QAAQ;YAC5B,WAAW,EAAE,UAAU;YACvB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,GAAG,GAAG,MAAM,YAAY,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gEAAgE;AAChE,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9B,OAAO,EAAE,2DAA2D;YACpE,WAAW,EAAE,QAAQ;YACrB,kBAAkB,EAAE,QAAQ;YAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,UAAU,EAAE,oBAAoB;SACjC,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,GAAG,GAAG,MAAM,YAAY,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.unit.test.d.ts","sourceRoot":"","sources":["../../src/network/node.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ // myModule.test.ts
2
+ import { getLedgerEnd, generateJWT } from "./node";
3
+ import coinConfig from "../config";
4
+ jest.mock("@ledgerhq/live-network", () => jest.fn().mockResolvedValue({ data: { offset: 12345 } }));
5
+ describe("generateJWT", () => {
6
+ it("should generate a valid JWT format", () => {
7
+ const jwt = generateJWT();
8
+ expect(jwt.split(".")).toHaveLength(3);
9
+ });
10
+ });
11
+ describe("getLedgerEnd", () => {
12
+ beforeAll(() => {
13
+ coinConfig.setCoinConfig(() => ({
14
+ nodeUrl: "http://node-url",
15
+ networkType: "mainnet",
16
+ nativeInstrumentId: "Amulet",
17
+ status: {
18
+ type: "active",
19
+ },
20
+ }));
21
+ });
22
+ it("should return the ledger offset from API response", async () => {
23
+ const result = await getLedgerEnd();
24
+ expect(result).toBe(12345);
25
+ });
26
+ });
27
+ //# sourceMappingURL=node.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.unit.test.js","sourceRoot":"","sources":["../../src/network/node.unit.test.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,UAAU,MAAM,WAAW,CAAC;AAEnC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpG,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9B,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,QAAQ;YAC5B,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;aACf;SACF,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-canton",
3
- "version": "0.8.0-nightly.7",
3
+ "version": "0.8.0",
4
4
  "description": "Canton coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -101,14 +101,14 @@
101
101
  "bignumber.js": "^9.1.2",
102
102
  "invariant": "^2.2.4",
103
103
  "rxjs": "^7.8.1",
104
- "@ledgerhq/coin-framework": "^6.7.0-nightly.7",
105
- "@ledgerhq/cryptoassets": "^13.31.0-nightly.7",
106
- "@ledgerhq/devices": "8.6.2-nightly.0",
107
- "@ledgerhq/errors": "^6.27.0-nightly.0",
108
- "@ledgerhq/live-env": "^2.19.0-nightly.2",
109
- "@ledgerhq/live-network": "^2.0.20-nightly.3",
104
+ "@ledgerhq/coin-framework": "^6.7.0",
105
+ "@ledgerhq/cryptoassets": "^13.31.0",
106
+ "@ledgerhq/devices": "8.6.1",
107
+ "@ledgerhq/errors": "^6.26.0",
108
+ "@ledgerhq/live-env": "^2.19.0",
109
+ "@ledgerhq/live-network": "^2.0.20",
110
110
  "@ledgerhq/logs": "^6.13.0",
111
- "@ledgerhq/types-live": "^6.87.0-nightly.5"
111
+ "@ledgerhq/types-live": "^6.87.0"
112
112
  },
113
113
  "devDependencies": {
114
114
  "@types/invariant": "^2.2.37",
@@ -118,7 +118,7 @@
118
118
  "jest": "^29.7.0",
119
119
  "ts-jest": "^29.1.1",
120
120
  "typescript": "^5.4.5",
121
- "@ledgerhq/types-cryptoassets": "^7.29.0-nightly.0",
121
+ "@ledgerhq/types-cryptoassets": "^7.29.0",
122
122
  "@ledgerhq/disable-network-setup": "^0.0.0"
123
123
  },
124
124
  "scripts": {
@@ -1,5 +1,5 @@
1
1
  import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
2
- import { isCantonCoinPreapproved } from "./onboard";
2
+ import { isAccountAuthorized } from "./onboard";
3
3
  import * as gateway from "../network/gateway";
4
4
 
5
5
  jest.mock("../network/gateway");
@@ -11,7 +11,7 @@ describe("onboard", () => {
11
11
  id: "canton_network",
12
12
  } as unknown as CryptoCurrency;
13
13
 
14
- describe("isCantonCoinPreapproved", () => {
14
+ describe("isAccountAuthorized", () => {
15
15
  it("should return true when contract exists and is not expired", async () => {
16
16
  // GIVEN
17
17
  const futureDate = new Date();
@@ -27,7 +27,7 @@ describe("onboard", () => {
27
27
  });
28
28
 
29
29
  // WHEN
30
- const result = await isCantonCoinPreapproved(mockCurrency, mockPartyId);
30
+ const result = await isAccountAuthorized(mockCurrency, mockPartyId);
31
31
 
32
32
  // THEN
33
33
  expect(result).toBe(true);
@@ -49,7 +49,7 @@ describe("onboard", () => {
49
49
  });
50
50
 
51
51
  // WHEN
52
- const result = await isCantonCoinPreapproved(mockCurrency, mockPartyId);
52
+ const result = await isAccountAuthorized(mockCurrency, mockPartyId);
53
53
 
54
54
  // THEN
55
55
  expect(result).toBe(false);
@@ -3,7 +3,6 @@ import { SignerContext } from "@ledgerhq/coin-framework/signer";
3
3
  import type { Account } from "@ledgerhq/types-live";
4
4
  import type { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
5
5
  import { log } from "@ledgerhq/logs";
6
- import { encodeAccountId } from "@ledgerhq/coin-framework/account/accountId";
7
6
  import {
8
7
  prepareOnboarding,
9
8
  submitOnboarding,
@@ -39,31 +38,15 @@ export const isAccountOnboarded = async (currency: CryptoCurrency, publicKey: st
39
38
  }
40
39
  };
41
40
 
42
- export const isCantonCoinPreapproved = async (currency: CryptoCurrency, partyId: string) => {
41
+ export const isAccountAuthorized = async (currency: CryptoCurrency, partyId: string) => {
43
42
  const { expires_at, receiver } = await getTransferPreApproval(currency, partyId);
44
43
  const isReceiver = receiver === partyId;
45
44
  const isExpired = new Date(expires_at) < new Date();
46
45
 
47
- const isPreapproved = !isExpired && isReceiver;
48
- return isPreapproved;
46
+ const isAuthorized = !isExpired && isReceiver;
47
+ return isAuthorized;
49
48
  };
50
49
 
51
- const createOnboardedAccount = (
52
- account: Account,
53
- partyId: string,
54
- currency: CryptoCurrency,
55
- ): Account => ({
56
- ...account,
57
- xpub: partyId,
58
- id: encodeAccountId({
59
- type: "js",
60
- version: "2",
61
- currencyId: currency.id,
62
- xpubOrAddress: partyId,
63
- derivationMode: account.derivationMode,
64
- }),
65
- });
66
-
67
50
  export const buildOnboardAccount =
68
51
  (signerContext: SignerContext<CantonSigner>) =>
69
52
  (
@@ -86,8 +69,7 @@ export const buildOnboardAccount =
86
69
 
87
70
  let { partyId } = await isAccountOnboarded(currency, publicKey);
88
71
  if (partyId) {
89
- const onboardedAccount = createOnboardedAccount(account, partyId, currency);
90
- o.next({ partyId, account: onboardedAccount }); // success
72
+ o.next({ partyId, account }); // success
91
73
  return;
92
74
  }
93
75
 
@@ -107,8 +89,7 @@ export const buildOnboardAccount =
107
89
 
108
90
  await submitOnboarding(currency, publicKey, preparedTransaction, signature);
109
91
 
110
- const onboardedAccount = createOnboardedAccount(account, partyId, currency);
111
- o.next({ partyId, account: onboardedAccount }); // success
92
+ o.next({ partyId, account }); // success
112
93
  }
113
94
 
114
95
  main().then(
@@ -132,9 +113,9 @@ export const buildAuthorizePreapproval =
132
113
  async function main() {
133
114
  o.next({ status: AuthorizeStatus.INIT });
134
115
 
135
- const isPreapproved = await isCantonCoinPreapproved(currency, partyId);
116
+ const isAuthorized = await isAccountAuthorized(currency, partyId);
136
117
 
137
- if (!isPreapproved) {
118
+ if (!isAuthorized) {
138
119
  o.next({ status: AuthorizeStatus.PREPARE });
139
120
 
140
121
  const preparedTransaction = await preparePreApprovalTransaction(currency, partyId);
@@ -18,7 +18,7 @@ const mockedGetLedgerEnd = gateway.getLedgerEnd as jest.Mock;
18
18
  const mockedGetOperations = gateway.getOperations as jest.Mock;
19
19
  const mockedResolver = resolver as jest.Mock;
20
20
  const mockedIsOnboarded = onboard.isAccountOnboarded as jest.Mock;
21
- const mockedIsAuthorized = onboard.isCantonCoinPreapproved as jest.Mock;
21
+ const mockedIsAuthorized = onboard.isAccountAuthorized as jest.Mock;
22
22
  const mockedCoinConfig = config.default.getCoinConfig as jest.Mock;
23
23
 
24
24
  const sampleCurrency = {
@@ -8,7 +8,7 @@ import { getBalance, getLedgerEnd, getOperations, type OperationInfo } from "../
8
8
  import coinConfig from "../config";
9
9
  import resolver from "../signer";
10
10
  import { CantonAccount, CantonSigner } from "../types";
11
- import { isAccountOnboarded, isCantonCoinPreapproved } from "./onboard";
11
+ import { isAccountOnboarded, isAccountAuthorized } from "./onboard";
12
12
 
13
13
  const txInfoToOperationAdapter =
14
14
  (accountId: string, partyId: string) =>
@@ -133,10 +133,8 @@ export function makeGetAccountShape(
133
133
  operations = mergeOps(oldOperations, newOperations);
134
134
  }
135
135
 
136
- const isPreapproved = xpubOrAddress
137
- ? await isCantonCoinPreapproved(currency, xpubOrAddress)
138
- : false;
139
- const used = isPreapproved && totalBalance.gt(0);
136
+ const isAuthorized = await isAccountAuthorized(currency, xpubOrAddress);
137
+ const used = isAuthorized && totalBalance.gt(0);
140
138
 
141
139
  const blockHeight = await getLedgerEnd(currency);
142
140