@ledgerhq/coin-canton 0.7.0 → 0.8.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 (132) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/lib/api/index.d.ts.map +1 -1
  3. package/lib/api/index.js +3 -0
  4. package/lib/api/index.js.map +1 -1
  5. package/lib/api/lastBlock.integ.test.js +0 -15
  6. package/lib/api/lastBlock.integ.test.js.map +1 -1
  7. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  8. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  9. package/lib/bridge/getTransactionStatus.test.js +365 -0
  10. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  11. package/lib/bridge/index.d.ts.map +1 -1
  12. package/lib/bridge/index.js +5 -5
  13. package/lib/bridge/index.js.map +1 -1
  14. package/lib/bridge/onboard.d.ts +11 -6
  15. package/lib/bridge/onboard.d.ts.map +1 -1
  16. package/lib/bridge/onboard.integ.test.js +49 -27
  17. package/lib/bridge/onboard.integ.test.js.map +1 -1
  18. package/lib/bridge/onboard.js +45 -152
  19. package/lib/bridge/onboard.js.map +1 -1
  20. package/lib/bridge/signOperation.d.ts.map +1 -1
  21. package/lib/bridge/signOperation.js +5 -5
  22. package/lib/bridge/signOperation.js.map +1 -1
  23. package/lib/bridge/sync.d.ts +3 -2
  24. package/lib/bridge/sync.d.ts.map +1 -1
  25. package/lib/bridge/sync.integ.test.js +39 -17
  26. package/lib/bridge/sync.integ.test.js.map +1 -1
  27. package/lib/bridge/sync.js +71 -57
  28. package/lib/bridge/sync.js.map +1 -1
  29. package/lib/common-logic/utils.d.ts.map +1 -1
  30. package/lib/common-logic/utils.js +3 -1
  31. package/lib/common-logic/utils.js.map +1 -1
  32. package/lib/common-logic/utils.test.d.ts +2 -0
  33. package/lib/common-logic/utils.test.d.ts.map +1 -0
  34. package/lib/common-logic/utils.test.js +104 -0
  35. package/lib/common-logic/utils.test.js.map +1 -0
  36. package/lib/config.d.ts +1 -1
  37. package/lib/config.d.ts.map +1 -1
  38. package/lib/network/gateway.d.ts +14 -10
  39. package/lib/network/gateway.d.ts.map +1 -1
  40. package/lib/network/gateway.integ.test.js +31 -17
  41. package/lib/network/gateway.integ.test.js.map +1 -1
  42. package/lib/network/gateway.js +34 -16
  43. package/lib/network/gateway.js.map +1 -1
  44. package/lib/network/gateway.test.d.ts +2 -0
  45. package/lib/network/gateway.test.d.ts.map +1 -0
  46. package/lib/network/gateway.test.js +59 -0
  47. package/lib/network/gateway.test.js.map +1 -0
  48. package/lib/types/bridge.d.ts +6 -16
  49. package/lib/types/bridge.d.ts.map +1 -1
  50. package/lib/types/onboard.d.ts +5 -5
  51. package/lib/types/onboard.d.ts.map +1 -1
  52. package/lib/types/onboard.js +10 -10
  53. package/lib/types/onboard.js.map +1 -1
  54. package/lib-es/api/index.d.ts.map +1 -1
  55. package/lib-es/api/index.js +3 -0
  56. package/lib-es/api/index.js.map +1 -1
  57. package/lib-es/api/lastBlock.integ.test.js +0 -15
  58. package/lib-es/api/lastBlock.integ.test.js.map +1 -1
  59. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  60. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  61. package/lib-es/bridge/getTransactionStatus.test.js +360 -0
  62. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  63. package/lib-es/bridge/index.d.ts.map +1 -1
  64. package/lib-es/bridge/index.js +6 -6
  65. package/lib-es/bridge/index.js.map +1 -1
  66. package/lib-es/bridge/onboard.d.ts +11 -6
  67. package/lib-es/bridge/onboard.d.ts.map +1 -1
  68. package/lib-es/bridge/onboard.integ.test.js +37 -15
  69. package/lib-es/bridge/onboard.integ.test.js.map +1 -1
  70. package/lib-es/bridge/onboard.js +44 -152
  71. package/lib-es/bridge/onboard.js.map +1 -1
  72. package/lib-es/bridge/signOperation.d.ts.map +1 -1
  73. package/lib-es/bridge/signOperation.js +5 -5
  74. package/lib-es/bridge/signOperation.js.map +1 -1
  75. package/lib-es/bridge/sync.d.ts +3 -2
  76. package/lib-es/bridge/sync.d.ts.map +1 -1
  77. package/lib-es/bridge/sync.integ.test.js +34 -12
  78. package/lib-es/bridge/sync.integ.test.js.map +1 -1
  79. package/lib-es/bridge/sync.js +71 -56
  80. package/lib-es/bridge/sync.js.map +1 -1
  81. package/lib-es/common-logic/utils.d.ts.map +1 -1
  82. package/lib-es/common-logic/utils.js +3 -1
  83. package/lib-es/common-logic/utils.js.map +1 -1
  84. package/lib-es/common-logic/utils.test.d.ts +2 -0
  85. package/lib-es/common-logic/utils.test.d.ts.map +1 -0
  86. package/lib-es/common-logic/utils.test.js +99 -0
  87. package/lib-es/common-logic/utils.test.js.map +1 -0
  88. package/lib-es/config.d.ts +1 -1
  89. package/lib-es/config.d.ts.map +1 -1
  90. package/lib-es/network/gateway.d.ts +14 -10
  91. package/lib-es/network/gateway.d.ts.map +1 -1
  92. package/lib-es/network/gateway.integ.test.js +31 -17
  93. package/lib-es/network/gateway.integ.test.js.map +1 -1
  94. package/lib-es/network/gateway.js +34 -16
  95. package/lib-es/network/gateway.js.map +1 -1
  96. package/lib-es/network/gateway.test.d.ts +2 -0
  97. package/lib-es/network/gateway.test.d.ts.map +1 -0
  98. package/lib-es/network/gateway.test.js +54 -0
  99. package/lib-es/network/gateway.test.js.map +1 -0
  100. package/lib-es/types/bridge.d.ts +6 -16
  101. package/lib-es/types/bridge.d.ts.map +1 -1
  102. package/lib-es/types/onboard.d.ts +5 -5
  103. package/lib-es/types/onboard.d.ts.map +1 -1
  104. package/lib-es/types/onboard.js +9 -9
  105. package/lib-es/types/onboard.js.map +1 -1
  106. package/package.json +6 -5
  107. package/src/api/index.ts +9 -0
  108. package/src/api/lastBlock.integ.test.ts +0 -18
  109. package/src/bridge/getTransactionStatus.test.ts +446 -0
  110. package/src/bridge/index.ts +6 -6
  111. package/src/bridge/onboard.integ.test.ts +44 -31
  112. package/src/bridge/onboard.ts +61 -209
  113. package/src/bridge/signOperation.ts +5 -6
  114. package/src/bridge/sync.integ.test.ts +38 -13
  115. package/src/bridge/sync.ts +90 -72
  116. package/src/common-logic/utils.test.ts +108 -0
  117. package/src/common-logic/utils.ts +4 -1
  118. package/src/config.ts +1 -1
  119. package/src/network/gateway.integ.test.ts +48 -21
  120. package/src/network/gateway.test.ts +66 -0
  121. package/src/network/gateway.ts +60 -37
  122. package/src/types/bridge.ts +8 -19
  123. package/src/types/onboard.ts +5 -5
  124. package/lib/bridge/serialization.d.ts +0 -4
  125. package/lib/bridge/serialization.d.ts.map +0 -1
  126. package/lib/bridge/serialization.js +0 -31
  127. package/lib/bridge/serialization.js.map +0 -1
  128. package/lib-es/bridge/serialization.d.ts +0 -4
  129. package/lib-es/bridge/serialization.d.ts.map +0 -1
  130. package/lib-es/bridge/serialization.js +0 -27
  131. package/lib-es/bridge/serialization.js.map +0 -1
  132. package/src/bridge/serialization.ts +0 -36
