@explorins/pers-sdk 2.1.11 → 2.1.15
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/business/api/business-membership-api.d.ts +2 -2
- package/dist/chunks/{index-B-g2JPVK.cjs → index-CGaKfZNU.cjs} +279 -1
- package/dist/chunks/index-CGaKfZNU.cjs.map +1 -0
- package/dist/chunks/{index-CKm_V5XE.js → index-DgTEdUgC.js} +277 -2
- package/dist/chunks/index-DgTEdUgC.js.map +1 -0
- package/dist/chunks/{pers-sdk-CJo4CCTG.js → pers-sdk-BiP7UMJ3.js} +1695 -180
- package/dist/chunks/pers-sdk-BiP7UMJ3.js.map +1 -0
- package/dist/chunks/{pers-sdk-Bheg5mKX.cjs → pers-sdk-Cv7hM1I7.cjs} +1701 -180
- package/dist/chunks/pers-sdk-Cv7hM1I7.cjs.map +1 -0
- package/dist/chunks/tenant-manager-BUiFM33X.cjs +157 -0
- package/dist/chunks/tenant-manager-BUiFM33X.cjs.map +1 -0
- package/dist/chunks/tenant-manager-Bbj0bKoo.js +155 -0
- package/dist/chunks/tenant-manager-Bbj0bKoo.js.map +1 -0
- package/dist/chunks/{transaction-request.builder-DGTxGvc3.js → transaction-request.builder-C3C19kCx.js} +23 -2
- package/dist/chunks/{transaction-request.builder-DGTxGvc3.js.map → transaction-request.builder-C3C19kCx.js.map} +1 -1
- package/dist/chunks/{transaction-request.builder-Bjxi0C9F.cjs → transaction-request.builder-CW3Wwdi3.cjs} +23 -1
- package/dist/chunks/{transaction-request.builder-Bjxi0C9F.cjs.map → transaction-request.builder-CW3Wwdi3.cjs.map} +1 -1
- package/dist/chunks/{web3-chain-service-D68-0WaW.cjs → web3-chain-service-DcLiy3m2.cjs} +7 -7
- package/dist/chunks/{web3-chain-service-D68-0WaW.cjs.map → web3-chain-service-DcLiy3m2.cjs.map} +1 -1
- package/dist/chunks/{web3-chain-service-DuvxmKSj.js → web3-chain-service-nGntR60S.js} +3 -3
- package/dist/chunks/{web3-chain-service-DuvxmKSj.js.map → web3-chain-service-nGntR60S.js.map} +1 -1
- package/dist/chunks/{web3-manager-C_cFaMCm.cjs → web3-manager-B0OyjqJR.cjs} +89 -93
- package/dist/chunks/web3-manager-B0OyjqJR.cjs.map +1 -0
- package/dist/chunks/{web3-manager-OExwBWB7.js → web3-manager-Bnsvcz3Q.js} +89 -93
- package/dist/chunks/web3-manager-Bnsvcz3Q.js.map +1 -0
- package/dist/core/events/event-emitter.d.ts.map +1 -1
- package/dist/core/pers-config.d.ts +19 -0
- package/dist/core/pers-config.d.ts.map +1 -1
- package/dist/core.cjs +17 -14
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +5 -5
- package/dist/events/index.d.ts +13 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/pers-events-client.d.ts +143 -0
- package/dist/events/pers-events-client.d.ts.map +1 -0
- package/dist/events/types.d.ts +37 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/index.cjs +41 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/managers/events-manager.d.ts +179 -0
- package/dist/managers/events-manager.d.ts.map +1 -0
- package/dist/managers/index.d.ts +2 -0
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/tenant-manager.d.ts +42 -1
- package/dist/managers/tenant-manager.d.ts.map +1 -1
- package/dist/managers/web3-manager.d.ts +12 -14
- package/dist/managers/web3-manager.d.ts.map +1 -1
- package/dist/managers/webhook-manager.d.ts +237 -0
- package/dist/managers/webhook-manager.d.ts.map +1 -0
- package/dist/node.cjs +4 -3
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +4 -3
- package/dist/node.js.map +1 -1
- package/dist/package.json +3 -2
- package/dist/pers-sdk.d.ts +110 -1
- package/dist/pers-sdk.d.ts.map +1 -1
- package/dist/transaction/index.d.ts +1 -1
- package/dist/transaction/index.d.ts.map +1 -1
- package/dist/transaction/models/transaction-request.builder.d.ts +16 -0
- package/dist/transaction/models/transaction-request.builder.d.ts.map +1 -1
- package/dist/transaction.cjs +2 -1
- package/dist/transaction.cjs.map +1 -1
- package/dist/transaction.js +1 -1
- package/dist/web3/application/web3-application.service.d.ts +6 -3
- package/dist/web3/application/web3-application.service.d.ts.map +1 -1
- package/dist/web3/domain/services/metadata-domain.service.d.ts +4 -2
- package/dist/web3/domain/services/metadata-domain.service.d.ts.map +1 -1
- package/dist/web3/domain/services/token-domain.service.d.ts +7 -3
- package/dist/web3/domain/services/token-domain.service.d.ts.map +1 -1
- package/dist/web3/infrastructure/api/ipfs-api.d.ts +22 -9
- package/dist/web3/infrastructure/api/ipfs-api.d.ts.map +1 -1
- package/dist/web3/utils/explorer.utils.d.ts +3 -3
- package/dist/web3/utils/explorer.utils.d.ts.map +1 -1
- package/dist/web3-chain/api/web3-chain-api.d.ts +3 -2
- package/dist/web3-chain/api/web3-chain-api.d.ts.map +1 -1
- package/dist/web3-chain/index.d.ts +0 -1
- package/dist/web3-chain/index.d.ts.map +1 -1
- package/dist/web3-chain/models/index.d.ts +5 -23
- package/dist/web3-chain/models/index.d.ts.map +1 -1
- package/dist/web3-chain/services/web3-chain-service.d.ts +2 -2
- package/dist/web3-chain/services/web3-chain-service.d.ts.map +1 -1
- package/dist/web3-chain.cjs +8 -14
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +3 -16
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3-manager.cjs +7 -4
- package/dist/web3-manager.cjs.map +1 -1
- package/dist/web3-manager.js +7 -4
- package/dist/web3-manager.js.map +1 -1
- package/dist/web3.cjs +7 -4
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +7 -4
- package/dist/web3.js.map +1 -1
- package/dist/webhook/api/index.d.ts +2 -0
- package/dist/webhook/api/index.d.ts.map +1 -0
- package/dist/webhook/api/webhook-api.d.ts +73 -0
- package/dist/webhook/api/webhook-api.d.ts.map +1 -0
- package/dist/webhook/index.d.ts +35 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/dist/webhook/models/index.d.ts +58 -0
- package/dist/webhook/models/index.d.ts.map +1 -0
- package/dist/webhook/services/index.d.ts +2 -0
- package/dist/webhook/services/index.d.ts.map +1 -0
- package/dist/webhook/services/webhook-service.d.ts +98 -0
- package/dist/webhook/services/webhook-service.d.ts.map +1 -0
- package/package.json +3 -2
- package/dist/chunks/index-B-g2JPVK.cjs.map +0 -1
- package/dist/chunks/index-B6-bbNnd.cjs +0 -281
- package/dist/chunks/index-B6-bbNnd.cjs.map +0 -1
- package/dist/chunks/index-CKm_V5XE.js.map +0 -1
- package/dist/chunks/index-DBLskLuH.js +0 -277
- package/dist/chunks/index-DBLskLuH.js.map +0 -1
- package/dist/chunks/pers-sdk-Bheg5mKX.cjs.map +0 -1
- package/dist/chunks/pers-sdk-CJo4CCTG.js.map +0 -1
- package/dist/chunks/web3-manager-C_cFaMCm.cjs.map +0 -1
- package/dist/chunks/web3-manager-OExwBWB7.js.map +0 -1
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var ethers = require('@explorins/web3-ts/ethers');
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var web3ChainService = require('./web3-chain-service-
|
|
4
|
+
var index = require('./index-CGaKfZNU.cjs');
|
|
5
|
+
var web3ChainService = require('./web3-chain-service-DcLiy3m2.cjs');
|
|
6
|
+
require('@explorins/web3-types');
|
|
7
|
+
var tenantManager = require('./tenant-manager-BUiFM33X.cjs');
|
|
6
8
|
var persShared = require('@explorins/pers-shared');
|
|
7
9
|
|
|
8
10
|
// type ContractAnalysis = ReturnType<ContractDomainService['analyzeContract']>;
|
|
9
11
|
/**
|
|
10
|
-
* TokenDomainService - Clean, focused token operations
|
|
12
|
+
* TokenDomainService - Clean, focused token operations
|
|
13
|
+
*
|
|
14
|
+
* Caching strategy:
|
|
15
|
+
* - Balance/ownership: NO CACHING - always fetch fresh from blockchain
|
|
16
|
+
* (event-based updates in consuming apps handle refresh)
|
|
17
|
+
* - Metadata: CACHED 24h - IPFS content is immutable
|
|
11
18
|
*/
|
|
12
19
|
class TokenDomainService {
|
|
13
20
|
constructor(web3Api, metadataService, contractService) {
|
|
@@ -33,7 +40,7 @@ class TokenDomainService {
|
|
|
33
40
|
const abi = ethers.convertAbiToInterface(params.abi);
|
|
34
41
|
const tokenUri = await this.web3Api.getTokenUri({ ...params, abi });
|
|
35
42
|
const metadata = tokenUri
|
|
36
|
-
? await this.metadataService.fetchAndProcessMetadata(tokenUri
|
|
43
|
+
? await this.metadataService.fetchAndProcessMetadata(tokenUri)
|
|
37
44
|
: null;
|
|
38
45
|
return { tokenId: params.tokenId, tokenUri, metadata };
|
|
39
46
|
}
|
|
@@ -77,12 +84,20 @@ class TokenDomainService {
|
|
|
77
84
|
}
|
|
78
85
|
return this.processTokenBatch(params, params.tokenIds, batchSize, 'ERC-1155');
|
|
79
86
|
}
|
|
80
|
-
// ERC-721:
|
|
87
|
+
// ERC-721: Enumerate tokens directly (no caching)
|
|
81
88
|
if (analysis.isERC721) {
|
|
82
89
|
if (analysis.hasEnumeration) {
|
|
83
|
-
|
|
90
|
+
// Get current balance to know how many tokens to enumerate
|
|
91
|
+
const currentBalance = await this.web3Api.getTokenBalance({
|
|
92
|
+
...params, abi, tokenId: null
|
|
93
|
+
});
|
|
94
|
+
if (currentBalance === 0) {
|
|
95
|
+
return this.emptyCollection(params, 'No tokens owned');
|
|
96
|
+
}
|
|
97
|
+
const maxTokens = Math.min(params.maxTokens || currentBalance, currentBalance, 100);
|
|
98
|
+
const tokenIds = await this.getTokenIdsByEnumeration(params, abi, maxTokens);
|
|
84
99
|
if (tokenIds.length === 0) {
|
|
85
|
-
return this.emptyCollection(params,
|
|
100
|
+
return this.emptyCollection(params, 'No tokens owned');
|
|
86
101
|
}
|
|
87
102
|
return this.processTokenBatch(params, tokenIds, batchSize, 'ERC-721');
|
|
88
103
|
}
|
|
@@ -102,44 +117,13 @@ class TokenDomainService {
|
|
|
102
117
|
}
|
|
103
118
|
}
|
|
104
119
|
/**
|
|
105
|
-
*
|
|
120
|
+
* Enumerate token IDs owned by account (no caching - fresh data each call)
|
|
106
121
|
*/
|
|
107
|
-
async getCachedTokenOwnership(params, abi) {
|
|
108
|
-
const ownershipCacheKey = `ownership:${params.contractAddress}:${params.accountAddress}:${params.chainId}`;
|
|
109
|
-
// ALWAYS check current balance first to detect changes
|
|
110
|
-
const currentBalance = await this.web3Api.getTokenBalance({
|
|
111
|
-
...params, abi, tokenId: null
|
|
112
|
-
});
|
|
113
|
-
if (currentBalance === 0) {
|
|
114
|
-
// Clear any existing cache and return empty
|
|
115
|
-
this.cache.delete(ownershipCacheKey);
|
|
116
|
-
return { tokenIds: [], fromCache: false };
|
|
117
|
-
}
|
|
118
|
-
// Check ownership cache with balance validation
|
|
119
|
-
const cached = this.cache.get(ownershipCacheKey);
|
|
120
|
-
const cacheAge = cached ? Date.now() - cached.timestamp : Infinity;
|
|
121
|
-
if (cached && cacheAge < index.CacheTTL.SHORT && cached.balance === currentBalance) {
|
|
122
|
-
return { tokenIds: cached.tokenIds, fromCache: true };
|
|
123
|
-
}
|
|
124
|
-
// Enumerate tokens
|
|
125
|
-
const maxTokens = Math.min(params.maxTokens || currentBalance, currentBalance, 100);
|
|
126
|
-
const tokenIds = await this.getTokenIdsByEnumeration(params, abi, maxTokens);
|
|
127
|
-
// Cache with current balance for validation
|
|
128
|
-
this.cache.set(ownershipCacheKey, { tokenIds, balance: currentBalance, timestamp: Date.now() }, index.CacheTTL.SHORT);
|
|
129
|
-
return { tokenIds, fromCache: false };
|
|
130
|
-
}
|
|
131
122
|
async getTokenIdsByEnumeration(params, abi, maxTokens) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
...params, abi, tokenIndex: i
|
|
137
|
-
}).catch(error => {
|
|
138
|
-
// Silently handle token enumeration errors (index out of bounds is normal)
|
|
139
|
-
return null;
|
|
140
|
-
}), index.CacheTTL.SHORT // 5 minutes - enumeration results rarely change
|
|
141
|
-
);
|
|
142
|
-
});
|
|
123
|
+
const promises = Array.from({ length: maxTokens }, (_, i) => this.web3Api.getTokenOfOwnerByIndex({
|
|
124
|
+
...params, abi, tokenIndex: i
|
|
125
|
+
}).catch(() => null) // Silently handle index out of bounds
|
|
126
|
+
);
|
|
143
127
|
const results = await Promise.all(promises);
|
|
144
128
|
return results.filter((id) => id !== null);
|
|
145
129
|
}
|
|
@@ -224,17 +208,19 @@ class TokenDomainService {
|
|
|
224
208
|
|
|
225
209
|
/**
|
|
226
210
|
* MetadataDomainService - Clean IPFS metadata resolution with centralized caching
|
|
211
|
+
*
|
|
212
|
+
* IPFS gateway is resolved from tenant configuration (chain-agnostic).
|
|
227
213
|
*/
|
|
228
214
|
class MetadataDomainService {
|
|
229
215
|
constructor(ipfsApi) {
|
|
230
216
|
this.ipfsApi = ipfsApi;
|
|
231
217
|
this.cache = index.globalCacheService.createNamespace('metadata');
|
|
232
218
|
}
|
|
233
|
-
async fetchAndProcessMetadata(tokenUri
|
|
234
|
-
const cacheKey = `fetch:${tokenUri}
|
|
219
|
+
async fetchAndProcessMetadata(tokenUri) {
|
|
220
|
+
const cacheKey = `fetch:${tokenUri}`;
|
|
235
221
|
return this.cache.getOrSet(cacheKey, async () => {
|
|
236
222
|
try {
|
|
237
|
-
return await this.ipfsApi.fetchAndProcessMetadata(tokenUri
|
|
223
|
+
return await this.ipfsApi.fetchAndProcessMetadata(tokenUri);
|
|
238
224
|
}
|
|
239
225
|
catch (error) {
|
|
240
226
|
console.error(`Error fetching metadata for ${tokenUri}:`, error);
|
|
@@ -242,9 +228,9 @@ class MetadataDomainService {
|
|
|
242
228
|
}
|
|
243
229
|
}, index.CacheTTL.METADATA);
|
|
244
230
|
}
|
|
245
|
-
async resolveIPFSUrl(url
|
|
246
|
-
const cacheKey = `resolve:${url}
|
|
247
|
-
return this.cache.getOrSet(cacheKey, () => this.ipfsApi.resolveIPFSUrl(url
|
|
231
|
+
async resolveIPFSUrl(url) {
|
|
232
|
+
const cacheKey = `resolve:${url}`;
|
|
233
|
+
return this.cache.getOrSet(cacheKey, () => this.ipfsApi.resolveIPFSUrl(url), index.CacheTTL.GATEWAY);
|
|
248
234
|
}
|
|
249
235
|
/**
|
|
250
236
|
* Clear all cached metadata and URLs for this service
|
|
@@ -344,19 +330,22 @@ class Web3ApplicationService {
|
|
|
344
330
|
});
|
|
345
331
|
}
|
|
346
332
|
/**
|
|
347
|
-
* Resolve IPFS URLs to HTTPS if needed
|
|
333
|
+
* Resolve IPFS URLs to HTTPS if needed.
|
|
334
|
+
*
|
|
335
|
+
* IPFS gateway is resolved from tenant configuration (chain-agnostic).
|
|
348
336
|
*/
|
|
349
|
-
async resolveIPFSUrl(url
|
|
350
|
-
return this.metadataDomainService.resolveIPFSUrl(url
|
|
337
|
+
async resolveIPFSUrl(url) {
|
|
338
|
+
return this.metadataDomainService.resolveIPFSUrl(url);
|
|
351
339
|
}
|
|
352
340
|
/**
|
|
353
341
|
* Fetch and process metadata from any URI with IPFS conversion.
|
|
354
342
|
*
|
|
355
343
|
* Use this for ad-hoc metadata fetching when you have a tokenURI.
|
|
356
344
|
* Normalization happens at infrastructure layer.
|
|
345
|
+
* IPFS gateway is resolved from tenant configuration (chain-agnostic).
|
|
357
346
|
*/
|
|
358
|
-
async fetchAndProcessMetadata(tokenUri
|
|
359
|
-
return this.metadataDomainService.fetchAndProcessMetadata(tokenUri
|
|
347
|
+
async fetchAndProcessMetadata(tokenUri) {
|
|
348
|
+
return this.metadataDomainService.fetchAndProcessMetadata(tokenUri);
|
|
360
349
|
}
|
|
361
350
|
}
|
|
362
351
|
|
|
@@ -410,30 +399,42 @@ class Web3InfrastructureApi {
|
|
|
410
399
|
|
|
411
400
|
/**
|
|
412
401
|
* IPFSInfrastructureApi - Infrastructure implementation for IPFS operations
|
|
413
|
-
* Uses
|
|
402
|
+
* Uses TenantManager for IPFS gateway resolution with centralized caching
|
|
403
|
+
*
|
|
404
|
+
* IMPORTANT: IPFS gateway domain is now fetched from tenant configuration (TenantClientConfigDTO),
|
|
405
|
+
* not from chain data. This is the correct architecture since IPFS is chain-agnostic.
|
|
414
406
|
*/
|
|
415
407
|
class IPFSInfrastructureApi {
|
|
416
|
-
constructor(
|
|
417
|
-
this.
|
|
418
|
-
this.defaultIpfsGatewayDomain = 'pers.mypinata.cloud';
|
|
408
|
+
constructor(tenantManager) {
|
|
409
|
+
this.tenantManager = tenantManager;
|
|
419
410
|
this.cache = index.globalCacheService.createNamespace('ipfs');
|
|
420
411
|
}
|
|
421
|
-
|
|
422
|
-
|
|
412
|
+
/**
|
|
413
|
+
* Get IPFS gateway domain from tenant configuration.
|
|
414
|
+
*
|
|
415
|
+
* @returns The IPFS gateway domain from tenant configuration
|
|
416
|
+
* @throws Error if tenant config is not found or ipfsGatewayDomain is not configured
|
|
417
|
+
*/
|
|
418
|
+
async getIpfsGatewayDomain() {
|
|
419
|
+
const cacheKey = 'gateway';
|
|
423
420
|
return this.cache.getOrSet(cacheKey, async () => {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
catch (error) {
|
|
429
|
-
console.warn(`Failed to get chain data for chainId ${chainId}, using default IPFS gateway:`, error);
|
|
430
|
-
return this.defaultIpfsGatewayDomain;
|
|
421
|
+
const clientConfig = await this.tenantManager.getClientConfig();
|
|
422
|
+
if (!clientConfig.ipfsGatewayDomain) {
|
|
423
|
+
throw new Error(`IPFS gateway domain not configured for tenant. ` +
|
|
424
|
+
`Please configure ipfsGatewayDomain in the tenant configuration.`);
|
|
431
425
|
}
|
|
426
|
+
return clientConfig.ipfsGatewayDomain;
|
|
432
427
|
}, index.CacheTTL.GATEWAY);
|
|
433
428
|
}
|
|
434
|
-
|
|
429
|
+
/**
|
|
430
|
+
* Resolve IPFS URL to HTTPS URL using tenant's configured gateway.
|
|
431
|
+
*
|
|
432
|
+
* @param url - The URL to resolve (can be ipfs:// or https://)
|
|
433
|
+
* @returns Resolved HTTPS URL
|
|
434
|
+
*/
|
|
435
|
+
async resolveIPFSUrl(url) {
|
|
435
436
|
if (url.startsWith('ipfs://')) {
|
|
436
|
-
const gateway = await this.getIpfsGatewayDomain(
|
|
437
|
+
const gateway = await this.getIpfsGatewayDomain();
|
|
437
438
|
return url.replace('ipfs://', `https://${gateway}/ipfs/`);
|
|
438
439
|
}
|
|
439
440
|
return url;
|
|
@@ -446,12 +447,11 @@ class IPFSInfrastructureApi {
|
|
|
446
447
|
* All downstream consumers receive normalized SDK format with resolved HTTPS URLs.
|
|
447
448
|
*
|
|
448
449
|
* @param tokenUri - Token URI (can be ipfs:// or https://)
|
|
449
|
-
* @param chainId - Chain ID for IPFS gateway selection
|
|
450
450
|
* @returns Normalized TokenMetadata with resolved HTTPS URLs, or null on error
|
|
451
451
|
*/
|
|
452
|
-
async fetchAndProcessMetadata(tokenUri
|
|
452
|
+
async fetchAndProcessMetadata(tokenUri) {
|
|
453
453
|
try {
|
|
454
|
-
const resolvedUri = await this.resolveIPFSUrl(tokenUri
|
|
454
|
+
const resolvedUri = await this.resolveIPFSUrl(tokenUri);
|
|
455
455
|
const response = await fetch(resolvedUri);
|
|
456
456
|
if (!response.ok) {
|
|
457
457
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
@@ -459,10 +459,10 @@ class IPFSInfrastructureApi {
|
|
|
459
459
|
const rawMetadata = await response.json();
|
|
460
460
|
// Resolve IPFS URLs for media fields
|
|
461
461
|
const resolvedImageUrl = rawMetadata.image
|
|
462
|
-
? await this.resolveIPFSUrl(rawMetadata.image
|
|
462
|
+
? await this.resolveIPFSUrl(rawMetadata.image)
|
|
463
463
|
: '';
|
|
464
464
|
const resolvedAnimationUrl = rawMetadata.animation_url
|
|
465
|
-
? await this.resolveIPFSUrl(rawMetadata.animation_url
|
|
465
|
+
? await this.resolveIPFSUrl(rawMetadata.animation_url)
|
|
466
466
|
: undefined;
|
|
467
467
|
// Extract custom properties (anything not in ERC standard)
|
|
468
468
|
const customProperties = Object.fromEntries(Object.entries(rawMetadata).filter(([key]) => !['name', 'description', 'image', 'animation_url', 'external_url', 'attributes'].includes(key)));
|
|
@@ -595,6 +595,11 @@ async function getExplorerUrlByChainId(getChainData, chainId, address, type) {
|
|
|
595
595
|
* tokenIds // Required for ERC-1155, optional for ERC-721
|
|
596
596
|
* });
|
|
597
597
|
* ```
|
|
598
|
+
*
|
|
599
|
+
* ## IPFS Resolution
|
|
600
|
+
*
|
|
601
|
+
* For IPFS URL resolution, use `sdk.tenant.resolveIPFSUrl()` instead.
|
|
602
|
+
* IPFS is chain-agnostic and configured at the tenant level.
|
|
598
603
|
*/
|
|
599
604
|
class Web3Manager {
|
|
600
605
|
// TODO: Add PersEventEmitter support for blockchain events
|
|
@@ -604,14 +609,16 @@ class Web3Manager {
|
|
|
604
609
|
// 3. Emit via: this.events?.emitSuccess({ domain: 'web3', type: 'NFT_TRANSFERRED', ... })
|
|
605
610
|
// 4. Filter to only user's address (not all transfers)
|
|
606
611
|
// 5. Add cleanup for event listeners on SDK destroy
|
|
607
|
-
constructor(apiClient) {
|
|
612
|
+
constructor(apiClient, tenantManager$1) {
|
|
608
613
|
this.apiClient = apiClient;
|
|
614
|
+
// Use provided TenantManager or create one
|
|
615
|
+
this.tenantManager = tenantManager$1 || new tenantManager.TenantManager(apiClient);
|
|
609
616
|
// Initialize Web3 Chain service
|
|
610
617
|
const web3ChainApi = new web3ChainService.Web3ChainApi(apiClient);
|
|
611
618
|
this.web3ChainService = new web3ChainService.Web3ChainService(web3ChainApi);
|
|
612
|
-
// Initialize Web3 Application service
|
|
619
|
+
// Initialize Web3 Application service with TenantManager for IPFS
|
|
613
620
|
const web3InfrastructureApi = new Web3InfrastructureApi(this.web3ChainService);
|
|
614
|
-
const ipfsInfrastructureApi = new IPFSInfrastructureApi(this.
|
|
621
|
+
const ipfsInfrastructureApi = new IPFSInfrastructureApi(this.tenantManager);
|
|
615
622
|
this.web3ApplicationService = new Web3ApplicationService(web3InfrastructureApi, ipfsInfrastructureApi);
|
|
616
623
|
}
|
|
617
624
|
/**
|
|
@@ -641,25 +648,14 @@ class Web3Manager {
|
|
|
641
648
|
async getTokenCollection(request) {
|
|
642
649
|
return this.web3ApplicationService.getTokenCollection(request);
|
|
643
650
|
}
|
|
644
|
-
/**
|
|
645
|
-
* Resolve IPFS URL to accessible URL
|
|
646
|
-
*
|
|
647
|
-
* @param url - IPFS URL to resolve
|
|
648
|
-
* @param chainId - Chain ID for context
|
|
649
|
-
* @returns Promise resolving to accessible URL
|
|
650
|
-
*/
|
|
651
|
-
async resolveIPFSUrl(url, chainId) {
|
|
652
|
-
return this.web3ApplicationService.resolveIPFSUrl(url, chainId);
|
|
653
|
-
}
|
|
654
651
|
/**
|
|
655
652
|
* Fetch and process token metadata
|
|
656
653
|
*
|
|
657
654
|
* @param tokenUri - Token URI to fetch metadata from
|
|
658
|
-
* @param chainId - Chain ID for context
|
|
659
655
|
* @returns Promise resolving to processed metadata or null if not found
|
|
660
656
|
*/
|
|
661
|
-
async fetchAndProcessMetadata(tokenUri
|
|
662
|
-
return this.web3ApplicationService.fetchAndProcessMetadata(tokenUri
|
|
657
|
+
async fetchAndProcessMetadata(tokenUri) {
|
|
658
|
+
return this.web3ApplicationService.fetchAndProcessMetadata(tokenUri);
|
|
663
659
|
}
|
|
664
660
|
/**
|
|
665
661
|
* Get blockchain chain data by chain ID
|
|
@@ -743,7 +739,7 @@ class Web3Manager {
|
|
|
743
739
|
*
|
|
744
740
|
* @param accountAddress - Any valid blockchain address (wallet, contract, etc.)
|
|
745
741
|
* @param token - Token definition (from getRewardTokens, getStatusTokens, etc.)
|
|
746
|
-
* @param maxTokens - Maximum tokens to retrieve (default:
|
|
742
|
+
* @param maxTokens - Maximum tokens to retrieve (default: 100, max: 100)
|
|
747
743
|
* @returns Promise resolving to collection result with owned tokens
|
|
748
744
|
*
|
|
749
745
|
* @example Query user's wallet
|
|
@@ -763,7 +759,7 @@ class Web3Manager {
|
|
|
763
759
|
* @see {@link extractTokenIds} - Low-level helper used internally for ERC-1155
|
|
764
760
|
* @see {@link buildCollectionRequest} - For manual request building
|
|
765
761
|
*/
|
|
766
|
-
async getAccountOwnedTokensFromContract(accountAddress, token, maxTokens =
|
|
762
|
+
async getAccountOwnedTokensFromContract(accountAddress, token, maxTokens = 100) {
|
|
767
763
|
// For ERC-1155, extract tokenIds from metadata
|
|
768
764
|
const tokenIds = token.type === persShared.NativeTokenTypes.ERC1155 ? this.extractTokenIds(token) : undefined;
|
|
769
765
|
const collection = await this.getTokenCollection({
|
|
@@ -829,4 +825,4 @@ exports.Web3InfrastructureApi = Web3InfrastructureApi;
|
|
|
829
825
|
exports.Web3Manager = Web3Manager;
|
|
830
826
|
exports.getExplorerUrl = getExplorerUrl;
|
|
831
827
|
exports.getExplorerUrlByChainId = getExplorerUrlByChainId;
|
|
832
|
-
//# sourceMappingURL=web3-manager-
|
|
828
|
+
//# sourceMappingURL=web3-manager-B0OyjqJR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web3-manager-B0OyjqJR.cjs","sources":["../../src/web3/domain/services/token-domain.service.ts","../../src/web3/domain/services/metadata-domain.service.ts","../../src/web3/domain/services/contract-domain.service.ts","../../src/web3/application/web3-application.service.ts","../../src/web3/infrastructure/api/web3-api.ts","../../src/web3/infrastructure/api/ipfs-api.ts","../../src/web3/utils/explorer.utils.ts","../../src/managers/web3-manager.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["globalCacheService","convertAbiToInterface","CacheTTL","createSafeContract","getAccountTokenBalance","getTokenUri","getTokenOfOwnerByIndex","tenantManager","TenantManager","Web3ChainApi","Web3ChainService","NativeTokenTypes"],"mappings":"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"}
|