@explorins/pers-sdk 2.0.7 → 2.0.11

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 (171) hide show
  1. package/README.md +113 -59
  2. package/dist/analytics/index.d.ts +0 -2
  3. package/dist/analytics/index.d.ts.map +1 -1
  4. package/dist/analytics/models/index.d.ts +1 -10
  5. package/dist/analytics/models/index.d.ts.map +1 -1
  6. package/dist/analytics.cjs +44 -29
  7. package/dist/analytics.cjs.map +1 -1
  8. package/dist/analytics.js +45 -2
  9. package/dist/analytics.js.map +1 -1
  10. package/dist/business/index.d.ts +0 -1
  11. package/dist/business/index.d.ts.map +1 -1
  12. package/dist/business.cjs +7 -774
  13. package/dist/business.cjs.map +1 -1
  14. package/dist/business.js +3 -751
  15. package/dist/business.js.map +1 -1
  16. package/dist/campaign/index.d.ts +0 -1
  17. package/dist/campaign/index.d.ts.map +1 -1
  18. package/dist/campaign.cjs +429 -29
  19. package/dist/campaign.cjs.map +1 -1
  20. package/dist/campaign.js +431 -3
  21. package/dist/campaign.js.map +1 -1
  22. package/dist/chunks/business-membership-service-8KC_qRj7.cjs +756 -0
  23. package/dist/chunks/business-membership-service-8KC_qRj7.cjs.map +1 -0
  24. package/dist/chunks/business-membership-service-D6vaVQTR.js +751 -0
  25. package/dist/chunks/business-membership-service-D6vaVQTR.js.map +1 -0
  26. package/dist/chunks/{web3-chain-service-BeBjALg2.cjs → index-B-g2JPVK.cjs} +1 -220
  27. package/dist/chunks/index-B-g2JPVK.cjs.map +1 -0
  28. package/dist/chunks/{web3-chain-service-DKHCnHQX.js → index-CKm_V5XE.js} +2 -219
  29. package/dist/chunks/index-CKm_V5XE.js.map +1 -0
  30. package/dist/chunks/payment-service-Bkw7ZXev.cjs +214 -0
  31. package/dist/chunks/payment-service-Bkw7ZXev.cjs.map +1 -0
  32. package/dist/chunks/payment-service-IvM6rryM.js +211 -0
  33. package/dist/chunks/payment-service-IvM6rryM.js.map +1 -0
  34. package/dist/chunks/{pers-sdk-JIExM712.js → pers-sdk-DYnIZvcx.js} +12 -291
  35. package/dist/chunks/pers-sdk-DYnIZvcx.js.map +1 -0
  36. package/dist/chunks/{pers-sdk-h-uoLpBx.cjs → pers-sdk-Dr9W8stD.cjs} +38 -318
  37. package/dist/chunks/pers-sdk-Dr9W8stD.cjs.map +1 -0
  38. package/dist/chunks/redemption-service-D-hBqh42.js +339 -0
  39. package/dist/chunks/redemption-service-D-hBqh42.js.map +1 -0
  40. package/dist/chunks/redemption-service-rMB6T2W5.cjs +342 -0
  41. package/dist/chunks/redemption-service-rMB6T2W5.cjs.map +1 -0
  42. package/dist/chunks/tenant-service-CsRA3O2V.js +163 -0
  43. package/dist/chunks/tenant-service-CsRA3O2V.js.map +1 -0
  44. package/dist/chunks/tenant-service-fj-pkXTw.cjs +166 -0
  45. package/dist/chunks/tenant-service-fj-pkXTw.cjs.map +1 -0
  46. package/dist/chunks/{transaction-request.builder-DrqTWcyC.cjs → transaction-request.builder-BwWmfHXm.cjs} +6 -6
  47. package/dist/chunks/{transaction-request.builder-DrqTWcyC.cjs.map → transaction-request.builder-BwWmfHXm.cjs.map} +1 -1
  48. package/dist/chunks/{transaction-request.builder-DltmruUC.js → transaction-request.builder-C1FPWmYN.js} +6 -6
  49. package/dist/chunks/{transaction-request.builder-DltmruUC.js.map → transaction-request.builder-C1FPWmYN.js.map} +1 -1
  50. package/dist/chunks/web3-chain-service-D68-0WaW.cjs +224 -0
  51. package/dist/chunks/web3-chain-service-D68-0WaW.cjs.map +1 -0
  52. package/dist/chunks/web3-chain-service-DuvxmKSj.js +221 -0
  53. package/dist/chunks/web3-chain-service-DuvxmKSj.js.map +1 -0
  54. package/dist/chunks/{explorer.utils-Cx3wrqAj.cjs → web3-manager-C_cFaMCm.cjs} +411 -144
  55. package/dist/chunks/web3-manager-C_cFaMCm.cjs.map +1 -0
  56. package/dist/chunks/{explorer.utils-BkS3k8hX.js → web3-manager-OExwBWB7.js} +412 -146
  57. package/dist/chunks/web3-manager-OExwBWB7.js.map +1 -0
  58. package/dist/core.cjs +18 -21
  59. package/dist/core.cjs.map +1 -1
  60. package/dist/core.js +10 -12
  61. package/dist/core.js.map +1 -1
  62. package/dist/donation/index.d.ts +0 -1
  63. package/dist/donation/index.d.ts.map +1 -1
  64. package/dist/donation.cjs +48 -29
  65. package/dist/donation.cjs.map +1 -1
  66. package/dist/donation.js +50 -3
  67. package/dist/donation.js.map +1 -1
  68. package/dist/index.cjs +43 -69
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/index.d.ts +1 -3
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +13 -15
  73. package/dist/index.js.map +1 -1
  74. package/dist/managers/analytics-manager.d.ts +1 -1
  75. package/dist/managers/index.d.ts +0 -1
  76. package/dist/managers/index.d.ts.map +1 -1
  77. package/dist/managers/web3-manager.d.ts +1 -1
  78. package/dist/managers/web3-manager.d.ts.map +1 -1
  79. package/dist/node.cjs +10 -13
  80. package/dist/node.cjs.map +1 -1
  81. package/dist/node.js +10 -13
  82. package/dist/node.js.map +1 -1
  83. package/dist/package.json +4 -10
  84. package/dist/payment/index.d.ts +0 -1
  85. package/dist/payment/index.d.ts.map +1 -1
  86. package/dist/payment.cjs +5 -232
  87. package/dist/payment.cjs.map +1 -1
  88. package/dist/payment.js +3 -210
  89. package/dist/payment.js.map +1 -1
  90. package/dist/pers-sdk.d.ts +1 -13
  91. package/dist/pers-sdk.d.ts.map +1 -1
  92. package/dist/redemption/index.d.ts +0 -1
  93. package/dist/redemption/index.d.ts.map +1 -1
  94. package/dist/redemption/services/redemption-service.d.ts +1 -2
  95. package/dist/redemption/services/redemption-service.d.ts.map +1 -1
  96. package/dist/redemption.cjs +5 -360
  97. package/dist/redemption.cjs.map +1 -1
  98. package/dist/redemption.js +3 -338
  99. package/dist/redemption.js.map +1 -1
  100. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +15 -21
  101. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
  102. package/dist/tenant/index.d.ts +0 -1
  103. package/dist/tenant/index.d.ts.map +1 -1
  104. package/dist/tenant.cjs +5 -184
  105. package/dist/tenant.cjs.map +1 -1
  106. package/dist/tenant.js +3 -162
  107. package/dist/tenant.js.map +1 -1
  108. package/dist/token/index.d.ts +0 -1
  109. package/dist/token/index.d.ts.map +1 -1
  110. package/dist/token.cjs +1 -25
  111. package/dist/token.cjs.map +1 -1
  112. package/dist/token.js +1 -1
  113. package/dist/transaction/models/transaction-request.builder.d.ts +4 -4
  114. package/dist/transaction/models/transaction-request.builder.d.ts.map +1 -1
  115. package/dist/transaction.cjs +1 -1
  116. package/dist/transaction.js +1 -1
  117. package/dist/user/index.d.ts +0 -1
  118. package/dist/user/index.d.ts.map +1 -1
  119. package/dist/user-status/index.d.ts +0 -1
  120. package/dist/user-status/index.d.ts.map +1 -1
  121. package/dist/user-status.cjs +0 -25
  122. package/dist/user-status.cjs.map +1 -1
  123. package/dist/user-status.js +0 -1
  124. package/dist/user-status.js.map +1 -1
  125. package/dist/user.cjs +209 -29
  126. package/dist/user.cjs.map +1 -1
  127. package/dist/user.js +211 -3
  128. package/dist/user.js.map +1 -1
  129. package/dist/web3/index.d.ts +1 -0
  130. package/dist/web3/index.d.ts.map +1 -1
  131. package/dist/web3-chain/index.d.ts +0 -1
  132. package/dist/web3-chain/index.d.ts.map +1 -1
  133. package/dist/web3-chain.cjs +14 -29
  134. package/dist/web3-chain.cjs.map +1 -1
  135. package/dist/web3-chain.js +16 -3
  136. package/dist/web3-chain.js.map +1 -1
  137. package/dist/web3-manager.cjs +13 -0
  138. package/dist/web3-manager.cjs.map +1 -0
  139. package/dist/web3-manager.js +7 -0
  140. package/dist/web3-manager.js.map +1 -0
  141. package/dist/web3.cjs +10 -6
  142. package/dist/web3.cjs.map +1 -1
  143. package/dist/web3.js +4 -1
  144. package/dist/web3.js.map +1 -1
  145. package/package.json +4 -10
  146. package/dist/chunks/analytics-service-CitlimKJ.cjs +0 -49
  147. package/dist/chunks/analytics-service-CitlimKJ.cjs.map +0 -1
  148. package/dist/chunks/analytics-service-CxyrOwel.js +0 -46
  149. package/dist/chunks/analytics-service-CxyrOwel.js.map +0 -1
  150. package/dist/chunks/campaign-service-CdEz0jpP.cjs +0 -435
  151. package/dist/chunks/campaign-service-CdEz0jpP.cjs.map +0 -1
  152. package/dist/chunks/campaign-service-DrTAqFZM.js +0 -432
  153. package/dist/chunks/campaign-service-DrTAqFZM.js.map +0 -1
  154. package/dist/chunks/donation-service--6cnTvWq.cjs +0 -54
  155. package/dist/chunks/donation-service--6cnTvWq.cjs.map +0 -1
  156. package/dist/chunks/donation-service-xiXZ2Eto.js +0 -51
  157. package/dist/chunks/donation-service-xiXZ2Eto.js.map +0 -1
  158. package/dist/chunks/explorer.utils-BkS3k8hX.js.map +0 -1
  159. package/dist/chunks/explorer.utils-Cx3wrqAj.cjs.map +0 -1
  160. package/dist/chunks/index-BtDNXaFq.js +0 -13
  161. package/dist/chunks/index-BtDNXaFq.js.map +0 -1
  162. package/dist/chunks/index-CMk3Aqkk.cjs +0 -15
  163. package/dist/chunks/index-CMk3Aqkk.cjs.map +0 -1
  164. package/dist/chunks/pers-sdk-JIExM712.js.map +0 -1
  165. package/dist/chunks/pers-sdk-h-uoLpBx.cjs.map +0 -1
  166. package/dist/chunks/user-service-BGP3SZpk.js +0 -212
  167. package/dist/chunks/user-service-BGP3SZpk.js.map +0 -1
  168. package/dist/chunks/user-service-gITOx4qj.cjs +0 -215
  169. package/dist/chunks/user-service-gITOx4qj.cjs.map +0 -1
  170. package/dist/chunks/web3-chain-service-BeBjALg2.cjs.map +0 -1
  171. package/dist/chunks/web3-chain-service-DKHCnHQX.js.map +0 -1
