dop-wallet-v6 1.3.1 → 1.3.31

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 (124) hide show
  1. package/.eslintrc.js +5 -0
  2. package/dist/services/dop/core/react-native-init.d.ts +2 -2
  3. package/dist/services/dop/core/react-native-init.js +36 -15
  4. package/dist/services/dop/core/react-native-init.js.map +1 -1
  5. package/dist/services/dop/crypto/react-native-crypto-provider.js +4 -2
  6. package/dist/services/dop/crypto/react-native-crypto-provider.js.map +1 -1
  7. package/dist/services/dop/wallets/balances.js +49 -2
  8. package/dist/services/dop/wallets/balances.js.map +1 -1
  9. package/dist/services/dop/wallets/wallets.js +12 -17
  10. package/dist/services/dop/wallets/wallets.js.map +1 -1
  11. package/package.json +6 -1
  12. package/patches/dop-engine-v3+1.4.9.patch +55 -33
  13. package/dist/__tests__/index.test.d.ts +0 -1
  14. package/dist/__tests__/index.test.js +0 -13
  15. package/dist/__tests__/index.test.js.map +0 -1
  16. package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +0 -1
  17. package/dist/services/artifacts/__tests__/artifact-downloader.test.js +0 -70
  18. package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +0 -1
  19. package/dist/services/dop/__tests__/integration.test.d.ts +0 -1
  20. package/dist/services/dop/__tests__/integration.test.js +0 -378
  21. package/dist/services/dop/__tests__/integration.test.js.map +0 -1
  22. package/dist/services/dop/core/__tests__/engine.test.d.ts +0 -1
  23. package/dist/services/dop/core/__tests__/engine.test.js +0 -30
  24. package/dist/services/dop/core/__tests__/engine.test.js.map +0 -1
  25. package/dist/services/dop/core/__tests__/providers.test.d.ts +0 -1
  26. package/dist/services/dop/core/__tests__/providers.test.js +0 -69
  27. package/dist/services/dop/core/__tests__/providers.test.js.map +0 -1
  28. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.d.ts +0 -1
  29. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js +0 -168
  30. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js.map +0 -1
  31. package/dist/services/dop/history/__tests__/transaction-history.test.d.ts +0 -0
  32. package/dist/services/dop/history/__tests__/transaction-history.test.js +0 -2
  33. package/dist/services/dop/history/__tests__/transaction-history.test.js.map +0 -1
  34. package/dist/services/dop/profile/__tests__/profile-manager.test.d.ts +0 -1
  35. package/dist/services/dop/profile/__tests__/profile-manager.test.js +0 -170
  36. package/dist/services/dop/profile/__tests__/profile-manager.test.js.map +0 -1
  37. package/dist/services/dop/profile/__tests__/selective-transparency.test.d.ts +0 -1
  38. package/dist/services/dop/profile/__tests__/selective-transparency.test.js +0 -256
  39. package/dist/services/dop/profile/__tests__/selective-transparency.test.js.map +0 -1
  40. package/dist/services/dop/profile/__tests__/storage.test.d.ts +0 -1
  41. package/dist/services/dop/profile/__tests__/storage.test.js +0 -174
  42. package/dist/services/dop/profile/__tests__/storage.test.js.map +0 -1
  43. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.d.ts +0 -1
  44. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js +0 -126
  45. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js.map +0 -1
  46. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +0 -1
  47. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +0 -63
  48. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +0 -1
  49. package/dist/services/dop/util/__tests__/bytes-util.test.d.ts +0 -1
  50. package/dist/services/dop/util/__tests__/bytes-util.test.js +0 -23
  51. package/dist/services/dop/util/__tests__/bytes-util.test.js.map +0 -1
  52. package/dist/services/dop/util/__tests__/crypto-util.test.d.ts +0 -1
  53. package/dist/services/dop/util/__tests__/crypto-util.test.js +0 -62
  54. package/dist/services/dop/util/__tests__/crypto-util.test.js.map +0 -1
  55. package/dist/services/dop/wallets/__tests__/balances-live.test.d.ts +0 -1
  56. package/dist/services/dop/wallets/__tests__/balances-live.test.js +0 -58
  57. package/dist/services/dop/wallets/__tests__/balances-live.test.js.map +0 -1
  58. package/dist/services/dop/wallets/__tests__/balances-update.test.d.ts +0 -1
  59. package/dist/services/dop/wallets/__tests__/balances-update.test.js +0 -90
  60. package/dist/services/dop/wallets/__tests__/balances-update.test.js.map +0 -1
  61. package/dist/services/dop/wallets/__tests__/balances.test.d.ts +0 -1
  62. package/dist/services/dop/wallets/__tests__/balances.test.js +0 -59
  63. package/dist/services/dop/wallets/__tests__/balances.test.js.map +0 -1
  64. package/dist/services/dop/wallets/__tests__/wallets.test.d.ts +0 -1
  65. package/dist/services/dop/wallets/__tests__/wallets.test.js +0 -80
  66. package/dist/services/dop/wallets/__tests__/wallets.test.js.map +0 -1
  67. package/dist/services/ethers/__tests__/ethers-util.test.d.ts +0 -1
  68. package/dist/services/ethers/__tests__/ethers-util.test.js +0 -19
  69. package/dist/services/ethers/__tests__/ethers-util.test.js.map +0 -1
  70. package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +0 -216
  71. package/dist/services/transactions/__tests__/proof-cache.test.d.ts +0 -1
  72. package/dist/services/transactions/__tests__/proof-cache.test.js +0 -128
  73. package/dist/services/transactions/__tests__/proof-cache.test.js.map +0 -1
  74. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +0 -1
  75. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +0 -385
  76. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +0 -1
  77. package/dist/services/transactions/__tests__/tx-decrypt.test.d.ts +0 -0
  78. package/dist/services/transactions/__tests__/tx-decrypt.test.js +0 -2
  79. package/dist/services/transactions/__tests__/tx-decrypt.test.js.map +0 -1
  80. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.d.ts +0 -1
  81. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js +0 -101
  82. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js.map +0 -1
  83. package/dist/services/transactions/__tests__/tx-encrypt.test.d.ts +0 -0
  84. package/dist/services/transactions/__tests__/tx-encrypt.test.js +0 -2
  85. package/dist/services/transactions/__tests__/tx-encrypt.test.js.map +0 -1
  86. package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +0 -1
  87. package/dist/services/transactions/__tests__/tx-gas-details.test.js +0 -112
  88. package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +0 -1
  89. package/dist/services/transactions/__tests__/tx-notes.test.d.ts +0 -1
  90. package/dist/services/transactions/__tests__/tx-notes.test.js +0 -193
  91. package/dist/services/transactions/__tests__/tx-notes.test.js.map +0 -1
  92. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.d.ts +0 -1
  93. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js +0 -50
  94. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js.map +0 -1
  95. package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +0 -1
  96. package/dist/services/transactions/__tests__/tx-transfer.test.js +0 -280
  97. package/dist/services/transactions/__tests__/tx-transfer.test.js.map +0 -1
  98. package/dist/tests/balances.test.d.ts +0 -1
  99. package/dist/tests/balances.test.js +0 -419
  100. package/dist/tests/balances.test.js.map +0 -1
  101. package/dist/tests/helper.test.d.ts +0 -3
  102. package/dist/tests/helper.test.js +0 -16
  103. package/dist/tests/helper.test.js.map +0 -1
  104. package/dist/tests/mocks.test.d.ts +0 -50
  105. package/dist/tests/mocks.test.js +0 -202
  106. package/dist/tests/mocks.test.js.map +0 -1
  107. package/dist/tests/poi/test-wallet-poi-requester.test.d.ts +0 -10
  108. package/dist/tests/poi/test-wallet-poi-requester.test.js +0 -15
  109. package/dist/tests/poi/test-wallet-poi-requester.test.js.map +0 -1
  110. package/dist/tests/setup.test.d.ts +0 -9
  111. package/dist/tests/setup.test.js +0 -110
  112. package/dist/tests/setup.test.js.map +0 -1
  113. package/dist/tests/stubs/engine-stubs.test.d.ts +0 -7
  114. package/dist/tests/stubs/engine-stubs.test.js +0 -75
  115. package/dist/tests/stubs/engine-stubs.test.js.map +0 -1
  116. package/dist/utils/__tests__/blocked-address.test.d.ts +0 -1
  117. package/dist/utils/__tests__/blocked-address.test.js +0 -23
  118. package/dist/utils/__tests__/blocked-address.test.js.map +0 -1
  119. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  120. package/dist/utils/__tests__/logger.test.js +0 -28
  121. package/dist/utils/__tests__/logger.test.js.map +0 -1
  122. package/dist/utils/__tests__/utils.test.d.ts +0 -1
  123. package/dist/utils/__tests__/utils.test.js +0 -21
  124. package/dist/utils/__tests__/utils.test.js.map +0 -1