@@ -0,0 +1,360 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { AmountRequired, FeeNotLoaded, FeeRequired, FeeTooHigh, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalanceBecauseDestinationNotCreated, NotEnoughSpendableBalance, RecipientRequired, } from "@ledgerhq/errors";
3
+ import { getTransactionStatus } from "./getTransactionStatus";
4
+ import coinConfig from "../config";
5
+ // Mock the coin config
6
+ jest.mock("../config", () => ({
7
+ getCoinConfig: jest.fn(),
8
+ }));
9
+ const mockCoinConfig = jest.mocked(coinConfig);
10
+ describe("getTransactionStatus", () => {
11
+ const mockCurrency = {
12
+ id: "canton_network",
13
+ name: "Canton Network",
14
+ family: "canton",
15
+ units: [
16
+ {
17
+ name: "Canton",
18
+ code: "CANTON",
19
+ magnitude: 8,
20
+ },
21
+ ],
22
+ ticker: "CANTON",
23
+ scheme: "canton",
24
+ color: "#000000",
25
+ type: "CryptoCurrency",
26
+ managerAppName: "Canton",
27
+ coinType: 0,
28
+ disableCountervalue: false,
29
+ delisted: false,
30
+ keywords: ["canton"],
31
+ explorerViews: [],
32
+ terminated: {
33
+ link: "",
34
+ },
35
+ };
36
+ const mockAccount = {
37
+ id: "test-account-id",
38
+ seedIdentifier: "test-seed-identifier",
39
+ currency: mockCurrency,
40
+ balance: new BigNumber(1000), // 1000 units
41
+ spendableBalance: new BigNumber(1000),
42
+ freshAddress: "test::123",
43
+ freshAddressPath: "44'/60'/0'/0/0",
44
+ index: 0,
45
+ derivationMode: "canton",
46
+ used: true,
47
+ operations: [],
48
+ pendingOperations: [],
49
+ lastSyncDate: new Date(),
50
+ creationDate: new Date(),
51
+ operationsCount: 0,
52
+ blockHeight: 100,
53
+ balanceHistoryCache: {
54
+ HOUR: { latestDate: null, balances: [] },
55
+ DAY: { latestDate: null, balances: [] },
56
+ WEEK: { latestDate: null, balances: [] },
57
+ },
58
+ swapHistory: [],
59
+ nfts: [],
60
+ subAccounts: [],
61
+ type: "Account",
62
+ };
63
+ beforeEach(() => {
64
+ jest.clearAllMocks();
65
+ mockCoinConfig.getCoinConfig.mockReturnValue({
66
+ minReserve: 100, // 100 units minimum reserve
67
+ networkType: "mainnet",
68
+ status: { type: "active" },
69
+ nativeInstrumentId: "Amulet",
70
+ });
71
+ });
72
+ describe("fee validation", () => {
73
+ it("should return FeeNotLoaded error when fee is not provided", async () => {
74
+ const transaction = {
75
+ family: "canton",
76
+ amount: new BigNumber(100),
77
+ recipient: "valid::123",
78
+ fee: null,
79
+ tokenId: "",
80
+ };
81
+ const result = await getTransactionStatus(mockAccount, transaction);
82
+ expect(result.errors.fee).toBeInstanceOf(FeeNotLoaded);
83
+ expect(result.warnings).toEqual({});
84
+ });
85
+ it("should return FeeRequired error when fee is zero", async () => {
86
+ const transaction = {
87
+ family: "canton",
88
+ amount: new BigNumber(100),
89
+ recipient: "valid::123",
90
+ fee: new BigNumber(0),
91
+ tokenId: "",
92
+ };
93
+ const result = await getTransactionStatus(mockAccount, transaction);
94
+ expect(result.errors.fee).toBeInstanceOf(FeeRequired);
95
+ expect(result.warnings).toEqual({});
96
+ });
97
+ it("should add FeeTooHigh warning when fee is more than 10 times the amount", async () => {
98
+ const transaction = {
99
+ family: "canton",
100
+ amount: new BigNumber(100), // Use larger amount to avoid balance issues
101
+ recipient: "valid::123",
102
+ fee: new BigNumber(1500), // 15x the amount
103
+ tokenId: "",
104
+ };
105
+ const result = await getTransactionStatus(mockAccount, transaction);
106
+ expect(result.warnings.feeTooHigh).toBeInstanceOf(FeeTooHigh);
107
+ // Don't check for empty errors since there might be balance issues
108
+ });
109
+ it("should not add FeeTooHigh warning when fee is reasonable", async () => {
110
+ const transaction = {
111
+ family: "canton",
112
+ amount: new BigNumber(100),
113
+ recipient: "valid::123",
114
+ fee: new BigNumber(10), // 0.1x the amount
115
+ tokenId: "",
116
+ };
117
+ const result = await getTransactionStatus(mockAccount, transaction);
118
+ expect(result.warnings).toEqual({});
119
+ expect(result.errors).toEqual({});
120
+ });
121
+ });
122
+ describe("balance validation", () => {
123
+ it("should return NotEnoughSpendableBalance error when total spent exceeds balance minus reserve", async () => {
124
+ const transaction = {
125
+ family: "canton",
126
+ amount: new BigNumber(950), // 950 + 10 fee = 960, but balance is 1000 and reserve is 100
127
+ recipient: "valid::123",
128
+ fee: new BigNumber(10),
129
+ tokenId: "",
130
+ };
131
+ const result = await getTransactionStatus(mockAccount, transaction);
132
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughSpendableBalance);
133
+ });
134
+ it("should return NotEnoughBalanceBecauseDestinationNotCreated error when amount is below reserve", async () => {
135
+ const transaction = {
136
+ family: "canton",
137
+ amount: new BigNumber(50), // Below reserve amount of 100
138
+ recipient: "valid::123",
139
+ fee: new BigNumber(10),
140
+ tokenId: "",
141
+ };
142
+ const result = await getTransactionStatus(mockAccount, transaction);
143
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughBalanceBecauseDestinationNotCreated);
144
+ });
145
+ it("should pass balance validation when transaction is within limits", async () => {
146
+ const transaction = {
147
+ family: "canton",
148
+ amount: new BigNumber(800), // 800 + 10 fee = 810, balance is 1000, reserve is 100, so 900 available
149
+ recipient: "valid::123",
150
+ fee: new BigNumber(10),
151
+ tokenId: "",
152
+ };
153
+ const result = await getTransactionStatus(mockAccount, transaction);
154
+ expect(result.errors.amount).toBeUndefined();
155
+ });
156
+ });
157
+ describe("recipient validation", () => {
158
+ it("should return RecipientRequired error when recipient is missing", async () => {
159
+ const transaction = {
160
+ family: "canton",
161
+ amount: new BigNumber(100),
162
+ recipient: "",
163
+ fee: new BigNumber(10),
164
+ tokenId: "",
165
+ };
166
+ const result = await getTransactionStatus(mockAccount, transaction);
167
+ expect(result.errors.recipient).toBeInstanceOf(RecipientRequired);
168
+ });
169
+ it("should return InvalidAddressBecauseDestinationIsAlsoSource error when sending to self", async () => {
170
+ const transaction = {
171
+ family: "canton",
172
+ amount: new BigNumber(100),
173
+ recipient: "test::123", // Same as account.freshAddress
174
+ fee: new BigNumber(10),
175
+ tokenId: "",
176
+ };
177
+ const result = await getTransactionStatus(mockAccount, transaction);
178
+ expect(result.errors.recipient).toBeInstanceOf(InvalidAddressBecauseDestinationIsAlsoSource);
179
+ });
180
+ it("should return InvalidAddress error when recipient is invalid", async () => {
181
+ const transaction = {
182
+ family: "canton",
183
+ amount: new BigNumber(100),
184
+ recipient: "invalid-address",
185
+ fee: new BigNumber(10),
186
+ tokenId: "",
187
+ };
188
+ const result = await getTransactionStatus(mockAccount, transaction);
189
+ expect(result.errors.recipient).toBeInstanceOf(InvalidAddress);
190
+ });
191
+ it("should pass recipient validation when recipient is valid", async () => {
192
+ const transaction = {
193
+ family: "canton",
194
+ amount: new BigNumber(100),
195
+ recipient: "valid::456",
196
+ fee: new BigNumber(10),
197
+ tokenId: "",
198
+ };
199
+ const result = await getTransactionStatus(mockAccount, transaction);
200
+ expect(result.errors.recipient).toBeUndefined();
201
+ });
202
+ });
203
+ describe("amount validation", () => {
204
+ it("should return AmountRequired error when amount is zero", async () => {
205
+ // Create a scenario where there are no other amount errors
206
+ // Use a high balance and amount above reserve to avoid other amount errors
207
+ const accountWithHighBalance = {
208
+ ...mockAccount,
209
+ balance: new BigNumber(10000), // High balance to avoid balance errors
210
+ };
211
+ // Set a high reserve to avoid the NotEnoughBalanceBecauseDestinationNotCreated error
212
+ mockCoinConfig.getCoinConfig.mockReturnValue({
213
+ minReserve: 0, // Set reserve to 0 to avoid reserve-related errors
214
+ networkType: "mainnet",
215
+ status: { type: "active" },
216
+ nativeInstrumentId: "Amulet",
217
+ });
218
+ const transaction = {
219
+ family: "canton",
220
+ amount: new BigNumber(0),
221
+ recipient: "valid::123",
222
+ fee: new BigNumber(10),
223
+ tokenId: "",
224
+ };
225
+ const result = await getTransactionStatus(accountWithHighBalance, transaction);
226
+ expect(result.errors.amount).toBeInstanceOf(AmountRequired);
227
+ });
228
+ it("should not return AmountRequired error when amount is positive", async () => {
229
+ const transaction = {
230
+ family: "canton",
231
+ amount: new BigNumber(100),
232
+ recipient: "valid::123",
233
+ fee: new BigNumber(10),
234
+ tokenId: "",
235
+ };
236
+ const result = await getTransactionStatus(mockAccount, transaction);
237
+ expect(result.errors.amount).toBeUndefined();
238
+ });
239
+ });
240
+ describe("return values", () => {
241
+ it("should return correct estimatedFees, amount, and totalSpent", async () => {
242
+ const transaction = {
243
+ family: "canton",
244
+ amount: new BigNumber(100),
245
+ recipient: "valid::123",
246
+ fee: new BigNumber(10),
247
+ tokenId: "",
248
+ };
249
+ const result = await getTransactionStatus(mockAccount, transaction);
250
+ expect(result.estimatedFees).toEqual(new BigNumber(10));
251
+ expect(result.amount).toEqual(new BigNumber(100));
252
+ expect(result.totalSpent).toEqual(new BigNumber(110));
253
+ });
254
+ it("should return empty errors and warnings when transaction is valid", async () => {
255
+ const transaction = {
256
+ family: "canton",
257
+ amount: new BigNumber(100),
258
+ recipient: "valid::123",
259
+ fee: new BigNumber(10),
260
+ tokenId: "",
261
+ };
262
+ const result = await getTransactionStatus(mockAccount, transaction);
263
+ expect(result.errors).toEqual({});
264
+ expect(result.warnings).toEqual({});
265
+ });
266
+ });
267
+ describe("edge cases", () => {
268
+ it("should handle account with zero balance", async () => {
269
+ const accountWithZeroBalance = {
270
+ ...mockAccount,
271
+ balance: new BigNumber(0),
272
+ };
273
+ const transaction = {
274
+ family: "canton",
275
+ amount: new BigNumber(50),
276
+ recipient: "valid::123",
277
+ fee: new BigNumber(10),
278
+ tokenId: "",
279
+ };
280
+ const result = await getTransactionStatus(accountWithZeroBalance, transaction);
281
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughSpendableBalance);
282
+ });
283
+ it("should handle account with balance exactly equal to reserve", async () => {
284
+ const accountWithReserveBalance = {
285
+ ...mockAccount,
286
+ balance: new BigNumber(100), // Exactly equal to reserve
287
+ };
288
+ const transaction = {
289
+ family: "canton",
290
+ amount: new BigNumber(50),
291
+ recipient: "valid::123",
292
+ fee: new BigNumber(10),
293
+ tokenId: "",
294
+ };
295
+ const result = await getTransactionStatus(accountWithReserveBalance, transaction);
296
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughSpendableBalance);
297
+ });
298
+ it("should handle zero reserve amount", async () => {
299
+ mockCoinConfig.getCoinConfig.mockReturnValue({
300
+ minReserve: 0,
301
+ networkType: "mainnet",
302
+ status: { type: "active" },
303
+ nativeInstrumentId: "Amulet",
304
+ });
305
+ const transaction = {
306
+ family: "canton",
307
+ amount: new BigNumber(50),
308
+ recipient: "valid::123",
309
+ fee: new BigNumber(10),
310
+ tokenId: "",
311
+ };
312
+ const result = await getTransactionStatus(mockAccount, transaction);
313
+ expect(result.errors.amount).toBeUndefined();
314
+ });
315
+ it("should handle undefined reserve amount", async () => {
316
+ mockCoinConfig.getCoinConfig.mockReturnValue({
317
+ networkType: "mainnet",
318
+ status: { type: "active" },
319
+ nativeInstrumentId: "Amulet",
320
+ });
321
+ const transaction = {
322
+ family: "canton",
323
+ amount: new BigNumber(50),
324
+ recipient: "valid::123",
325
+ fee: new BigNumber(10),
326
+ tokenId: "",
327
+ };
328
+ const result = await getTransactionStatus(mockAccount, transaction);
329
+ expect(result.errors.amount).toBeUndefined();
330
+ });
331
+ });
332
+ describe("multiple validation errors", () => {
333
+ it("should return multiple errors when multiple validations fail", async () => {
334
+ const transaction = {
335
+ family: "canton",
336
+ amount: new BigNumber(0), // AmountRequired
337
+ recipient: "", // RecipientRequired
338
+ fee: null, // FeeNotLoaded
339
+ tokenId: "",
340
+ };
341
+ const result = await getTransactionStatus(mockAccount, transaction);
342
+ expect(result.errors.amount).toBeInstanceOf(AmountRequired);
343
+ expect(result.errors.recipient).toBeInstanceOf(RecipientRequired);
344
+ expect(result.errors.fee).toBeInstanceOf(FeeNotLoaded);
345
+ });
346
+ it("should return both errors and warnings", async () => {
347
+ const transaction = {
348
+ family: "canton",
349
+ amount: new BigNumber(5), // Small amount
350
+ recipient: "valid::123",
351
+ fee: new BigNumber(100), // High fee relative to amount
352
+ tokenId: "",
353
+ };
354
+ const result = await getTransactionStatus(mockAccount, transaction);
355
+ expect(result.warnings.feeTooHigh).toBeInstanceOf(FeeTooHigh);
356
+ expect(result.errors.amount).toBeInstanceOf(NotEnoughBalanceBecauseDestinationNotCreated);
357
+ });
358
+ });
359
+ });
360
+ //# sourceMappingURL=getTransactionStatus.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAY5C,wBAAgB,aAAa,CAC3B,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC;;;EA+CzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAyB,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAW5C,wBAAgB,aAAa,CAC3B,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC;;;EAgDzC"}
@@ -8,16 +8,15 @@ import { estimateMaxSpendable } from "./estimateMaxSpendable";
8
8
  import { getTransactionStatus } from "./getTransactionStatus";
