@matrix-privacy/wallet 0.0.1

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 (270) hide show
  1. package/.eslintrc.js +73 -0
  2. package/.prettierrc.js +21 -0
  3. package/LICENSE +21 -0
  4. package/README.md +7 -0
  5. package/dist/__tests__/index.test.d.ts +1 -0
  6. package/dist/__tests__/index.test.js +13 -0
  7. package/dist/__tests__/index.test.js.map +1 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.js +20 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +1 -0
  12. package/dist/services/artifacts/__tests__/artifact-downloader.test.js +172 -0
  13. package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +1 -0
  14. package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
  15. package/dist/services/artifacts/artifact-downloader.js +142 -0
  16. package/dist/services/artifacts/artifact-downloader.js.map +1 -0
  17. package/dist/services/artifacts/artifact-hash.d.ts +3 -0
  18. package/dist/services/artifacts/artifact-hash.js +53 -0
  19. package/dist/services/artifacts/artifact-hash.js.map +1 -0
  20. package/dist/services/artifacts/artifact-store.d.ts +11 -0
  21. package/dist/services/artifacts/artifact-store.js +15 -0
  22. package/dist/services/artifacts/artifact-store.js.map +1 -0
  23. package/dist/services/artifacts/artifact-util.d.ts +7 -0
  24. package/dist/services/artifacts/artifact-util.js +64 -0
  25. package/dist/services/artifacts/artifact-util.js.map +1 -0
  26. package/dist/services/artifacts/index.d.ts +2 -0
  27. package/dist/services/artifacts/index.js +19 -0
  28. package/dist/services/artifacts/index.js.map +1 -0
  29. package/dist/services/artifacts/json/artifact-v2-hashes.json +467 -0
  30. package/dist/services/ethers/__tests__/ethers-util.test.d.ts +1 -0
  31. package/dist/services/ethers/__tests__/ethers-util.test.js +19 -0
  32. package/dist/services/ethers/__tests__/ethers-util.test.js.map +1 -0
  33. package/dist/services/ethers/ethers-util.d.ts +1 -0
  34. package/dist/services/ethers/ethers-util.js +9 -0
  35. package/dist/services/ethers/ethers-util.js.map +1 -0
  36. package/dist/services/ethers/index.d.ts +1 -0
  37. package/dist/services/ethers/index.js +18 -0
  38. package/dist/services/ethers/index.js.map +1 -0
  39. package/dist/services/index.d.ts +4 -0
  40. package/dist/services/index.js +21 -0
  41. package/dist/services/index.js.map +1 -0
  42. package/dist/services/matrix/core/__tests__/engine.test.d.ts +1 -0
  43. package/dist/services/matrix/core/__tests__/engine.test.js +30 -0
  44. package/dist/services/matrix/core/__tests__/engine.test.js.map +1 -0
  45. package/dist/services/matrix/core/__tests__/providers.test.d.ts +1 -0
  46. package/dist/services/matrix/core/__tests__/providers.test.js +54 -0
  47. package/dist/services/matrix/core/__tests__/providers.test.js.map +1 -0
  48. package/dist/services/matrix/core/artifacts.d.ts +10 -0
  49. package/dist/services/matrix/core/artifacts.js +70 -0
  50. package/dist/services/matrix/core/artifacts.js.map +1 -0
  51. package/dist/services/matrix/core/engine.d.ts +4 -0
  52. package/dist/services/matrix/core/engine.js +21 -0
  53. package/dist/services/matrix/core/engine.js.map +1 -0
  54. package/dist/services/matrix/core/index.d.ts +8 -0
  55. package/dist/services/matrix/core/index.js +25 -0
  56. package/dist/services/matrix/core/index.js.map +1 -0
  57. package/dist/services/matrix/core/init.d.ts +21 -0
  58. package/dist/services/matrix/core/init.js +79 -0
  59. package/dist/services/matrix/core/init.js.map +1 -0
  60. package/dist/services/matrix/core/load-provider.d.ts +9 -0
  61. package/dist/services/matrix/core/load-provider.js +100 -0
  62. package/dist/services/matrix/core/load-provider.js.map +1 -0
  63. package/dist/services/matrix/core/merkletree.d.ts +5 -0
  64. package/dist/services/matrix/core/merkletree.js +40 -0
  65. package/dist/services/matrix/core/merkletree.js.map +1 -0
  66. package/dist/services/matrix/core/prover.d.ts +3 -0
  67. package/dist/services/matrix/core/prover.js +14 -0
  68. package/dist/services/matrix/core/prover.js.map +1 -0
  69. package/dist/services/matrix/core/providers.d.ts +9 -0
  70. package/dist/services/matrix/core/providers.js +31 -0
  71. package/dist/services/matrix/core/providers.js.map +1 -0
  72. package/dist/services/matrix/core/shields.d.ts +11 -0
  73. package/dist/services/matrix/core/shields.js +24 -0
  74. package/dist/services/matrix/core/shields.js.map +1 -0
  75. package/dist/services/matrix/history/__tests__/transaction-history.test.d.ts +1 -0
  76. package/dist/services/matrix/history/__tests__/transaction-history.test.js +249 -0
  77. package/dist/services/matrix/history/__tests__/transaction-history.test.js.map +1 -0
  78. package/dist/services/matrix/history/transaction-history.d.ts +4 -0
  79. package/dist/services/matrix/history/transaction-history.js +182 -0
  80. package/dist/services/matrix/history/transaction-history.js.map +1 -0
  81. package/dist/services/matrix/index.d.ts +4 -0
  82. package/dist/services/matrix/index.js +21 -0
  83. package/dist/services/matrix/index.js.map +1 -0
  84. package/dist/services/matrix/process/extract-transaction-data.d.ts +3 -0
  85. package/dist/services/matrix/process/extract-transaction-data.js +19 -0
  86. package/dist/services/matrix/process/extract-transaction-data.js.map +1 -0
  87. package/dist/services/matrix/process/index.d.ts +1 -0
  88. package/dist/services/matrix/process/index.js +18 -0
  89. package/dist/services/matrix/process/index.js.map +1 -0
  90. package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +1 -0
  91. package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +56 -0
  92. package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -0
  93. package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.d.ts +8 -0
  94. package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js +103 -0
  95. package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js.map +1 -0
  96. package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
  97. package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js +19861 -0
  98. package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
  99. package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.d.ts +1352 -0
  100. package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js +4 -0
  101. package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
  102. package/dist/services/matrix/quick-sync/V3/graphql/index.d.ts +1680 -0
  103. package/dist/services/matrix/quick-sync/V3/graphql/index.js +348 -0
  104. package/dist/services/matrix/quick-sync/V3/graphql/index.js.map +1 -0
  105. package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.d.ts +2 -0
  106. package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js +99 -0
  107. package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js.map +1 -0
  108. package/dist/services/matrix/quick-sync/graph-query.d.ts +5 -0
  109. package/dist/services/matrix/quick-sync/graph-query.js +26 -0
  110. package/dist/services/matrix/quick-sync/graph-query.js.map +1 -0
  111. package/dist/services/matrix/quick-sync/quick-sync-events.d.ts +2 -0
  112. package/dist/services/matrix/quick-sync/quick-sync-events.js +9 -0
  113. package/dist/services/matrix/quick-sync/quick-sync-events.js.map +1 -0
  114. package/dist/services/matrix/quick-sync/shared-formatters.d.ts +8 -0
  115. package/dist/services/matrix/quick-sync/shared-formatters.js +36 -0
  116. package/dist/services/matrix/quick-sync/shared-formatters.js.map +1 -0
  117. package/dist/services/matrix/util/__tests__/bytes-util.test.d.ts +1 -0
  118. package/dist/services/matrix/util/__tests__/bytes-util.test.js +23 -0
  119. package/dist/services/matrix/util/__tests__/bytes-util.test.js.map +1 -0
  120. package/dist/services/matrix/util/__tests__/crypto-util.test.d.ts +1 -0
  121. package/dist/services/matrix/util/__tests__/crypto-util.test.js +62 -0
  122. package/dist/services/matrix/util/__tests__/crypto-util.test.js.map +1 -0
  123. package/dist/services/matrix/util/bytes.d.ts +5 -0
  124. package/dist/services/matrix/util/bytes.js +22 -0
  125. package/dist/services/matrix/util/bytes.js.map +1 -0
  126. package/dist/services/matrix/util/crypto.d.ts +14 -0
  127. package/dist/services/matrix/util/crypto.js +80 -0
  128. package/dist/services/matrix/util/crypto.js.map +1 -0
  129. package/dist/services/matrix/util/graph-util.d.ts +3 -0
  130. package/dist/services/matrix/util/graph-util.js +13 -0
  131. package/dist/services/matrix/util/graph-util.js.map +1 -0
  132. package/dist/services/matrix/util/index.d.ts +2 -0
  133. package/dist/services/matrix/util/index.js +19 -0
  134. package/dist/services/matrix/util/index.js.map +1 -0
  135. package/dist/services/matrix/util/runtime.d.ts +2 -0
  136. package/dist/services/matrix/util/runtime.js +8 -0
  137. package/dist/services/matrix/util/runtime.js.map +1 -0
  138. package/dist/services/matrix/wallets/__tests__/balances-live.test.d.ts +1 -0
  139. package/dist/services/matrix/wallets/__tests__/balances-live.test.js +48 -0
  140. package/dist/services/matrix/wallets/__tests__/balances-live.test.js.map +1 -0
  141. package/dist/services/matrix/wallets/__tests__/balances-update.test.d.ts +1 -0
  142. package/dist/services/matrix/wallets/__tests__/balances-update.test.js +85 -0
  143. package/dist/services/matrix/wallets/__tests__/balances-update.test.js.map +1 -0
  144. package/dist/services/matrix/wallets/__tests__/balances.test.d.ts +1 -0
  145. package/dist/services/matrix/wallets/__tests__/balances.test.js +59 -0
  146. package/dist/services/matrix/wallets/__tests__/balances.test.js.map +1 -0
  147. package/dist/services/matrix/wallets/__tests__/wallets.test.d.ts +1 -0
  148. package/dist/services/matrix/wallets/__tests__/wallets.test.js +80 -0
  149. package/dist/services/matrix/wallets/__tests__/wallets.test.js.map +1 -0
  150. package/dist/services/matrix/wallets/balance-update.d.ts +10 -0
  151. package/dist/services/matrix/wallets/balance-update.js +126 -0
  152. package/dist/services/matrix/wallets/balance-update.js.map +1 -0
  153. package/dist/services/matrix/wallets/balances.d.ts +3 -0
  154. package/dist/services/matrix/wallets/balances.js +32 -0
  155. package/dist/services/matrix/wallets/balances.js.map +1 -0
  156. package/dist/services/matrix/wallets/index.d.ts +4 -0
  157. package/dist/services/matrix/wallets/index.js +21 -0
  158. package/dist/services/matrix/wallets/index.js.map +1 -0
  159. package/dist/services/matrix/wallets/wallets.d.ts +22 -0
  160. package/dist/services/matrix/wallets/wallets.js +252 -0
  161. package/dist/services/matrix/wallets/wallets.js.map +1 -0
  162. package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +216 -0
  163. package/dist/services/transactions/__tests__/proof-cache.test.d.ts +1 -0
  164. package/dist/services/transactions/__tests__/proof-cache.test.js +114 -0
  165. package/dist/services/transactions/__tests__/proof-cache.test.js.map +1 -0
  166. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +1 -0
  167. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +376 -0
  168. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -0
  169. package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +1 -0
  170. package/dist/services/transactions/__tests__/tx-gas-details.test.js +109 -0
  171. package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +1 -0
  172. package/dist/services/transactions/__tests__/tx-notes.test.d.ts +1 -0
  173. package/dist/services/transactions/__tests__/tx-notes.test.js +193 -0
  174. package/dist/services/transactions/__tests__/tx-notes.test.js.map +1 -0
  175. package/dist/services/transactions/__tests__/tx-shield-base-token.test.d.ts +1 -0
  176. package/dist/services/transactions/__tests__/tx-shield-base-token.test.js +99 -0
  177. package/dist/services/transactions/__tests__/tx-shield-base-token.test.js.map +1 -0
  178. package/dist/services/transactions/__tests__/tx-shield.test.d.ts +1 -0
  179. package/dist/services/transactions/__tests__/tx-shield.test.js +146 -0
  180. package/dist/services/transactions/__tests__/tx-shield.test.js.map +1 -0
  181. package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +1 -0
  182. package/dist/services/transactions/__tests__/tx-transfer.test.js +263 -0
  183. package/dist/services/transactions/__tests__/tx-transfer.test.js.map +1 -0
  184. package/dist/services/transactions/__tests__/tx-unshield.test.d.ts +1 -0
  185. package/dist/services/transactions/__tests__/tx-unshield.test.js +759 -0
  186. package/dist/services/transactions/__tests__/tx-unshield.test.js.map +1 -0
  187. package/dist/services/transactions/index.d.ts +13 -0
  188. package/dist/services/transactions/index.js +30 -0
  189. package/dist/services/transactions/index.js.map +1 -0
  190. package/dist/services/transactions/proof-cache.d.ts +27 -0
  191. package/dist/services/transactions/proof-cache.js +130 -0
  192. package/dist/services/transactions/proof-cache.js.map +1 -0
  193. package/dist/services/transactions/tx-cross-contract-calls.d.ts +12 -0
  194. package/dist/services/transactions/tx-cross-contract-calls.js +210 -0
  195. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
  196. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.d.ts +5 -0
  197. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js +110 -0
  198. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js.map +1 -0
  199. package/dist/services/transactions/tx-gas-details.d.ts +5 -0
  200. package/dist/services/transactions/tx-gas-details.js +101 -0
  201. package/dist/services/transactions/tx-gas-details.js.map +1 -0
  202. package/dist/services/transactions/tx-generator.d.ts +13 -0
  203. package/dist/services/transactions/tx-generator.js +168 -0
  204. package/dist/services/transactions/tx-generator.js.map +1 -0
  205. package/dist/services/transactions/tx-notes.d.ts +11 -0
  206. package/dist/services/transactions/tx-notes.js +153 -0
  207. package/dist/services/transactions/tx-notes.js.map +1 -0
  208. package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
  209. package/dist/services/transactions/tx-nullifiers.js +17 -0
  210. package/dist/services/transactions/tx-nullifiers.js.map +1 -0
  211. package/dist/services/transactions/tx-proof-transfer.d.ts +3 -0
  212. package/dist/services/transactions/tx-proof-transfer.js +39 -0
  213. package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
  214. package/dist/services/transactions/tx-proof-unshield.d.ts +5 -0
  215. package/dist/services/transactions/tx-proof-unshield.js +132 -0
  216. package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
  217. package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
  218. package/dist/services/transactions/tx-shield-base-token.js +55 -0
  219. package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
  220. package/dist/services/transactions/tx-shield.d.ts +6 -0
  221. package/dist/services/transactions/tx-shield.js +77 -0
  222. package/dist/services/transactions/tx-shield.js.map +1 -0
  223. package/dist/services/transactions/tx-transfer.d.ts +3 -0
  224. package/dist/services/transactions/tx-transfer.js +39 -0
  225. package/dist/services/transactions/tx-transfer.js.map +1 -0
  226. package/dist/services/transactions/tx-unshield.d.ts +11 -0
  227. package/dist/services/transactions/tx-unshield.js +224 -0
  228. package/dist/services/transactions/tx-unshield.js.map +1 -0
  229. package/dist/tests/local-e2e.d.ts +13 -0
  230. package/dist/tests/local-e2e.js +487 -0
  231. package/dist/tests/local-e2e.js.map +1 -0
  232. package/dist/tests/mocks.test.d.ts +40 -0
  233. package/dist/tests/mocks.test.js +171 -0
  234. package/dist/tests/mocks.test.js.map +1 -0
  235. package/dist/tests/setup.test.d.ts +7 -0
  236. package/dist/tests/setup.test.js +88 -0
  237. package/dist/tests/setup.test.js.map +1 -0
  238. package/dist/tests/stubs/engine-stubs.test.d.ts +7 -0
  239. package/dist/tests/stubs/engine-stubs.test.js +72 -0
  240. package/dist/tests/stubs/engine-stubs.test.js.map +1 -0
  241. package/dist/utils/__tests__/blocked-address.test.d.ts +1 -0
  242. package/dist/utils/__tests__/blocked-address.test.js +23 -0
  243. package/dist/utils/__tests__/blocked-address.test.js.map +1 -0
  244. package/dist/utils/__tests__/logger.test.d.ts +1 -0
  245. package/dist/utils/__tests__/logger.test.js +28 -0
  246. package/dist/utils/__tests__/logger.test.js.map +1 -0
  247. package/dist/utils/__tests__/utils.test.d.ts +1 -0
  248. package/dist/utils/__tests__/utils.test.js +21 -0
  249. package/dist/utils/__tests__/utils.test.js.map +1 -0
  250. package/dist/utils/blocked-address.d.ts +2 -0
  251. package/dist/utils/blocked-address.js +17 -0
  252. package/dist/utils/blocked-address.js.map +1 -0
  253. package/dist/utils/error.d.ts +1 -0
  254. package/dist/utils/error.js +20 -0
  255. package/dist/utils/error.js.map +1 -0
  256. package/dist/utils/gas-price.d.ts +6 -0
  257. package/dist/utils/gas-price.js +19 -0
  258. package/dist/utils/gas-price.js.map +1 -0
  259. package/dist/utils/index.d.ts +2 -0
  260. package/dist/utils/index.js +19 -0
  261. package/dist/utils/index.js.map +1 -0
  262. package/dist/utils/logger.d.ts +3 -0
  263. package/dist/utils/logger.js +21 -0
  264. package/dist/utils/logger.js.map +1 -0
  265. package/dist/utils/utils.d.ts +4 -0
  266. package/dist/utils/utils.js +54 -0
  267. package/dist/utils/utils.js.map +1 -0
  268. package/package.json +94 -0
  269. package/postinstall.js +52 -0
  270. package/react-native-shims.js +42 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.quickSyncEventsGraphV3 = void 0;
