@explorins/pers-sdk 1.6.0 → 1.6.2

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 (70) hide show
  1. package/dist/chunks/index-BfOoX87y.cjs +337 -0
  2. package/dist/chunks/index-BfOoX87y.cjs.map +1 -0
  3. package/dist/chunks/index-CJ9Jfa4A.js +615 -0
  4. package/dist/chunks/index-CJ9Jfa4A.js.map +1 -0
  5. package/dist/chunks/index-CM21r58m.js +331 -0
  6. package/dist/chunks/index-CM21r58m.js.map +1 -0
  7. package/dist/chunks/index-CzEluQmf.cjs +625 -0
  8. package/dist/chunks/index-CzEluQmf.cjs.map +1 -0
  9. package/dist/chunks/{pers-sdk-UNKbbSC_.cjs → pers-sdk-C3Sc2hyn.cjs} +398 -4
  10. package/dist/chunks/pers-sdk-C3Sc2hyn.cjs.map +1 -0
  11. package/dist/chunks/{pers-sdk-gnQ_VcEq.js → pers-sdk-CoKZ7rHG.js} +393 -5
  12. package/dist/chunks/pers-sdk-CoKZ7rHG.js.map +1 -0
  13. package/dist/core.cjs +12 -5
  14. package/dist/core.cjs.map +1 -1
  15. package/dist/core.js +6 -2
  16. package/dist/core.js.map +1 -1
  17. package/dist/file/api/file-api.d.ts +35 -0
  18. package/dist/file/api/file-api.d.ts.map +1 -0
  19. package/dist/file/api/index.d.ts +2 -0
  20. package/dist/file/api/index.d.ts.map +1 -0
  21. package/dist/file/index.d.ts +9 -0
  22. package/dist/file/index.d.ts.map +1 -0
  23. package/dist/file/models/index.d.ts +26 -0
  24. package/dist/file/models/index.d.ts.map +1 -0
  25. package/dist/file/services/file-service.d.ts +57 -0
  26. package/dist/file/services/file-service.d.ts.map +1 -0
  27. package/dist/file/services/index.d.ts +2 -0
  28. package/dist/file/services/index.d.ts.map +1 -0
  29. package/dist/index.cjs +19 -13
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.ts +1 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +4 -6
  34. package/dist/index.js.map +1 -1
  35. package/dist/managers/file-manager.d.ts +55 -0
  36. package/dist/managers/file-manager.d.ts.map +1 -0
  37. package/dist/managers/index.d.ts +3 -0
  38. package/dist/managers/index.d.ts.map +1 -1
  39. package/dist/managers/tenant-manager.d.ts +8 -0
  40. package/dist/managers/tenant-manager.d.ts.map +1 -1
  41. package/dist/managers/user-status-manager.d.ts +40 -0
  42. package/dist/managers/user-status-manager.d.ts.map +1 -0
  43. package/dist/managers/web3-manager.d.ts +76 -0
  44. package/dist/managers/web3-manager.d.ts.map +1 -0
  45. package/dist/package.json +1 -1
  46. package/dist/pers-sdk.d.ts +37 -1
  47. package/dist/pers-sdk.d.ts.map +1 -1
  48. package/dist/web3/index.d.ts +1 -0
  49. package/dist/web3/index.d.ts.map +1 -1
  50. package/dist/web3/utils/explorer.utils.d.ts +21 -0
  51. package/dist/web3/utils/explorer.utils.d.ts.map +1 -0
  52. package/dist/web3-chain.cjs +8 -307
  53. package/dist/web3-chain.cjs.map +1 -1
  54. package/dist/web3-chain.js +2 -305
  55. package/dist/web3-chain.js.map +1 -1
  56. package/dist/web3.cjs +9 -516
  57. package/dist/web3.cjs.map +1 -1
  58. package/dist/web3.js +3 -516
  59. package/dist/web3.js.map +1 -1
  60. package/package.json +1 -1
  61. package/dist/chunks/environment-C2AkkLPd.js +0 -46
  62. package/dist/chunks/environment-C2AkkLPd.js.map +0 -1
  63. package/dist/chunks/environment-CRROnwAY.cjs +0 -50
  64. package/dist/chunks/environment-CRROnwAY.cjs.map +0 -1
  65. package/dist/chunks/jwt.function-BYiyl-z_.cjs +0 -25
  66. package/dist/chunks/jwt.function-BYiyl-z_.cjs.map +0 -1
  67. package/dist/chunks/jwt.function-d6jPtBqI.js +0 -23
  68. package/dist/chunks/jwt.function-d6jPtBqI.js.map +0 -1
  69. package/dist/chunks/pers-sdk-UNKbbSC_.cjs.map +0 -1
  70. package/dist/chunks/pers-sdk-gnQ_VcEq.js.map +0 -1