@@ -0,0 +1,224 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-B-g2JPVK.cjs');
4
+ var index$1 = require('./index-B6-bbNnd.cjs');
5
+ var ethers = require('@explorins/web3-ts/ethers');
6
+
7
+ /**
8
+ * Platform-Agnostic Web3 Chain API Client
9
+ *
10
+ * Handles blockchain chain operations using the PERS backend.
11
+ * Uses @explorins/web3-ts types for perfect framework compatibility.
12
+ */
13
+ class Web3ChainApi {
14
+ constructor(apiClient) {
15
+ this.apiClient = apiClient;
16
+ this.basePath = '/chains';
17
+ }
18
+ // ==========================================
19
+ // PUBLIC OPERATIONS
20
+ // ==========================================
21
+ /**
22
+ * PUBLIC: Get chain data by chain ID
23
+ */
24
+ async getChainData(chainId) {
25
+ try {
26
+ const response = await this.apiClient.get(`${this.basePath}/${chainId}`);
27
+ if (!response) {
28
+ throw new Error(`No chain data received for chainId: ${chainId}`);
29
+ }
30
+ return response;
31
+ }
32
+ catch (error) {
33
+ console.error('[Web3ChainApi] Failed to get chain data:', {
34
+ chainId,
35
+ error: error instanceof Error ? error.message : String(error)
36
+ });
37
+ throw error;
38
+ }
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Create Web3 provider from chain data
44
+ * Synchronous function for immediate provider creation
45
+ */
46
+ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
47
+ let ethersProvider;
48
+ if (chainData.authHeader) {
49
+ // Authenticated provider for private chains
50
+ const fetchRequest = new ethers.FetchRequest(chainData.rpcUrl);
51
+ fetchRequest.timeout = timeout;
52
+ // Handle auth header format
53
+ const authValue = chainData.authHeader.startsWith('Bearer ')
54
+ ? chainData.authHeader
55
+ : `Bearer ${chainData.authHeader}`;
56
+ fetchRequest.setHeader('Authorization', authValue);
57
+ fetchRequest.setHeader('Content-Type', 'application/json');
58
+ fetchRequest.setHeader('Accept', 'application/json');
59
+ if (customUserAgentName) {
60
+ fetchRequest.setHeader('User-Agent', customUserAgentName);
61
+ }
62
+ ethersProvider = new ethers.JsonRpcProvider(fetchRequest, chainData.chainId, {
63
+ staticNetwork: true, // Prevent eth_chainId calls - we know the chain
64
+ polling: false,
65
+ batchMaxCount: 1, // Disable batching for private chains
66
+ });
67
+ }
68
+ else {
69
+ // Public provider for public chains
70
+ ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl, chainData.chainId, {
71
+ staticNetwork: true, // Prevent eth_chainId calls - we know the chain
72
+ polling: false,
73
+ });
74
+ }
75
+ return ethersProvider;
76
+ };
77
+ /**
78
+ * Async wrapper with retry logic for higher-level usage
79
+ */
80
+ const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
81
+ let lastError = null;
82
+ for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {
83
+ try {
84
+ const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
85
+ await validateChainConnection(provider, chainData.authHeader ? 'private' : 'public');
86
+ return provider;
87
+ }
88
+ catch (error) {
89
+ lastError = error instanceof Error ? error : new Error(String(error));
90
+ // Stop retrying on auth errors for authenticated chains
91
+ if (index.ApiErrorDetector.isAuthError(lastError) && chainData.authHeader) {
92
+ break;
93
+ }
94
+ if (attempt === retryConfig.maxAttempts)
95
+ break;
96
+ const delay = Math.min(retryConfig.baseDelay * Math.pow(2, attempt - 1), retryConfig.maxDelay);
97
+ await sleep(delay);
98
+ }
99
+ }
100
+ throw new Error(`Failed to create Web3 provider after ${retryConfig.maxAttempts} attempts. Last error: ${lastError?.message}`);
101
+ };
102
+ async function validateChainConnection(provider, chainType) {
103
+ try {
104
+ // Lightweight test using eth_chainId (works for both public and private)
105
+ const timeoutPromise = new Promise((_, reject) => {
106
+ setTimeout(() => reject(new Error(`${chainType} chain validation timeout`)), 3000);
107
+ });
108
+ const chainIdPromise = provider.send('eth_chainId', []);
109
+ await Promise.race([chainIdPromise, timeoutPromise]);
110
+ }
111
+ catch (error) {
112
+ // Fallback: try net_version if chainId fails
113
+ try {
114
+ const timeoutPromise = new Promise((_, reject) => {
115
+ setTimeout(() => reject(new Error(`${chainType} chain fallback validation timeout`)), 3000);
116
+ });
117
+ const versionPromise = provider.send('net_version', []);
118
+ await Promise.race([versionPromise, timeoutPromise]);
119
+ }
120
+ catch (fallbackError) {
121
+ throw new Error(`${chainType} chain validation failed: ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ }
124
+ }
125
+ function sleep(ms) {
126
+ return new Promise(resolve => setTimeout(resolve, ms));
127
+ }
128
+
129
+ class Web3ChainService {
130
+ constructor(web3ChainApi) {
131
+ this.web3ChainApi = web3ChainApi;
132
+ this.cache = index$1.globalCacheService.createNamespace('web3-chain');
133
+ }
134
+ async getEthersProviderByChainId(chainId) {
135
+ const cacheKey = `provider:${chainId}`;
136
+ // Check if we have a valid cached provider
137
+ const cached = this.cache.get(cacheKey);
138
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
139
+ return cached.provider;
140
+ }
141
+ try {
142
+ // Create new provider instance
143
+ const { provider, chainData } = await this.createProviderInstance(chainId);
144
+ // Cache the provider with chain data
145
+ const cacheEntry = {
146
+ provider,
147
+ chainData,
148
+ createdAt: Date.now(),
149
+ chainId
150
+ };
151
+ this.cache.set(cacheKey, cacheEntry, index$1.CacheTTL.PROVIDER);
152
+ return provider;
153
+ }
154
+ catch (error) {
155
+ // ✅ AUTH ERROR RECOVERY: Clear cache and retry once
156
+ if (index.ApiErrorDetector.isAuthError(error)) {
157
+ this.cache.delete(cacheKey);
158
+ // Retry once with fresh instance
159
+ const { provider, chainData } = await this.createProviderInstance(chainId);
160
+ const cacheEntry = {
161
+ provider,
162
+ chainData,
163
+ createdAt: Date.now(),
164
+ chainId
165
+ };
166
+ this.cache.set(cacheKey, cacheEntry, index$1.CacheTTL.PROVIDER);
167
+ return provider;
168
+ }
169
+ throw error;
170
+ }
171
+ }
172
+ async createProviderInstance(chainId) {
173
+ const chainData = await this.getChainDataWithCache(chainId);
174
+ if (!chainData) {
175
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
176
+ }
177
+ const provider = await getWeb3ProviderWithRetry(chainData);
178
+ return { provider, chainData };
179
+ }
180
+ async getChainDataWithCache(chainId) {
181
+ const cacheKey = `chainData:${chainId}`;
182
+ // First check if we have it in the provider cache (includes token validation)
183
+ const providerCached = this.cache.get(`provider:${chainId}`);
184
+ if (providerCached && !this.checkIsTokenExpired(providerCached.chainData.authHeader)) {
185
+ return providerCached.chainData;
186
+ }
187
+ // Otherwise use getOrSet for chainData only
188
+ return this.cache.getOrSet(cacheKey, async () => {
189
+ const chainData = await this.web3ChainApi.getChainData(chainId);
190
+ if (!chainData) {
191
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
192
+ }
193
+ return chainData;
194
+ }, index$1.CacheTTL.MEDIUM // 30 minutes for chain data
195
+ );
196
+ }
197
+ checkIsTokenExpired(authHeader) {
198
+ // NULL CHECK: Handle undefined case
199
+ if (!authHeader) {
200
+ return false; // No token means no expiration (public chains)
201
+ }
202
+ // FUNCTION CALL: Use imported function, not method
203
+ return index.isTokenExpired(authHeader);
204
+ }
205
+ /**
206
+ * Clear all cached providers and chain data
207
+ * Useful for logout scenarios or when authentication context changes
208
+ */
209
+ clearCache() {
210
+ this.cache.clear();
211
+ }
212
+ /**
213
+ * Clear cache for a specific chain
214
+ * Useful when a specific chain's authentication fails
215
+ */
216
+ clearCacheForChain(chainId) {
217
+ this.cache.delete(`provider:${chainId}`);
218
+ this.cache.delete(`chainData:${chainId}`);
219
+ }
220
+ }
221
+
222
+ exports.Web3ChainApi = Web3ChainApi;
223
+ exports.Web3ChainService = Web3ChainService;
224
+ //# sourceMappingURL=web3-chain-service-D68-0WaW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web3-chain-service-D68-0WaW.cjs","sources":["../../src/web3-chain/api/web3-chain-api.ts","../../src/web3-chain/services/getWeb3FCD.service.ts","../../src/web3-chain/services/web3-chain-service.ts"],"sourcesContent":[null,null,null],"names":["FetchRequest","JsonRpcProvider","ApiErrorDetector","globalCacheService","CacheTTL","isTokenExpired"],"mappings":"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"}
@@ -0,0 +1,221 @@
1
+ import { b as ApiErrorDetector, i as isTokenExpired } from './index-CKm_V5XE.js';
2
+ import { g as globalCacheService, C as CacheTTL } from './index-DBLskLuH.js';
3
+ import { FetchRequest, JsonRpcProvider } from '@explorins/web3-ts/ethers';
4
+
5
+ /**
6
+ * Platform-Agnostic Web3 Chain API Client
7
+ *
8
+ * Handles blockchain chain operations using the PERS backend.
9
+ * Uses @explorins/web3-ts types for perfect framework compatibility.
10
+ */
11
+ class Web3ChainApi {
12
+ constructor(apiClient) {
13
+ this.apiClient = apiClient;
14
+ this.basePath = '/chains';
15
+ }
16
+ // ==========================================
17
+ // PUBLIC OPERATIONS
18
+ // ==========================================
19
+ /**
20
+ * PUBLIC: Get chain data by chain ID
21
+ */
22
+ async getChainData(chainId) {
23
+ try {
24
+ const response = await this.apiClient.get(`${this.basePath}/${chainId}`);
25
+ if (!response) {
26
+ throw new Error(`No chain data received for chainId: ${chainId}`);
27
+ }
28
+ return response;
29
+ }
30
+ catch (error) {
31
+ console.error('[Web3ChainApi] Failed to get chain data:', {
32
+ chainId,
33
+ error: error instanceof Error ? error.message : String(error)
34
+ });
35
+ throw error;
36
+ }
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Create Web3 provider from chain data
42
+ * Synchronous function for immediate provider creation
43
+ */
44
+ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
45
+ let ethersProvider;
46
+ if (chainData.authHeader) {
47
+ // Authenticated provider for private chains
48
+ const fetchRequest = new FetchRequest(chainData.rpcUrl);
49
+ fetchRequest.timeout = timeout;
50
+ // Handle auth header format
51
+ const authValue = chainData.authHeader.startsWith('Bearer ')
52
+ ? chainData.authHeader
53
+ : `Bearer ${chainData.authHeader}`;
54
+ fetchRequest.setHeader('Authorization', authValue);
55
+ fetchRequest.setHeader('Content-Type', 'application/json');
56
+ fetchRequest.setHeader('Accept', 'application/json');
57
+ if (customUserAgentName) {
58
+ fetchRequest.setHeader('User-Agent', customUserAgentName);
59
+ }
60
+ ethersProvider = new JsonRpcProvider(fetchRequest, chainData.chainId, {
61
+ staticNetwork: true, // Prevent eth_chainId calls - we know the chain
62
+ polling: false,
63
+ batchMaxCount: 1, // Disable batching for private chains
64
+ });
65
+ }
66
+ else {
67
+ // Public provider for public chains
68
+ ethersProvider = new JsonRpcProvider(chainData.rpcUrl, chainData.chainId, {
69
+ staticNetwork: true, // Prevent eth_chainId calls - we know the chain
70
+ polling: false,
71
+ });
72
+ }
73
+ return ethersProvider;
74
+ };
75
+ /**
76
+ * Async wrapper with retry logic for higher-level usage
77
+ */
78
+ const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
79
+ let lastError = null;
80
+ for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {
81
+ try {
82
+ const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
83
+ await validateChainConnection(provider, chainData.authHeader ? 'private' : 'public');
84
+ return provider;
85
+ }
86
+ catch (error) {
87
+ lastError = error instanceof Error ? error : new Error(String(error));
88
+ // Stop retrying on auth errors for authenticated chains
89
+ if (ApiErrorDetector.isAuthError(lastError) && chainData.authHeader) {
90
+ break;
91
+ }
92
+ if (attempt === retryConfig.maxAttempts)
93
+ break;
94
+ const delay = Math.min(retryConfig.baseDelay * Math.pow(2, attempt - 1), retryConfig.maxDelay);
95
+ await sleep(delay);
96
+ }
97
+ }
98
+ throw new Error(`Failed to create Web3 provider after ${retryConfig.maxAttempts} attempts. Last error: ${lastError?.message}`);
99
+ };
100
+ async function validateChainConnection(provider, chainType) {
101
+ try {
102
+ // Lightweight test using eth_chainId (works for both public and private)
103
+ const timeoutPromise = new Promise((_, reject) => {
104
+ setTimeout(() => reject(new Error(`${chainType} chain validation timeout`)), 3000);
105
+ });
106
+ const chainIdPromise = provider.send('eth_chainId', []);
107
+ await Promise.race([chainIdPromise, timeoutPromise]);
108
+ }
109
+ catch (error) {
110
+ // Fallback: try net_version if chainId fails
111
+ try {
112
+ const timeoutPromise = new Promise((_, reject) => {
113
+ setTimeout(() => reject(new Error(`${chainType} chain fallback validation timeout`)), 3000);
114
+ });
115
+ const versionPromise = provider.send('net_version', []);
116
+ await Promise.race([versionPromise, timeoutPromise]);
117
+ }
118
+ catch (fallbackError) {
119
+ throw new Error(`${chainType} chain validation failed: ${error instanceof Error ? error.message : String(error)}`);
120
+ }
121
+ }
122
+ }
123
+ function sleep(ms) {
124
+ return new Promise(resolve => setTimeout(resolve, ms));
125
+ }
126
+
127
+ class Web3ChainService {
128
+ constructor(web3ChainApi) {
129
+ this.web3ChainApi = web3ChainApi;
130
+ this.cache = globalCacheService.createNamespace('web3-chain');
131
+ }
132
+ async getEthersProviderByChainId(chainId) {
133
+ const cacheKey = `provider:${chainId}`;
134
+ // Check if we have a valid cached provider
135
+ const cached = this.cache.get(cacheKey);
136
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
137
+ return cached.provider;
138
+ }
139
+ try {
140
+ // Create new provider instance
141
+ const { provider, chainData } = await this.createProviderInstance(chainId);
142
+ // Cache the provider with chain data
143
+ const cacheEntry = {
144
+ provider,
145
+ chainData,
146
+ createdAt: Date.now(),
147
+ chainId
148
+ };
149
+ this.cache.set(cacheKey, cacheEntry, CacheTTL.PROVIDER);
150
+ return provider;
151
+ }
152
+ catch (error) {
153
+ // ✅ AUTH ERROR RECOVERY: Clear cache and retry once
154
+ if (ApiErrorDetector.isAuthError(error)) {
155
+ this.cache.delete(cacheKey);
156
+ // Retry once with fresh instance
157
+ const { provider, chainData } = await this.createProviderInstance(chainId);
158
+ const cacheEntry = {
159
+ provider,
160
+ chainData,
161
+ createdAt: Date.now(),
162
+ chainId
163
+ };
164
+ this.cache.set(cacheKey, cacheEntry, CacheTTL.PROVIDER);
165
+ return provider;
166
+ }
167
+ throw error;
168
+ }
169
+ }
170
+ async createProviderInstance(chainId) {
171
+ const chainData = await this.getChainDataWithCache(chainId);
172
+ if (!chainData) {
173
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
174
+ }
175
+ const provider = await getWeb3ProviderWithRetry(chainData);
176
+ return { provider, chainData };
177
+ }
178
+ async getChainDataWithCache(chainId) {
179
+ const cacheKey = `chainData:${chainId}`;
180
+ // First check if we have it in the provider cache (includes token validation)
181
+ const providerCached = this.cache.get(`provider:${chainId}`);
182
+ if (providerCached && !this.checkIsTokenExpired(providerCached.chainData.authHeader)) {
183
+ return providerCached.chainData;
184
+ }
185
+ // Otherwise use getOrSet for chainData only
186
+ return this.cache.getOrSet(cacheKey, async () => {
187
+ const chainData = await this.web3ChainApi.getChainData(chainId);
188
+ if (!chainData) {
189
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
190
+ }
191
+ return chainData;
192
+ }, CacheTTL.MEDIUM // 30 minutes for chain data
193
+ );
194
+ }
195
+ checkIsTokenExpired(authHeader) {
196
+ // NULL CHECK: Handle undefined case
197
+ if (!authHeader) {
198
+ return false; // No token means no expiration (public chains)
199
+ }
200
+ // FUNCTION CALL: Use imported function, not method
201
+ return isTokenExpired(authHeader);
202
+ }
203
+ /**
204
+ * Clear all cached providers and chain data
205
+ * Useful for logout scenarios or when authentication context changes
206
+ */
207
+ clearCache() {
208
+ this.cache.clear();
209
+ }
210
+ /**
211
+ * Clear cache for a specific chain
212
+ * Useful when a specific chain's authentication fails
213
+ */
214
+ clearCacheForChain(chainId) {
215
+ this.cache.delete(`provider:${chainId}`);
216
+ this.cache.delete(`chainData:${chainId}`);
217
+ }
218
+ }
219
+
220
+ export { Web3ChainApi as W, Web3ChainService as a };
221
+ //# sourceMappingURL=web3-chain-service-DuvxmKSj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web3-chain-service-DuvxmKSj.js","sources":["../../src/web3-chain/api/web3-chain-api.ts","../../src/web3-chain/services/getWeb3FCD.service.ts","../../src/web3-chain/services/web3-chain-service.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}