@explorins/pers-sdk 1.6.11 → 1.6.13

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 (72) hide show
  1. package/dist/chunks/{explorer.utils-D7EVBxr7.js → explorer.utils-BBs-6DZI.js} +217 -253
  2. package/dist/chunks/explorer.utils-BBs-6DZI.js.map +1 -0
  3. package/dist/chunks/{explorer.utils-Bq1zyCPD.cjs → explorer.utils-mn6hK7S2.cjs} +217 -253
  4. package/dist/chunks/explorer.utils-mn6hK7S2.cjs.map +1 -0
  5. package/dist/chunks/index-60201NKa.js +265 -0
  6. package/dist/chunks/index-60201NKa.js.map +1 -0
  7. package/dist/chunks/index-CcQkbZBZ.cjs +269 -0
  8. package/dist/chunks/index-CcQkbZBZ.cjs.map +1 -0
  9. package/dist/chunks/{pers-sdk-DoLwmPFK.js → pers-sdk-Doc9KxB7.js} +31 -99
  10. package/dist/chunks/pers-sdk-Doc9KxB7.js.map +1 -0
  11. package/dist/chunks/{pers-sdk-DLSGm4gV.cjs → pers-sdk-RNGAnn-O.cjs} +35 -103
  12. package/dist/chunks/pers-sdk-RNGAnn-O.cjs.map +1 -0
  13. package/dist/chunks/web3-chain-service-DtNLaIGT.cjs +386 -0
  14. package/dist/chunks/web3-chain-service-DtNLaIGT.cjs.map +1 -0
  15. package/dist/chunks/web3-chain-service-Dww1Hert.js +380 -0
  16. package/dist/chunks/web3-chain-service-Dww1Hert.js.map +1 -0
  17. package/dist/core/auth/default-auth-provider.d.ts.map +1 -1
  18. package/dist/core/auth/refresh-manager.d.ts.map +1 -1
  19. package/dist/core/auth/services/auth-service.d.ts +5 -0
  20. package/dist/core/auth/services/auth-service.d.ts.map +1 -1
  21. package/dist/core/cache/cache.service.d.ts +82 -0
  22. package/dist/core/cache/cache.service.d.ts.map +1 -0
  23. package/dist/core/cache/index.d.ts +13 -0
  24. package/dist/core/cache/index.d.ts.map +1 -0
  25. package/dist/core/index.d.ts +1 -0
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/pers-api-client.d.ts.map +1 -1
  28. package/dist/core.cjs +7 -3
  29. package/dist/core.cjs.map +1 -1
  30. package/dist/core.js +4 -3
  31. package/dist/core.js.map +1 -1
  32. package/dist/index.cjs +9 -5
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.js +4 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/package.json +1 -1
  37. package/dist/web3/domain/services/metadata-domain.service.d.ts +6 -1
  38. package/dist/web3/domain/services/metadata-domain.service.d.ts.map +1 -1
  39. package/dist/web3/domain/services/token-domain.service.d.ts +24 -22
  40. package/dist/web3/domain/services/token-domain.service.d.ts.map +1 -1
  41. package/dist/web3/infrastructure/api/ipfs-api.d.ts +6 -1
  42. package/dist/web3/infrastructure/api/ipfs-api.d.ts.map +1 -1
  43. package/dist/web3/infrastructure/api/web3-api.d.ts.map +1 -1
  44. package/dist/web3-chain/api/web3-chain-api.d.ts +0 -1
  45. package/dist/web3-chain/api/web3-chain-api.d.ts.map +1 -1
  46. package/dist/web3-chain/services/getWeb3FCD.service.d.ts +9 -10
  47. package/dist/web3-chain/services/getWeb3FCD.service.d.ts.map +1 -1
  48. package/dist/web3-chain/services/web3-chain-service.d.ts +11 -5
  49. package/dist/web3-chain/services/web3-chain-service.d.ts.map +1 -1
  50. package/dist/web3-chain.cjs +2 -1
  51. package/dist/web3-chain.cjs.map +1 -1
  52. package/dist/web3-chain.js +2 -1
  53. package/dist/web3-chain.js.map +1 -1
  54. package/dist/web3.cjs +2 -1
  55. package/dist/web3.cjs.map +1 -1
  56. package/dist/web3.js +2 -1
  57. package/dist/web3.js.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/chunks/explorer.utils-Bq1zyCPD.cjs.map +0 -1
  60. package/dist/chunks/explorer.utils-D7EVBxr7.js.map +0 -1
  61. package/dist/chunks/pers-sdk-DLSGm4gV.cjs.map +0 -1
  62. package/dist/chunks/pers-sdk-DoLwmPFK.js.map +0 -1
  63. package/dist/chunks/web3-chain-service-D75TcHkh.cjs +0 -312
  64. package/dist/chunks/web3-chain-service-D75TcHkh.cjs.map +0 -1
  65. package/dist/chunks/web3-chain-service-Dp5Z8p9I.js +0 -308
  66. package/dist/chunks/web3-chain-service-Dp5Z8p9I.js.map +0 -1
  67. package/dist/web3-chain/services/ethers-provider.service.d.ts +0 -11
  68. package/dist/web3-chain/services/ethers-provider.service.d.ts.map +0 -1
  69. package/dist/web3-chain/services/public-http-provider.service.d.ts +0 -1
  70. package/dist/web3-chain/services/public-http-provider.service.d.ts.map +0 -1
  71. package/dist/web3-chain/services/web3-provider.service.d.ts +0 -1
  72. package/dist/web3-chain/services/web3-provider.service.d.ts.map +0 -1