@@ -0,0 +1,331 @@
1
+ import { jwtDecode } from 'jwt-decode';
2
+ import { FetchRequest, JsonRpcProvider } from '@explorins/web3-ts/ethers';
3
+ import '@explorins/pers-shared';
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
+ * ✅ Returns ChainData exactly as framework expects from @explorins/web3-ts
22
+ */
23
+ async getChainData(chainId) {
24
+ try {
25
+ console.log('[Web3ChainApi] Fetching chain data for chainId:', chainId);
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
+ const isTokenExpired = (token, margin = 60) => {
43
+ // Remove Bearer prefix if present
44
+ const cleanToken = token.split(' ')[1] || token;
45
+ // Validate JWT format
46
+ if (!cleanToken || cleanToken.split('.').length !== 3) {
47
+ return true; // Consider invalid tokens as expired
48
+ }
49
+ try {
50
+ // Decode JWT token
51
+ const decoded = jwtDecode(cleanToken);
52
+ const currentTime = Math.floor(Date.now() / 1000);
53
+ // Check expiration with margin (default 60 seconds)
54
+ return decoded.exp < (currentTime + margin);
55
+ }
56
+ catch (error) {
57
+ return true; // Consider unparseable tokens as expired
58
+ }
59
+ };
60
+
61
+ var jwt_function = /*#__PURE__*/Object.freeze({
62
+ __proto__: null,
63
+ isTokenExpired: isTokenExpired
64
+ });
65
+
66
+ // ✅ REVERT: Función síncrona como el código comentado que funciona
67
+ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
68
+ let ethersProvider;
69
+ if (chainData.authHeader) {
70
+ // ✅ AUTHENTICATED: For private chains
71
+ const fetchRequest = new FetchRequest(chainData.rpcUrl);
72
+ fetchRequest.timeout = timeout;
73
+ // ✅ IMPROVED AUTH HEADER: Better handling
74
+ const authValue = chainData.authHeader.startsWith('Bearer ')
75
+ ? chainData.authHeader
76
+ : `Bearer ${chainData.authHeader}`;
77
+ fetchRequest.setHeader('Authorization', authValue);
78
+ fetchRequest.setHeader('Content-Type', 'application/json');
79
+ fetchRequest.setHeader('Accept', 'application/json');
80
+ if (customUserAgentName) {
81
+ fetchRequest.setHeader('User-Agent', customUserAgentName);
82
+ }
83
+ ethersProvider = new JsonRpcProvider(fetchRequest, undefined, {
84
+ staticNetwork: false,
85
+ polling: false,
86
+ batchMaxCount: 1, // ✅ DISABLE BATCHING: Better for private chains
87
+ });
88
+ }
89
+ else {
90
+ // ✅ PUBLIC: For public chains
91
+ ethersProvider = new JsonRpcProvider(chainData.rpcUrl, undefined, {
92
+ staticNetwork: false,
93
+ polling: false,
94
+ });
95
+ }
96
+ console.log(`✅ [getWeb3FCD] Provider created successfully`);
97
+ return {
98
+ web3Provider: null,
99
+ ethersProvider: ethersProvider,
100
+ isAuthenticated: !!chainData.authHeader,
101
+ };
102
+ };
103
+ // ✅ NEW: Async wrapper with retry for higher-level usage
104
+ const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
105
+ let lastError = null;
106
+ for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {
107
+ try {
108
+ console.log(`🔄 [Web3Provider] Attempt ${attempt}/${retryConfig.maxAttempts} for chain ${chainData.chainId || 'unknown'}`);
109
+ // ✅ SYNC CALL: Use the original sync function
110
+ const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
111
+ await validateChainConnection(provider.ethersProvider, chainData.authHeader ? 'private' : 'public');
112
+ console.log(`✅ [Web3Provider] Successfully connected on attempt ${attempt}`);
113
+ return provider;
114
+ }
115
+ catch (error) {
116
+ lastError = error instanceof Error ? error : new Error(String(error));
117
+ console.warn(`⚠️ [Web3Provider] Attempt ${attempt} failed:`, lastError.message);
118
+ // ✅ NO RETRY: if auth error, no retry
119
+ if (isAuthError(lastError) && chainData.authHeader) {
120
+ console.error(`❌ [Web3Provider] Auth error, stopping retries`);
121
+ break;
122
+ }
123
+ if (attempt === retryConfig.maxAttempts)
124
+ break;
125
+ const delay = Math.min(retryConfig.baseDelay * Math.pow(2, attempt - 1), retryConfig.maxDelay);
126
+ console.log(`⏳ [Web3Provider] Retrying in ${delay}ms...`);
127
+ await sleep(delay);
128
+ }
129
+ }
130
+ throw new Error(`Failed to create Web3 provider after ${retryConfig.maxAttempts} attempts. Last error: ${lastError?.message}`);
131
+ };
132
+ async function validateChainConnection(provider, chainType) {
133
+ try {
134
+ console.log(`🔍 [Validation] Testing ${chainType} chain connection...`);
135
+ // ✅ LIGHTWEIGHT TEST: Use eth_chainId (works for both public and private)
136
+ const timeoutPromise = new Promise((_, reject) => {
137
+ setTimeout(() => reject(new Error(`${chainType} chain validation timeout`)), 3000);
138
+ });
139
+ // Try chainId first (fast, lightweight, universal)
140
+ const chainIdPromise = provider.send('eth_chainId', []);
141
+ const result = await Promise.race([chainIdPromise, timeoutPromise]);
142
+ console.log(`✅ [Validation] ${chainType} chain connection validated - Chain ID: ${result}`);
143
+ }
144
+ catch (error) {
145
+ // ✅ FALLBACK: Try net_version if chainId fails
146
+ try {
147
+ console.log(`🔄 [Validation] Trying fallback validation for ${chainType} chain...`);
148
+ const timeoutPromise = new Promise((_, reject) => {
149
+ setTimeout(() => reject(new Error(`${chainType} chain fallback validation timeout`)), 3000);
150
+ });
151
+ const versionPromise = provider.send('net_version', []);
152
+ const result = await Promise.race([versionPromise, timeoutPromise]);
153
+ console.log(`✅ [Validation] ${chainType} chain connection validated via fallback - Network Version: ${result}`);
154
+ }
155
+ catch (fallbackError) {
156
+ throw new Error(`${chainType} chain validation failed: ${error instanceof Error ? error.message : String(error)}`);
157
+ }
158
+ }
159
+ }
160
+ // ✅ HELPER: Auth error detection
161
+ function isAuthError(error) {
162
+ const message = error.message.toLowerCase();
163
+ return (message.includes('unauthorized') ||
164
+ message.includes('401') ||
165
+ message.includes('token expired') ||
166
+ message.includes('-40100'));
167
+ }
168
+ // ✅ HELPER: Sleep utility
169
+ function sleep(ms) {
170
+ return new Promise(resolve => setTimeout(resolve, ms));
171
+ }
172
+
173
+ class EthersProviderService {
174
+ constructor() {
175
+ this._provider = null;
176
+ this._currentChainId = null;
177
+ this._creationPromise = null;
178
+ console.log('[PERS SDK] EthersProviderService initialized with enhanced instanceof handling');
179
+ }
180
+ async getEthersProvider(chainId, chainType, chainData) {
181
+ // ✅ EARLY RETURN: Reuse existing provider
182
+ if (this._provider && this._currentChainId === chainId) {
183
+ return this._provider;
184
+ }
185
+ // ✅ PREVENT RACE CONDITION: Wait for ongoing creation
186
+ if (this._creationPromise) {
187
+ return await this._creationPromise;
188
+ }
189
+ if (!chainId)
190
+ throw new Error('ChainId not found');
191
+ if (!chainData)
192
+ throw new Error('ChainData not found');
193
+ // ✅ CREATE AND CACHE: Single promise for concurrent calls
194
+ const ethersPromise = this.createEthersProvider(chainId, chainType, chainData);
195
+ try {
196
+ const { web3Provider, ethersProvider, isAuthenticated } = await ethersPromise;
197
+ this._provider = ethersProvider;
198
+ this._currentChainId = chainId;
199
+ return ethersProvider;
200
+ }
201
+ finally {
202
+ // ✅ CLEANUP: Always reset promise after completion
203
+ this._creationPromise = null;
204
+ }
205
+ }
206
+ async createEthersProvider(chainId, chainType, chainData) {
207
+ console.log(`🔧 [createProvider] Creating provider for chain ${chainId}`);
208
+ const provider = await getWeb3ProviderWithRetry(chainData);
209
+ return provider;
210
+ }
211
+ }
212
+
213
+ class Web3ChainService {
214
+ constructor(web3ChainApi) {
215
+ this.web3ChainApi = web3ChainApi;
216
+ this.web3InstanceCache = new Map();
217
+ // TODO: Fix any
218
+ this.providerCache = new Map();
219
+ // private providerService: Web3ProviderService = new Web3ProviderService();
220
+ this.ethersProviderService = new EthersProviderService();
221
+ }
222
+ async getEthersProviderByChainId(chainId) {
223
+ const cached = this.providerCache.get(chainId);
224
+ // ✅ SMART CACHE: Check if cache is valid based on token expiration
225
+ if (cached && !this.checkIsTokenExpired(cached.authHeader)) {
226
+ // Using cached provider
227
+ return cached.provider;
228
+ }
229
+ try {
230
+ // Creating new Web3 instance
231
+ const { provider, chainData } = await this.createProviderInstance(chainId);
232
+ this.providerCache.set(chainId, {
233
+ provider,
234
+ chainData,
235
+ createdAt: Date.now(),
236
+ chainId
237
+ });
238
+ return provider;
239
+ }
240
+ catch (error) {
241
+ // ✅ AUTH ERROR RECOVERY: Clear cache and retry once
242
+ if (this.isAuthError(error)) {
243
+ // Auth error detected, clearing cache and retrying
244
+ this.providerCache.delete(chainId);
245
+ // Retry once with fresh instance
246
+ const { provider, chainData } = await this.createProviderInstance(chainId);
247
+ this.providerCache.set(chainId, {
248
+ provider,
249
+ chainData,
250
+ createdAt: Date.now(),
251
+ chainId
252
+ });
253
+ return provider;
254
+ }
255
+ throw error;
256
+ }
257
+ }
258
+ async createProviderInstance(chainId) {
259
+ const chainData = await this.getChainDataById(chainId);
260
+ if (!chainData) {
261
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
262
+ }
263
+ const provider = await this.ethersProviderService.getEthersProvider(chainId, chainData.chainType || 'PUBLIC', chainData);
264
+ return { provider, chainData };
265
+ }
266
+ async getChainDataWithCache(chainId) {
267
+ const cached = this.web3InstanceCache.get(chainId);
268
+ //const now = Date.now();
269
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
270
+ // Using cached ChainData
271
+ return cached.chainData;
272
+ }
273
+ // If not cached, fetch fresh data
274
+ const chainData = await this.getChainDataById(chainId);
275
+ if (!chainData) {
276
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
277
+ }
278
+ return chainData;
279
+ }
280
+ checkIsTokenExpired(authHeader) {
281
+ // ✅ NULL CHECK: Handle undefined case
282
+ if (!authHeader) {
283
+ return false; // No token means no expiration (public chains)
284
+ }
285
+ // ✅ FUNCTION CALL: Use imported function, not method
286
+ return isTokenExpired(authHeader);
287
+ }
288
+ // ✅ HELPER: Type-safe error checking
289
+ isAuthError(error) {
290
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
291
+ return (message.includes('unauthorized') ||
292
+ message.includes('401') ||
293
+ message.includes('token expired') ||
294
+ message.includes('invalid token'));
295
+ }
296
+ async getChainDataById(chainId) {
297
+ try {
298
+ return await this.web3ChainApi.getChainData(chainId);
299
+ }
300
+ catch (error) {
301
+ console.error('❌ [SDK Web3ChainService] Error getting chain data for chainId:', chainId, error);
302
+ return null;
303
+ }
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Web3 Chain Domain Models
309
+ *
310
+ * Minimal interface definitions matching framework usage exactly.
311
+ * Local ChainData interface to avoid external dependency issues.
312
+ */
313
+ const ChainTypes = {
314
+ PUBLIC: 'PUBLIC',
315
+ PRIVATE: 'PRIVATE'
316
+ };
317
+
318
+ function createWeb3ChainSDK(apiClient) {
319
+ const web3ChainApi = new Web3ChainApi(apiClient);
320
+ const web3ChainService = new Web3ChainService(web3ChainApi);
321
+ return {
322
+ getEthersProviderByChainId: (chainId) => web3ChainService.getEthersProviderByChainId(chainId),
323
+ getChainDataById: (chainId) => web3ChainService.getChainDataWithCache(chainId),
324
+ // getWeb3ByChainId: (chainId: number) => web3ChainService.getWeb3ByChainId(chainId),
325
+ api: web3ChainApi,
326
+ service: web3ChainService
327
+ };
328
+ }
329
+
330
+ export { ChainTypes as C, Web3ChainApi as W, Web3ChainService as a, createWeb3ChainSDK as c, jwt_function as j };
331
+ //# sourceMappingURL=index-CM21r58m.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CM21r58m.js","sources":["../../src/web3-chain/api/web3-chain-api.ts","../../src/core/utils/jwt.function.ts","../../src/web3-chain/services/getWeb3FCD.service.ts","../../src/web3-chain/services/ethers-provider.service.ts","../../src/web3-chain/services/web3-chain-service.ts","../../src/web3-chain/models/index.ts","../../src/web3-chain/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":"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"}