@ledgerhq/coin-casper 2.2.0-nightly.8 → 2.2.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/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +19 -69
  3. package/lib/api/index.integ.test.d.ts +2 -0
  4. package/lib/api/index.integ.test.d.ts.map +1 -0
  5. package/lib/api/index.integ.test.js +53 -0
  6. package/lib/api/index.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 +274 -0
  10. package/lib/api/index.test.js.map +1 -0
  11. package/lib/bridge/bridgeHelpers/accountShape.test.d.ts +2 -0
  12. package/lib/bridge/bridgeHelpers/accountShape.test.d.ts.map +1 -0
  13. package/lib/bridge/bridgeHelpers/accountShape.test.js +94 -0
  14. package/lib/bridge/bridgeHelpers/accountShape.test.js.map +1 -0
  15. package/lib/bridge/bridgeHelpers/txn.test.d.ts +2 -0
  16. package/lib/bridge/bridgeHelpers/txn.test.d.ts.map +1 -0
  17. package/lib/bridge/bridgeHelpers/txn.test.js +306 -0
  18. package/lib/bridge/bridgeHelpers/txn.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 +72 -0
  22. package/lib/bridge/broadcast.test.js.map +1 -0
  23. package/lib/bridge/buildOptimisticOperation.test.d.ts +2 -0
  24. package/lib/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  25. package/lib/bridge/buildOptimisticOperation.test.js +76 -0
  26. package/lib/bridge/buildOptimisticOperation.test.js.map +1 -0
  27. package/lib/bridge/createTransaction.test.d.ts +2 -0
  28. package/lib/bridge/createTransaction.test.d.ts.map +1 -0
  29. package/lib/bridge/createTransaction.test.js +41 -0
  30. package/lib/bridge/createTransaction.test.js.map +1 -0
  31. package/lib/bridge/deviceTransactionConfig.test.d.ts +2 -0
  32. package/lib/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  33. package/lib/bridge/deviceTransactionConfig.test.js +148 -0
  34. package/lib/bridge/deviceTransactionConfig.test.js.map +1 -0
  35. package/lib/bridge/estimateMaxSpendable.test.d.ts +2 -0
  36. package/lib/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  37. package/lib/bridge/estimateMaxSpendable.test.js +133 -0
  38. package/lib/bridge/estimateMaxSpendable.test.js.map +1 -0
  39. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  40. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  41. package/lib/bridge/getTransactionStatus.test.js +214 -0
  42. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  43. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  44. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  45. package/lib/bridge/prepareTransaction.test.js +159 -0
  46. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  47. package/lib/bridge/transaction.test.d.ts +2 -0
  48. package/lib/bridge/transaction.test.d.ts.map +1 -0
  49. package/lib/bridge/transaction.test.js +179 -0
  50. package/lib/bridge/transaction.test.js.map +1 -0
  51. package/lib/common-logic/utils.additional.test.d.ts +2 -0
  52. package/lib/common-logic/utils.additional.test.d.ts.map +1 -0
  53. package/lib/common-logic/utils.additional.test.js +58 -0
  54. package/lib/common-logic/utils.additional.test.js.map +1 -0
  55. package/lib/common-logic/utils.unit.test.d.ts +2 -0
  56. package/lib/common-logic/utils.unit.test.d.ts.map +1 -0
  57. package/lib/common-logic/utils.unit.test.js +52 -0
  58. package/lib/common-logic/utils.unit.test.js.map +1 -0
  59. package/lib/hw-signMessage.test.d.ts +2 -0
  60. package/lib/hw-signMessage.test.d.ts.map +1 -0
  61. package/lib/hw-signMessage.test.js +80 -0
  62. package/lib/hw-signMessage.test.js.map +1 -0
  63. package/lib/signer/getAddress.test.d.ts +2 -0
  64. package/lib/signer/getAddress.test.d.ts.map +1 -0
  65. package/lib/signer/getAddress.test.js +133 -0
  66. package/lib/signer/getAddress.test.js.map +1 -0
  67. package/lib-es/api/index.integ.test.d.ts +2 -0
  68. package/lib-es/api/index.integ.test.d.ts.map +1 -0
  69. package/lib-es/api/index.integ.test.js +51 -0
  70. package/lib-es/api/index.integ.test.js.map +1 -0
  71. package/lib-es/api/index.test.d.ts +2 -0
  72. package/lib-es/api/index.test.d.ts.map +1 -0
  73. package/lib-es/api/index.test.js +269 -0
  74. package/lib-es/api/index.test.js.map +1 -0
  75. package/lib-es/bridge/bridgeHelpers/accountShape.test.d.ts +2 -0
  76. package/lib-es/bridge/bridgeHelpers/accountShape.test.d.ts.map +1 -0
  77. package/lib-es/bridge/bridgeHelpers/accountShape.test.js +89 -0
  78. package/lib-es/bridge/bridgeHelpers/accountShape.test.js.map +1 -0
  79. package/lib-es/bridge/bridgeHelpers/txn.test.d.ts +2 -0
  80. package/lib-es/bridge/bridgeHelpers/txn.test.d.ts.map +1 -0
  81. package/lib-es/bridge/bridgeHelpers/txn.test.js +278 -0
  82. package/lib-es/bridge/bridgeHelpers/txn.test.js.map +1 -0
  83. package/lib-es/bridge/broadcast.test.d.ts +2 -0
  84. package/lib-es/bridge/broadcast.test.d.ts.map +1 -0
  85. package/lib-es/bridge/broadcast.test.js +70 -0
  86. package/lib-es/bridge/broadcast.test.js.map +1 -0
  87. package/lib-es/bridge/buildOptimisticOperation.test.d.ts +2 -0
  88. package/lib-es/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  89. package/lib-es/bridge/buildOptimisticOperation.test.js +74 -0
  90. package/lib-es/bridge/buildOptimisticOperation.test.js.map +1 -0
  91. package/lib-es/bridge/createTransaction.test.d.ts +2 -0
  92. package/lib-es/bridge/createTransaction.test.d.ts.map +1 -0
  93. package/lib-es/bridge/createTransaction.test.js +36 -0
  94. package/lib-es/bridge/createTransaction.test.js.map +1 -0
  95. package/lib-es/bridge/deviceTransactionConfig.test.d.ts +2 -0
  96. package/lib-es/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  97. package/lib-es/bridge/deviceTransactionConfig.test.js +143 -0
  98. package/lib-es/bridge/deviceTransactionConfig.test.js.map +1 -0
  99. package/lib-es/bridge/estimateMaxSpendable.test.d.ts +2 -0
  100. package/lib-es/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  101. package/lib-es/bridge/estimateMaxSpendable.test.js +131 -0
  102. package/lib-es/bridge/estimateMaxSpendable.test.js.map +1 -0
  103. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  104. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  105. package/lib-es/bridge/getTransactionStatus.test.js +212 -0
  106. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  107. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  108. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  109. package/lib-es/bridge/prepareTransaction.test.js +157 -0
  110. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  111. package/lib-es/bridge/transaction.test.d.ts +2 -0
  112. package/lib-es/bridge/transaction.test.d.ts.map +1 -0
  113. package/lib-es/bridge/transaction.test.js +154 -0
  114. package/lib-es/bridge/transaction.test.js.map +1 -0
  115. package/lib-es/common-logic/utils.additional.test.d.ts +2 -0
  116. package/lib-es/common-logic/utils.additional.test.d.ts.map +1 -0
  117. package/lib-es/common-logic/utils.additional.test.js +56 -0
  118. package/lib-es/common-logic/utils.additional.test.js.map +1 -0
  119. package/lib-es/common-logic/utils.unit.test.d.ts +2 -0
  120. package/lib-es/common-logic/utils.unit.test.d.ts.map +1 -0
  121. package/lib-es/common-logic/utils.unit.test.js +50 -0
  122. package/lib-es/common-logic/utils.unit.test.js.map +1 -0
  123. package/lib-es/hw-signMessage.test.d.ts +2 -0
  124. package/lib-es/hw-signMessage.test.d.ts.map +1 -0
  125. package/lib-es/hw-signMessage.test.js +78 -0
  126. package/lib-es/hw-signMessage.test.js.map +1 -0
  127. package/lib-es/signer/getAddress.test.d.ts +2 -0
  128. package/lib-es/signer/getAddress.test.d.ts.map +1 -0
  129. package/lib-es/signer/getAddress.test.js +105 -0
  130. package/lib-es/signer/getAddress.test.js.map +1 -0
  131. package/package.json +8 -8
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const casper_js_sdk_1 = require("casper-js-sdk");
30
+ const getAddress_1 = __importDefault(require("./getAddress"));
31
+ const addressHelpers = __importStar(require("../bridge/bridgeHelpers/addresses"));
32
+ const cryptoassets_1 = require("@ledgerhq/cryptoassets");
33
+ describe("getAddress resolver", () => {
34
+ // Test fixtures
35
+ const mockDeviceId = "device_123";
36
+ const mockPath = "44'/506'/0'/0/0";
37
+ const mockCurrency = (0, cryptoassets_1.getCryptoCurrencyById)("casper");
38
+ const mockDerivationMode = "casper_wallet";
39
+ const mockPubKey = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
40
+ const mockDerivedAddress = "02cafe0123456789abcdef";
41
+ let mockSigner;
42
+ let mockSignerContext;
43
+ // Mock responses
44
+ const createAddressResponse = (includeAddress) => ({
45
+ errorMessage: "",
46
+ returnCode: 0x9000,
47
+ publicKey: Buffer.from(mockPubKey, "hex"),
48
+ Address: {
49
+ toString: jest.fn().mockReturnValue(includeAddress ? "02CAFE0123456789ABCDEF" : ""),
50
+ length: includeAddress ? 1 : 0,
51
+ },
52
+ });
53
+ beforeEach(() => {
54
+ jest.clearAllMocks();
55
+ // Set up mocks
56
+ mockSigner = {
57
+ showAddressAndPubKey: jest.fn(),
58
+ getAddressAndPubKey: jest.fn(),
59
+ sign: jest.fn(),
60
+ };
61
+ mockSignerContext = jest.fn((deviceId, callback) => callback(mockSigner));
62
+ // Mock address derivation function
63
+ jest.spyOn(addressHelpers, "casperAddressFromPubKey").mockReturnValue(mockDerivedAddress);
64
+ });
65
+ const setupTest = (verify, includeAddress) => {
66
+ const response = createAddressResponse(includeAddress);
67
+ if (verify) {
68
+ mockSigner.showAddressAndPubKey = jest.fn().mockResolvedValue(response);
69
+ }
70
+ else {
71
+ mockSigner.getAddressAndPubKey = jest.fn().mockResolvedValue(response);
72
+ }
73
+ return (0, getAddress_1.default)(mockSignerContext);
74
+ };
75
+ test("should return address from device when verify=false", async () => {
76
+ const getAddressFn = setupTest(false, true);
77
+ const result = await getAddressFn(mockDeviceId, {
78
+ path: mockPath,
79
+ verify: false,
80
+ currency: mockCurrency,
81
+ derivationMode: mockDerivationMode,
82
+ });
83
+ expect(mockSigner.getAddressAndPubKey).toHaveBeenCalledWith(mockPath);
84
+ expect(mockSigner.showAddressAndPubKey).not.toHaveBeenCalled();
85
+ expect(result).toEqual({
86
+ path: mockPath,
87
+ address: mockDerivedAddress,
88
+ publicKey: mockPubKey,
89
+ });
90
+ });
91
+ test("should return address from device when verify=true", async () => {
92
+ const getAddressFn = setupTest(true, true);
93
+ const result = await getAddressFn(mockDeviceId, {
94
+ path: mockPath,
95
+ verify: true,
96
+ currency: mockCurrency,
97
+ derivationMode: mockDerivationMode,
98
+ });
99
+ expect(mockSigner.showAddressAndPubKey).toHaveBeenCalledWith(mockPath);
100
+ expect(mockSigner.getAddressAndPubKey).not.toHaveBeenCalled();
101
+ expect(result).toEqual({
102
+ path: mockPath,
103
+ address: mockDerivedAddress,
104
+ publicKey: mockPubKey,
105
+ });
106
+ });
107
+ test("should derive address when not provided by device", async () => {
108
+ const getAddressFn = setupTest(false, false);
109
+ const result = await getAddressFn(mockDeviceId, {
110
+ path: mockPath,
111
+ verify: false,
112
+ currency: mockCurrency,
113
+ derivationMode: mockDerivationMode,
114
+ });
115
+ expect(addressHelpers.casperAddressFromPubKey).toHaveBeenCalledWith(expect.any(Buffer), casper_js_sdk_1.KeyAlgorithm.SECP256K1);
116
+ expect(result).toEqual({
117
+ path: mockPath,
118
+ address: mockDerivedAddress,
119
+ publicKey: mockPubKey,
120
+ });
121
+ });
122
+ test("should propagate errors from the signer", async () => {
123
+ mockSigner.getAddressAndPubKey = jest.fn().mockRejectedValue(new Error("Device disconnected"));
124
+ const getAddressFn = (0, getAddress_1.default)(mockSignerContext);
125
+ await expect(getAddressFn(mockDeviceId, {
126
+ path: mockPath,
127
+ verify: false,
128
+ currency: mockCurrency,
129
+ derivationMode: mockDerivationMode,
130
+ })).rejects.toThrow("Device disconnected");
131
+ });
132
+ });
133
+ //# sourceMappingURL=getAddress.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAddress.test.js","sourceRoot":"","sources":["../../src/signer/getAddress.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.integ.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.integ.test.d.ts","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { getAbandonSeedAddress } from "@ledgerhq/cryptoassets/abandonseed";
2
+ import { fetchAccountStateInfo, fetchBalance, fetchBlockHeight, fetchTxs } from ".";
3
+ import { getCoinConfig } from "../config";
4
+ const pubkey = "0202664e3958608cd8dc2b80d4c73f18f76ef197f1cccca2f4f817c70bb050b248bd";
5
+ const pubkeyAbandon = getAbandonSeedAddress("casper");
6
+ jest.mock("../config");
7
+ describe("Casper API", () => {
8
+ jest.mocked(getCoinConfig).mockReturnValue({
9
+ ...{},
10
+ infra: {
11
+ API_CASPER_NODE_ENDPOINT: "https://casper.coin.ledger.com/node/",
12
+ API_CASPER_INDEXER: "https://casper.coin.ledger.com/indexer/",
13
+ },
14
+ });
15
+ it("should be able to fetch the network status", async () => {
16
+ const blockHeight = await fetchBlockHeight();
17
+ expect(blockHeight).toBeDefined();
18
+ });
19
+ it("shouldnt fetch account state info if account doesnt exist", async () => {
20
+ const accountStateInfo = await fetchAccountStateInfo(pubkeyAbandon);
21
+ expect(accountStateInfo).toEqual({
22
+ purseUref: undefined,
23
+ accountHash: undefined,
24
+ });
25
+ });
26
+ it("should fetch account state info if account exists", async () => {
27
+ const accountStateInfo = await fetchAccountStateInfo(pubkey);
28
+ expect(accountStateInfo.purseUref).toBeDefined();
29
+ expect(accountStateInfo.accountHash).toBeDefined();
30
+ });
31
+ it("should fetch balance", async () => {
32
+ const accountStateInfo = await fetchAccountStateInfo(pubkey);
33
+ expect(accountStateInfo.purseUref).toBeDefined();
34
+ if (!accountStateInfo.purseUref) {
35
+ throw new Error("Purse Uref is undefined");
36
+ }
37
+ const balance = await fetchBalance(accountStateInfo.purseUref);
38
+ expect(balance).toBeDefined();
39
+ });
40
+ it("should fetch txs", async () => {
41
+ const txs = await fetchTxs(pubkey);
42
+ expect(txs).toBeDefined();
43
+ expect(txs.length).toBeGreaterThan(0);
44
+ });
45
+ it("should fetch txs for abandon seed address", async () => {
46
+ const txs = await fetchTxs(pubkeyAbandon);
47
+ expect(txs).toBeDefined();
48
+ expect(txs.length).toBe(0);
49
+ });
50
+ });
51
+ //# sourceMappingURL=index.integ.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.integ.test.js","sourceRoot":"","sources":["../../src/api/index.integ.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,MAAM,GAAG,sEAAsE,CAAC;AACtF,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAEtD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC;QACzC,GAAI,EAAgC;QACpC,KAAK,EAAE;YACL,wBAAwB,EAAE,sCAAsC;YAChE,kBAAkB,EAAE,yCAAyC;SAC9D;KACF,CAAC,CAAC;IACH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,269 @@
1
+ import { log } from "@ledgerhq/logs";
2
+ import BigNumber from "bignumber.js";
3
+ import network from "@ledgerhq/live-network";
4
+ import { AccountIdentifier, HttpHandler, PublicKey, RpcClient } from "casper-js-sdk";
5
+ import { fetchAccountStateInfo, fetchBalance, fetchBlockHeight, fetchTxs, broadcastTx, getCasperNodeRpcClient, } from ".";
6
+ import { getCoinConfig } from "../config";
7
+ import { TEST_ADDRESSES } from "../test/fixtures";
8
+ import { NodeErrorCodeAccountNotFound } from "../consts";
9
+ // Constants
10
+ const MOCK_NODE_URL = "https://mock.casper.node";
11
+ const MOCK_INDEXER_URL = "https://mock.casper.indexer";
12
+ const MOCK_PUBLIC_KEY = TEST_ADDRESSES.SECP256K1;
13
+ const MOCK_PURSE_UREF = "uref-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef-007";
14
+ const MOCK_ACCOUNT_HASH = "account-hash-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
15
+ const DEFAULT_LIMIT = 100;
16
+ // Mock dependencies
17
+ jest.mock("@ledgerhq/logs", () => ({
18
+ log: jest.fn(),
19
+ }));
20
+ jest.mock("@ledgerhq/live-network", () => ({
21
+ __esModule: true,
22
+ default: jest.fn(),
23
+ }));
24
+ jest.mock("../config", () => ({
25
+ getCoinConfig: jest.fn(),
26
+ }));
27
+ // Helper functions for creating mocks
28
+ const createMockRpcClient = (methodOverrides) => {
29
+ const defaultMethods = {
30
+ getAccountInfo: jest.fn(),
31
+ getStateRootHashLatest: jest.fn(),
32
+ getBalanceByStateRootHash: jest.fn(),
33
+ getLatestBlock: jest.fn(),
34
+ putTransaction: jest.fn(),
35
+ };
36
+ // Create a combined mock with defaultMethods overridden by methodOverrides
37
+ const combinedMock = { ...defaultMethods, ...methodOverrides };
38
+ // Mock the RpcClient implementation to return our mock methods
39
+ jest.mocked(RpcClient).mockImplementation(() => combinedMock);
40
+ return combinedMock;
41
+ };
42
+ const createNetworkMock = (responseData, pageCount = 1, itemCount = responseData.length) => ({
43
+ data: {
44
+ data: responseData,
45
+ pageCount,
46
+ itemCount,
47
+ pages: [],
48
+ },
49
+ status: 200,
50
+ });
51
+ // Mock casper-js-sdk
52
+ jest.mock("casper-js-sdk", () => {
53
+ const originalModule = jest.requireActual("casper-js-sdk");
54
+ return {
55
+ ...originalModule,
56
+ RpcClient: jest.fn(),
57
+ HttpHandler: jest.fn(),
58
+ AccountIdentifier: jest.fn(),
59
+ PublicKey: {
60
+ fromHex: jest.fn(),
61
+ },
62
+ };
63
+ });
64
+ describe("Casper API Unit Tests", () => {
65
+ beforeEach(() => {
66
+ jest.clearAllMocks();
67
+ // Setup config mock
68
+ jest.mocked(getCoinConfig).mockReturnValue({
69
+ infra: {
70
+ API_CASPER_NODE_ENDPOINT: MOCK_NODE_URL,
71
+ API_CASPER_INDEXER: MOCK_INDEXER_URL,
72
+ },
73
+ });
74
+ });
75
+ describe("getCasperNodeRpcClient", () => {
76
+ it("should create RPC client with correct URL", () => {
77
+ getCasperNodeRpcClient();
78
+ expect(HttpHandler).toHaveBeenCalledWith(MOCK_NODE_URL);
79
+ expect(RpcClient).toHaveBeenCalled();
80
+ });
81
+ it("should throw error if API base URL is not available", () => {
82
+ jest.mocked(getCoinConfig).mockReturnValueOnce({
83
+ infra: {},
84
+ });
85
+ expect(() => getCasperNodeRpcClient()).toThrow("API base URL not available");
86
+ });
87
+ });
88
+ describe("fetchAccountStateInfo", () => {
89
+ it("should fetch account state info successfully", async () => {
90
+ // Mock PublicKey
91
+ const mockPublicKeyInstance = { fromHex: () => ({ fromHex: true }) };
92
+ jest.mocked(PublicKey.fromHex).mockReturnValue(mockPublicKeyInstance);
93
+ // Mock AccountIdentifier
94
+ const mockAccountIdentifier = {};
95
+ jest
96
+ .mocked(AccountIdentifier)
97
+ .mockReturnValue(mockAccountIdentifier);
98
+ // Mock RpcClient.getAccountInfo
99
+ const mockGetAccountInfo = jest.fn().mockResolvedValue({
100
+ account: {
101
+ accountHash: { toHex: () => MOCK_ACCOUNT_HASH },
102
+ mainPurse: { toPrefixedString: () => MOCK_PURSE_UREF },
103
+ },
104
+ });
105
+ createMockRpcClient({
106
+ getAccountInfo: mockGetAccountInfo,
107
+ });
108
+ const result = await fetchAccountStateInfo(MOCK_PUBLIC_KEY);
109
+ expect(PublicKey.fromHex).toHaveBeenCalledWith(MOCK_PUBLIC_KEY);
110
+ expect(AccountIdentifier).toHaveBeenCalledWith(undefined, mockPublicKeyInstance);
111
+ expect(mockGetAccountInfo).toHaveBeenCalledWith(null, mockAccountIdentifier);
112
+ expect(result).toEqual({
113
+ purseUref: MOCK_PURSE_UREF,
114
+ accountHash: MOCK_ACCOUNT_HASH,
115
+ });
116
+ });
117
+ it("should return undefined values when account not found", async () => {
118
+ // Mock error with account not found status code
119
+ const mockError = new Error("Account not found");
120
+ mockError.statusCode = NodeErrorCodeAccountNotFound;
121
+ createMockRpcClient({
122
+ getAccountInfo: jest.fn().mockRejectedValue(mockError),
123
+ });
124
+ const result = await fetchAccountStateInfo(MOCK_PUBLIC_KEY);
125
+ expect(result).toEqual({
126
+ purseUref: undefined,
127
+ accountHash: undefined,
128
+ });
129
+ });
130
+ it("should throw error for other error cases", async () => {
131
+ const mockError = new Error("General error");
132
+ createMockRpcClient({
133
+ getAccountInfo: jest.fn().mockRejectedValue(mockError),
134
+ });
135
+ await expect(fetchAccountStateInfo(MOCK_PUBLIC_KEY)).rejects.toThrow("General error");
136
+ });
137
+ });
138
+ describe("fetchBalance", () => {
139
+ it("should fetch balance successfully", async () => {
140
+ const mockBalanceValue = "10000000000";
141
+ const mockRootHash = "mocked-root-hash";
142
+ // Create mock methods with implementations that return expected values
143
+ const mockGetStateRootHashLatest = jest.fn().mockResolvedValue({
144
+ stateRootHash: { toHex: () => mockRootHash },
145
+ });
146
+ const mockGetBalanceByStateRootHash = jest.fn().mockResolvedValue({
147
+ balanceValue: mockBalanceValue,
148
+ });
149
+ // Create the mock RPC client with our implementations
150
+ const mockMethods = createMockRpcClient({
151
+ getStateRootHashLatest: mockGetStateRootHashLatest,
152
+ getBalanceByStateRootHash: mockGetBalanceByStateRootHash,
153
+ });
154
+ const result = await fetchBalance(MOCK_PURSE_UREF);
155
+ expect(mockMethods.getStateRootHashLatest).toHaveBeenCalled();
156
+ expect(mockMethods.getBalanceByStateRootHash).toHaveBeenCalledWith(MOCK_PURSE_UREF, mockRootHash);
157
+ expect(result).toEqual(new BigNumber(mockBalanceValue));
158
+ });
159
+ it("should throw error when balance fetch fails", async () => {
160
+ const mockError = new Error("Failed to fetch balance");
161
+ createMockRpcClient({
162
+ getStateRootHashLatest: jest.fn().mockRejectedValue(mockError),
163
+ });
164
+ await expect(fetchBalance(MOCK_PURSE_UREF)).rejects.toThrow("Failed to fetch balance");
165
+ expect(log).toHaveBeenCalledWith("error", "Failed to fetch balance", mockError);
166
+ });
167
+ });
168
+ describe("fetchBlockHeight", () => {
169
+ it("should fetch block height successfully", async () => {
170
+ const mockHeight = 12345;
171
+ createMockRpcClient({
172
+ getLatestBlock: jest.fn().mockResolvedValue({
173
+ block: { height: mockHeight },
174
+ }),
175
+ });
176
+ const result = await fetchBlockHeight();
177
+ expect(result).toBe(mockHeight);
178
+ });
179
+ it("should throw error when block height fetch fails", async () => {
180
+ const mockError = new Error("Failed to fetch block height");
181
+ createMockRpcClient({
182
+ getLatestBlock: jest.fn().mockRejectedValue(mockError),
183
+ });
184
+ await expect(fetchBlockHeight()).rejects.toThrow("Failed to fetch block height");
185
+ expect(log).toHaveBeenCalledWith("error", "Failed to fetch block height", mockError);
186
+ });
187
+ });
188
+ describe("fetchTxs", () => {
189
+ const createMockTxData = (hash) => ({
190
+ deploy_hash: hash,
191
+ block_hash: "block-hash-1",
192
+ caller_public_key: MOCK_PUBLIC_KEY,
193
+ execution_type_id: 1,
194
+ cost: "10000",
195
+ payment_amount: "100000000",
196
+ timestamp: "2023-01-01T12:00:00Z",
197
+ status: "success",
198
+ args: {
199
+ id: {
200
+ parsed: 12345,
201
+ cl_type: {
202
+ Option: "U64",
203
+ },
204
+ },
205
+ amount: {
206
+ parsed: "500000000",
207
+ cl_type: "U512",
208
+ },
209
+ target: {
210
+ parsed: TEST_ADDRESSES.RECIPIENT_SECP256K1,
211
+ cl_type: "PublicKey",
212
+ },
213
+ },
214
+ amount: "500000000",
215
+ });
216
+ const mockTxData = [createMockTxData("deploy-hash-1")];
217
+ const getExpectedNetworkCall = (page) => ({
218
+ method: "GET",
219
+ url: `${MOCK_INDEXER_URL}/accounts/${MOCK_PUBLIC_KEY}/ledgerlive-deploys?limit=${DEFAULT_LIMIT}&page=${page}`,
220
+ });
221
+ it("should fetch transactions successfully (single page)", async () => {
222
+ jest.mocked(network).mockResolvedValueOnce(createNetworkMock(mockTxData));
223
+ const result = await fetchTxs(MOCK_PUBLIC_KEY);
224
+ expect(network).toHaveBeenCalledWith(getExpectedNetworkCall(1));
225
+ expect(result).toEqual(mockTxData);
226
+ });
227
+ it("should fetch transactions successfully (multiple pages)", async () => {
228
+ // Mock first page
229
+ jest.mocked(network).mockResolvedValueOnce(createNetworkMock([mockTxData[0]], 2, 2));
230
+ // Mock second page
231
+ const secondPageTx = createMockTxData("deploy-hash-2");
232
+ jest.mocked(network).mockResolvedValueOnce(createNetworkMock([secondPageTx], 2, 2));
233
+ const result = await fetchTxs(MOCK_PUBLIC_KEY);
234
+ expect(network).toHaveBeenCalledTimes(2);
235
+ expect(network).toHaveBeenNthCalledWith(1, getExpectedNetworkCall(1));
236
+ expect(network).toHaveBeenNthCalledWith(2, getExpectedNetworkCall(2));
237
+ expect(result).toEqual([mockTxData[0], secondPageTx]);
238
+ });
239
+ it("should throw error when transactions fetch fails", async () => {
240
+ const mockError = new Error("Failed to fetch transactions");
241
+ jest.mocked(network).mockRejectedValueOnce(mockError);
242
+ await expect(fetchTxs(MOCK_PUBLIC_KEY)).rejects.toThrow("Failed to fetch transactions");
243
+ expect(log).toHaveBeenCalledWith("error", "Casper indexer error: ", mockError);
244
+ });
245
+ });
246
+ describe("broadcastTx", () => {
247
+ it("should broadcast transaction successfully", async () => {
248
+ const mockTransaction = {};
249
+ const mockTxHash = "0123456789abcdef";
250
+ createMockRpcClient({
251
+ putTransaction: jest.fn().mockResolvedValue({
252
+ transactionHash: { toHex: () => mockTxHash },
253
+ }),
254
+ });
255
+ const result = await broadcastTx(mockTransaction);
256
+ expect(result).toBe(mockTxHash);
257
+ });
258
+ it("should throw error when broadcast fails", async () => {
259
+ const mockTransaction = {};
260
+ const mockError = new Error("Failed to broadcast transaction");
261
+ createMockRpcClient({
262
+ putTransaction: jest.fn().mockRejectedValue(mockError),
263
+ });
264
+ await expect(broadcastTx(mockTransaction)).rejects.toThrow("Failed to broadcast transaction");
265
+ expect(log).toHaveBeenCalledWith("error", "Failed to broadcast transaction", mockError);
266
+ });
267
+ });
268
+ });
269
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/api/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAe,MAAM,eAAe,CAAC;AAClG,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,sBAAsB,GACvB,MAAM,GAAG,CAAC;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AAGzD,YAAY;AACZ,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AACvD,MAAM,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;AACjD,MAAM,eAAe,GAAG,2EAA2E,CAAC;AACpG,MAAM,iBAAiB,GACrB,+EAA+E,CAAC;AAClF,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,oBAAoB;AACpB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,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,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;CACzB,CAAC,CAAC,CAAC;AA0CJ,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,CAAC,eAA4D,EAAE,EAAE;IAC3F,MAAM,cAAc,GAAG;QACrB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;QACzB,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE;QACjC,yBAAyB,EAAE,IAAI,CAAC,EAAE,EAAE;QACpC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;QACzB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;KAC1B,CAAC;IAEF,2EAA2E;IAC3E,MAAM,YAAY,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,eAAe,EAAE,CAAC;IAE/D,+DAA+D;IAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,YAAoC,CAAC,CAAC;IAEtF,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAI,YAAiB,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CACjG,CAAC;IACC,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,SAAS;QACT,SAAS;QACT,KAAK,EAAE,EAAE;KACV;IACD,MAAM,EAAE,GAAG;CACZ,CAA6B,CAAC;AAEjC,qBAAqB;AACrB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAC3D,OAAO;QACL,GAAG,cAAc;QACjB,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;QACtB,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;QAC5B,SAAS,EAAE;YACT,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;SACnB;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC;YACzC,KAAK,EAAE;gBACL,wBAAwB,EAAE,aAAa;gBACvC,kBAAkB,EAAE,gBAAgB;aACrC;SACkB,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,sBAAsB,EAAE,CAAC;YAEzB,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YACxD,MAAM,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,mBAAmB,CAAC;gBAC7C,KAAK,EAAE,EAAE;aACU,CAAC,CAAC;YAEvB,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,iBAAiB;YACjB,MAAM,qBAAqB,GAAoB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,qBAA6C,CAAC,CAAC;YAE9F,yBAAyB;YACzB,MAAM,qBAAqB,GAAG,EAAE,CAAC;YACjC,IAAI;iBACD,MAAM,CAAC,iBAAiB,CAAC;iBACzB,eAAe,CAAC,qBAAqD,CAAC,CAAC;YAE1E,gCAAgC;YAChC,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACrD,OAAO,EAAE;oBACP,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE;oBAC/C,SAAS,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;iBACvD;aACmB,CAAC,CAAC;YAExB,mBAAmB,CAAC;gBAClB,cAAc,EAAE,kBAAkB;aACnC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;YAE5D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;YAChE,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;YACjF,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;YAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,iBAAiB;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,gDAAgD;YAChD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAa,CAAC;YAC7D,SAAS,CAAC,UAAU,GAAG,4BAA4B,CAAC;YAEpD,mBAAmB,CAAC;gBAClB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,eAAe,CAAC,CAAC;YAE5D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YAE7C,mBAAmB,CAAC;gBAClB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,gBAAgB,GAAG,aAAa,CAAC;YACvC,MAAM,YAAY,GAAG,kBAAkB,CAAC;YAExC,uEAAuE;YACvE,MAAM,0BAA0B,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAC7D,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;aACtB,CAAC,CAAC;YAE1B,MAAM,6BAA6B,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAChE,YAAY,EAAE,gBAAgB;aACd,CAAC,CAAC;YAEpB,sDAAsD;YACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,sBAAsB,EAAE,0BAA0B;gBAClD,yBAAyB,EAAE,6BAA6B;aACzD,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,CAAC;YAEnD,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAChE,eAAe,EACf,YAAY,CACb,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAEvD,mBAAmB,CAAC;gBAClB,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;aAC/D,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACvF,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,UAAU,GAAG,KAAK,CAAC;YAEzB,mBAAmB,CAAC;gBAClB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;oBAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;iBACf,CAAC;aAClB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAExC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAE5D,mBAAmB,CAAC;gBAClB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YACjF,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,8BAA8B,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAmB,EAAE,CAAC,CAAC;YAC3D,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,cAAc;YAC1B,iBAAiB,EAAE,eAAe;YAClC,iBAAiB,EAAE,CAAC;YACpB,IAAI,EAAE,OAAO;YACb,cAAc,EAAE,WAAW;YAC3B,SAAS,EAAE,sBAAsB;YACjC,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE;gBACJ,EAAE,EAAE;oBACF,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,MAAM,EAAE,KAAK;qBACd;iBACF;gBACD,MAAM,EAAE;oBACN,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,MAAM;iBAChB;gBACD,MAAM,EAAE;oBACN,MAAM,EAAE,cAAc,CAAC,mBAAmB;oBAC1C,OAAO,EAAE,WAAW;iBACrB;aACF;YACD,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;QAEvD,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,GAAG,gBAAgB,aAAa,eAAe,6BAA6B,aAAa,SAAS,IAAI,EAAE;SAC9G,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;YAE1E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;YAE/C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,kBAAkB;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAErF,mBAAmB;YACnB,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;YAE/C,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAEtD,MAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YACxF,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,EAAE,SAAS,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,eAAe,GAAG,EAAiB,CAAC;YAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC;YAEtC,mBAAmB,CAAC;gBAClB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;oBAC1C,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;iBACpB,CAAC;aAC5B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,CAAC;YAElD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,eAAe,GAAG,EAAiB,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAE/D,mBAAmB,CAAC;gBAClB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YAC9F,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,iCAAiC,EAAE,SAAS,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=accountShape.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountShape.test.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/accountShape.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,89 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { fetchBalance, fetchBlockHeight, fetchAccountStateInfo, fetchTxs } from "../../api/index";
3
+ import { mapTxToOps } from "./txn";
4
+ import { getAccountShape } from "./accountShape";
5
+ import { createMockAccountShapeData } from "../../test/fixtures";
6
+ // Mock dependencies
7
+ jest.mock("../../api/index");
8
+ jest.mock("./txn");
9
+ describe("getAccountShape", () => {
10
+ const { mockAddress, mockAccountInfo, mockAccountId, mockBlockHeight, mockPurseUref, mockAccountHash, mockBalance, mockTxs, mockOperations, } = createMockAccountShapeData();
11
+ // Define a mock SyncConfig as required by the getAccountShape function
12
+ const mockSyncConfig = {
13
+ paginationConfig: {},
14
+ };
15
+ beforeEach(() => {
16
+ jest.clearAllMocks();
17
+ // Default mock implementations
18
+ fetchAccountStateInfo.mockResolvedValue({
19
+ purseUref: mockPurseUref,
20
+ accountHash: mockAccountHash,
21
+ });
22
+ fetchBlockHeight.mockResolvedValue(mockBlockHeight);
23
+ fetchBalance.mockResolvedValue(mockBalance);
24
+ fetchTxs.mockResolvedValue(mockTxs);
25
+ mapTxToOps.mockImplementation(() => () => mockOperations);
26
+ });
27
+ test("should return the correct account shape for an account with balance", async () => {
28
+ const accountShape = await getAccountShape(mockAccountInfo, mockSyncConfig);
29
+ expect(fetchAccountStateInfo).toHaveBeenCalledWith(mockAddress);
30
+ expect(fetchBlockHeight).toHaveBeenCalled();
31
+ expect(fetchBalance).toHaveBeenCalledWith(mockPurseUref);
32
+ expect(fetchTxs).toHaveBeenCalledWith(mockAddress);
33
+ expect(mapTxToOps).toHaveBeenCalledWith(mockAccountId, mockAccountHash);
34
+ expect(accountShape).toEqual({
35
+ id: mockAccountId,
36
+ balance: mockBalance,
37
+ spendableBalance: mockBalance,
38
+ operations: mockOperations,
39
+ blockHeight: mockBlockHeight,
40
+ });
41
+ });
42
+ test("should return account with zero balance when purseUref is not found", async () => {
43
+ fetchAccountStateInfo.mockResolvedValue({
44
+ purseUref: undefined,
45
+ accountHash: mockAccountHash,
46
+ });
47
+ const accountShape = await getAccountShape(mockAccountInfo, mockSyncConfig);
48
+ expect(fetchAccountStateInfo).toHaveBeenCalledWith(mockAddress);
49
+ expect(fetchBlockHeight).toHaveBeenCalled();
50
+ expect(fetchBalance).not.toHaveBeenCalled();
51
+ expect(fetchTxs).not.toHaveBeenCalled();
52
+ expect(accountShape).toEqual({
53
+ id: mockAccountId,
54
+ balance: new BigNumber(0),
55
+ spendableBalance: new BigNumber(0),
56
+ operations: [],
57
+ blockHeight: mockBlockHeight,
58
+ });
59
+ });
60
+ test("should return account with operations even when accountHash is not found", async () => {
61
+ fetchAccountStateInfo.mockResolvedValue({
62
+ purseUref: mockPurseUref,
63
+ accountHash: undefined,
64
+ });
65
+ const accountShape = await getAccountShape(mockAccountInfo, mockSyncConfig);
66
+ expect(fetchAccountStateInfo).toHaveBeenCalledWith(mockAddress);
67
+ expect(fetchBlockHeight).toHaveBeenCalled();
68
+ expect(fetchBalance).toHaveBeenCalledWith(mockPurseUref);
69
+ expect(fetchTxs).toHaveBeenCalledWith(mockAddress);
70
+ expect(mapTxToOps).toHaveBeenCalledWith(mockAccountId, "");
71
+ expect(accountShape).toEqual({
72
+ id: mockAccountId,
73
+ balance: mockBalance,
74
+ spendableBalance: mockBalance,
75
+ operations: mockOperations,
76
+ blockHeight: mockBlockHeight,
77
+ });
78
+ });
79
+ test("should handle API errors appropriately", async () => {
80
+ const errorMessage = "API Error";
81
+ fetchAccountStateInfo.mockRejectedValue(new Error(errorMessage));
82
+ await expect(getAccountShape(mockAccountInfo, mockSyncConfig)).rejects.toThrow(errorMessage);
83
+ expect(fetchAccountStateInfo).toHaveBeenCalledWith(mockAddress);
84
+ expect(fetchBlockHeight).not.toHaveBeenCalled();
85
+ expect(fetchBalance).not.toHaveBeenCalled();
86
+ expect(fetchTxs).not.toHaveBeenCalled();
87
+ });
88
+ });
89
+ //# sourceMappingURL=accountShape.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountShape.test.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/accountShape.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGjE,oBAAoB;AACpB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEnB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,EACJ,WAAW,EACX,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACX,OAAO,EACP,cAAc,GACf,GAAG,0BAA0B,EAAE,CAAC;IAEjC,uEAAuE;IACvE,MAAM,cAAc,GAAe;QACjC,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,+BAA+B;QAC9B,qBAAmC,CAAC,iBAAiB,CAAC;YACrD,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;QAEF,gBAA8B,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAElE,YAA0B,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAE1D,QAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAElD,UAAwB,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAE5E,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAExE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAC3B,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,WAAW;YACpB,gBAAgB,EAAE,WAAW;YAC7B,UAAU,EAAE,cAAc;YAC1B,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACpF,qBAAmC,CAAC,iBAAiB,CAAC;YACrD,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAE5E,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAExC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAC3B,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YACzB,gBAAgB,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;YAClC,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACzF,qBAAmC,CAAC,iBAAiB,CAAC;YACrD,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAE5E,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAE3D,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAC3B,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,WAAW;YACpB,gBAAgB,EAAE,WAAW;YAC7B,UAAU,EAAE,cAAc;YAC1B,WAAW,EAAE,eAAe;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,YAAY,GAAG,WAAW,CAAC;QAChC,qBAAmC,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAEhF,MAAM,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE7F,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=txn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txn.test.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/txn.test.ts"],"names":[],"mappings":""}