4
+ const engine_1 = require("@matrix-privacy/engine");
5
+ const graph_query_1 = require("../graph-query");
6
+ const shared_models_1 = require("@matrix-privacy/shared-models");
7
+ const runtime_1 = require("@graphql-mesh/runtime");
8
+ const graph_util_1 = require("../../util/graph-util");
9
+ const graphql_1 = require("./graphql");
10
+ const graph_type_formatters_v3_1 = require("./graph-type-formatters-v3");
11
+ const meshes = {};
12
+ // 1.5 full trees of commitments
13
+ // TODO: This will have to change when we have more than 100k commitments.
14
+ const MAX_QUERY_RESULTS = 100000;
15
+ const sourceNameForNetwork = (networkName) => {
16
+ switch (networkName) {
17
+ case shared_models_1.NetworkName.Hardhat:
18
+ default:
19
+ throw new Error('No Graph API hosted service for this network on Matrix V3');
20
+ }
21
+ };
22
+ const isSupportedByNetwork = (networkName) => {
23
+ try {
24
+ sourceNameForNetwork(networkName);
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ };
31
+ const quickSyncEventsGraphV3 = async (chain, startingBlock) => {
32
+ const network = (0, shared_models_1.networkForChain)(chain);
33
+ if (!network || !isSupportedByNetwork(network.name)) {
34
+ // Return empty logs, Engine will default to full scan.
35
+ return graph_query_1.EMPTY_EVENTS;
36
+ }
37
+ const sdk = getBuiltGraphSDK(network.name);
38
+ const [nullifiers, unshields, commitments, matrixTransactions] = await Promise.all([
39
+ (0, graph_query_1.autoPaginatingQuery)(async (blockNumber) => (await sdk.Nullifiers({
40
+ blockNumber,
41
+ })).nullifiers, startingBlock.toString(), MAX_QUERY_RESULTS),
42
+ (0, graph_query_1.autoPaginatingQuery)(async (blockNumber) => (await sdk.Unshields({
43
+ blockNumber,
44
+ })).unshields, startingBlock.toString(), MAX_QUERY_RESULTS),
45
+ (0, graph_query_1.autoPaginatingQuery)(async (blockNumber) => (await sdk.Commitments({
46
+ blockNumber,
47
+ })).commitments, startingBlock.toString(), MAX_QUERY_RESULTS),
48
+ (0, graph_query_1.autoPaginatingQuery)(async (blockNumber) => (await sdk.MatrixTransactions({
49
+ blockNumber,
50
+ })).matrixTransactions, startingBlock.toString(), MAX_QUERY_RESULTS),
51
+ ]);
52
+ const filteredMatrixTransactions = (0, graph_util_1.removeDuplicatesByID)(matrixTransactions);
53
+ const filteredNullifiers = (0, graph_util_1.removeDuplicatesByID)(nullifiers);
54
+ const filteredUnshields = (0, graph_util_1.removeDuplicatesByID)(unshields);
55
+ const filteredCommitments = (0, graph_util_1.removeDuplicatesByID)(commitments);
56
+ const matrixTransactionEvents = (0, graph_type_formatters_v3_1.formatGraphMatrixTransactionEventsV3)(filteredMatrixTransactions);
57
+ const matrixTxidMap = {};
58
+ for (const matrixTransaction of filteredMatrixTransactions) {
59
+ const matrixTxid = (0, engine_1.getMatrixTransactionIDHex)(matrixTransaction);
60
+ matrixTxidMap[matrixTxid] = matrixTransaction.commitments;
61
+ }
62
+ const nullifierEvents = (0, graph_type_formatters_v3_1.formatGraphNullifierEventsV3)(filteredNullifiers);
63
+ const unshieldEvents = (0, graph_type_formatters_v3_1.formatGraphUnshieldEventsV3)(filteredUnshields, matrixTxidMap);
64
+ const commitmentEvents = (0, graph_type_formatters_v3_1.formatGraphCommitmentEventsV3)(filteredCommitments, matrixTxidMap);
65
+ return {
66
+ nullifierEvents,
67
+ unshieldEvents,
68
+ commitmentEvents,
69
+ matrixTransactionEvents,
70
+ };
71
+ };
72
+ exports.quickSyncEventsGraphV3 = quickSyncEventsGraphV3;
73
+ const getBuiltGraphClient = async (networkName) => {
74
+ const meshForNetwork = meshes[networkName];
75
+ if ((0, shared_models_1.isDefined)(meshForNetwork)) {
76
+ return meshForNetwork;
77
+ }
78
+ const sourceName = sourceNameForNetwork(networkName);
79
+ const meshOptions = await (0, graphql_1.getMeshOptions)();
80
+ const filteredSources = meshOptions.sources.filter(source => {
81
+ return source.name === sourceName;
82
+ });
83
+ if (filteredSources.length !== 1) {
84
+ throw new Error(`Expected exactly one source for network ${networkName}, found ${filteredSources.length}`);
85
+ }
86
+ meshOptions.sources = [filteredSources[0]];
87
+ const mesh = await (0, runtime_1.getMesh)(meshOptions);
88
+ meshes[networkName] = mesh;
89
+ const id = mesh.pubsub.subscribe('destroy', () => {
90
+ meshes[networkName] = undefined;
91
+ mesh.pubsub.unsubscribe(id);
92
+ });
93
+ return mesh;
94
+ };
95
+ const getBuiltGraphSDK = (networkName, globalContext) => {
96
+ const sdkRequester$ = getBuiltGraphClient(networkName).then(({ sdkRequesterFactory }) => sdkRequesterFactory(globalContext));
97
+ return (0, graphql_1.getSdk)((...args) => sdkRequester$.then(sdkRequester => sdkRequester(...args)));
98
+ };
99
+ //# sourceMappingURL=quick-sync-events-graph-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-sync-events-graph-v3.js","sourceRoot":"","sources":["../../../../../src/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AccumulatedEvents,\n Chain,\n getMatrixTransactionIDHex,\n} from '@matrix-privacy/engine';\nimport { EMPTY_EVENTS, autoPaginatingQuery } from '../graph-query';\nimport {\n NetworkName,\n isDefined,\n networkForChain,\n} from '@matrix-privacy/shared-models';\nimport { MeshInstance, getMesh } from '@graphql-mesh/runtime';\nimport { removeDuplicatesByID } from '../../util/graph-util';\nimport { getMeshOptions, getSdk } from './graphql';\nimport {\n MatrixTxidMapV3,\n formatGraphCommitmentEventsV3,\n formatGraphNullifierEventsV3,\n formatGraphMatrixTransactionEventsV3,\n formatGraphUnshieldEventsV3,\n} from './graph-type-formatters-v3';\n\nconst meshes: MapType<MeshInstance> = {};\n\n// 1.5 full trees of commitments\n// TODO: This will have to change when we have more than 100k commitments.\nconst MAX_QUERY_RESULTS = 100000;\n\nconst sourceNameForNetwork = (networkName: NetworkName): string => {\n switch (networkName) {\n case NetworkName.Hardhat:\n default:\n throw new Error(\n 'No Graph API hosted service for this network on Matrix V3',\n );\n }\n};\n\nconst isSupportedByNetwork = (networkName: NetworkName) => {\n try {\n sourceNameForNetwork(networkName);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const quickSyncEventsGraphV3 = async (\n chain: Chain,\n startingBlock: number,\n): Promise<AccumulatedEvents> => {\n const network = networkForChain(chain);\n if (!network || !isSupportedByNetwork(network.name)) {\n // Return empty logs, Engine will default to full scan.\n return EMPTY_EVENTS;\n }\n\n const sdk = getBuiltGraphSDK(network.name);\n\n const [nullifiers, unshields, commitments, matrixTransactions] =\n await Promise.all([\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Nullifiers({\n blockNumber,\n })\n ).nullifiers,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Unshields({\n blockNumber,\n })\n ).unshields,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.Commitments({\n blockNumber,\n })\n ).commitments,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n autoPaginatingQuery(\n async (blockNumber: string) =>\n (\n await sdk.MatrixTransactions({\n blockNumber,\n })\n ).matrixTransactions,\n startingBlock.toString(),\n MAX_QUERY_RESULTS,\n ),\n ]);\n\n const filteredMatrixTransactions = removeDuplicatesByID(matrixTransactions);\n const filteredNullifiers = removeDuplicatesByID(nullifiers);\n const filteredUnshields = removeDuplicatesByID(unshields);\n const filteredCommitments = removeDuplicatesByID(commitments);\n\n const matrixTransactionEvents = formatGraphMatrixTransactionEventsV3(\n filteredMatrixTransactions,\n );\n\n const matrixTxidMap: MatrixTxidMapV3 = {};\n for (const matrixTransaction of filteredMatrixTransactions) {\n const matrixTxid = getMatrixTransactionIDHex(matrixTransaction);\n matrixTxidMap[matrixTxid] = matrixTransaction.commitments;\n }\n\n const nullifierEvents = formatGraphNullifierEventsV3(filteredNullifiers);\n const unshieldEvents = formatGraphUnshieldEventsV3(\n filteredUnshields,\n matrixTxidMap,\n );\n const commitmentEvents = formatGraphCommitmentEventsV3(\n filteredCommitments,\n matrixTxidMap,\n );\n\n return {\n nullifierEvents,\n unshieldEvents,\n commitmentEvents,\n matrixTransactionEvents,\n };\n};\n\nconst getBuiltGraphClient = async (\n networkName: NetworkName,\n): Promise<MeshInstance> => {\n const meshForNetwork = meshes[networkName];\n if (isDefined(meshForNetwork)) {\n return meshForNetwork;\n }\n const sourceName = sourceNameForNetwork(networkName);\n const meshOptions = await getMeshOptions();\n const filteredSources = meshOptions.sources.filter(source => {\n return source.name === sourceName;\n });\n if (filteredSources.length !== 1) {\n throw new Error(\n `Expected exactly one source for network ${networkName}, found ${filteredSources.length}`,\n );\n }\n meshOptions.sources = [filteredSources[0]];\n const mesh = await getMesh(meshOptions);\n meshes[networkName] = mesh;\n const id = mesh.pubsub.subscribe('destroy', () => {\n meshes[networkName] = undefined;\n mesh.pubsub.unsubscribe(id);\n });\n return mesh;\n};\n\nconst getBuiltGraphSDK = <TGlobalContext, TOperationContext>(\n networkName: NetworkName,\n globalContext?: TGlobalContext,\n) => {\n const sdkRequester$ = getBuiltGraphClient(networkName).then(\n ({ sdkRequesterFactory }) => sdkRequesterFactory(globalContext),\n );\n return getSdk<TOperationContext, TGlobalContext>((...args) =>\n sdkRequester$.then(sdkRequester => sdkRequester(...args)),\n );\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import { AccumulatedEvents } from '@matrix-privacy/engine';
2
+ export declare const EMPTY_EVENTS: AccumulatedEvents;
3
+ export declare const autoPaginatingQuery: <ReturnType_1 extends {
4
+ blockNumber: string;
5
+ }>(query: (blockNumber: string) => Promise<ReturnType_1[]>, blockNumber: string, maxQueryResults: number, prevResults?: ReturnType_1[], maxResults?: number) => Promise<ReturnType_1[]>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.autoPaginatingQuery = exports.EMPTY_EVENTS = void 0;
4
+ const shared_models_1 = require("@matrix-privacy/shared-models");
5
+ exports.EMPTY_EVENTS = {
6
+ commitmentEvents: [],
7
+ unshieldEvents: [],
8
+ nullifierEvents: [],
9
+ };
10
+ const autoPaginatingQuery = async (query, blockNumber, maxQueryResults, prevResults = [], maxResults = 10000) => {
11
+ const newResults = await (0, shared_models_1.promiseTimeout)(query(blockNumber), 20000, new Error('Timeout querying Graph for QuickSync of Matrix Events'));
12
+ if (newResults.length === 0) {
13
+ return prevResults;
14
+ }
15
+ const totalResults = prevResults.concat(newResults);
16
+ const overLimit = totalResults.length >= maxQueryResults;
17
+ const lastResult = totalResults[totalResults.length - 1];
18
+ const shouldQueryMore = newResults.length === maxResults;
19
+ if (!overLimit && shouldQueryMore) {
20
+ await (0, shared_models_1.delay)(250);
21
+ return (0, exports.autoPaginatingQuery)(query, lastResult.blockNumber, maxQueryResults, totalResults);
22
+ }
23
+ return totalResults;
24
+ };
25
+ exports.autoPaginatingQuery = autoPaginatingQuery;
26
+ //# sourceMappingURL=graph-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-query.js","sourceRoot":"","sources":["../../../../src/services/matrix/quick-sync/graph-query.ts"],"names":[],"mappings":";;;AACA,iEAAsE;AAEzD,QAAA,YAAY,GAAsB;IAC7C,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEK,MAAM,mBAAmB,GAAG,KAAK,EAGtC,KAAqD,EACrD,WAAmB,EACnB,eAAuB,EACvB,cAA4B,EAAE,EAC9B,UAAU,GAAG,KAAM,EACI,EAAE;IACzB,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAc,EACrC,KAAK,CAAC,WAAW,CAAC,EAClB,KAAK,EACL,IAAI,KAAK,CAAC,uDAAuD,CAAC,CACnE,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,WAAW,CAAC;KACpB;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,eAAe,CAAC;IACzD,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC;IACzD,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE;QACjC,MAAM,IAAA,qBAAK,EAAC,GAAG,CAAC,CAAC;QACjB,OAAO,IAAA,2BAAmB,EACxB,KAAK,EACL,UAAU,CAAC,WAAW,EACtB,eAAe,EACf,YAAY,CACb,CAAC;KACH;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAlCW,QAAA,mBAAmB,uBAkC9B","sourcesContent":["import { AccumulatedEvents } from '@matrix-privacy/engine';\nimport { delay, promiseTimeout } from '@matrix-privacy/shared-models';\n\nexport const EMPTY_EVENTS: AccumulatedEvents = {\n commitmentEvents: [],\n unshieldEvents: [],\n nullifierEvents: [],\n};\n\nexport const autoPaginatingQuery = async <\n ReturnType extends { blockNumber: string },\n>(\n query: (blockNumber: string) => Promise<ReturnType[]>,\n blockNumber: string,\n maxQueryResults: number,\n prevResults: ReturnType[] = [],\n maxResults = 10_000\n): Promise<ReturnType[]> => {\n const newResults = await promiseTimeout(\n query(blockNumber),\n 20000,\n new Error('Timeout querying Graph for QuickSync of Matrix Events'),\n );\n if (newResults.length === 0) {\n return prevResults;\n }\n\n const totalResults = prevResults.concat(newResults); \n const overLimit = totalResults.length >= maxQueryResults;\n const lastResult = totalResults[totalResults.length - 1];\n\n const shouldQueryMore = newResults.length === maxResults;\n if (!overLimit && shouldQueryMore) {\n await delay(250);\n return autoPaginatingQuery(\n query,\n lastResult.blockNumber,\n maxQueryResults,\n totalResults,\n );\n }\n\n return totalResults;\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { Chain } from '@matrix-privacy/engine';
2
+ export declare const quickSyncEventsGraph: (chain: Chain, startingBlock: number) => Promise<import("@matrix-privacy/engine").AccumulatedEvents>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.quickSyncEventsGraph = void 0;
4
+ const quick_sync_events_graph_v3_1 = require("./V3/quick-sync-events-graph-v3");
5
+ const quickSyncEventsGraph = async (chain, startingBlock) => {
6
+ return (0, quick_sync_events_graph_v3_1.quickSyncEventsGraphV3)(chain, startingBlock);
7
+ };
8
+ exports.quickSyncEventsGraph = quickSyncEventsGraph;
9
+ //# sourceMappingURL=quick-sync-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-sync-events.js","sourceRoot":"","sources":["../../../../src/services/matrix/quick-sync/quick-sync-events.ts"],"names":[],"mappings":";;;AACA,gFAAyE;AAElE,MAAM,oBAAoB,GAAG,KAAK,EACvC,KAAY,EACZ,aAAqB,EACrB,EAAE;IACF,OAAO,IAAA,mDAAsB,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC,CAAC;AALW,QAAA,oBAAoB,wBAK/B","sourcesContent":["import { Chain } from '@matrix-privacy/engine';\nimport { quickSyncEventsGraphV3 } from './V3/quick-sync-events-graph-v3';\n\nexport const quickSyncEventsGraph = async (\n chain: Chain,\n startingBlock: number,\n) => {\n return quickSyncEventsGraphV3(chain, startingBlock);\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { PreImage, TokenData, TokenType } from '@matrix-privacy/engine';
2
+ import { TokenType as GraphTokenTypeV3, Token as GraphTokenV3, CommitmentPreimage as GraphCommitmentPreimageV3 } from './V3/graphql';
3
+ export declare const graphTokenTypeToEngineTokenType: (graphTokenType: GraphTokenTypeV3) => TokenType;
4
+ export declare const formatSerializedToken: (graphToken: GraphTokenV3) => TokenData;
5
+ export declare const formatPreImage: (graphPreImage: GraphCommitmentPreimageV3) => PreImage;
6
+ export declare const formatTo16Bytes: (value: string, prefix: boolean) => string;
7
+ export declare const formatTo32Bytes: (value: string, prefix: boolean) => string;
8
+ export declare const bigIntStringToHex: (bigintString: string) => string;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bigIntStringToHex = exports.formatTo32Bytes = exports.formatTo16Bytes = exports.formatPreImage = exports.formatSerializedToken = exports.graphTokenTypeToEngineTokenType = void 0;
4
+ const engine_1 = require("@matrix-privacy/engine");
5
+ const graphTokenTypeToEngineTokenType = (graphTokenType) => {
6
+ switch (graphTokenType) {
7
+ case 'ERC20':
8
+ return engine_1.TokenType.ERC20;
9
+ case 'ERC721':
10
+ return engine_1.TokenType.ERC721;
11
+ case 'ERC1155':
12
+ return engine_1.TokenType.ERC1155;
13
+ }
14
+ };
15
+ exports.graphTokenTypeToEngineTokenType = graphTokenTypeToEngineTokenType;
16
+ const formatSerializedToken = (graphToken) => {
17
+ return (0, engine_1.serializeTokenData)(graphToken.tokenAddress, (0, exports.graphTokenTypeToEngineTokenType)(graphToken.tokenType), graphToken.tokenSubID);
18
+ };
19
+ exports.formatSerializedToken = formatSerializedToken;
20
+ const formatPreImage = (graphPreImage) => {
21
+ return (0, engine_1.serializePreImage)(graphPreImage.npk, (0, exports.formatSerializedToken)(graphPreImage.token), BigInt(graphPreImage.value));
22
+ };
23
+ exports.formatPreImage = formatPreImage;
24
+ const formatTo16Bytes = (value, prefix) => {
25
+ return engine_1.ByteUtils.formatToByteLength(value, engine_1.ByteLength.UINT_128, prefix);
26
+ };
27
+ exports.formatTo16Bytes = formatTo16Bytes;
28
+ const formatTo32Bytes = (value, prefix) => {
29
+ return engine_1.ByteUtils.formatToByteLength(value, engine_1.ByteLength.UINT_256, prefix);
30
+ };
31
+ exports.formatTo32Bytes = formatTo32Bytes;
32
+ const bigIntStringToHex = (bigintString) => {
33
+ return `0x${BigInt(bigintString).toString(16)}`;
34
+ };
35
+ exports.bigIntStringToHex = bigIntStringToHex;
36
+ //# sourceMappingURL=shared-formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-formatters.js","sourceRoot":"","sources":["../../../../src/services/matrix/quick-sync/shared-formatters.ts"],"names":[],"mappings":";;;AAAA,mDAQgC;AAOzB,MAAM,+BAA+B,GAAG,CAC7C,cAAgC,EACrB,EAAE;IACb,QAAQ,cAAc,EAAE;QACtB,KAAK,OAAO;YACV,OAAO,kBAAS,CAAC,KAAK,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,kBAAS,CAAC,MAAM,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,kBAAS,CAAC,OAAO,CAAC;KAC5B;AACH,CAAC,CAAC;AAXW,QAAA,+BAA+B,mCAW1C;AAEK,MAAM,qBAAqB,GAAG,CACnC,UAAwB,EACb,EAAE;IACb,OAAO,IAAA,2BAAkB,EACvB,UAAU,CAAC,YAAY,EACvB,IAAA,uCAA+B,EAAC,UAAU,CAAC,SAAS,CAAC,EACrD,UAAU,CAAC,UAAU,CACtB,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEK,MAAM,cAAc,GAAG,CAC5B,aAAwC,EAC9B,EAAE;IACZ,OAAO,IAAA,0BAAiB,EACtB,aAAa,CAAC,GAAG,EACjB,IAAA,6BAAqB,EAAC,aAAa,CAAC,KAAK,CAAC,EAC1C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAC5B,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,cAAc,kBAQzB;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;IAChE,OAAO,kBAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,mBAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEK,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAe,EAAE,EAAE;IAChE,OAAO,kBAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,mBAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEK,MAAM,iBAAiB,GAAG,CAAC,YAAoB,EAAU,EAAE;IAChE,OAAO,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B","sourcesContent":["import {\n ByteLength,\n PreImage,\n TokenData,\n TokenType,\n ByteUtils,\n serializePreImage,\n serializeTokenData,\n} from '@matrix-privacy/engine';\nimport {\n TokenType as GraphTokenTypeV3,\n Token as GraphTokenV3,\n CommitmentPreimage as GraphCommitmentPreimageV3,\n} from './V3/graphql';\n\nexport const graphTokenTypeToEngineTokenType = (\n graphTokenType: GraphTokenTypeV3,\n): TokenType => {\n switch (graphTokenType) {\n case 'ERC20':\n return TokenType.ERC20;\n case 'ERC721':\n return TokenType.ERC721;\n case 'ERC1155':\n return TokenType.ERC1155;\n }\n};\n\nexport const formatSerializedToken = (\n graphToken: GraphTokenV3,\n): TokenData => {\n return serializeTokenData(\n graphToken.tokenAddress,\n graphTokenTypeToEngineTokenType(graphToken.tokenType),\n graphToken.tokenSubID,\n );\n};\n\nexport const formatPreImage = (\n graphPreImage: GraphCommitmentPreimageV3,\n): PreImage => {\n return serializePreImage(\n graphPreImage.npk,\n formatSerializedToken(graphPreImage.token),\n BigInt(graphPreImage.value),\n );\n};\n\nexport const formatTo16Bytes = (value: string, prefix: boolean) => {\n return ByteUtils.formatToByteLength(value, ByteLength.UINT_128, prefix);\n};\n\nexport const formatTo32Bytes = (value: string, prefix: boolean) => {\n return ByteUtils.formatToByteLength(value, ByteLength.UINT_256, prefix);\n};\n\nexport const bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n"]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chai_1 = __importDefault(require("chai"));
7
+ const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
8
+ const bytes_1 = require("../bytes");
9
+ chai_1.default.use(chai_as_promised_1.default);
10
+ const { expect } = chai_1.default;
11
+ describe('bytes-util', () => {
12
+ it('Should parse rail balance addresses', () => {
13
+ expect((0, bytes_1.parseMatrixTokenAddress)('00')).to.equal('0x0000000000000000000000000000000000000000');
14
+ expect((0, bytes_1.parseMatrixTokenAddress)('123456789012345678901234567890')).to.equal('0x0000000000123456789012345678901234567890');
15
+ });
16
+ it('Should return random bytes of length', () => {
17
+ expect((0, bytes_1.getRandomBytes)(1).length).to.equal(2);
18
+ expect((0, bytes_1.getRandomBytes)(16).length).to.equal(32);
19
+ expect((0, bytes_1.getRandomBytes)(32).length).to.equal(64);
20
+ expect((0, bytes_1.getRandomBytes)(80).length).to.equal(160);
21
+ });
22
+ });
23
+ //# sourceMappingURL=bytes-util.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes-util.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/util/__tests__/bytes-util.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,oCAAmE;AAEnE,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,IAAA,+BAAuB,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5C,4CAA4C,CAC7C,CAAC;QACF,MAAM,CAAC,IAAA,+BAAuB,EAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACxE,4CAA4C,CAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,IAAA,sBAAc,EAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport { getRandomBytes, parseMatrixTokenAddress } from '../bytes';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\ndescribe('bytes-util', () => {\n it('Should parse rail balance addresses', () => {\n expect(parseMatrixTokenAddress('00')).to.equal(\n '0x0000000000000000000000000000000000000000',\n );\n expect(parseMatrixTokenAddress('123456789012345678901234567890')).to.equal(\n '0x0000000000123456789012345678901234567890',\n );\n });\n\n it('Should return random bytes of length', () => {\n expect(getRandomBytes(1).length).to.equal(2);\n expect(getRandomBytes(16).length).to.equal(32);\n expect(getRandomBytes(32).length).to.equal(64);\n expect(getRandomBytes(80).length).to.equal(160);\n });\n});\n"]}
@@ -0,0 +1,62 @@
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 chai_1 = __importDefault(require("chai"));
30
+ const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
31
+ const ed = __importStar(require("@noble/ed25519"));
32
+ const crypto_1 = require("../crypto");
33
+ const bytes_1 = require("../bytes");
34
+ chai_1.default.use(chai_as_promised_1.default);
35
+ const { expect } = chai_1.default;
36
+ describe('crypto-util', () => {
37
+ it('Should verify signature', async () => {
38
+ const privateKey = ed.utils.randomPrivateKey();
39
+ const data = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);
40
+ const publicKey = await ed.getPublicKey(privateKey);
41
+ const signature = await ed.sign(data, privateKey);
42
+ const isValidBytes = await (0, crypto_1.verifyBroadcasterSignature)(signature, data, publicKey);
43
+ expect(isValidBytes).to.be.true;
44
+ const isValidHex = await (0, crypto_1.verifyBroadcasterSignature)((0, bytes_1.bytesToHex)(signature), (0, bytes_1.bytesToHex)(data), publicKey);
45
+ expect(isValidHex).to.be.true;
46
+ });
47
+ it('Should encrypt and decrypt data with shareable random pubkey', async () => {
48
+ const privateKey = ed.utils.randomPrivateKey();
49
+ const externalPubKey = await ed.getPublicKey(privateKey);
50
+ const data = { test: '123', value: 678 };
51
+ const { encryptedData, randomPubKey } = await (0, crypto_1.encryptDataWithSharedKey)(data, externalPubKey);
52
+ expect(randomPubKey.length).to.equal(64);
53
+ const sharedKey = await ed.getSharedSecret(privateKey, randomPubKey);
54
+ const decrypted = (0, crypto_1.decryptAESGCM256)(encryptedData, sharedKey);
55
+ expect(decrypted).to.deep.equal(data);
56
+ });
57
+ it('Should calculate PBKDF2 hash', async () => {
58
+ const hash = await (0, crypto_1.pbkdf2)('secret', '0c6c732c2b03dfb6cf5f5893', 1000000);
59
+ expect(hash).to.equal('ac0323bc154cc4b7ac0440eee6414356801faa198bb635d0b60441e3a043a706');
60
+ });
61
+ });
62
+ //# sourceMappingURL=crypto-util.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-util.test.js","sourceRoot":"","sources":["../../../../../src/services/matrix/util/__tests__/crypto-util.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,wEAA8C;AAC9C,mDAAqC;AACrC,sCAKmB;AACnB,oCAAsC;AAEtC,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,MAAM,IAAA,mCAA0B,EACnD,SAAS,EACT,IAAI,EACJ,SAAS,CACV,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEhC,MAAM,UAAU,GAAG,MAAM,IAAA,mCAA0B,EACjD,IAAA,kBAAU,EAAC,SAAS,CAAC,EACrB,IAAA,kBAAU,EAAC,IAAI,CAAC,EAChB,SAAS,CACV,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAEzC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,iCAAwB,EACpE,IAAI,EACJ,cAAc,CACf,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEzC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,IAAA,yBAAgB,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAE7D,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAA,eAAM,EAAC,QAAQ,EAAE,0BAA0B,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CACnB,kEAAkE,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport * as ed from '@noble/ed25519';\nimport {\n decryptAESGCM256,\n encryptDataWithSharedKey,\n pbkdf2,\n verifyBroadcasterSignature,\n} from '../crypto';\nimport { bytesToHex } from '../bytes';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\ndescribe('crypto-util', () => {\n it('Should verify signature', async () => {\n const privateKey = ed.utils.randomPrivateKey();\n const data = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const publicKey = await ed.getPublicKey(privateKey);\n const signature = await ed.sign(data, privateKey);\n\n const isValidBytes = await verifyBroadcasterSignature(\n signature,\n data,\n publicKey,\n );\n expect(isValidBytes).to.be.true;\n\n const isValidHex = await verifyBroadcasterSignature(\n bytesToHex(signature),\n bytesToHex(data),\n publicKey,\n );\n expect(isValidHex).to.be.true;\n });\n\n it('Should encrypt and decrypt data with shareable random pubkey', async () => {\n const privateKey = ed.utils.randomPrivateKey();\n const externalPubKey = await ed.getPublicKey(privateKey);\n const data = { test: '123', value: 678 };\n\n const { encryptedData, randomPubKey } = await encryptDataWithSharedKey(\n data,\n externalPubKey,\n );\n expect(randomPubKey.length).to.equal(64);\n\n const sharedKey = await ed.getSharedSecret(privateKey, randomPubKey);\n const decrypted = decryptAESGCM256(encryptedData, sharedKey);\n\n expect(decrypted).to.deep.equal(data);\n });\n\n it('Should calculate PBKDF2 hash', async () => {\n const hash = await pbkdf2('secret', '0c6c732c2b03dfb6cf5f5893', 1000000);\n expect(hash).to.equal(\n 'ac0323bc154cc4b7ac0440eee6414356801faa198bb635d0b60441e3a043a706',\n );\n });\n});\n"]}
@@ -0,0 +1,5 @@
1
+ import { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database } from '@matrix-privacy/engine';
2
+ export declare const parseMatrixTokenAddress: (tokenAddress: string) => string;
3
+ export declare const getRandomBytes: (length: number) => string;
4
+ export declare const bytesToHex: (bytes: Uint8Array) => string;
5
+ export { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database };
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Database = exports.toUTF8String = exports.fromUTF8String = exports.ByteUtils = exports.ByteLength = exports.bytesToHex = exports.getRandomBytes = exports.parseMatrixTokenAddress = void 0;
4
+ const engine_1 = require("@matrix-privacy/engine");
5
+ Object.defineProperty(exports, "ByteLength", { enumerable: true, get: function () { return engine_1.ByteLength; } });
6
+ Object.defineProperty(exports, "ByteUtils", { enumerable: true, get: function () { return engine_1.ByteUtils; } });
7
+ Object.defineProperty(exports, "fromUTF8String", { enumerable: true, get: function () { return engine_1.fromUTF8String; } });
8
+ Object.defineProperty(exports, "toUTF8String", { enumerable: true, get: function () { return engine_1.toUTF8String; } });
9
+ Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return engine_1.Database; } });
10
+ const parseMatrixTokenAddress = (tokenAddress) => {
11
+ return engine_1.ByteUtils.formatToByteLength(tokenAddress, engine_1.ByteLength.Address, true);
12
+ };
13
+ exports.parseMatrixTokenAddress = parseMatrixTokenAddress;
14
+ const getRandomBytes = (length) => {
15
+ return engine_1.ByteUtils.randomHex(length);
16
+ };
17
+ exports.getRandomBytes = getRandomBytes;
18
+ const bytesToHex = (bytes) => {
19
+ return Buffer.from(bytes).toString('hex');
20
+ };
21
+ exports.bytesToHex = bytesToHex;
22
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../../src/services/matrix/util/bytes.ts"],"names":[],"mappings":";;;AAAA,mDAMgC;AAcvB,2FAnBP,mBAAU,OAmBO;AAAE,0FAlBnB,kBAAS,OAkBmB;AAAE,+FAjB9B,uBAAc,OAiB8B;AAAE,6FAhB9C,qBAAY,OAgB8C;AAAE,yFAf5D,iBAAQ,OAe4D;AAZ/D,MAAM,uBAAuB,GAAG,CAAC,YAAoB,EAAU,EAAE;IACtE,OAAO,kBAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,mBAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC;AAEK,MAAM,cAAc,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,OAAO,kBAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEK,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAU,EAAE;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB","sourcesContent":["import {\n ByteLength,\n ByteUtils,\n fromUTF8String,\n toUTF8String,\n Database,\n} from '@matrix-privacy/engine';\n\nexport const parseMatrixTokenAddress = (tokenAddress: string): string => {\n return ByteUtils.formatToByteLength(tokenAddress, ByteLength.Address, true);\n};\n\nexport const getRandomBytes = (length: number): string => {\n return ByteUtils.randomHex(length);\n};\n\nexport const bytesToHex = (bytes: Uint8Array): string => {\n return Buffer.from(bytes).toString('hex');\n};\n\nexport { ByteLength, ByteUtils, fromUTF8String, toUTF8String, Database };\n"]}
@@ -0,0 +1,14 @@
1
+ import { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, getPublicViewingKey, EncryptedData, ViewingKeyPair } from '@matrix-privacy/engine';
2
+ import { EncryptDataWithSharedKeyResponse } from '@matrix-privacy/shared-models';
3
+ export declare const verifyBroadcasterSignature: (signature: string | Uint8Array, data: string | Uint8Array, signingKey: Uint8Array) => Promise<boolean>;
4
+ export declare const encryptDataWithSharedKey: (data: object, externalPubKey: Uint8Array) => Promise<EncryptDataWithSharedKeyResponse>;
5
+ export declare const decryptAESGCM256: (encryptedData: EncryptedData, sharedKey: Uint8Array) => object | null;
6
+ export declare const encryptAESGCM256: (data: object, sharedKey: Uint8Array) => EncryptedData;
7
+ /**
8
+ * Calculates PBKDF2 hash
9
+ * @param secret - input
10
+ * @param salt - salt
11
+ * @param iterations - rounds
12
+ */
13
+ export declare const pbkdf2: (secret: string, salt: string, iterations: number) => Promise<string>;
14
+ export { encryptJSONDataWithSharedKey, tryDecryptJSONDataWithSharedKey, EncryptedData, getPublicViewingKey, ViewingKeyPair, };
@@ -0,0 +1,80 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.getPublicViewingKey = exports.tryDecryptJSONDataWithSharedKey = exports.encryptJSONDataWithSharedKey = exports.pbkdf2 = exports.encryptAESGCM256 = exports.decryptAESGCM256 = exports.encryptDataWithSharedKey = exports.verifyBroadcasterSignature = void 0;
27
+ const ed = __importStar(require("@noble/ed25519"));
28
+ const engine_1 = require("@matrix-privacy/engine");
29
+ Object.defineProperty(exports, "encryptJSONDataWithSharedKey", { enumerable: true, get: function () { return engine_1.encryptJSONDataWithSharedKey; } });
30
+ Object.defineProperty(exports, "tryDecryptJSONDataWithSharedKey", { enumerable: true, get: function () { return engine_1.tryDecryptJSONDataWithSharedKey; } });
31
+ Object.defineProperty(exports, "getPublicViewingKey", { enumerable: true, get: function () { return engine_1.getPublicViewingKey; } });
32
+ const bytes_1 = require("./bytes");
33
+ const util_1 = require("util");
34
+ const crypto_1 = require("crypto");
35
+ const pbkdf2_1 = require("ethereum-cryptography/pbkdf2");
36
+ const runtime_1 = require("./runtime");
37
+ const verifyBroadcasterSignature = (signature, data, signingKey) => {
38
+ return (0, engine_1.verifyED25519)(data, signature, signingKey);
39
+ };
40
+ exports.verifyBroadcasterSignature = verifyBroadcasterSignature;
41
+ const encryptDataWithSharedKey = async (data, externalPubKey) => {
42
+ const randomPrivKey = engine_1.ByteUtils.hexStringToBytes((0, bytes_1.getRandomBytes)(32));
43
+ const randomPubKeyUint8Array = await (0, engine_1.getPublicViewingKey)(randomPrivKey);
44
+ const randomPubKey = engine_1.ByteUtils.hexlify(randomPubKeyUint8Array);
45
+ const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);
46
+ const encryptedData = (0, engine_1.encryptJSONDataWithSharedKey)(data, sharedKey);
47
+ return { encryptedData, randomPubKey, sharedKey };
48
+ };
49
+ exports.encryptDataWithSharedKey = encryptDataWithSharedKey;
50
+ const decryptAESGCM256 = (encryptedData, sharedKey) => {
51
+ return (0, engine_1.tryDecryptJSONDataWithSharedKey)(encryptedData, sharedKey);
52
+ };
53
+ exports.decryptAESGCM256 = decryptAESGCM256;
54
+ const encryptAESGCM256 = (data, sharedKey) => {
55
+ return (0, engine_1.encryptJSONDataWithSharedKey)(data, sharedKey);
56
+ };
57
+ exports.encryptAESGCM256 = encryptAESGCM256;
58
+ /**
59
+ * Calculates PBKDF2 hash
60
+ * @param secret - input
61
+ * @param salt - salt
62
+ * @param iterations - rounds
63
+ */
64
+ const pbkdf2 = async (secret, salt, iterations) => {
65
+ const secretBuffer = Buffer.from(secret, 'utf-8');
66
+ const secretFormatted = new Uint8Array(engine_1.ByteUtils.arrayify(secretBuffer));
67
+ const saltFormatted = new Uint8Array(engine_1.ByteUtils.arrayify(salt));
68
+ const keyLength = 32; // Bytes
69
+ const digest = 'sha256';
70
+ let key;
71
+ if (runtime_1.isReactNative) {
72
+ key = await (0, pbkdf2_1.pbkdf2)(secretFormatted, saltFormatted, iterations, keyLength, digest);
73
+ }
74
+ else {
75
+ key = await (0, util_1.promisify)(crypto_1.pbkdf2)(secretFormatted, saltFormatted, iterations, keyLength, digest);
76
+ }
77
+ return engine_1.ByteUtils.hexlify(key);
78
+ };
79
+ exports.pbkdf2 = pbkdf2;
80
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/services/matrix/util/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAqC;AACrC,mDAQgC;AAkF9B,6GAxFA,qCAA4B,OAwFA;AAC5B,gHAxFA,wCAA+B,OAwFA;AAE/B,oGAzFA,4BAAmB,OAyFA;AAnFrB,mCAAyC;AACzC,+BAAiC;AACjC,mCAA8C;AAC9C,yDAAkE;AAClE,uCAA0C;AAEnC,MAAM,0BAA0B,GAAG,CACxC,SAA8B,EAC9B,IAAyB,EACzB,UAAsB,EACJ,EAAE;IACpB,OAAO,IAAA,sBAAa,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,0BAA0B,8BAMrC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAY,EACZ,cAA0B,EACiB,EAAE;IAC7C,MAAM,aAAa,GAAG,kBAAS,CAAC,gBAAgB,CAAC,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,sBAAsB,GAAG,MAAM,IAAA,4BAAmB,EAAC,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,kBAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAA,qCAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC;AAEK,MAAM,gBAAgB,GAAG,CAC9B,aAA4B,EAC5B,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,wCAA+B,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,SAAqB,EACN,EAAE;IACjB,OAAO,IAAA,qCAA4B,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEF;;;;;GAKG;AACI,MAAM,MAAM,GAAG,KAAK,EACzB,MAAc,EACd,IAAY,EACZ,UAAkB,EACD,EAAE;IACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,kBAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,kBAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,QAAQ;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC;IAExB,IAAI,GAAwB,CAAC;IAC7B,IAAI,uBAAa,EAAE;QACjB,GAAG,GAAG,MAAM,IAAA,eAAQ,EAClB,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;SAAM;QACL,GAAG,GAAG,MAAM,IAAA,gBAAS,EAAC,eAAU,CAAC,CAC/B,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;IACD,OAAO,kBAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AA/BW,QAAA,MAAM,UA+BjB","sourcesContent":["import * as ed from '@noble/ed25519';\nimport {\n ByteUtils,\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n getPublicViewingKey,\n verifyED25519,\n EncryptedData,\n ViewingKeyPair,\n} from '@matrix-privacy/engine';\nimport { EncryptDataWithSharedKeyResponse } from '@matrix-privacy/shared-models';\nimport { getRandomBytes } from './bytes';\nimport { promisify } from 'util';\nimport { pbkdf2 as NodePbkdf2 } from 'crypto';\nimport { pbkdf2 as JSpbkdf2 } from 'ethereum-cryptography/pbkdf2';\nimport { isReactNative } from './runtime';\n\nexport const verifyBroadcasterSignature = (\n signature: string | Uint8Array,\n data: string | Uint8Array,\n signingKey: Uint8Array,\n): Promise<boolean> => {\n return verifyED25519(data, signature, signingKey);\n};\n\nexport const encryptDataWithSharedKey = async (\n data: object,\n externalPubKey: Uint8Array,\n): Promise<EncryptDataWithSharedKeyResponse> => {\n const randomPrivKey = ByteUtils.hexStringToBytes(getRandomBytes(32));\n const randomPubKeyUint8Array = await getPublicViewingKey(randomPrivKey);\n const randomPubKey = ByteUtils.hexlify(randomPubKeyUint8Array);\n const sharedKey = await ed.getSharedSecret(randomPrivKey, externalPubKey);\n const encryptedData = encryptJSONDataWithSharedKey(data, sharedKey);\n return { encryptedData, randomPubKey, sharedKey };\n};\n\nexport const decryptAESGCM256 = (\n encryptedData: EncryptedData,\n sharedKey: Uint8Array,\n): object | null => {\n return tryDecryptJSONDataWithSharedKey(encryptedData, sharedKey);\n};\n\nexport const encryptAESGCM256 = (\n data: object,\n sharedKey: Uint8Array,\n): EncryptedData => {\n return encryptJSONDataWithSharedKey(data, sharedKey);\n};\n\n/**\n * Calculates PBKDF2 hash\n * @param secret - input\n * @param salt - salt\n * @param iterations - rounds\n */\nexport const pbkdf2 = async (\n secret: string,\n salt: string,\n iterations: number,\n): Promise<string> => {\n const secretBuffer = Buffer.from(secret, 'utf-8');\n const secretFormatted = new Uint8Array(ByteUtils.arrayify(secretBuffer));\n const saltFormatted = new Uint8Array(ByteUtils.arrayify(salt));\n\n const keyLength = 32; // Bytes\n const digest = 'sha256';\n\n let key: Uint8Array | Buffer;\n if (isReactNative) {\n key = await JSpbkdf2(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n } else {\n key = await promisify(NodePbkdf2)(\n secretFormatted,\n saltFormatted,\n iterations,\n keyLength,\n digest,\n );\n }\n return ByteUtils.hexlify(key);\n};\n\nexport {\n encryptJSONDataWithSharedKey,\n tryDecryptJSONDataWithSharedKey,\n EncryptedData,\n getPublicViewingKey,\n ViewingKeyPair,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const removeDuplicatesByID: <T extends {
2
+ id: string;
3
+ }>(array: T[]) => T[];
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeDuplicatesByID = void 0;
4
+ const removeDuplicatesByID = (array) => {
5
+ const seen = new Set();
6
+ return array.filter((item) => {
7
+ const duplicate = seen.has(item.id);
8
+ seen.add(item.id);
9
+ return !duplicate;
10
+ });
11
+ };
12
+ exports.removeDuplicatesByID = removeDuplicatesByID;
13
+ //# sourceMappingURL=graph-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-util.js","sourceRoot":"","sources":["../../../../src/services/matrix/util/graph-util.ts"],"names":[],"mappings":";;;AAAO,MAAM,oBAAoB,GAAG,CAClC,KAAU,EACL,EAAE;IACP,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAO,EAAE,EAAE;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,SAAS,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AATW,QAAA,oBAAoB,wBAS/B","sourcesContent":["export const removeDuplicatesByID = <T extends { id: string }>(\n array: T[],\n): T[] => {\n const seen = new Set();\n return array.filter((item: T) => {\n const duplicate = seen.has(item.id);\n seen.add(item.id);\n return !duplicate;\n });\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './bytes';
2
+ export * from './crypto';
@@ -0,0 +1,19 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./bytes"), exports);
18
+ __exportStar(require("./crypto"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/matrix/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB","sourcesContent":["export * from './bytes';\nexport * from './crypto';\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const isReactNative: boolean;
2
+ export declare const isNodejs: boolean;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNodejs = exports.isReactNative = void 0;
4
+ exports.isReactNative = typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
5
+ exports.isNodejs = typeof process !== 'undefined' &&
6
+ process.versions != null &&
7
+ process.versions.node != null;
8
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/services/matrix/util/runtime.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GACxB,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC;AAE7D,QAAA,QAAQ,GACnB,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,CAAC,QAAQ,IAAI,IAAI;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC","sourcesContent":["export const isReactNative =\n typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\n\nexport const isNodejs =\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n"]}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chai_1 = __importDefault(require("chai"));
7
+ const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
8
+ const mocks_test_1 = require("../../../../tests/mocks.test");
9
+ const setup_test_1 = require("../../../../tests/setup.test");
10
+ const wallets_1 = require("../wallets");
11
+ const balances_1 = require("../balances");
12
+ const shared_models_1 = require("@matrix-privacy/shared-models");
13
+ const load_provider_1 = require("../../core/load-provider");
14
+ const engine_1 = require("../../core/engine");
15
+ chai_1.default.use(chai_as_promised_1.default);
16
+ const { expect } = chai_1.default;
17
+ let matrixWalletID;
18
+ const networkName = shared_models_1.NetworkName.Hardhat;
19
+ const chain = shared_models_1.NETWORK_CONFIG[networkName].chain;
20
+ describe('balances-live', () => {
21
+ before(async function run() {
22
+ this.timeout(360000);
23
+ await (0, setup_test_1.initTestEngine)();
24
+ const matrixWalletInfo = await (0, wallets_1.createMatrixWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
25
+ if (!(0, shared_models_1.isDefined)(matrixWalletInfo)) {
26
+ throw new Error('Expected matrixWalletInfo');
27
+ }
28
+ matrixWalletID = matrixWalletInfo.id;
29
+ await (0, load_provider_1.loadProvider)(mocks_test_1.MOCK_FALLBACK_PROVIDER_JSON_CONFIG_SEPOLIA, networkName, 10000);
30
+ const { chain } = shared_models_1.NETWORK_CONFIG[networkName];
31
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
32
+ (0, engine_1.getEngine)().scanContractHistory(chain, undefined);
33
+ await (0, setup_test_1.pollUntilUTXOMerkletreeScanned)();
34
+ });
35
+ after(async () => {
36
+ await (0, setup_test_1.closeTestEngine)();
37
+ });
38
+ it('Should run live balance fetch and transaction history scan', async () => {
39
+ await (0, balances_1.rescanFullUTXOMerkletreesAndWallets)(chain, [matrixWalletID]);
40
+ const wallet = (0, wallets_1.fullWalletForID)(matrixWalletID);
41
+ const balances = await wallet.getTokenBalances(chain, false);
42
+ // Note: matrixWallet above needs to perform transactions on above network to have balances
43
+ expect(Object.keys(balances).length).to.be.greaterThanOrEqual(1);
44
+ const transactionHistory = await wallet.getTransactionHistory(chain, undefined);
45
+ expect(transactionHistory.length).to.be.greaterThanOrEqual(2);
46
+ }).timeout(90000);
47
+ });
48
+ //# sourceMappingURL=balances-live.test.js.map