@@ -0,0 +1,386 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-CcQkbZBZ.cjs');
4
+ var ethers = require('@explorins/web3-ts/ethers');
5
+
6
+ /**
7
+ * JWT token expiration utilities
8
+ * Native implementation without external dependencies for optimal performance
9
+ */
10
+ /**
11
+ * Check if JWT token is expired or expiring within margin
12
+ * @param token JWT token (with or without Bearer prefix)
13
+ * @param margin Safety margin in seconds before expiry (default: 60)
14
+ */
15
+ const isTokenExpired = (token, margin = 60) => {
16
+ const cleanToken = token.replace(/^Bearer\s+/i, '');
17
+ if (!cleanToken || cleanToken.split('.').length !== 3) {
18
+ return true;
19
+ }
20
+ try {
21
+ const payload = JSON.parse(atob(cleanToken.split('.')[1]));
22
+ if (!payload.exp)
23
+ return false;
24
+ const currentTime = Math.floor(Date.now() / 1000);
25
+ return payload.exp < (currentTime + margin);
26
+ }
27
+ catch {
28
+ return true;
29
+ }
30
+ };
31
+
32
+ /**
33
+ * PERS SDK Error Handling - Optimized for Performance
34
+ *
35
+ * Consolidated API and auth errors for fast SDK performance
36
+ * Uses @explorins/pers-shared when available, fallback to SDK errors
37
+ */
38
+ // Fast type guards and utilities
39
+ class ErrorUtils {
40
+ /**
41
+ * Fast token expiration detection
42
+ */
43
+ static isTokenExpiredError(error) {
44
+ console.log('Checking if error is token expired error:', error);
45
+ if (typeof error !== 'object' || error === null)
46
+ return false;
47
+ const err = error;
48
+ const apiError = err?.error || err?.response?.data || err;
49
+ const status = err?.status || err?.response?.status || err?.statusCode;
50
+ // Explicit token expired messages
51
+ if (apiError?.code === 'TOKEN_EXPIRED' || apiError?.errorCode === 'TOKEN_EXPIRED') {
52
+ return true;
53
+ }
54
+ // Any 401 Unauthorized error should be treated as token expiration for auth flows
55
+ if (status === 401) {
56
+ return true;
57
+ }
58
+ // Check for token-related messages in other error formats
59
+ const message = apiError?.message || err?.message || '';
60
+ if (message && typeof message === 'string') {
61
+ const lowerMessage = message.toLowerCase();
62
+ return lowerMessage.includes('token') ||
63
+ lowerMessage.includes('unauthorized') ||
64
+ lowerMessage.includes('authentication');
65
+ }
66
+ return false;
67
+ }
68
+ /**
69
+ * Fast error message extraction
70
+ */
71
+ static getMessage(error) {
72
+ if (typeof error !== 'object' || error === null)
73
+ return 'Unknown error';
74
+ const err = error;
75
+ const apiError = err?.error || err?.response?.data || err;
76
+ return apiError?.message || apiError?.detail || err?.message || 'Request failed';
77
+ }
78
+ /**
79
+ * Fast status code extraction
80
+ */
81
+ static getStatus(error) {
82
+ if (typeof error !== 'object' || error === null)
83
+ return null;
84
+ const err = error;
85
+ return err?.status || err?.statusCode || err?.response?.status || null;
86
+ }
87
+ /**
88
+ * Fast retryability check
89
+ */
90
+ static isRetryable(error) {
91
+ if (typeof error !== 'object' || error === null)
92
+ return false;
93
+ const err = error;
94
+ // Check explicit retryable property first (fastest)
95
+ if (typeof err?.retryable === 'boolean')
96
+ return err.retryable;
97
+ // Fast status-based check
98
+ const status = ErrorUtils.getStatus(error);
99
+ return status === null || status >= 500 || status === 429;
100
+ }
101
+ /**
102
+ * Check if error is from PERS API (uses @explorins/pers-shared format)
103
+ */
104
+ static isPersApiError(error) {
105
+ return typeof error === 'object' && error !== null &&
106
+ 'errorCode' in error && 'domain' in error && 'category' in error;
107
+ }
108
+ }
109
+ // SDK-specific error classes for auth flows
110
+ class TokenRefreshNeeded extends Error {
111
+ constructor(refreshToken) {
112
+ super('Token refresh needed');
113
+ this.refreshToken = refreshToken;
114
+ this.errorCode = 'TOKEN_REFRESH_NEEDED';
115
+ this.domain = 'auth';
116
+ this.category = 'SECURITY';
117
+ this.retryable = true;
118
+ this.name = 'TokenRefreshNeeded';
119
+ }
120
+ }
121
+ class ProviderTokenRefreshNeeded extends Error {
122
+ constructor(providerToken) {
123
+ super('Provider token refresh needed');
124
+ this.providerToken = providerToken;
125
+ this.errorCode = 'PROVIDER_TOKEN_REFRESH_NEEDED';
126
+ this.domain = 'auth';
127
+ this.category = 'SECURITY';
128
+ this.retryable = true;
129
+ this.name = 'ProviderTokenRefreshNeeded';
130
+ }
131
+ }
132
+ class LogoutRequired extends Error {
133
+ constructor(message) {
134
+ super(message);
135
+ this.errorCode = 'LOGOUT_REQUIRED';
136
+ this.domain = 'auth';
137
+ this.category = 'SECURITY';
138
+ this.retryable = false;
139
+ this.name = 'LogoutRequired';
140
+ }
141
+ }
142
+ class PersApiError extends Error {
143
+ constructor(message, endpoint, method, status, retryable = false) {
144
+ super(`API request failed: ${message}`);
145
+ this.endpoint = endpoint;
146
+ this.method = method;
147
+ this.status = status;
148
+ this.errorCode = 'PERS_API_ERROR';
149
+ this.domain = 'api';
150
+ this.category = 'TECHNICAL';
151
+ this.name = 'PersApiError';
152
+ this.retryable = retryable;
153
+ }
154
+ }
155
+ const ApiErrorDetector = {
156
+ getErrorMessage: (error) => ErrorUtils.getMessage(error),
157
+ getStatusCode: (error) => ErrorUtils.getStatus(error),
158
+ isRetryable: (error) => ErrorUtils.isRetryable(error),
159
+ isAuthError: (error) => error instanceof TokenRefreshNeeded ||
160
+ error instanceof ProviderTokenRefreshNeeded ||
161
+ error instanceof LogoutRequired ||
162
+ ErrorUtils.isTokenExpiredError(error)
163
+ };
164
+
165
+ /**
166
+ * Platform-Agnostic Web3 Chain API Client
167
+ *
168
+ * Handles blockchain chain operations using the PERS backend.
169
+ * Uses @explorins/web3-ts types for perfect framework compatibility.
170
+ */
171
+ class Web3ChainApi {
172
+ constructor(apiClient) {
173
+ this.apiClient = apiClient;
174
+ this.basePath = '/chains';
175
+ }
176
+ // ==========================================
177
+ // PUBLIC OPERATIONS
178
+ // ==========================================
179
+ /**
180
+ * PUBLIC: Get chain data by chain ID
181
+ */
182
+ async getChainData(chainId) {
183
+ try {
184
+ console.log('[Web3ChainApi] Fetching chain data for chainId:', chainId);
185
+ const response = await this.apiClient.get(`${this.basePath}/${chainId}`);
186
+ if (!response) {
187
+ throw new Error(`No chain data received for chainId: ${chainId}`);
188
+ }
189
+ return response;
190
+ }
191
+ catch (error) {
192
+ console.error('[Web3ChainApi] Failed to get chain data:', {
193
+ chainId,
194
+ error: error instanceof Error ? error.message : String(error)
195
+ });
196
+ throw error;
197
+ }
198
+ }
199
+ }
200
+
201
+ /**
202
+ * Create Web3 provider from chain data
203
+ * Synchronous function for immediate provider creation
204
+ */
205
+ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
206
+ let ethersProvider;
207
+ if (chainData.authHeader) {
208
+ // Authenticated provider for private chains
209
+ const fetchRequest = new ethers.FetchRequest(chainData.rpcUrl);
210
+ fetchRequest.timeout = timeout;
211
+ // Handle auth header format
212
+ const authValue = chainData.authHeader.startsWith('Bearer ')
213
+ ? chainData.authHeader
214
+ : `Bearer ${chainData.authHeader}`;
215
+ fetchRequest.setHeader('Authorization', authValue);
216
+ fetchRequest.setHeader('Content-Type', 'application/json');
217
+ fetchRequest.setHeader('Accept', 'application/json');
218
+ if (customUserAgentName) {
219
+ fetchRequest.setHeader('User-Agent', customUserAgentName);
220
+ }
221
+ ethersProvider = new ethers.JsonRpcProvider(fetchRequest, chainData.chainId, {
222
+ staticNetwork: true, // Prevent eth_chainId calls - we know the chain
223
+ polling: false,
224
+ batchMaxCount: 1, // Disable batching for private chains
225
+ });
226
+ }
227
+ else {
228
+ // Public provider for public chains
229
+ ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl, chainData.chainId, {
230
+ staticNetwork: true, // Prevent eth_chainId calls - we know the chain
231
+ polling: false,
232
+ });
233
+ }
234
+ return ethersProvider;
235
+ };
236
+ /**
237
+ * Async wrapper with retry logic for higher-level usage
238
+ */
239
+ const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
240
+ let lastError = null;
241
+ for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {
242
+ try {
243
+ const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
244
+ await validateChainConnection(provider, chainData.authHeader ? 'private' : 'public');
245
+ return provider;
246
+ }
247
+ catch (error) {
248
+ lastError = error instanceof Error ? error : new Error(String(error));
249
+ // Stop retrying on auth errors for authenticated chains
250
+ if (ApiErrorDetector.isAuthError(lastError) && chainData.authHeader) {
251
+ break;
252
+ }
253
+ if (attempt === retryConfig.maxAttempts)
254
+ break;
255
+ const delay = Math.min(retryConfig.baseDelay * Math.pow(2, attempt - 1), retryConfig.maxDelay);
256
+ await sleep(delay);
257
+ }
258
+ }
259
+ throw new Error(`Failed to create Web3 provider after ${retryConfig.maxAttempts} attempts. Last error: ${lastError?.message}`);
260
+ };
261
+ async function validateChainConnection(provider, chainType) {
262
+ try {
263
+ // Lightweight test using eth_chainId (works for both public and private)
264
+ const timeoutPromise = new Promise((_, reject) => {
265
+ setTimeout(() => reject(new Error(`${chainType} chain validation timeout`)), 3000);
266
+ });
267
+ const chainIdPromise = provider.send('eth_chainId', []);
268
+ await Promise.race([chainIdPromise, timeoutPromise]);
269
+ }
270
+ catch (error) {
271
+ // Fallback: try net_version if chainId fails
272
+ try {
273
+ const timeoutPromise = new Promise((_, reject) => {
274
+ setTimeout(() => reject(new Error(`${chainType} chain fallback validation timeout`)), 3000);
275
+ });
276
+ const versionPromise = provider.send('net_version', []);
277
+ await Promise.race([versionPromise, timeoutPromise]);
278
+ }
279
+ catch (fallbackError) {
280
+ throw new Error(`${chainType} chain validation failed: ${error instanceof Error ? error.message : String(error)}`);
281
+ }
282
+ }
283
+ }
284
+ function sleep(ms) {
285
+ return new Promise(resolve => setTimeout(resolve, ms));
286
+ }
287
+
288
+ class Web3ChainService {
289
+ constructor(web3ChainApi) {
290
+ this.web3ChainApi = web3ChainApi;
291
+ this.cache = index.globalCacheService.createNamespace('web3-chain');
292
+ }
293
+ async getEthersProviderByChainId(chainId) {
294
+ const cacheKey = `provider:${chainId}`;
295
+ // Check if we have a valid cached provider
296
+ const cached = this.cache.get(cacheKey);
297
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
298
+ return cached.provider;
299
+ }
300
+ try {
301
+ // Create new provider instance
302
+ const { provider, chainData } = await this.createProviderInstance(chainId);
303
+ // Cache the provider with chain data
304
+ const cacheEntry = {
305
+ provider,
306
+ chainData,
307
+ createdAt: Date.now(),
308
+ chainId
309
+ };
310
+ this.cache.set(cacheKey, cacheEntry, index.CacheTTL.PROVIDER);
311
+ return provider;
312
+ }
313
+ catch (error) {
314
+ // ✅ AUTH ERROR RECOVERY: Clear cache and retry once
315
+ if (ApiErrorDetector.isAuthError(error)) {
316
+ this.cache.delete(cacheKey);
317
+ // Retry once with fresh instance
318
+ const { provider, chainData } = await this.createProviderInstance(chainId);
319
+ const cacheEntry = {
320
+ provider,
321
+ chainData,
322
+ createdAt: Date.now(),
323
+ chainId
324
+ };
325
+ this.cache.set(cacheKey, cacheEntry, index.CacheTTL.PROVIDER);
326
+ return provider;
327
+ }
328
+ throw error;
329
+ }
330
+ }
331
+ async createProviderInstance(chainId) {
332
+ const chainData = await this.getChainDataWithCache(chainId);
333
+ if (!chainData) {
334
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
335
+ }
336
+ const provider = await getWeb3ProviderWithRetry(chainData);
337
+ return { provider, chainData };
338
+ }
339
+ async getChainDataWithCache(chainId) {
340
+ const cacheKey = `chainData:${chainId}`;
341
+ // First check if we have it in the provider cache (includes token validation)
342
+ const providerCached = this.cache.get(`provider:${chainId}`);
343
+ if (providerCached && !this.checkIsTokenExpired(providerCached.chainData.authHeader)) {
344
+ return providerCached.chainData;
345
+ }
346
+ // Otherwise use getOrSet for chainData only
347
+ return this.cache.getOrSet(cacheKey, async () => {
348
+ const chainData = await this.web3ChainApi.getChainData(chainId);
349
+ if (!chainData) {
350
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
351
+ }
352
+ return chainData;
353
+ }, index.CacheTTL.MEDIUM // 30 minutes for chain data
354
+ );
355
+ }
356
+ checkIsTokenExpired(authHeader) {
357
+ // NULL CHECK: Handle undefined case
358
+ if (!authHeader) {
359
+ return false; // No token means no expiration (public chains)
360
+ }
361
+ // FUNCTION CALL: Use imported function, not method
362
+ return isTokenExpired(authHeader);
363
+ }
364
+ /**
365
+ * Clear all cached providers and chain data
366
+ * Useful for logout scenarios or when authentication context changes
367
+ */
368
+ clearCache() {
369
+ this.cache.clear();
370
+ }
371
+ /**
372
+ * Clear cache for a specific chain
373
+ * Useful when a specific chain's authentication fails
374
+ */
375
+ clearCacheForChain(chainId) {
376
+ this.cache.delete(`provider:${chainId}`);
377
+ this.cache.delete(`chainData:${chainId}`);
378
+ }
379
+ }
380
+
381
+ exports.ErrorUtils = ErrorUtils;
382
+ exports.PersApiError = PersApiError;
383
+ exports.Web3ChainApi = Web3ChainApi;
384
+ exports.Web3ChainService = Web3ChainService;
385
+ exports.isTokenExpired = isTokenExpired;
386
+ //# sourceMappingURL=web3-chain-service-DtNLaIGT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web3-chain-service-DtNLaIGT.cjs","sources":["../../src/core/utils/jwt.function.ts","../../src/core/errors/index.ts","../../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,null,null],"names":["FetchRequest","JsonRpcProvider","globalCacheService","CacheTTL"],"mappings":"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"}