9
9
  import { prepareTransaction } from "./prepareTransaction";
10
10
  import { buildSignOperation } from "./signOperation";
11
- import { getAccountShape } from "./sync";
11
+ import { makeGetAccountShape } from "./sync";
12
12
  import { updateTransaction } from "./updateTransaction";
13
13
  import { buildOnboardAccount, buildAuthorizePreapproval } from "./onboard";
14
- import { assignFromAccountRaw, assignToAccountRaw } from "./serialization";
15
14
  export function createBridges(signerContext, coinConfig) {
16
15
  cantonCoinConfig.setCoinConfig(coinConfig);
17
16
  const getAddress = resolver(signerContext);
18
17
  const receive = makeAccountBridgeReceive(getAddressWrapper(getAddress));
19
18
  const scanAccounts = makeScanAccounts({
20
- getAccountShape: getAccountShape,
19
+ getAccountShape: makeGetAccountShape(signerContext),
21
20
  getAddressFn: getAddress,
22
21
  });
23
22
  const onboardAccount = buildOnboardAccount(signerContext);
@@ -30,7 +29,7 @@ export function createBridges(signerContext, coinConfig) {
30
29
  authorizePreapproval,
31
30
  };
32
31
  const signOperation = buildSignOperation(signerContext);
33
- const sync = makeSync({ getAccountShape });
32
+ const sync = makeSync({ getAccountShape: makeGetAccountShape(signerContext) });
34
33
  // we want one method per file
35
34
  const accountBridge = {
36
35
  broadcast,
@@ -44,8 +43,9 @@ export function createBridges(signerContext, coinConfig) {
44
43
  sync,
45
44
  receive,
46
45
  signOperation,
47
- assignToAccountRaw,
48
- assignFromAccountRaw,
46
+ signRawOperation: () => {
47
+ throw new Error("signRawOperation is not supported");
48
+ },
49
49
  getSerializedAddressParameters,
50
50
  };
51
51
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,mDAAmD,CAAC;AAClF,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,gBAAgB,EAChB,QAAQ,GACT,MAAM,2CAA2C,CAAC;AAInD,OAAO,gBAA2C,MAAM,WAAW,CAAC;AACpE,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,UAAU,aAAa,CAC3B,aAA0C,EAC1C,UAAwC;IAExC,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,wBAAwB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,eAAe,EAAE,eAAe;QAChC,YAAY,EAAE,UAAU;KACzB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAyB;QAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,YAAY;QACZ,cAAc;QACd,oBAAoB;KACrB,CAAC;IAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IAC3C,8BAA8B;IAC9B,MAAM,aAAa,GAA+B;QAChD,SAAS;QACT,iBAAiB;QACjB,iBAAiB;QACjB,sEAAsE;QACtE,2DAA2D;QAC3D,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB;QACpB,IAAI;QACJ,OAAO;QACP,aAAa;QACb,kBAAkB;QAClB,oBAAoB;QACpB,8BAA8B;KAC/B,CAAC;IAEF,OAAO;QACL,cAAc;QACd,aAAa;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,mDAAmD,CAAC;AAClF,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,gBAAgB,EAChB,QAAQ,GACT,MAAM,2CAA2C,CAAC;AAInD,OAAO,gBAA2C,MAAM,WAAW,CAAC;AACpE,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAE3E,MAAM,UAAU,aAAa,CAC3B,aAA0C,EAC1C,UAAwC;IAExC,gBAAgB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,wBAAwB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC;QACnD,YAAY,EAAE,UAAU;KACzB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAyB;QAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,YAAY;QACZ,cAAc;QACd,oBAAoB;KACrB,CAAC;IAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC/E,8BAA8B;IAC9B,MAAM,aAAa,GAA+B;QAChD,SAAS;QACT,iBAAiB;QACjB,iBAAiB;QACjB,sEAAsE;QACtE,2DAA2D;QAC3D,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB;QACpB,IAAI;QACJ,OAAO;QACP,aAAa;QACb,gBAAgB,EAAE,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,8BAA8B;KAC/B,CAAC;IAEF,OAAO;QACL,cAAc;QACd,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -1,12 +1,17 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { SignerContext } from "@ledgerhq/coin-framework/signer";
3
- import { CantonSigner } from "../types";
4
- import { CantonOnboardProgress, CantonOnboardResult, CantonPreApprovalProgress, CantonPreApprovalResult } from "../types/onboard";
5
- import { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
3
+ import type { Account, Operation } from "@ledgerhq/types-live";
4
+ import type { CryptoCurrency } from "@ledgerhq/types-cryptoassets";
5
+ import { CantonOnboardProgress, CantonOnboardResult, CantonAuthorizeProgress, CantonAuthorizeResult } from "../types/onboard";
6
+ import type { CantonSigner } from "../types";
6
7
  export declare const isAccountOnboarded: (currency: CryptoCurrency, publicKey: string) => Promise<{
7
8
  isOnboarded: boolean;
8
- party_id?: string;
9
+ partyId: string;
10
+ } | {
11
+ isOnboarded: boolean;
12
+ partyId?: never;
9
13
  }>;
10
- export declare const buildOnboardAccount: (signerContext: SignerContext<CantonSigner>) => (currency: CryptoCurrency, deviceId: string, derivationPath: string) => Observable<CantonOnboardProgress | CantonOnboardResult>;
11
- export declare const buildAuthorizePreapproval: (signerContext: SignerContext<CantonSigner>) => (currency: CryptoCurrency, deviceId: string, derivationPath: string, partyId: string) => Observable<CantonPreApprovalProgress | CantonPreApprovalResult>;
14
+ export declare const isAccountAuthorized: (operations: Operation[], partyId: string) => Promise<boolean>;
15
+ export declare const buildOnboardAccount: (signerContext: SignerContext<CantonSigner>) => (currency: CryptoCurrency, deviceId: string, account: Account) => Observable<CantonOnboardProgress | CantonOnboardResult>;
16
+ export declare const buildAuthorizePreapproval: (signerContext: SignerContext<CantonSigner>) => (currency: CryptoCurrency, deviceId: string, account: Account, partyId: string) => Observable<CantonAuthorizeProgress | CantonAuthorizeResult>;
12
17
  //# sourceMappingURL=onboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/bridge/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAIhE,OAAO,EAAiB,YAAY,EAAE,MAAM,UAAU,CAAC;AAWvD,OAAO,EAGL,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EAExB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAa9D,eAAO,MAAM,kBAAkB,GAC7B,UAAU,cAAc,EACxB,WAAW,MAAM,KAChB,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAarD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC7B,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,gBAAgB,MAAM,KACrB,UAAU,CAAC,qBAAqB,GAAG,mBAAmB,CAmGrD,CAAC;AAEP,eAAO,MAAM,yBAAyB,GACnC,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,gBAAgB,MAAM,EACtB,SAAS,MAAM,KACd,UAAU,CAAC,yBAAyB,GAAG,uBAAuB,CAoF7D,CAAC"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/bridge/onboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAWnE,OAAO,EAGL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,kBAAkB,GAAU,UAAU,cAAc,EAAE,WAAW,MAAM;;;;;;EAYnF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,YAAY,SAAS,EAAE,EAAE,SAAS,MAAM,qBAGjF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC7B,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,SAAS,OAAO,KACf,UAAU,CAAC,qBAAqB,GAAG,mBAAmB,CA8CrD,CAAC;AAEP,eAAO,MAAM,yBAAyB,GACnC,eAAe,aAAa,CAAC,YAAY,CAAC,MAEzC,UAAU,cAAc,EACxB,UAAU,MAAM,EAChB,SAAS,OAAO,EAChB,SAAS,MAAM,KACd,UAAU,CAAC,uBAAuB,GAAG,qBAAqB,CA0DzD,CAAC"}
@@ -1,14 +1,36 @@
1
+ import BigNumber from "bignumber.js";
1
2
  import { firstValueFrom, toArray } from "rxjs";
3
+ import { emptyHistoryCache } from "@ledgerhq/coin-framework/account/index";
2
4
  import { generateMockKeyPair, createMockSigner } from "../test/cantonTestUtils";
3
- import { buildOnboardAccount, isAccountOnboarded, buildAuthorizePreapproval } from "./onboard";
4
- import { OnboardStatus, PreApprovalStatus, } from "../types/onboard";
5
+ import { AuthorizeStatus, OnboardStatus, } from "../types/onboard";
5
6
  import coinConfig from "../config";
7
+ import { buildOnboardAccount, isAccountOnboarded, buildAuthorizePreapproval } from "./onboard";
6
8
  describe("onboard (devnet)", () => {
7
9
  const mockDeviceId = "test-device-id";
8
- const mockDerivationPath = "44'/6767'/0'/0'/0'";
9
10
  const mockCurrency = {
10
11
  id: "canton_network",
11
12
  };
13
+ const mockAccount = {
14
+ type: "Account",
15
+ id: "js:2:canton_network:canton_3f5c9d9a:canton",
16
+ seedIdentifier: "canton_3f5c9d9a",
17
+ derivationMode: "canton",
18
+ index: 0,
19
+ freshAddress: "canton_3f5c9d9a",
20
+ freshAddressPath: "44'/6767'/0'/0'/0'",
21
+ used: false,
22
+ balance: BigNumber(10000),
23
+ spendableBalance: BigNumber(10000),
24
+ creationDate: new Date(),
25
+ blockHeight: 1,
26
+ currency: mockCurrency,
27
+ operationsCount: 0,
28
+ operations: [],
29
+ pendingOperations: [],
30
+ lastSyncDate: new Date(),
31
+ balanceHistoryCache: emptyHistoryCache,
32
+ swapHistory: [],
33
+ };
12
34
  let onboardedAccount = null;
13
35
  beforeAll(() => {
14
36
  coinConfig.setCoinConfig(() => ({
@@ -36,7 +58,7 @@ describe("onboard (devnet)", () => {
36
58
  return callback(mockSigner);
37
59
  });
38
60
  const onboardObservable = buildOnboardAccount(mockSignerContext);
39
- const onboardValues = await firstValueFrom(onboardObservable(mockCurrency, mockDeviceId, mockDerivationPath).pipe(toArray()));
61
+ const onboardValues = await firstValueFrom(onboardObservable(mockCurrency, mockDeviceId, mockAccount).pipe(toArray()));
40
62
  const onboardResult = onboardValues.find((value) => "partyId" in value);
41
63
  if (!onboardResult) {
42
64
  throw new Error("Failed to onboard account for shared test data");
@@ -53,10 +75,10 @@ describe("onboard (devnet)", () => {
53
75
  // THEN
54
76
  expect(result).not.toBe(false);
55
77
  if (typeof result === "object") {
56
- expect(result.party_id).toBeDefined();
57
- expect(result.party_id).toBe(onboardResult.partyId);
78
+ expect(result.partyId).toBeDefined();
79
+ expect(result.partyId).toBe(onboardResult.partyId);
58
80
  }
59
- }, 30000);
81
+ }, 40000);
60
82
  it("should return false for non-onboarded account with fresh keypair", async () => {
61
83
  // GIVEN
62
84
  const keyPair = generateMockKeyPair();
@@ -84,7 +106,7 @@ describe("onboard (devnet)", () => {
84
106
  });
85
107
  const onboardObservable = buildOnboardAccount(mockSignerContext);
86
108
  // WHEN
87
- const allValues = await firstValueFrom(onboardObservable(mockCurrency, mockDeviceId, mockDerivationPath).pipe(toArray()));
109
+ const allValues = await firstValueFrom(onboardObservable(mockCurrency, mockDeviceId, mockAccount).pipe(toArray()));
88
110
  const progressValues = allValues.filter((value) => "status" in value && !("partyId" in value));
89
111
  const resultValues = allValues.filter((value) => "partyId" in value);
90
112
  // THEN
@@ -102,10 +124,10 @@ describe("onboard (devnet)", () => {
102
124
  }, 30000);
103
125
  it("should complete full onboarding flow with already onboarded account", async () => {
104
126
  // GIVEN
105
- const { keyPair, mockSignerContext, onboardResult: firstResult } = getOnboardedAccount();
127
+ const { mockSignerContext, onboardResult: firstResult } = getOnboardedAccount();
106
128
  const secondOnboardObservable = buildOnboardAccount(mockSignerContext);
107
129
  // WHEN
108
- const secondOnboardValues = await firstValueFrom(secondOnboardObservable(mockCurrency, mockDeviceId, mockDerivationPath).pipe(toArray()));
130
+ const secondOnboardValues = await firstValueFrom(secondOnboardObservable(mockCurrency, mockDeviceId, mockAccount).pipe(toArray()));
109
131
  const secondResult = secondOnboardValues.find((value) => "partyId" in value);
110
132
  // THEN
111
133
  expect(secondResult).toBeDefined();
@@ -119,14 +141,14 @@ describe("onboard (devnet)", () => {
119
141
  const { mockSignerContext, onboardResult } = getOnboardedAccount();
120
142
  const preapprovalObservable = buildAuthorizePreapproval(mockSignerContext);
121
143
  // WHEN
122
- const preapprovalValues = await firstValueFrom(preapprovalObservable(mockCurrency, mockDeviceId, mockDerivationPath, onboardResult.partyId).pipe(toArray()));
144
+ const preapprovalValues = await firstValueFrom(preapprovalObservable(mockCurrency, mockDeviceId, mockAccount, onboardResult.partyId).pipe(toArray()));
123
145
  const progressValues = preapprovalValues.filter((value) => "status" in value && !("isApproved" in value));
124
146
  const resultValues = preapprovalValues.filter((value) => "isApproved" in value);
125
147
  // THEN
126
148
  // Check expected status progression
127
- expect(progressValues.some(p => p.status === PreApprovalStatus.PREPARE)).toBe(true);
128
- expect(progressValues.some(p => p.status === PreApprovalStatus.SIGN)).toBe(true);
129
- expect(progressValues.some(p => p.status === PreApprovalStatus.SUBMIT)).toBe(true);
149
+ expect(progressValues.some(p => p.status === AuthorizeStatus.PREPARE)).toBe(true);
150
+ expect(progressValues.some(p => p.status === AuthorizeStatus.SIGN)).toBe(true);
151
+ expect(progressValues.some(p => p.status === AuthorizeStatus.SUBMIT)).toBe(true);
130
152
  // Check final result (should be approved)
131
153
  expect(resultValues.length).toBeGreaterThan(0);
132
154
  const finalResult = resultValues[resultValues.length - 1];
@@ -143,7 +165,7 @@ describe("onboard (devnet)", () => {
143
165
  const preapprovalObservable = buildAuthorizePreapproval(mockSignerContext);
144
166
  // WHEN & THEN
145
167
  try {
146
- await firstValueFrom(preapprovalObservable(mockCurrency, mockDeviceId, mockDerivationPath, "invalid-party-id-123"));
168
+ await firstValueFrom(preapprovalObservable(mockCurrency, mockDeviceId, mockAccount, "invalid-party-id-123"));
147
169
  expect(true).toBe(true);
148
170
  }
149
171
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.integ.test.js","sourceRoot":"","sources":["../../src/bridge/onboard.integ.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboard.integ.test.js","sourceRoot":"","sources":["../../src/bridge/onboard.integ.test.ts"],"names":[],"mappings":"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"}