@explorins/pers-sdk 1.6.11 → 1.6.12
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.
- package/dist/chunks/{explorer.utils-Bq1zyCPD.cjs → explorer.utils-BfWBpq26.cjs} +217 -252
- package/dist/chunks/explorer.utils-BfWBpq26.cjs.map +1 -0
- package/dist/chunks/{explorer.utils-D7EVBxr7.js → explorer.utils-O4TGwQB1.js} +217 -252
- package/dist/chunks/explorer.utils-O4TGwQB1.js.map +1 -0
- package/dist/chunks/index-60201NKa.js +265 -0
- package/dist/chunks/index-60201NKa.js.map +1 -0
- package/dist/chunks/index-CcQkbZBZ.cjs +269 -0
- package/dist/chunks/index-CcQkbZBZ.cjs.map +1 -0
- package/dist/chunks/{pers-sdk-DoLwmPFK.js → pers-sdk-CpK-yTid.js} +31 -99
- package/dist/chunks/pers-sdk-CpK-yTid.js.map +1 -0
- package/dist/chunks/{pers-sdk-DLSGm4gV.cjs → pers-sdk-nfljnU3z.cjs} +35 -103
- package/dist/chunks/pers-sdk-nfljnU3z.cjs.map +1 -0
- package/dist/chunks/{web3-chain-service-D75TcHkh.cjs → web3-chain-service-CCs1U95-.cjs} +191 -109
- package/dist/chunks/web3-chain-service-CCs1U95-.cjs.map +1 -0
- package/dist/chunks/{web3-chain-service-Dp5Z8p9I.js → web3-chain-service-DniirmTp.js} +190 -110
- package/dist/chunks/web3-chain-service-DniirmTp.js.map +1 -0
- package/dist/core/auth/default-auth-provider.d.ts.map +1 -1
- package/dist/core/auth/refresh-manager.d.ts.map +1 -1
- package/dist/core/auth/services/auth-service.d.ts +5 -0
- package/dist/core/auth/services/auth-service.d.ts.map +1 -1
- package/dist/core/cache/cache.service.d.ts +82 -0
- package/dist/core/cache/cache.service.d.ts.map +1 -0
- package/dist/core/cache/index.d.ts +13 -0
- package/dist/core/cache/index.d.ts.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/pers-api-client.d.ts.map +1 -1
- package/dist/core.cjs +7 -3
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +4 -3
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +9 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/web3/domain/services/metadata-domain.service.d.ts +6 -1
- package/dist/web3/domain/services/metadata-domain.service.d.ts.map +1 -1
- package/dist/web3/domain/services/token-domain.service.d.ts +24 -22
- package/dist/web3/domain/services/token-domain.service.d.ts.map +1 -1
- package/dist/web3/infrastructure/api/ipfs-api.d.ts +6 -1
- package/dist/web3/infrastructure/api/ipfs-api.d.ts.map +1 -1
- package/dist/web3-chain/api/web3-chain-api.d.ts +0 -1
- package/dist/web3-chain/api/web3-chain-api.d.ts.map +1 -1
- package/dist/web3-chain/services/getWeb3FCD.service.d.ts +2 -10
- package/dist/web3-chain/services/getWeb3FCD.service.d.ts.map +1 -1
- package/dist/web3-chain/services/web3-chain-service.d.ts +11 -5
- package/dist/web3-chain/services/web3-chain-service.d.ts.map +1 -1
- package/dist/web3-chain.cjs +2 -1
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +2 -1
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3.cjs +2 -1
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +2 -1
- package/dist/web3.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/explorer.utils-Bq1zyCPD.cjs.map +0 -1
- package/dist/chunks/explorer.utils-D7EVBxr7.js.map +0 -1
- package/dist/chunks/pers-sdk-DLSGm4gV.cjs.map +0 -1
- package/dist/chunks/pers-sdk-DoLwmPFK.js.map +0 -1
- package/dist/chunks/web3-chain-service-D75TcHkh.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-Dp5Z8p9I.js.map +0 -1
- package/dist/web3-chain/services/ethers-provider.service.d.ts +0 -11
- package/dist/web3-chain/services/ethers-provider.service.d.ts.map +0 -1
- package/dist/web3-chain/services/public-http-provider.service.d.ts +0 -1
- package/dist/web3-chain/services/public-http-provider.service.d.ts.map +0 -1
- package/dist/web3-chain/services/web3-provider.service.d.ts +0 -1
- package/dist/web3-chain/services/web3-provider.service.d.ts.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var index = require('./index-CcQkbZBZ.cjs');
|
|
3
4
|
var ethers = require('@explorins/web3-ts/ethers');
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -28,6 +29,139 @@ const isTokenExpired = (token, margin = 60) => {
|
|
|
28
29
|
}
|
|
29
30
|
};
|
|
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
|
+
|
|
31
165
|
/**
|
|
32
166
|
* Platform-Agnostic Web3 Chain API Client
|
|
33
167
|
*
|
|
@@ -44,7 +178,6 @@ class Web3ChainApi {
|
|
|
44
178
|
// ==========================================
|
|
45
179
|
/**
|
|
46
180
|
* PUBLIC: Get chain data by chain ID
|
|
47
|
-
* ✅ Returns ChainData exactly as framework expects from @explorins/web3-ts
|
|
48
181
|
*/
|
|
49
182
|
async getChainData(chainId) {
|
|
50
183
|
try {
|
|
@@ -82,25 +215,21 @@ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgen
|
|
|
82
215
|
if (customUserAgentName) {
|
|
83
216
|
fetchRequest.setHeader('User-Agent', customUserAgentName);
|
|
84
217
|
}
|
|
85
|
-
ethersProvider = new ethers.JsonRpcProvider(fetchRequest,
|
|
86
|
-
staticNetwork:
|
|
218
|
+
ethersProvider = new ethers.JsonRpcProvider(fetchRequest, chainData.chainId, {
|
|
219
|
+
staticNetwork: true, // PREVENT eth_chainId calls - we know the chain
|
|
87
220
|
polling: false,
|
|
88
|
-
batchMaxCount: 1, //
|
|
221
|
+
batchMaxCount: 1, // DISABLE BATCHING: Better for private chains
|
|
89
222
|
});
|
|
90
223
|
}
|
|
91
224
|
else {
|
|
92
225
|
// ✅ PUBLIC: For public chains
|
|
93
|
-
ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl,
|
|
94
|
-
staticNetwork:
|
|
226
|
+
ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl, chainData.chainId, {
|
|
227
|
+
staticNetwork: true, // PREVENT eth_chainId calls - we know the chain
|
|
95
228
|
polling: false,
|
|
96
229
|
});
|
|
97
230
|
}
|
|
98
231
|
console.log(`✅ [getWeb3FCD] Provider created successfully`);
|
|
99
|
-
return
|
|
100
|
-
web3Provider: null,
|
|
101
|
-
ethersProvider: ethersProvider,
|
|
102
|
-
isAuthenticated: !!chainData.authHeader,
|
|
103
|
-
};
|
|
232
|
+
return ethersProvider;
|
|
104
233
|
};
|
|
105
234
|
// ✅ NEW: Async wrapper with retry for higher-level usage
|
|
106
235
|
const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
|
|
@@ -110,7 +239,7 @@ const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAg
|
|
|
110
239
|
console.log(`🔄 [Web3Provider] Attempt ${attempt}/${retryConfig.maxAttempts} for chain ${chainData.chainId || 'unknown'}`);
|
|
111
240
|
// ✅ SYNC CALL: Use the original sync function
|
|
112
241
|
const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
|
|
113
|
-
await validateChainConnection(provider
|
|
242
|
+
await validateChainConnection(provider, chainData.authHeader ? 'private' : 'public');
|
|
114
243
|
console.log(`✅ [Web3Provider] Successfully connected on attempt ${attempt}`);
|
|
115
244
|
return provider;
|
|
116
245
|
}
|
|
@@ -118,7 +247,7 @@ const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAg
|
|
|
118
247
|
lastError = error instanceof Error ? error : new Error(String(error));
|
|
119
248
|
console.warn(`⚠️ [Web3Provider] Attempt ${attempt} failed:`, lastError.message);
|
|
120
249
|
// ✅ NO RETRY: if auth error, no retry
|
|
121
|
-
if (isAuthError(lastError) && chainData.authHeader) {
|
|
250
|
+
if (ApiErrorDetector.isAuthError(lastError) && chainData.authHeader) {
|
|
122
251
|
console.error(`❌ [Web3Provider] Auth error, stopping retries`);
|
|
123
252
|
break;
|
|
124
253
|
}
|
|
@@ -159,154 +288,107 @@ async function validateChainConnection(provider, chainType) {
|
|
|
159
288
|
}
|
|
160
289
|
}
|
|
161
290
|
}
|
|
162
|
-
// ✅ HELPER: Auth error detection
|
|
163
|
-
function isAuthError(error) {
|
|
164
|
-
const message = error.message.toLowerCase();
|
|
165
|
-
return (message.includes('unauthorized') ||
|
|
166
|
-
message.includes('401') ||
|
|
167
|
-
message.includes('token expired') ||
|
|
168
|
-
message.includes('-40100'));
|
|
169
|
-
}
|
|
170
291
|
// ✅ HELPER: Sleep utility
|
|
171
292
|
function sleep(ms) {
|
|
172
293
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
173
294
|
}
|
|
174
295
|
|
|
175
|
-
class EthersProviderService {
|
|
176
|
-
constructor() {
|
|
177
|
-
this._provider = null;
|
|
178
|
-
this._currentChainId = null;
|
|
179
|
-
this._creationPromise = null;
|
|
180
|
-
console.log('[PERS SDK] EthersProviderService initialized with enhanced instanceof handling');
|
|
181
|
-
}
|
|
182
|
-
async getEthersProvider(chainId, chainType, chainData) {
|
|
183
|
-
// ✅ EARLY RETURN: Reuse existing provider
|
|
184
|
-
if (this._provider && this._currentChainId === chainId) {
|
|
185
|
-
return this._provider;
|
|
186
|
-
}
|
|
187
|
-
// ✅ PREVENT RACE CONDITION: Wait for ongoing creation
|
|
188
|
-
if (this._creationPromise) {
|
|
189
|
-
return await this._creationPromise;
|
|
190
|
-
}
|
|
191
|
-
if (!chainId)
|
|
192
|
-
throw new Error('ChainId not found');
|
|
193
|
-
if (!chainData)
|
|
194
|
-
throw new Error('ChainData not found');
|
|
195
|
-
// ✅ CREATE AND CACHE: Single promise for concurrent calls
|
|
196
|
-
const ethersPromise = this.createEthersProvider(chainId, chainType, chainData);
|
|
197
|
-
try {
|
|
198
|
-
const { web3Provider, ethersProvider, isAuthenticated } = await ethersPromise;
|
|
199
|
-
this._provider = ethersProvider;
|
|
200
|
-
this._currentChainId = chainId;
|
|
201
|
-
return ethersProvider;
|
|
202
|
-
}
|
|
203
|
-
finally {
|
|
204
|
-
// ✅ CLEANUP: Always reset promise after completion
|
|
205
|
-
this._creationPromise = null;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
async createEthersProvider(chainId, chainType, chainData) {
|
|
209
|
-
console.log(`🔧 [createProvider] Creating provider for chain ${chainId}`);
|
|
210
|
-
const provider = await getWeb3ProviderWithRetry(chainData);
|
|
211
|
-
return provider;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
296
|
class Web3ChainService {
|
|
216
297
|
constructor(web3ChainApi) {
|
|
217
298
|
this.web3ChainApi = web3ChainApi;
|
|
218
|
-
this.
|
|
219
|
-
// TODO: Fix any
|
|
220
|
-
this.providerCache = new Map();
|
|
221
|
-
// private providerService: Web3ProviderService = new Web3ProviderService();
|
|
222
|
-
this.ethersProviderService = new EthersProviderService();
|
|
299
|
+
this.cache = index.globalCacheService.createNamespace('web3-chain');
|
|
223
300
|
}
|
|
224
301
|
async getEthersProviderByChainId(chainId) {
|
|
225
|
-
const
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
302
|
+
const cacheKey = `provider:${chainId}`;
|
|
303
|
+
// Check if we have a valid cached provider
|
|
304
|
+
const cached = this.cache.get(cacheKey);
|
|
305
|
+
if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
|
|
229
306
|
return cached.provider;
|
|
230
307
|
}
|
|
231
308
|
try {
|
|
232
|
-
//
|
|
309
|
+
// Create new provider instance
|
|
233
310
|
const { provider, chainData } = await this.createProviderInstance(chainId);
|
|
234
|
-
|
|
311
|
+
// Cache the provider with chain data
|
|
312
|
+
const cacheEntry = {
|
|
235
313
|
provider,
|
|
236
314
|
chainData,
|
|
237
315
|
createdAt: Date.now(),
|
|
238
316
|
chainId
|
|
239
|
-
}
|
|
317
|
+
};
|
|
318
|
+
this.cache.set(cacheKey, cacheEntry, index.CacheTTL.PROVIDER);
|
|
240
319
|
return provider;
|
|
241
320
|
}
|
|
242
321
|
catch (error) {
|
|
243
322
|
// ✅ AUTH ERROR RECOVERY: Clear cache and retry once
|
|
244
|
-
if (
|
|
245
|
-
|
|
246
|
-
this.providerCache.delete(chainId);
|
|
323
|
+
if (ApiErrorDetector.isAuthError(error)) {
|
|
324
|
+
this.cache.delete(cacheKey);
|
|
247
325
|
// Retry once with fresh instance
|
|
248
326
|
const { provider, chainData } = await this.createProviderInstance(chainId);
|
|
249
|
-
|
|
327
|
+
const cacheEntry = {
|
|
250
328
|
provider,
|
|
251
329
|
chainData,
|
|
252
330
|
createdAt: Date.now(),
|
|
253
331
|
chainId
|
|
254
|
-
}
|
|
332
|
+
};
|
|
333
|
+
this.cache.set(cacheKey, cacheEntry, index.CacheTTL.PROVIDER);
|
|
255
334
|
return provider;
|
|
256
335
|
}
|
|
257
336
|
throw error;
|
|
258
337
|
}
|
|
259
338
|
}
|
|
260
339
|
async createProviderInstance(chainId) {
|
|
261
|
-
const chainData = await this.
|
|
340
|
+
const chainData = await this.getChainDataWithCache(chainId);
|
|
262
341
|
if (!chainData) {
|
|
263
342
|
throw new Error(`Chain data not found for chainId: ${chainId}`);
|
|
264
343
|
}
|
|
265
|
-
const provider = await
|
|
344
|
+
const provider = await getWeb3ProviderWithRetry(chainData);
|
|
266
345
|
return { provider, chainData };
|
|
267
346
|
}
|
|
268
347
|
async getChainDataWithCache(chainId) {
|
|
269
|
-
const
|
|
270
|
-
//
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
return
|
|
274
|
-
}
|
|
275
|
-
// If not cached, fetch fresh data
|
|
276
|
-
const chainData = await this.getChainDataById(chainId);
|
|
277
|
-
if (!chainData) {
|
|
278
|
-
throw new Error(`Chain data not found for chainId: ${chainId}`);
|
|
348
|
+
const cacheKey = `chainData:${chainId}`;
|
|
349
|
+
// First check if we have it in the provider cache (includes token validation)
|
|
350
|
+
const providerCached = this.cache.get(`provider:${chainId}`);
|
|
351
|
+
if (providerCached && !this.checkIsTokenExpired(providerCached.chainData.authHeader)) {
|
|
352
|
+
return providerCached.chainData;
|
|
279
353
|
}
|
|
280
|
-
|
|
354
|
+
// Otherwise use getOrSet for chainData only
|
|
355
|
+
return this.cache.getOrSet(cacheKey, async () => {
|
|
356
|
+
const chainData = await this.web3ChainApi.getChainData(chainId);
|
|
357
|
+
if (!chainData) {
|
|
358
|
+
throw new Error(`Chain data not found for chainId: ${chainId}`);
|
|
359
|
+
}
|
|
360
|
+
return chainData;
|
|
361
|
+
}, index.CacheTTL.MEDIUM // 30 minutes for chain data
|
|
362
|
+
);
|
|
281
363
|
}
|
|
282
364
|
checkIsTokenExpired(authHeader) {
|
|
283
|
-
//
|
|
365
|
+
// NULL CHECK: Handle undefined case
|
|
284
366
|
if (!authHeader) {
|
|
285
367
|
return false; // No token means no expiration (public chains)
|
|
286
368
|
}
|
|
287
|
-
//
|
|
369
|
+
// FUNCTION CALL: Use imported function, not method
|
|
288
370
|
return isTokenExpired(authHeader);
|
|
289
371
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
message.includes('invalid token'));
|
|
372
|
+
/**
|
|
373
|
+
* Clear all cached providers and chain data
|
|
374
|
+
* Useful for logout scenarios or when authentication context changes
|
|
375
|
+
*/
|
|
376
|
+
clearCache() {
|
|
377
|
+
this.cache.clear();
|
|
297
378
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
379
|
+
/**
|
|
380
|
+
* Clear cache for a specific chain
|
|
381
|
+
* Useful when a specific chain's authentication fails
|
|
382
|
+
*/
|
|
383
|
+
clearCacheForChain(chainId) {
|
|
384
|
+
this.cache.delete(`provider:${chainId}`);
|
|
385
|
+
this.cache.delete(`chainData:${chainId}`);
|
|
306
386
|
}
|
|
307
387
|
}
|
|
308
388
|
|
|
389
|
+
exports.ErrorUtils = ErrorUtils;
|
|
390
|
+
exports.PersApiError = PersApiError;
|
|
309
391
|
exports.Web3ChainApi = Web3ChainApi;
|
|
310
392
|
exports.Web3ChainService = Web3ChainService;
|
|
311
393
|
exports.isTokenExpired = isTokenExpired;
|
|
312
|
-
//# sourceMappingURL=web3-chain-service-
|
|
394
|
+
//# sourceMappingURL=web3-chain-service-CCs1U95-.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web3-chain-service-CCs1U95-.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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"}
|