@explorins/pers-sdk 1.6.10 → 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.
Files changed (75) hide show
  1. package/dist/chunks/{explorer.utils-GpskbLl1.cjs → explorer.utils-BfWBpq26.cjs} +224 -214
  2. package/dist/chunks/explorer.utils-BfWBpq26.cjs.map +1 -0
  3. package/dist/chunks/{explorer.utils-Ckll15ja.js → explorer.utils-O4TGwQB1.js} +224 -214
  4. package/dist/chunks/explorer.utils-O4TGwQB1.js.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-DOuNyWFC.js → pers-sdk-CpK-yTid.js} +31 -99
  10. package/dist/chunks/pers-sdk-CpK-yTid.js.map +1 -0
  11. package/dist/chunks/{pers-sdk-kb7j1DVU.cjs → pers-sdk-nfljnU3z.cjs} +35 -103
  12. package/dist/chunks/pers-sdk-nfljnU3z.cjs.map +1 -0
  13. package/dist/chunks/{web3-chain-service-D75TcHkh.cjs → web3-chain-service-CCs1U95-.cjs} +191 -109
  14. package/dist/chunks/web3-chain-service-CCs1U95-.cjs.map +1 -0
  15. package/dist/chunks/{web3-chain-service-Dp5Z8p9I.js → web3-chain-service-DniirmTp.js} +190 -110
  16. package/dist/chunks/web3-chain-service-DniirmTp.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/pers-config.d.ts +4 -0
  29. package/dist/core/pers-config.d.ts.map +1 -1
  30. package/dist/core.cjs +7 -3
  31. package/dist/core.cjs.map +1 -1
  32. package/dist/core.js +4 -3
  33. package/dist/core.js.map +1 -1
  34. package/dist/index.cjs +9 -5
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.js +4 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/package.json +1 -1
  39. package/dist/web3/application/web3-application.service.d.ts.map +1 -1
  40. package/dist/web3/domain/models/index.d.ts +1 -1
  41. package/dist/web3/domain/models/index.d.ts.map +1 -1
  42. package/dist/web3/domain/services/metadata-domain.service.d.ts +6 -1
  43. package/dist/web3/domain/services/metadata-domain.service.d.ts.map +1 -1
  44. package/dist/web3/domain/services/token-domain.service.d.ts +30 -14
  45. package/dist/web3/domain/services/token-domain.service.d.ts.map +1 -1
  46. package/dist/web3/infrastructure/api/ipfs-api.d.ts +6 -1
  47. package/dist/web3/infrastructure/api/ipfs-api.d.ts.map +1 -1
  48. package/dist/web3/infrastructure/api/web3-api.d.ts.map +1 -1
  49. package/dist/web3-chain/api/web3-chain-api.d.ts +0 -1
  50. package/dist/web3-chain/api/web3-chain-api.d.ts.map +1 -1
  51. package/dist/web3-chain/services/getWeb3FCD.service.d.ts +2 -10
  52. package/dist/web3-chain/services/getWeb3FCD.service.d.ts.map +1 -1
  53. package/dist/web3-chain/services/web3-chain-service.d.ts +11 -5
  54. package/dist/web3-chain/services/web3-chain-service.d.ts.map +1 -1
  55. package/dist/web3-chain.cjs +2 -1
  56. package/dist/web3-chain.cjs.map +1 -1
  57. package/dist/web3-chain.js +2 -1
  58. package/dist/web3-chain.js.map +1 -1
  59. package/dist/web3.cjs +2 -1
  60. package/dist/web3.cjs.map +1 -1
  61. package/dist/web3.js +2 -1
  62. package/dist/web3.js.map +1 -1
  63. package/package.json +1 -1
  64. package/dist/chunks/explorer.utils-Ckll15ja.js.map +0 -1
  65. package/dist/chunks/explorer.utils-GpskbLl1.cjs.map +0 -1
  66. package/dist/chunks/pers-sdk-DOuNyWFC.js.map +0 -1
  67. package/dist/chunks/pers-sdk-kb7j1DVU.cjs.map +0 -1
  68. package/dist/chunks/web3-chain-service-D75TcHkh.cjs.map +0 -1
  69. package/dist/chunks/web3-chain-service-Dp5Z8p9I.js.map +0 -1
  70. package/dist/web3-chain/services/ethers-provider.service.d.ts +0 -11
  71. package/dist/web3-chain/services/ethers-provider.service.d.ts.map +0 -1
  72. package/dist/web3-chain/services/public-http-provider.service.d.ts +0 -1
  73. package/dist/web3-chain/services/public-http-provider.service.d.ts.map +0 -1
  74. package/dist/web3-chain/services/web3-provider.service.d.ts +0 -1
  75. package/dist/web3-chain/services/web3-provider.service.d.ts.map +0 -1
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Centralized Cache Service for PERS SDK
3
+ * Provides unified caching with memory management and consistent policies
4
+ */
5
+ // Default cache configuration constants
6
+ const DEFAULT_CACHE_CONFIG = {
7
+ defaultTtl: 30 * 60 * 1000, // 30 minutes
8
+ maxMemoryMB: 50, // 50MB cache limit
9
+ cleanupInterval: 5 * 60 * 1000, // Cleanup every 5 minutes
10
+ enableLRU: true
11
+ };
12
+ class CacheService {
13
+ constructor(config) {
14
+ this.cache = new Map();
15
+ this.cleanupTimer = null;
16
+ this.config = { ...DEFAULT_CACHE_CONFIG, ...config };
17
+ this.startCleanupTimer();
18
+ }
19
+ /**
20
+ * Set a value in cache with optional TTL
21
+ */
22
+ set(key, value, ttl) {
23
+ if (!key || typeof key !== 'string') {
24
+ throw new Error('Cache key must be a non-empty string');
25
+ }
26
+ if (value === undefined) {
27
+ console.warn('Cache: Attempted to cache undefined value for key:', key);
28
+ return;
29
+ }
30
+ const entry = {
31
+ value,
32
+ timestamp: Date.now(),
33
+ ttl: ttl || this.config.defaultTtl,
34
+ accessCount: 1,
35
+ lastAccessed: Date.now()
36
+ };
37
+ this.cache.set(key, entry);
38
+ this.enforceMemoryLimit();
39
+ }
40
+ /**
41
+ * Get a value from cache
42
+ */
43
+ get(key) {
44
+ const entry = this.cache.get(key);
45
+ if (!entry) {
46
+ return null;
47
+ }
48
+ // Check if expired
49
+ const now = Date.now();
50
+ if (now - entry.timestamp > entry.ttl) {
51
+ this.cache.delete(key);
52
+ return null;
53
+ }
54
+ // Update access statistics for LRU
55
+ entry.accessCount++;
56
+ entry.lastAccessed = now;
57
+ return entry.value;
58
+ }
59
+ /**
60
+ * Get or set pattern - common caching pattern
61
+ */
62
+ async getOrSet(key, fetcher, ttl) {
63
+ const cached = this.get(key);
64
+ if (cached !== null) {
65
+ return cached;
66
+ }
67
+ try {
68
+ const value = await fetcher();
69
+ // Only cache non-undefined values
70
+ if (value !== undefined) {
71
+ this.set(key, value, ttl);
72
+ }
73
+ return value;
74
+ }
75
+ catch (error) {
76
+ console.error(`Cache: Error in fetcher for key '${key}':`, error);
77
+ throw error;
78
+ }
79
+ }
80
+ /**
81
+ * Delete a specific key
82
+ */
83
+ delete(key) {
84
+ return this.cache.delete(key);
85
+ }
86
+ /**
87
+ * Clear all keys matching a prefix
88
+ */
89
+ clearByPrefix(prefix) {
90
+ let count = 0;
91
+ for (const key of this.cache.keys()) {
92
+ if (key.startsWith(prefix)) {
93
+ this.cache.delete(key);
94
+ count++;
95
+ }
96
+ }
97
+ return count;
98
+ }
99
+ /**
100
+ * Clear all cache
101
+ */
102
+ clear() {
103
+ this.cache.clear();
104
+ }
105
+ /**
106
+ * Get cache statistics
107
+ */
108
+ getStats() {
109
+ const entries = Array.from(this.cache.values());
110
+ if (entries.length === 0) {
111
+ return {
112
+ size: 0,
113
+ memoryUsageMB: 0,
114
+ hitRate: 0,
115
+ oldestEntry: 0
116
+ };
117
+ }
118
+ const totalAccess = entries.reduce((sum, entry) => sum + entry.accessCount, 0);
119
+ const entriesWithHits = entries.filter(entry => entry.accessCount > 1).length;
120
+ return {
121
+ size: this.cache.size,
122
+ memoryUsageMB: this.estimateMemoryUsage(),
123
+ hitRate: totalAccess > entries.length ? entriesWithHits / entries.length : 0,
124
+ oldestEntry: Math.min(...entries.map(entry => entry.timestamp))
125
+ };
126
+ }
127
+ /**
128
+ * Force cleanup of expired entries
129
+ */
130
+ cleanup() {
131
+ const now = Date.now();
132
+ let cleanedCount = 0;
133
+ for (const [key, entry] of this.cache.entries()) {
134
+ if (now - entry.timestamp > entry.ttl) {
135
+ this.cache.delete(key);
136
+ cleanedCount++;
137
+ }
138
+ }
139
+ return cleanedCount;
140
+ }
141
+ /**
142
+ * Start automatic cleanup timer
143
+ */
144
+ startCleanupTimer() {
145
+ this.cleanupTimer = setInterval(() => {
146
+ this.cleanup();
147
+ this.enforceMemoryLimit();
148
+ }, this.config.cleanupInterval);
149
+ }
150
+ /**
151
+ * Stop automatic cleanup timer
152
+ */
153
+ destroy() {
154
+ if (this.cleanupTimer) {
155
+ clearInterval(this.cleanupTimer);
156
+ this.cleanupTimer = null;
157
+ }
158
+ this.clear();
159
+ }
160
+ /**
161
+ * Estimate memory usage (rough calculation)
162
+ */
163
+ estimateMemoryUsage() {
164
+ let totalSize = 0;
165
+ for (const [key, entry] of this.cache.entries()) {
166
+ try {
167
+ // Key size (UTF-16 characters)
168
+ totalSize += key.length * 2;
169
+ // Value size estimation
170
+ const serializedValue = JSON.stringify(entry.value);
171
+ totalSize += serializedValue.length * 2;
172
+ // Cache entry metadata overhead
173
+ totalSize += 64;
174
+ }
175
+ catch (error) {
176
+ // If JSON.stringify fails, use rough estimation
177
+ console.warn('Cache: Failed to serialize entry for size estimation:', error);
178
+ totalSize += key.length * 2 + 1024; // Conservative estimate
179
+ }
180
+ }
181
+ return totalSize / (1024 * 1024); // Convert to MB
182
+ }
183
+ /**
184
+ * Enforce memory limit using LRU eviction
185
+ */
186
+ enforceMemoryLimit() {
187
+ const memoryUsage = this.estimateMemoryUsage();
188
+ if (memoryUsage <= this.config.maxMemoryMB || !this.config.enableLRU) {
189
+ return;
190
+ }
191
+ // Target 80% of limit to avoid frequent evictions
192
+ const targetSize = this.config.maxMemoryMB * 0.8;
193
+ // Sort by last accessed time (LRU) - oldest first
194
+ const sortedEntries = Array.from(this.cache.entries())
195
+ .sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);
196
+ // Remove oldest entries until memory is under target
197
+ let currentMemory = memoryUsage;
198
+ let evictedCount = 0;
199
+ for (const [key] of sortedEntries) {
200
+ if (currentMemory <= targetSize)
201
+ break;
202
+ this.cache.delete(key);
203
+ evictedCount++;
204
+ // Re-estimate periodically for performance
205
+ if (evictedCount % 10 === 0) {
206
+ currentMemory = this.estimateMemoryUsage();
207
+ }
208
+ }
209
+ if (evictedCount > 0) {
210
+ console.debug(`Cache: Evicted ${evictedCount} entries to enforce memory limit`);
211
+ }
212
+ }
213
+ /**
214
+ * Create a namespaced cache interface for services
215
+ */
216
+ createNamespace(namespace) {
217
+ if (!namespace || typeof namespace !== 'string') {
218
+ throw new Error('Namespace must be a non-empty string');
219
+ }
220
+ if (namespace.includes(':')) {
221
+ throw new Error('Namespace cannot contain colon (:) character');
222
+ }
223
+ return {
224
+ set: (key, value, ttl) => {
225
+ if (!key)
226
+ throw new Error('Cache key cannot be empty');
227
+ return this.set(`${namespace}:${key}`, value, ttl);
228
+ },
229
+ get: (key) => {
230
+ if (!key)
231
+ throw new Error('Cache key cannot be empty');
232
+ return this.get(`${namespace}:${key}`);
233
+ },
234
+ getOrSet: (key, fetcher, ttl) => {
235
+ if (!key)
236
+ throw new Error('Cache key cannot be empty');
237
+ return this.getOrSet(`${namespace}:${key}`, fetcher, ttl);
238
+ },
239
+ delete: (key) => {
240
+ if (!key)
241
+ throw new Error('Cache key cannot be empty');
242
+ return this.delete(`${namespace}:${key}`);
243
+ },
244
+ clear: () => this.clearByPrefix(`${namespace}:`)
245
+ };
246
+ }
247
+ }
248
+ // Singleton instance with default configuration
249
+ const globalCacheService = new CacheService();
250
+
251
+ /**
252
+ * Cache module exports
253
+ */
254
+ // Predefined cache TTL constants
255
+ const CacheTTL = {
256
+ SHORT: 5 * 60 * 1000, // 5 minutes
257
+ MEDIUM: 30 * 60 * 1000, // 30 minutes
258
+ LONG: 24 * 60 * 60 * 1000, // 24 hours
259
+ METADATA: 24 * 60 * 60 * 1000, // 24 hours - IPFS metadata is immutable
260
+ GATEWAY: 30 * 60 * 1000, // 30 minutes - Gateway config can change
261
+ PROVIDER: 60 * 60 * 1000, // 1 hour - Provider connections with auth
262
+ };
263
+
264
+ export { CacheTTL as C, CacheService as a, globalCacheService as g };
265
+ //# sourceMappingURL=index-60201NKa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-60201NKa.js","sources":["../../src/core/cache/cache.service.ts","../../src/core/cache/index.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Centralized Cache Service for PERS SDK
5
+ * Provides unified caching with memory management and consistent policies
6
+ */
7
+ // Default cache configuration constants
8
+ const DEFAULT_CACHE_CONFIG = {
9
+ defaultTtl: 30 * 60 * 1000, // 30 minutes
10
+ maxMemoryMB: 50, // 50MB cache limit
11
+ cleanupInterval: 5 * 60 * 1000, // Cleanup every 5 minutes
12
+ enableLRU: true
13
+ };
14
+ class CacheService {
15
+ constructor(config) {
16
+ this.cache = new Map();
17
+ this.cleanupTimer = null;
18
+ this.config = { ...DEFAULT_CACHE_CONFIG, ...config };
19
+ this.startCleanupTimer();
20
+ }
21
+ /**
22
+ * Set a value in cache with optional TTL
23
+ */
24
+ set(key, value, ttl) {
25
+ if (!key || typeof key !== 'string') {
26
+ throw new Error('Cache key must be a non-empty string');
27
+ }
28
+ if (value === undefined) {
29
+ console.warn('Cache: Attempted to cache undefined value for key:', key);
30
+ return;
31
+ }
32
+ const entry = {
33
+ value,
34
+ timestamp: Date.now(),
35
+ ttl: ttl || this.config.defaultTtl,
36
+ accessCount: 1,
37
+ lastAccessed: Date.now()
38
+ };
39
+ this.cache.set(key, entry);
40
+ this.enforceMemoryLimit();
41
+ }
42
+ /**
43
+ * Get a value from cache
44
+ */
45
+ get(key) {
46
+ const entry = this.cache.get(key);
47
+ if (!entry) {
48
+ return null;
49
+ }
50
+ // Check if expired
51
+ const now = Date.now();
52
+ if (now - entry.timestamp > entry.ttl) {
53
+ this.cache.delete(key);
54
+ return null;
55
+ }
56
+ // Update access statistics for LRU
57
+ entry.accessCount++;
58
+ entry.lastAccessed = now;
59
+ return entry.value;
60
+ }
61
+ /**
62
+ * Get or set pattern - common caching pattern
63
+ */
64
+ async getOrSet(key, fetcher, ttl) {
65
+ const cached = this.get(key);
66
+ if (cached !== null) {
67
+ return cached;
68
+ }
69
+ try {
70
+ const value = await fetcher();
71
+ // Only cache non-undefined values
72
+ if (value !== undefined) {
73
+ this.set(key, value, ttl);
74
+ }
75
+ return value;
76
+ }
77
+ catch (error) {
78
+ console.error(`Cache: Error in fetcher for key '${key}':`, error);
79
+ throw error;
80
+ }
81
+ }
82
+ /**
83
+ * Delete a specific key
84
+ */
85
+ delete(key) {
86
+ return this.cache.delete(key);
87
+ }
88
+ /**
89
+ * Clear all keys matching a prefix
90
+ */
91
+ clearByPrefix(prefix) {
92
+ let count = 0;
93
+ for (const key of this.cache.keys()) {
94
+ if (key.startsWith(prefix)) {
95
+ this.cache.delete(key);
96
+ count++;
97
+ }
98
+ }
99
+ return count;
100
+ }
101
+ /**
102
+ * Clear all cache
103
+ */
104
+ clear() {
105
+ this.cache.clear();
106
+ }
107
+ /**
108
+ * Get cache statistics
109
+ */
110
+ getStats() {
111
+ const entries = Array.from(this.cache.values());
112
+ if (entries.length === 0) {
113
+ return {
114
+ size: 0,
115
+ memoryUsageMB: 0,
116
+ hitRate: 0,
117
+ oldestEntry: 0
118
+ };
119
+ }
120
+ const totalAccess = entries.reduce((sum, entry) => sum + entry.accessCount, 0);
121
+ const entriesWithHits = entries.filter(entry => entry.accessCount > 1).length;
122
+ return {
123
+ size: this.cache.size,
124
+ memoryUsageMB: this.estimateMemoryUsage(),
125
+ hitRate: totalAccess > entries.length ? entriesWithHits / entries.length : 0,
126
+ oldestEntry: Math.min(...entries.map(entry => entry.timestamp))
127
+ };
128
+ }
129
+ /**
130
+ * Force cleanup of expired entries
131
+ */
132
+ cleanup() {
133
+ const now = Date.now();
134
+ let cleanedCount = 0;
135
+ for (const [key, entry] of this.cache.entries()) {
136
+ if (now - entry.timestamp > entry.ttl) {
137
+ this.cache.delete(key);
138
+ cleanedCount++;
139
+ }
140
+ }
141
+ return cleanedCount;
142
+ }
143
+ /**
144
+ * Start automatic cleanup timer
145
+ */
146
+ startCleanupTimer() {
147
+ this.cleanupTimer = setInterval(() => {
148
+ this.cleanup();
149
+ this.enforceMemoryLimit();
150
+ }, this.config.cleanupInterval);
151
+ }
152
+ /**
153
+ * Stop automatic cleanup timer
154
+ */
155
+ destroy() {
156
+ if (this.cleanupTimer) {
157
+ clearInterval(this.cleanupTimer);
158
+ this.cleanupTimer = null;
159
+ }
160
+ this.clear();
161
+ }
162
+ /**
163
+ * Estimate memory usage (rough calculation)
164
+ */
165
+ estimateMemoryUsage() {
166
+ let totalSize = 0;
167
+ for (const [key, entry] of this.cache.entries()) {
168
+ try {
169
+ // Key size (UTF-16 characters)
170
+ totalSize += key.length * 2;
171
+ // Value size estimation
172
+ const serializedValue = JSON.stringify(entry.value);
173
+ totalSize += serializedValue.length * 2;
174
+ // Cache entry metadata overhead
175
+ totalSize += 64;
176
+ }
177
+ catch (error) {
178
+ // If JSON.stringify fails, use rough estimation
179
+ console.warn('Cache: Failed to serialize entry for size estimation:', error);
180
+ totalSize += key.length * 2 + 1024; // Conservative estimate
181
+ }
182
+ }
183
+ return totalSize / (1024 * 1024); // Convert to MB
184
+ }
185
+ /**
186
+ * Enforce memory limit using LRU eviction
187
+ */
188
+ enforceMemoryLimit() {
189
+ const memoryUsage = this.estimateMemoryUsage();
190
+ if (memoryUsage <= this.config.maxMemoryMB || !this.config.enableLRU) {
191
+ return;
192
+ }
193
+ // Target 80% of limit to avoid frequent evictions
194
+ const targetSize = this.config.maxMemoryMB * 0.8;
195
+ // Sort by last accessed time (LRU) - oldest first
196
+ const sortedEntries = Array.from(this.cache.entries())
197
+ .sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);
198
+ // Remove oldest entries until memory is under target
199
+ let currentMemory = memoryUsage;
200
+ let evictedCount = 0;
201
+ for (const [key] of sortedEntries) {
202
+ if (currentMemory <= targetSize)
203
+ break;
204
+ this.cache.delete(key);
205
+ evictedCount++;
206
+ // Re-estimate periodically for performance
207
+ if (evictedCount % 10 === 0) {
208
+ currentMemory = this.estimateMemoryUsage();
209
+ }
210
+ }
211
+ if (evictedCount > 0) {
212
+ console.debug(`Cache: Evicted ${evictedCount} entries to enforce memory limit`);
213
+ }
214
+ }
215
+ /**
216
+ * Create a namespaced cache interface for services
217
+ */
218
+ createNamespace(namespace) {
219
+ if (!namespace || typeof namespace !== 'string') {
220
+ throw new Error('Namespace must be a non-empty string');
221
+ }
222
+ if (namespace.includes(':')) {
223
+ throw new Error('Namespace cannot contain colon (:) character');
224
+ }
225
+ return {
226
+ set: (key, value, ttl) => {
227
+ if (!key)
228
+ throw new Error('Cache key cannot be empty');
229
+ return this.set(`${namespace}:${key}`, value, ttl);
230
+ },
231
+ get: (key) => {
232
+ if (!key)
233
+ throw new Error('Cache key cannot be empty');
234
+ return this.get(`${namespace}:${key}`);
235
+ },
236
+ getOrSet: (key, fetcher, ttl) => {
237
+ if (!key)
238
+ throw new Error('Cache key cannot be empty');
239
+ return this.getOrSet(`${namespace}:${key}`, fetcher, ttl);
240
+ },
241
+ delete: (key) => {
242
+ if (!key)
243
+ throw new Error('Cache key cannot be empty');
244
+ return this.delete(`${namespace}:${key}`);
245
+ },
246
+ clear: () => this.clearByPrefix(`${namespace}:`)
247
+ };
248
+ }
249
+ }
250
+ // Singleton instance with default configuration
251
+ const globalCacheService = new CacheService();
252
+
253
+ /**
254
+ * Cache module exports
255
+ */
256
+ // Predefined cache TTL constants
257
+ const CacheTTL = {
258
+ SHORT: 5 * 60 * 1000, // 5 minutes
259
+ MEDIUM: 30 * 60 * 1000, // 30 minutes
260
+ LONG: 24 * 60 * 60 * 1000, // 24 hours
261
+ METADATA: 24 * 60 * 60 * 1000, // 24 hours - IPFS metadata is immutable
262
+ GATEWAY: 30 * 60 * 1000, // 30 minutes - Gateway config can change
263
+ PROVIDER: 60 * 60 * 1000, // 1 hour - Provider connections with auth
264
+ };
265
+
266
+ exports.CacheService = CacheService;
267
+ exports.CacheTTL = CacheTTL;
268
+ exports.globalCacheService = globalCacheService;
269
+ //# sourceMappingURL=index-CcQkbZBZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CcQkbZBZ.cjs","sources":["../../src/core/cache/cache.service.ts","../../src/core/cache/index.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}