@@ -1,256 +0,0 @@
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 sinon_1 = __importDefault(require("sinon"));
32
- const leveldown_1 = __importDefault(require("leveldown"));
33
- const selective_transparency_1 = require("../selective-transparency");
34
- const wallets = __importStar(require("../../wallets/wallets"));
35
- const storage_1 = require("../storage");
36
- const fs_1 = require("fs");
37
- chai_1.default.use(chai_as_promised_1.default);
38
- const { expect } = chai_1.default;
39
- describe('SelectiveTransparencyManager', () => {
40
- let transparencyManager;
41
- let testStorage;
42
- let db;
43
- const testDbPath = 'test-selective-transparency-db';
44
- const mockWalletId = 'test-wallet-id';
45
- const mockRequesterId = 'test-requester-id';
46
- beforeEach(async () => {
47
- db = new leveldown_1.default(testDbPath);
48
- await new Promise((resolve, reject) => {
49
- db.open((err) => {
50
- if (err)
51
- reject(err);
52
- else
53
- resolve();
54
- });
55
- });
56
- testStorage = new storage_1.ProfileStorage(db);
57
- transparencyManager = new selective_transparency_1.SelectiveTransparencyManager();
58
- transparencyManager.setStorage(testStorage);
59
- sinon_1.default.stub(wallets, 'walletForID').returns({});
60
- });
61
- afterEach(async () => {
62
- sinon_1.default.restore();
63
- await new Promise((resolve, reject) => {
64
- db.close((err) => {
65
- if (err)
66
- reject(err);
67
- else
68
- resolve();
69
- });
70
- });
71
- try {
72
- (0, fs_1.rmSync)(testDbPath, { recursive: true });
73
- }
74
- catch (error) {
75
- // Ignore cleanup errors
76
- }
77
- });
78
- describe('settings management', () => {
79
- it('should create default settings', async () => {
80
- const result = await transparencyManager.createDefaultSettings(mockWalletId);
81
- expect(result.id).to.equal(mockWalletId);
82
- expect(result.walletId).to.equal(mockWalletId);
83
- expect(result.assetVisibility.showTokenBalances).to.be.true;
84
- expect(result.assetVisibility.showNFTs).to.be.true;
85
- expect(result.assetVisibility.showTransactionHistory).to.be.false;
86
- });
87
- it('should get settings', async () => {
88
- await transparencyManager.createDefaultSettings(mockWalletId);
89
- const result = await transparencyManager.getSettings(mockWalletId);
90
- expect(result).to.not.be.undefined;
91
- if (result) {
92
- expect(result.walletId).to.equal(mockWalletId);
93
- }
94
- });
95
- it('should update settings', async () => {
96
- await transparencyManager.createDefaultSettings(mockWalletId);
97
- const updates = {
98
- assetVisibility: {
99
- showTokenBalances: false,
100
- showNFTs: true,
101
- showTransactionHistory: true,
102
- showAddresses: true,
103
- },
104
- };
105
- const result = await transparencyManager.updateSettings(mockWalletId, updates);
106
- expect(result.assetVisibility.showTokenBalances).to.be.false;
107
- expect(result.assetVisibility.showTransactionHistory).to.be.true;
108
- });
109
- });
110
- describe('token visibility management', () => {
111
- beforeEach(async () => {
112
- await transparencyManager.createDefaultSettings(mockWalletId);
113
- });
114
- it('should set token visibility', async () => {
115
- const tokenAddress = '0x1234567890123456789012345678901234567890';
116
- const visibility = {
117
- isVisible: true,
118
- showBalance: true,
119
- showTransactions: false,
120
- };
121
- await transparencyManager.setTokenVisibility(mockWalletId, tokenAddress, visibility);
122
- const result = await transparencyManager.getTokenVisibility(mockWalletId, tokenAddress);
123
- expect(result).to.deep.equal(visibility);
124
- });
125
- it('should return default visibility for unknown token', async () => {
126
- const tokenAddress = '0x1234567890123456789012345678901234567890';
127
- const result = await transparencyManager.getTokenVisibility(mockWalletId, tokenAddress);
128
- expect(result.isVisible).to.be.true; // default from settings
129
- expect(result.showBalance).to.be.true;
130
- expect(result.showTransactions).to.be.false;
131
- });
132
- });
133
- describe('NFT visibility management', () => {
134
- beforeEach(async () => {
135
- await transparencyManager.createDefaultSettings(mockWalletId);
136
- });
137
- it('should set NFT visibility', async () => {
138
- const nftAddress = '0x1234567890123456789012345678901234567890';
139
- const visibility = {
140
- isVisible: true,
141
- showCollection: true,
142
- showTransactions: false,
143
- };
144
- await transparencyManager.setNFTVisibility(mockWalletId, nftAddress, visibility);
145
- const result = await transparencyManager.getNFTVisibility(mockWalletId, nftAddress);
146
- expect(result).to.deep.equal(visibility);
147
- });
148
- it('should return default visibility for unknown NFT', async () => {
149
- const nftAddress = '0x1234567890123456789012345678901234567890';
150
- const result = await transparencyManager.getNFTVisibility(mockWalletId, nftAddress);
151
- expect(result.isVisible).to.be.true; // default from settings
152
- expect(result.showCollection).to.be.true;
153
- expect(result.showTransactions).to.be.false;
154
- });
155
- });
156
- describe('whitelist management', () => {
157
- beforeEach(async () => {
158
- await transparencyManager.createDefaultSettings(mockWalletId);
159
- });
160
- it('should add address to whitelist', async () => {
161
- const address = '0x1234567890123456789012345678901234567890';
162
- const permissions = {
163
- viewBalances: true,
164
- viewNFTs: true,
165
- viewTransactions: false,
166
- viewProfile: true,
167
- };
168
- await transparencyManager.addToWhitelist(mockWalletId, address, permissions);
169
- const canViewBalances = await transparencyManager.checkWhitelistPermission(mockWalletId, address, 'viewBalances');
170
- expect(canViewBalances).to.be.true;
171
- const canViewTransactions = await transparencyManager.checkWhitelistPermission(mockWalletId, address, 'viewTransactions');
172
- expect(canViewTransactions).to.be.false;
173
- });
174
- it('should remove address from whitelist', async () => {
175
- const address = '0x1234567890123456789012345678901234567890';
176
- const permissions = {
177
- viewBalances: true,
178
- viewNFTs: true,
179
- viewTransactions: false,
180
- viewProfile: true,
181
- };
182
- await transparencyManager.addToWhitelist(mockWalletId, address, permissions);
183
- await transparencyManager.removeFromWhitelist(mockWalletId, address);
184
- const canViewBalances = await transparencyManager.checkWhitelistPermission(mockWalletId, address, 'viewBalances');
185
- expect(canViewBalances).to.be.false;
186
- });
187
- it('should return false for non-whitelisted address', async () => {
188
- const address = '0x1234567890123456789012345678901234567890';
189
- const canViewBalances = await transparencyManager.checkWhitelistPermission(mockWalletId, address, 'viewBalances');
190
- expect(canViewBalances).to.be.false;
191
- });
192
- });
193
- describe('viewing requests', () => {
194
- beforeEach(async () => {
195
- await transparencyManager.createDefaultSettings(mockWalletId);
196
- });
197
- it('should create viewing request', async () => {
198
- const result = await transparencyManager.createViewingRequest(mockRequesterId, mockWalletId, 'balance', undefined, 'Can I see your balance?');
199
- expect(result.requesterId).to.equal(mockRequesterId);
200
- expect(result.walletId).to.equal(mockWalletId);
201
- expect(result.requestType).to.equal('balance');
202
- expect(result.message).to.equal('Can I see your balance?');
203
- expect(result.status).to.equal('pending');
204
- });
205
- it('should approve viewing request', async () => {
206
- const request = await transparencyManager.createViewingRequest(mockRequesterId, mockWalletId, 'balance');
207
- const result = await transparencyManager.respondToViewingRequest(request.id, 'approved');
208
- expect(result.status).to.equal('approved');
209
- });
210
- it('should reject viewing request', async () => {
211
- const request = await transparencyManager.createViewingRequest(mockRequesterId, mockWalletId, 'balance');
212
- const result = await transparencyManager.respondToViewingRequest(request.id, 'rejected');
213
- expect(result.status).to.equal('rejected');
214
- });
215
- it('should get viewing requests for wallet', async () => {
216
- await transparencyManager.createViewingRequest(mockRequesterId, mockWalletId, 'balance');
217
- const results = await transparencyManager.getViewingRequests(mockWalletId);
218
- expect(results.length).to.equal(1);
219
- expect(results[0].walletId).to.equal(mockWalletId);
220
- });
221
- });
222
- describe('visibility proofs', () => {
223
- beforeEach(async () => {
224
- await transparencyManager.createDefaultSettings(mockWalletId);
225
- // Add requester to whitelist
226
- await transparencyManager.addToWhitelist(mockWalletId, mockRequesterId, {
227
- viewBalances: true,
228
- viewNFTs: true,
229
- viewTransactions: true,
230
- viewProfile: true,
231
- });
232
- });
233
- it('should generate visibility proof for authorized requester', async () => {
234
- const result = await transparencyManager.generateVisibilityProof(mockWalletId, mockRequesterId, 'balance');
235
- expect(result.walletId).to.equal(mockWalletId);
236
- expect(result.requesterId).to.equal(mockRequesterId);
237
- expect(result.proofType).to.equal('balance');
238
- expect(result.isValid).to.be.true;
239
- expect(result.proof).to.be.a('string');
240
- });
241
- it('should throw error for unauthorized requester', async () => {
242
- const unauthorizedRequester = 'unauthorized-requester';
243
- await expect(transparencyManager.generateVisibilityProof(mockWalletId, unauthorizedRequester, 'balance')).to.be.rejectedWith('Insufficient permissions');
244
- });
245
- it('should verify valid proof', async () => {
246
- const proof = await transparencyManager.generateVisibilityProof(mockWalletId, mockRequesterId, 'balance');
247
- const isValid = await transparencyManager.verifyVisibilityProof(proof.id);
248
- expect(isValid).to.be.true;
249
- });
250
- it('should return false for non-existent proof', async () => {
251
- const isValid = await transparencyManager.verifyVisibilityProof('non-existent-proof');
252
- expect(isValid).to.be.false;
253
- });
254
- });
255
- });
256
- //# sourceMappingURL=selective-transparency.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selective-transparency.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/profile/__tests__/selective-transparency.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport Sinon from 'sinon';\nimport LevelDOWN from 'leveldown';\nimport { SelectiveTransparencyManager } from '../selective-transparency';\nimport * as wallets from '../../wallets/wallets';\nimport { ProfileStorage } from '../storage';\nimport { rmSync } from 'fs';\nimport type { AbstractLevelDOWN } from 'abstract-leveldown';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\ndescribe('SelectiveTransparencyManager', () => {\n let transparencyManager: SelectiveTransparencyManager;\n let testStorage: ProfileStorage;\n let db: AbstractLevelDOWN;\n const testDbPath = 'test-selective-transparency-db';\n const mockWalletId = 'test-wallet-id';\n const mockRequesterId = 'test-requester-id';\n\n beforeEach(async () => {\n db = new LevelDOWN(testDbPath);\n await new Promise<void>((resolve, reject) => {\n db.open((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n \n testStorage = new ProfileStorage(db);\n transparencyManager = new SelectiveTransparencyManager();\n transparencyManager.setStorage(testStorage);\n Sinon.stub(wallets, 'walletForID').returns({} as any);\n });\n\n afterEach(async () => {\n Sinon.restore();\n await new Promise<void>((resolve, reject) => {\n db.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n \n try {\n rmSync(testDbPath, { recursive: true });\n } catch (error) {\n // Ignore cleanup errors\n }\n });\n\n describe('settings management', () => {\n it('should create default settings', async () => {\n const result = await transparencyManager.createDefaultSettings(mockWalletId);\n expect(result.id).to.equal(mockWalletId);\n expect(result.walletId).to.equal(mockWalletId);\n expect(result.assetVisibility.showTokenBalances).to.be.true;\n expect(result.assetVisibility.showNFTs).to.be.true;\n expect(result.assetVisibility.showTransactionHistory).to.be.false;\n });\n\n it('should get settings', async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n const result = await transparencyManager.getSettings(mockWalletId);\n expect(result).to.not.be.undefined;\n if (result) {\n expect(result.walletId).to.equal(mockWalletId);\n }\n });\n\n it('should update settings', async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n const updates = {\n assetVisibility: {\n showTokenBalances: false,\n showNFTs: true,\n showTransactionHistory: true,\n showAddresses: true,\n },\n };\n\n const result = await transparencyManager.updateSettings(mockWalletId, updates);\n expect(result.assetVisibility.showTokenBalances).to.be.false;\n expect(result.assetVisibility.showTransactionHistory).to.be.true;\n });\n });\n\n describe('token visibility management', () => {\n beforeEach(async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n });\n\n it('should set token visibility', async () => {\n const tokenAddress = '0x1234567890123456789012345678901234567890';\n const visibility = {\n isVisible: true,\n showBalance: true,\n showTransactions: false,\n };\n\n await transparencyManager.setTokenVisibility(mockWalletId, tokenAddress, visibility);\n const result = await transparencyManager.getTokenVisibility(mockWalletId, tokenAddress);\n expect(result).to.deep.equal(visibility);\n });\n\n it('should return default visibility for unknown token', async () => {\n const tokenAddress = '0x1234567890123456789012345678901234567890';\n const result = await transparencyManager.getTokenVisibility(mockWalletId, tokenAddress);\n expect(result.isVisible).to.be.true; // default from settings\n expect(result.showBalance).to.be.true;\n expect(result.showTransactions).to.be.false;\n });\n });\n\n describe('NFT visibility management', () => {\n beforeEach(async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n });\n\n it('should set NFT visibility', async () => {\n const nftAddress = '0x1234567890123456789012345678901234567890';\n const visibility = {\n isVisible: true,\n showCollection: true,\n showTransactions: false,\n };\n\n await transparencyManager.setNFTVisibility(mockWalletId, nftAddress, visibility);\n const result = await transparencyManager.getNFTVisibility(mockWalletId, nftAddress);\n expect(result).to.deep.equal(visibility);\n });\n\n it('should return default visibility for unknown NFT', async () => {\n const nftAddress = '0x1234567890123456789012345678901234567890';\n const result = await transparencyManager.getNFTVisibility(mockWalletId, nftAddress);\n expect(result.isVisible).to.be.true; // default from settings\n expect(result.showCollection).to.be.true;\n expect(result.showTransactions).to.be.false;\n });\n });\n\n describe('whitelist management', () => {\n beforeEach(async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n });\n\n it('should add address to whitelist', async () => {\n const address = '0x1234567890123456789012345678901234567890';\n const permissions = {\n viewBalances: true,\n viewNFTs: true,\n viewTransactions: false,\n viewProfile: true,\n };\n\n await transparencyManager.addToWhitelist(mockWalletId, address, permissions);\n \n const canViewBalances = await transparencyManager.checkWhitelistPermission(\n mockWalletId,\n address,\n 'viewBalances'\n );\n expect(canViewBalances).to.be.true;\n\n const canViewTransactions = await transparencyManager.checkWhitelistPermission(\n mockWalletId,\n address,\n 'viewTransactions'\n );\n expect(canViewTransactions).to.be.false;\n });\n\n it('should remove address from whitelist', async () => {\n const address = '0x1234567890123456789012345678901234567890';\n const permissions = {\n viewBalances: true,\n viewNFTs: true,\n viewTransactions: false,\n viewProfile: true,\n };\n\n await transparencyManager.addToWhitelist(mockWalletId, address, permissions);\n await transparencyManager.removeFromWhitelist(mockWalletId, address);\n \n const canViewBalances = await transparencyManager.checkWhitelistPermission(\n mockWalletId,\n address,\n 'viewBalances'\n );\n expect(canViewBalances).to.be.false;\n });\n\n it('should return false for non-whitelisted address', async () => {\n const address = '0x1234567890123456789012345678901234567890';\n const canViewBalances = await transparencyManager.checkWhitelistPermission(\n mockWalletId,\n address,\n 'viewBalances'\n );\n expect(canViewBalances).to.be.false;\n });\n });\n\n describe('viewing requests', () => {\n beforeEach(async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n });\n\n it('should create viewing request', async () => {\n const result = await transparencyManager.createViewingRequest(\n mockRequesterId,\n mockWalletId,\n 'balance',\n undefined,\n 'Can I see your balance?'\n );\n\n expect(result.requesterId).to.equal(mockRequesterId);\n expect(result.walletId).to.equal(mockWalletId);\n expect(result.requestType).to.equal('balance');\n expect(result.message).to.equal('Can I see your balance?');\n expect(result.status).to.equal('pending');\n });\n\n it('should approve viewing request', async () => {\n const request = await transparencyManager.createViewingRequest(\n mockRequesterId,\n mockWalletId,\n 'balance'\n );\n\n const result = await transparencyManager.respondToViewingRequest(request.id, 'approved');\n expect(result.status).to.equal('approved');\n });\n\n it('should reject viewing request', async () => {\n const request = await transparencyManager.createViewingRequest(\n mockRequesterId,\n mockWalletId,\n 'balance'\n );\n\n const result = await transparencyManager.respondToViewingRequest(request.id, 'rejected');\n expect(result.status).to.equal('rejected');\n });\n\n it('should get viewing requests for wallet', async () => {\n await transparencyManager.createViewingRequest(\n mockRequesterId,\n mockWalletId,\n 'balance'\n );\n\n const results = await transparencyManager.getViewingRequests(mockWalletId);\n expect(results.length).to.equal(1);\n expect(results[0].walletId).to.equal(mockWalletId);\n });\n });\n\n describe('visibility proofs', () => {\n beforeEach(async () => {\n await transparencyManager.createDefaultSettings(mockWalletId);\n // Add requester to whitelist\n await transparencyManager.addToWhitelist(mockWalletId, mockRequesterId, {\n viewBalances: true,\n viewNFTs: true,\n viewTransactions: true,\n viewProfile: true,\n });\n });\n\n it('should generate visibility proof for authorized requester', async () => {\n const result = await transparencyManager.generateVisibilityProof(\n mockWalletId,\n mockRequesterId,\n 'balance'\n );\n\n expect(result.walletId).to.equal(mockWalletId);\n expect(result.requesterId).to.equal(mockRequesterId);\n expect(result.proofType).to.equal('balance');\n expect(result.isValid).to.be.true;\n expect(result.proof).to.be.a('string');\n });\n\n it('should throw error for unauthorized requester', async () => {\n const unauthorizedRequester = 'unauthorized-requester';\n \n await expect(\n transparencyManager.generateVisibilityProof(\n mockWalletId,\n unauthorizedRequester,\n 'balance'\n )\n ).to.be.rejectedWith('Insufficient permissions');\n });\n\n it('should verify valid proof', async () => {\n const proof = await transparencyManager.generateVisibilityProof(\n mockWalletId,\n mockRequesterId,\n 'balance'\n );\n\n const isValid = await transparencyManager.verifyVisibilityProof(proof.id);\n expect(isValid).to.be.true;\n });\n\n it('should return false for non-existent proof', async () => {\n const isValid = await transparencyManager.verifyVisibilityProof('non-existent-proof');\n expect(isValid).to.be.false;\n });\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,174 +0,0 @@
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 storage_1 = require("../storage");
9
- const leveldown_1 = __importDefault(require("leveldown"));
10
- const fs_1 = require("fs");
11
- chai_1.default.use(chai_as_promised_1.default);
12
- const { expect } = chai_1.default;
13
- describe('ProfileStorage', () => {
14
- let storage;
15
- let db;
16
- const testDbPath = 'test-profile-db';
17
- beforeEach(async () => {
18
- db = new leveldown_1.default(testDbPath);
19
- await new Promise((resolve, reject) => {
20
- db.open((err) => {
21
- if (err)
22
- reject(err);
23
- else
24
- resolve();
25
- });
26
- });
27
- storage = new storage_1.ProfileStorage(db);
28
- });
29
- afterEach(async () => {
30
- // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
31
- if (db && typeof db.close === 'function') {
32
- await new Promise((resolve, reject) => {
33
- db.close((err) => {
34
- if (err)
35
- reject(err);
36
- else
37
- resolve();
38
- });
39
- });
40
- }
41
- try {
42
- (0, fs_1.rmSync)(testDbPath, { recursive: true, force: true });
43
- }
44
- catch (error) {
45
- // Ignore cleanup errors
46
- }
47
- });
48
- describe('Profile operations', () => {
49
- it('should store and retrieve a profile', async () => {
50
- const walletId = 'test-wallet-1';
51
- const profile = {
52
- id: walletId,
53
- username: 'testuser',
54
- profilePicture: 'https://example.com/avatar.jpg',
55
- bio: 'Test bio',
56
- socialLinks: {
57
- twitter: '@testuser',
58
- discord: 'testuser#1234',
59
- },
60
- createdAt: new Date(),
61
- updatedAt: new Date(),
62
- };
63
- await storage.setProfile(walletId, profile);
64
- const retrievedProfile = await storage.getProfile(walletId);
65
- expect(retrievedProfile).to.not.be.undefined;
66
- expect(retrievedProfile?.id).to.equal(walletId);
67
- expect(retrievedProfile?.username).to.equal('testuser');
68
- expect(retrievedProfile?.bio).to.equal('Test bio');
69
- });
70
- it('should return undefined for non-existent profile', async () => {
71
- const retrievedProfile = await storage.getProfile('non-existent-wallet');
72
- expect(retrievedProfile).to.be.undefined;
73
- });
74
- it('should delete a profile', async () => {
75
- const walletId = 'test-wallet-2';
76
- const profile = {
77
- id: walletId,
78
- username: 'testuser2',
79
- createdAt: new Date(),
80
- updatedAt: new Date(),
81
- };
82
- await storage.setProfile(walletId, profile);
83
- await storage.deleteProfile(walletId);
84
- const retrievedProfile = await storage.getProfile(walletId);
85
- expect(retrievedProfile).to.be.undefined;
86
- });
87
- });
88
- describe('Settings operations', () => {
89
- it('should store and retrieve selective transparency settings', async () => {
90
- const walletId = 'test-wallet-3';
91
- const settings = {
92
- id: walletId,
93
- walletId,
94
- assetVisibility: {
95
- showTokenBalances: true,
96
- showNFTs: false,
97
- showTransactionHistory: false,
98
- showAddresses: false,
99
- },
100
- tokenVisibilityRules: [],
101
- nftVisibilityRules: [],
102
- transactionVisibility: {
103
- showSenderAddress: false,
104
- showReceiverAddress: false,
105
- showAmount: false,
106
- showMemo: false,
107
- showTimestamp: true,
108
- },
109
- profileVisibility: {
110
- showUsername: true,
111
- showProfilePicture: true,
112
- showBio: true,
113
- showSocialLinks: true,
114
- },
115
- viewingWhitelist: [],
116
- createdAt: new Date(),
117
- updatedAt: new Date(),
118
- };
119
- await storage.setSettings(walletId, settings);
120
- const retrievedSettings = await storage.getSettings(walletId);
121
- expect(retrievedSettings).to.not.be.undefined;
122
- expect(retrievedSettings?.walletId).to.equal(walletId);
123
- expect(retrievedSettings?.assetVisibility.showTokenBalances).to.be.true;
124
- expect(retrievedSettings?.assetVisibility.showNFTs).to.be.false;
125
- });
126
- });
127
- describe('Proof operations', () => {
128
- it('should store and retrieve visibility proofs', async () => {
129
- const proofId = 'test-proof-1';
130
- const proof = {
131
- id: proofId,
132
- walletId: 'test-wallet-4',
133
- requesterId: 'requester-wallet',
134
- proofType: 'balance',
135
- assetId: 'ETH',
136
- proof: 'test-proof-hash',
137
- isValid: true,
138
- createdAt: new Date(),
139
- expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),
140
- };
141
- await storage.setProof(proofId, proof);
142
- const retrievedProof = await storage.getProof(proofId);
143
- expect(retrievedProof).to.not.be.undefined;
144
- expect(retrievedProof?.id).to.equal(proofId);
145
- expect(retrievedProof?.walletId).to.equal('test-wallet-4');
146
- expect(retrievedProof?.proofType).to.equal('balance');
147
- expect(retrievedProof?.isValid).to.be.true;
148
- });
149
- });
150
- describe('Viewing request operations', () => {
151
- it('should store and retrieve viewing requests', async () => {
152
- const requestId = 'test-request-1';
153
- const request = {
154
- id: requestId,
155
- requesterId: 'requester-wallet',
156
- walletId: 'target-wallet',
157
- requestType: 'balance',
158
- message: 'Please share your balance',
159
- status: 'pending',
160
- createdAt: new Date(),
161
- expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),
162
- };
163
- await storage.setViewingRequest(requestId, request);
164
- const retrievedRequest = await storage.getViewingRequest(requestId);
165
- expect(retrievedRequest).to.not.be.undefined;
166
- expect(retrievedRequest?.id).to.equal(requestId);
167
- expect(retrievedRequest?.requesterId).to.equal('requester-wallet');
168
- expect(retrievedRequest?.walletId).to.equal('target-wallet');
169
- expect(retrievedRequest?.requestType).to.equal('balance');
170
- expect(retrievedRequest?.status).to.equal('pending');
171
- });
172
- });
173
- });
174
- //# sourceMappingURL=storage.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../../../../src/services/dop/profile/__tests__/storage.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport { ProfileStorage } from '../storage';\nimport { UserProfile, SelectiveTransparencySettings, VisibilityProof, ViewingRequest } from '../types';\nimport LevelDOWN from 'leveldown';\nimport { rmSync } from 'fs';\nimport type { AbstractLevelDOWN } from 'abstract-leveldown';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\ndescribe('ProfileStorage', () => {\n let storage: ProfileStorage;\n let db: AbstractLevelDOWN;\n const testDbPath = 'test-profile-db';\n\n beforeEach(async () => {\n db = new LevelDOWN(testDbPath);\n await new Promise<void>((resolve, reject) => {\n db.open((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n storage = new ProfileStorage(db);\n });\n\n afterEach(async () => {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (db && typeof db.close === 'function') {\n await new Promise<void>((resolve, reject) => {\n db.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n try {\n rmSync(testDbPath, { recursive: true, force: true });\n } catch (error) {\n // Ignore cleanup errors\n }\n });\n\n describe('Profile operations', () => {\n it('should store and retrieve a profile', async () => {\n const walletId = 'test-wallet-1';\n const profile: UserProfile = {\n id: walletId,\n username: 'testuser',\n profilePicture: 'https://example.com/avatar.jpg',\n bio: 'Test bio',\n socialLinks: {\n twitter: '@testuser',\n discord: 'testuser#1234',\n },\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n await storage.setProfile(walletId, profile);\n const retrievedProfile = await storage.getProfile(walletId);\n\n expect(retrievedProfile).to.not.be.undefined;\n expect(retrievedProfile?.id).to.equal(walletId);\n expect(retrievedProfile?.username).to.equal('testuser');\n expect(retrievedProfile?.bio).to.equal('Test bio');\n });\n\n it('should return undefined for non-existent profile', async () => {\n const retrievedProfile = await storage.getProfile('non-existent-wallet');\n expect(retrievedProfile).to.be.undefined;\n });\n\n it('should delete a profile', async () => {\n const walletId = 'test-wallet-2';\n const profile: UserProfile = {\n id: walletId,\n username: 'testuser2',\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n await storage.setProfile(walletId, profile);\n await storage.deleteProfile(walletId);\n \n const retrievedProfile = await storage.getProfile(walletId);\n expect(retrievedProfile).to.be.undefined;\n });\n });\n\n describe('Settings operations', () => {\n it('should store and retrieve selective transparency settings', async () => {\n const walletId = 'test-wallet-3';\n const settings: SelectiveTransparencySettings = {\n id: walletId,\n walletId,\n assetVisibility: {\n showTokenBalances: true,\n showNFTs: false,\n showTransactionHistory: false,\n showAddresses: false,\n },\n tokenVisibilityRules: [],\n nftVisibilityRules: [],\n transactionVisibility: {\n showSenderAddress: false,\n showReceiverAddress: false,\n showAmount: false,\n showMemo: false,\n showTimestamp: true,\n },\n profileVisibility: {\n showUsername: true,\n showProfilePicture: true,\n showBio: true,\n showSocialLinks: true,\n },\n viewingWhitelist: [],\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n await storage.setSettings(walletId, settings);\n const retrievedSettings = await storage.getSettings(walletId);\n\n expect(retrievedSettings).to.not.be.undefined;\n expect(retrievedSettings?.walletId).to.equal(walletId);\n expect(retrievedSettings?.assetVisibility.showTokenBalances).to.be.true;\n expect(retrievedSettings?.assetVisibility.showNFTs).to.be.false;\n });\n });\n\n describe('Proof operations', () => {\n it('should store and retrieve visibility proofs', async () => {\n const proofId = 'test-proof-1';\n const proof: VisibilityProof = {\n id: proofId,\n walletId: 'test-wallet-4',\n requesterId: 'requester-wallet',\n proofType: 'balance',\n assetId: 'ETH',\n proof: 'test-proof-hash',\n isValid: true,\n createdAt: new Date(),\n expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000),\n };\n\n await storage.setProof(proofId, proof);\n const retrievedProof = await storage.getProof(proofId);\n\n expect(retrievedProof).to.not.be.undefined;\n expect(retrievedProof?.id).to.equal(proofId);\n expect(retrievedProof?.walletId).to.equal('test-wallet-4');\n expect(retrievedProof?.proofType).to.equal('balance');\n expect(retrievedProof?.isValid).to.be.true;\n });\n });\n\n describe('Viewing request operations', () => {\n it('should store and retrieve viewing requests', async () => {\n const requestId = 'test-request-1';\n const request: ViewingRequest = {\n id: requestId,\n requesterId: 'requester-wallet',\n walletId: 'target-wallet',\n requestType: 'balance',\n message: 'Please share your balance',\n status: 'pending',\n createdAt: new Date(),\n expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000),\n };\n\n await storage.setViewingRequest(requestId, request);\n const retrievedRequest = await storage.getViewingRequest(requestId);\n\n expect(retrievedRequest).to.not.be.undefined;\n expect(retrievedRequest?.id).to.equal(requestId);\n expect(retrievedRequest?.requesterId).to.equal('requester-wallet');\n expect(retrievedRequest?.walletId).to.equal('target-wallet');\n expect(retrievedRequest?.requestType).to.equal('balance');\n expect(retrievedRequest?.status).to.equal('pending');\n });\n });\n});\n"]}
@@ -1,126 +0,0 @@
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
- /* eslint-disable no-bitwise */
7
- const dop_engine_v3_1 = require("dop-engine-v3");
8
- const dop_sharedmodels_v3_1 = require("dop-sharedmodels-v3");
9
- const chai_1 = __importDefault(require("chai"));
10
- const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
11
- const quick_sync_events_1 = require("../../quick-sync-events");
12
- const helper_test_1 = require("../../../../../tests/helper.test");
13
- chai_1.default.use(chai_as_promised_1.default);
14
- const { expect } = chai_1.default;
15
- const txidVersion = dop_engine_v3_1.TXIDVersion.V2_PoseidonMerkle;
16
- const ETH_CHAIN = dop_sharedmodels_v3_1.NETWORK_CONFIG[dop_sharedmodels_v3_1.NetworkName.Ethereum].chain;
17
- const EXPECTED_COMMITMENT_GROUP_EVENTS_ETH = 20000;
18
- const EXPECTED_NULLIFIER_EVENTS_ETH = 27000;
19
- const EXPECTED_DECRYPT_EVENTS_ETH = 10000;
20
- const POLYGON_CHAIN = dop_sharedmodels_v3_1.NETWORK_CONFIG[dop_sharedmodels_v3_1.NetworkName.Polygon].chain;
21
- const EXPECTED_COMMITMENT_GROUP_EVENTS_POLYGON = 20000;
22
- const EXPECTED_NULLIFIER_EVENTS_POLYGON = 30000;
23
- const EXPECTED_DECRYPT_EVENTS_POLYGON = 10000;
24
- const BNB_CHAIN = dop_sharedmodels_v3_1.NETWORK_CONFIG[dop_sharedmodels_v3_1.NetworkName.BNBChain].chain;
25
- const EXPECTED_COMMITMENT_GROUP_EVENTS_BNB = 9000;
26
- const EXPECTED_NULLIFIER_EVENTS_BNB = 12000;
27
- const EXPECTED_DECRYPT_EVENTS_BNB = 4000;
28
- const ARBITRUM_CHAIN = dop_sharedmodels_v3_1.NETWORK_CONFIG[dop_sharedmodels_v3_1.NetworkName.Arbitrum].chain;
29
- const EXPECTED_COMMITMENT_GROUP_EVENTS_ARBITRUM = 17000;
30
- const EXPECTED_NULLIFIER_EVENTS_ARBITRUM = 22000;
31
- const EXPECTED_DECRYPT_EVENTS_ARBITRUM = 9000;
32
- const SEPOLIA_CHAIN = dop_sharedmodels_v3_1.NETWORK_CONFIG[dop_sharedmodels_v3_1.NetworkName.EthereumSepolia].chain;
33
- const EXPECTED_COMMITMENT_GROUP_EVENTS_SEPOLIA = 1;
34
- const EXPECTED_NULLIFIER_EVENTS_SEPOLIA = 1;
35
- const EXPECTED_DECRYPT_EVENTS_SEPOLIA = 1;
36
- const assertContiguousCommitmentEvents = (commitmentEvents, shouldThrow) => {
37
- // Track unique events by their actual start positions
38
- const positionMap = new Map();
39
- };
40
- describe('quick-sync-events-graph-v2', () => {
41
- it('[V2] Should make sure Graph V2 query has no data gaps in commitments - Ethereum', async function run() {
42
- if (!(0, helper_test_1.isV2Test)()) {
43
- this.skip();
44
- return;
45
- }
46
- const eventLog = await (0, quick_sync_events_1.quickSyncEventsGraph)(txidVersion, ETH_CHAIN, 14858124);
47
- expect(eventLog).to.be.an('object');
48
- expect(eventLog.commitmentEvents).to.be.an('array');
49
- expect(eventLog.commitmentEvents.length).to.be.at.least(EXPECTED_COMMITMENT_GROUP_EVENTS_ETH);
50
- expect(eventLog.nullifierEvents.length).to.be.at.least(EXPECTED_NULLIFIER_EVENTS_ETH);
51
- expect(eventLog.decryptEvents.length).to.be.at.least(EXPECTED_DECRYPT_EVENTS_ETH);
52
- const shouldThrow = true;
53
- assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);
54
- }).timeout(200000);
55
- it('[V2] Should make sure Graph V2 query has no data gaps in commitments - Polygon', async function run() {
56
- if (!(0, helper_test_1.isV2Test)()) {
57
- this.skip();
58
- return;
59
- }
60
- const eventLog = await (0, quick_sync_events_1.quickSyncEventsGraph)(txidVersion, POLYGON_CHAIN, 0);
61
- expect(eventLog).to.be.an('object');
62
- expect(eventLog.commitmentEvents).to.be.an('array');
63
- expect(eventLog.commitmentEvents.length).to.be.at.least(EXPECTED_COMMITMENT_GROUP_EVENTS_POLYGON);
64
- expect(eventLog.nullifierEvents.length).to.be.at.least(EXPECTED_NULLIFIER_EVENTS_POLYGON);
65
- expect(eventLog.decryptEvents.length).to.be.at.least(EXPECTED_DECRYPT_EVENTS_POLYGON);
66
- expect(eventLog.decryptEvents.length).to.be.at.least(EXPECTED_DECRYPT_EVENTS_POLYGON);
67
- const shouldThrow = true;
68
- assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);
69
- }).timeout(200000);
70
- it('[V2] Should make sure Graph V2 query has no data gaps in commitments - BNB Smart Chain', async function run() {
71
- if (!(0, helper_test_1.isV2Test)()) {
72
- this.skip();
73
- return;
74
- }
75
- const eventLog = await (0, quick_sync_events_1.quickSyncEventsGraph)(txidVersion, BNB_CHAIN, 0);
76
- expect(eventLog).to.be.an('object');
77
- expect(eventLog.commitmentEvents).to.be.an('array');
78
- expect(eventLog.commitmentEvents.length).to.be.at.least(EXPECTED_COMMITMENT_GROUP_EVENTS_BNB);
79
- expect(eventLog.nullifierEvents.length).to.be.at.least(EXPECTED_NULLIFIER_EVENTS_BNB);
80
- expect(eventLog.decryptEvents.length).to.be.at.least(EXPECTED_DECRYPT_EVENTS_BNB);
81
- const shouldThrow = true;
82
- assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);
83
- }).timeout(200000);
84
- it('[V2] Should make sure Graph V2 query has no data gaps in commitments - Arbitrum', async function run() {
85
- if (!(0, helper_test_1.isV2Test)()) {
86
- this.skip();
87
- return;
88
- }
89
- const eventLog = await (0, quick_sync_events_1.quickSyncEventsGraph)(txidVersion, ARBITRUM_CHAIN, 0);
90
- expect(eventLog).to.be.an('object');
91
- expect(eventLog.commitmentEvents).to.be.an('array');
92
- expect(eventLog.commitmentEvents.length).to.be.at.least(EXPECTED_COMMITMENT_GROUP_EVENTS_ARBITRUM);
93
- expect(eventLog.nullifierEvents.length).to.be.at.least(EXPECTED_NULLIFIER_EVENTS_ARBITRUM);
94
- expect(eventLog.decryptEvents.length).to.be.at.least(EXPECTED_DECRYPT_EVENTS_ARBITRUM);
95
- const shouldThrow = true;
96
- assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);
97
- }).timeout(200000);
98
- it('[V2] Should make sure Graph V2 query has no data gaps in commitments - Sepolia', async function run() {
99
- if (!(0, helper_test_1.isV2Test)()) {
100
- this.skip();
101
- return;
102
- }
103
- const eventLog = await (0, quick_sync_events_1.quickSyncEventsGraph)(txidVersion, SEPOLIA_CHAIN, 0);
104
- expect(eventLog).to.be.an('object');
105
- expect(eventLog.commitmentEvents).to.be.an('array');
106
- expect(eventLog.commitmentEvents.length).to.be.at.least(EXPECTED_COMMITMENT_GROUP_EVENTS_SEPOLIA);
107
- expect(eventLog.nullifierEvents.length).to.be.at.least(EXPECTED_NULLIFIER_EVENTS_SEPOLIA);
108
- expect(eventLog.decryptEvents.length).to.be.at.least(EXPECTED_DECRYPT_EVENTS_SEPOLIA);
109
- const shouldThrow = true;
110
- assertContiguousCommitmentEvents(eventLog.commitmentEvents, shouldThrow);
111
- }).timeout(90000);
112
- it('[V2] Should run live Dop Event Log fetch for Polygon with high starting block', async function run() {
113
- if (!(0, helper_test_1.isV2Test)()) {
114
- this.skip();
115
- return;
116
- }
117
- const eventLog = await (0, quick_sync_events_1.quickSyncEventsGraph)(txidVersion, POLYGON_CHAIN, 100000000);
118
- expect(eventLog).to.be.an('object');
119
- expect(eventLog.commitmentEvents).to.be.an('array');
120
- expect(eventLog.nullifierEvents).to.be.an('array');
121
- expect(eventLog.commitmentEvents.length).to.equal(0);
122
- expect(eventLog.nullifierEvents.length).to.equal(0);
123
- expect(eventLog.decryptEvents.length).to.equal(0);
124
- }).timeout(200000);
125
- });
126
- //# sourceMappingURL=quick-sync-events-graph-v2.test.js.map