@explorins/pers-sdk 1.2.1 → 1.2.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.
- package/dist/auth-admin/index.d.ts +2 -2
- package/dist/business/index.d.ts +9 -9
- package/dist/campaign/index.d.ts +19 -19
- package/dist/donation/index.d.ts +1 -1
- package/dist/donation.cjs +1 -1
- package/dist/donation.cjs.map +1 -1
- package/dist/donation.js +1 -1
- package/dist/donation.js.map +1 -1
- package/dist/index.cjs +285 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +285 -42
- package/dist/index.js.map +1 -1
- package/dist/package.json +129 -129
- package/dist/payment/index.d.ts +6 -6
- package/dist/redemption/index.d.ts +10 -10
- package/dist/tenant/index.d.ts +4 -4
- package/dist/transaction/index.d.ts +8 -8
- package/dist/web3/index.d.ts +1 -2
- package/dist/web3/index.d.ts.map +1 -1
- package/dist/web3-chain/services/getWeb3FCD.service.d.ts +9 -0
- package/dist/web3-chain/services/getWeb3FCD.service.d.ts.map +1 -1
- package/dist/web3-chain/services/provider.service.d.ts +3 -5
- package/dist/web3-chain/services/provider.service.d.ts.map +1 -1
- package/dist/web3-chain/services/public-http-provider.service.d.ts +0 -7
- package/dist/web3-chain/services/public-http-provider.service.d.ts.map +1 -1
- package/dist/web3-chain.cjs +279 -40
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +279 -40
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3.cjs +371 -3
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +371 -3
- package/dist/web3.js.map +1 -1
- package/package.json +129 -129
|
@@ -17,8 +17,8 @@ import { AuthAdminService } from './services/auth-admin-service';
|
|
|
17
17
|
* @returns Auth Admin SDK with flattened structure for better DX
|
|
18
18
|
*/
|
|
19
19
|
export declare function createAuthAdminSDK(apiClient: PersApiClient): {
|
|
20
|
-
loginTenantAdmin: (jwt: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/auth.dto").SessionAuthResponseDTO>;
|
|
21
|
-
refreshAccessToken: (refreshToken: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/auth.dto").SessionAuthResponseDTO>;
|
|
20
|
+
loginTenantAdmin: (jwt: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/auth.dto").SessionAuthResponseDTO>;
|
|
21
|
+
refreshAccessToken: (refreshToken: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/auth.dto").SessionAuthResponseDTO>;
|
|
22
22
|
api: AuthAdminApi;
|
|
23
23
|
service: AuthAdminService;
|
|
24
24
|
};
|
package/dist/business/index.d.ts
CHANGED
|
@@ -18,15 +18,15 @@ import { BusinessService } from './services/business-service';
|
|
|
18
18
|
* @returns Business SDK with flattened structure for better DX
|
|
19
19
|
*/
|
|
20
20
|
export declare function createBusinessSDK(apiClient: PersApiClient): {
|
|
21
|
-
getActiveBusinesses: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO[]>;
|
|
22
|
-
getAllBusinessTypes: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business-type.dto").BusinessTypeDTO[]>;
|
|
23
|
-
getBusinessById: (businessId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO>;
|
|
24
|
-
getBusinessByAccount: (accountAddress: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO>;
|
|
25
|
-
getBusinessesByType: (typeId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO[]>;
|
|
26
|
-
getAllBusinesses: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO[]>;
|
|
27
|
-
createBusinessByDisplayName: (displayName: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO>;
|
|
28
|
-
updateBusiness: (id: string, businessData: BusinessUpdateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO>;
|
|
29
|
-
toggleBusinessActive: (id: string, isActive: boolean) => Promise<import("@explorins/pers-shared/dist/cjs/dto/business/business.dto").BusinessDTO>;
|
|
21
|
+
getActiveBusinesses: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO[]>;
|
|
22
|
+
getAllBusinessTypes: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business-type.dto").BusinessTypeDTO[]>;
|
|
23
|
+
getBusinessById: (businessId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO>;
|
|
24
|
+
getBusinessByAccount: (accountAddress: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO>;
|
|
25
|
+
getBusinessesByType: (typeId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO[]>;
|
|
26
|
+
getAllBusinesses: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO[]>;
|
|
27
|
+
createBusinessByDisplayName: (displayName: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO>;
|
|
28
|
+
updateBusiness: (id: string, businessData: BusinessUpdateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO>;
|
|
29
|
+
toggleBusinessActive: (id: string, isActive: boolean) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/business/business.dto").BusinessDTO>;
|
|
30
30
|
api: BusinessApi;
|
|
31
31
|
service: BusinessService;
|
|
32
32
|
};
|
package/dist/campaign/index.d.ts
CHANGED
|
@@ -18,25 +18,25 @@ import { CampaignClaimRequestDTO, CampaignCreateRequestDTO, TokenUnitCreateReque
|
|
|
18
18
|
* @returns Campaign SDK with flattened structure for better DX
|
|
19
19
|
*/
|
|
20
20
|
export declare function createCampaignSDK(apiClient: PersApiClient): {
|
|
21
|
-
getActiveCampaigns: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO[]>;
|
|
22
|
-
getCampaignById: (id: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
23
|
-
claimCampaign: (request: CampaignClaimRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO>;
|
|
24
|
-
getClaimsForLoggedUser: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
25
|
-
getCampaigns: (active?: boolean) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO[]>;
|
|
26
|
-
getCampaignTriggers: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaignTrigger.dto").CampaignTriggerDTO[]>;
|
|
27
|
-
toggleCampaignActive: (campaignId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
28
|
-
toggleCampaignTestnet: (campaignId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
29
|
-
createCampaign: (campaign: CampaignCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
30
|
-
setCampaignTrigger: (campaignId: string, triggerId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
31
|
-
updateCampaign: (campaignId: string, campaign: CampaignCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
32
|
-
createCampaignTokenUnit: (campaignId: string, campaignTokenUnit: TokenUnitCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
33
|
-
deleteCampaignTokenUnit: (campaignId: string, campaignTokenUnitId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
34
|
-
addBusinessEngagementToCampaign: (campaignId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
35
|
-
updateCampaignBusinessEngagement: (campaignId: string, businessEngagementId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
36
|
-
deleteCampaignBusinessEngagement: (campaignId: string, businessEngagementId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaign.dto").CampaignDTO>;
|
|
37
|
-
getCampaignClaims: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
38
|
-
getCampaignClaimsByUserId: (userId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
39
|
-
getCampaignClaimsByBusinessId: (businessId: string) => Promise<import("@explorins/pers-shared/dist/cjs/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
21
|
+
getActiveCampaigns: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO[]>;
|
|
22
|
+
getCampaignById: (id: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
23
|
+
claimCampaign: (request: CampaignClaimRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO>;
|
|
24
|
+
getClaimsForLoggedUser: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
25
|
+
getCampaigns: (active?: boolean) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO[]>;
|
|
26
|
+
getCampaignTriggers: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaignTrigger.dto").CampaignTriggerDTO[]>;
|
|
27
|
+
toggleCampaignActive: (campaignId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
28
|
+
toggleCampaignTestnet: (campaignId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
29
|
+
createCampaign: (campaign: CampaignCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
30
|
+
setCampaignTrigger: (campaignId: string, triggerId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
31
|
+
updateCampaign: (campaignId: string, campaign: CampaignCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
32
|
+
createCampaignTokenUnit: (campaignId: string, campaignTokenUnit: TokenUnitCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
33
|
+
deleteCampaignTokenUnit: (campaignId: string, campaignTokenUnitId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
34
|
+
addBusinessEngagementToCampaign: (campaignId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
35
|
+
updateCampaignBusinessEngagement: (campaignId: string, businessEngagementId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
36
|
+
deleteCampaignBusinessEngagement: (campaignId: string, businessEngagementId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaign.dto").CampaignDTO>;
|
|
37
|
+
getCampaignClaims: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
38
|
+
getCampaignClaimsByUserId: (userId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
39
|
+
getCampaignClaimsByBusinessId: (businessId: string) => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/campaign/campaignUserClaim.dto").CampaignUserClaimDTO[]>;
|
|
40
40
|
api: CampaignApi;
|
|
41
41
|
service: CampaignService;
|
|
42
42
|
};
|
package/dist/donation/index.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ import { DonationService } from './services/donation-service';
|
|
|
17
17
|
* @returns Donation SDK with flattened structure for better DX
|
|
18
18
|
*/
|
|
19
19
|
export declare function createDonationSDK(apiClient: PersApiClient): {
|
|
20
|
-
getAllDonationTypes: () => Promise<import("@explorins/pers-shared/dist/cjs/dto/purchase/donationType.dto").DonationTypeDTO[]>;
|
|
20
|
+
getAllDonationTypes: () => Promise<import("@explorins/pers-shared/dist/cjs/shared-lib/dto/purchase/donationType.dto").DonationTypeDTO[]>;
|
|
21
21
|
api: DonationApi;
|
|
22
22
|
service: DonationService;
|
|
23
23
|
};
|
package/dist/donation.cjs
CHANGED
package/dist/donation.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donation.cjs","sources":["../src/donation/api/donation-api.ts","../src/donation/services/donation-service.ts","../src/donation/index.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;AAGA;;;;;AAKG;MACU,WAAW,CAAA;AACtB,IAAA,WAAA,CAAoB,SAAwB,EAAA;QAAxB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAkB;;;;AAM/C;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAoB,
|
|
1
|
+
{"version":3,"file":"donation.cjs","sources":["../src/donation/api/donation-api.ts","../src/donation/services/donation-service.ts","../src/donation/index.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;AAGA;;;;;AAKG;MACU,WAAW,CAAA;AACtB,IAAA,WAAA,CAAoB,SAAwB,EAAA;QAAxB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAkB;;;;AAM/C;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAoB,2BAA2B,CAAC;IAC3E;AACD;;ACpBD;;;;;;AAMG;MACU,eAAe,CAAA;AAC1B,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;IAAgB;;;;AAM/C;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;IAC/C;AACD;;ACxBD;;;;;AAKG;AAEH;AAgBA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,SAAwB,EAAA;AACxD,IAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC;AAC9C,IAAA,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;IAExD,OAAO;;;;AAKL,QAAA,mBAAmB,EAAE,MAAM,eAAe,CAAC,mBAAmB,EAAE;;AAGhE,QAAA,GAAG,EAAE,WAAW;AAChB,QAAA,OAAO,EAAE;KACV;AACH;;;;;;"}
|
package/dist/donation.js
CHANGED
package/dist/donation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"donation.js","sources":["../src/donation/api/donation-api.ts","../src/donation/services/donation-service.ts","../src/donation/index.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"AAGA;;;;;AAKG;MACU,WAAW,CAAA;AACtB,IAAA,WAAA,CAAoB,SAAwB,EAAA;QAAxB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAkB;;;;AAM/C;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAoB,
|
|
1
|
+
{"version":3,"file":"donation.js","sources":["../src/donation/api/donation-api.ts","../src/donation/services/donation-service.ts","../src/donation/index.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"AAGA;;;;;AAKG;MACU,WAAW,CAAA;AACtB,IAAA,WAAA,CAAoB,SAAwB,EAAA;QAAxB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAkB;;;;AAM/C;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAoB,2BAA2B,CAAC;IAC3E;AACD;;ACpBD;;;;;;AAMG;MACU,eAAe,CAAA;AAC1B,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;IAAgB;;;;AAM/C;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;IAC/C;AACD;;ACxBD;;;;;AAKG;AAEH;AAgBA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,SAAwB,EAAA;AACxD,IAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC;AAC9C,IAAA,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;IAExD,OAAO;;;;AAKL,QAAA,mBAAmB,EAAE,MAAM,eAAe,CAAC,mBAAmB,EAAE;;AAGhE,QAAA,GAAG,EAAE,WAAW;AAChB,QAAA,OAAO,EAAE;KACV;AACH;;;;"}
|
package/dist/index.cjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var jwtDecode = require('jwt-decode');
|
|
4
4
|
var Web3 = require('web3');
|
|
5
|
-
var web3Ts = require('@explorins/web3-ts');
|
|
6
5
|
var ethers = require('ethers');
|
|
6
|
+
var web3Ts = require('@explorins/web3-ts');
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* PERS SDK Configuration interfaces
|
|
@@ -1863,7 +1863,7 @@ class DonationApi {
|
|
|
1863
1863
|
* ✅ ONLY method actually used by framework
|
|
1864
1864
|
*/
|
|
1865
1865
|
async getAllDonationTypes() {
|
|
1866
|
-
return this.apiClient.get('/
|
|
1866
|
+
return this.apiClient.get('/purchases/donation-types');
|
|
1867
1867
|
}
|
|
1868
1868
|
}
|
|
1869
1869
|
|
|
@@ -3675,79 +3675,197 @@ class Web3ChainService {
|
|
|
3675
3675
|
}
|
|
3676
3676
|
}
|
|
3677
3677
|
|
|
3678
|
-
//
|
|
3679
|
-
//This function is temporary so we install ethers just to make it work, once we delete this function we must uninstall Ethers
|
|
3678
|
+
// ✅ REVERT: Función síncrona como el código comentado que funciona
|
|
3680
3679
|
const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
|
|
3681
|
-
|
|
3680
|
+
console.log(`🔧 [getWeb3FCD] Creating provider for chain ${chainData.chainId || 'unknown'}`);
|
|
3682
3681
|
let ethersProvider;
|
|
3683
3682
|
if (chainData.authHeader) {
|
|
3684
|
-
//
|
|
3683
|
+
// ✅ AUTHENTICATED: For private chains
|
|
3685
3684
|
const fetchRequest = new ethers.FetchRequest(chainData.rpcUrl);
|
|
3686
3685
|
fetchRequest.timeout = timeout;
|
|
3687
|
-
|
|
3686
|
+
// ✅ IMPROVED AUTH HEADER: Better handling
|
|
3687
|
+
const authValue = chainData.authHeader.startsWith('Bearer ')
|
|
3688
|
+
? chainData.authHeader
|
|
3689
|
+
: `Bearer ${chainData.authHeader}`;
|
|
3690
|
+
fetchRequest.setHeader('Authorization', authValue);
|
|
3688
3691
|
fetchRequest.setHeader('Content-Type', 'application/json');
|
|
3692
|
+
fetchRequest.setHeader('Accept', 'application/json');
|
|
3689
3693
|
if (customUserAgentName) {
|
|
3690
3694
|
fetchRequest.setHeader('User-Agent', customUserAgentName);
|
|
3691
3695
|
}
|
|
3692
|
-
// Create provider with the configured FetchRequest
|
|
3693
3696
|
ethersProvider = new ethers.JsonRpcProvider(fetchRequest, undefined, {
|
|
3694
3697
|
staticNetwork: false,
|
|
3695
|
-
polling: false,
|
|
3698
|
+
polling: false,
|
|
3699
|
+
batchMaxCount: 1, // ✅ DISABLE BATCHING: Better for private chains
|
|
3696
3700
|
});
|
|
3697
3701
|
}
|
|
3698
3702
|
else {
|
|
3699
|
-
// For public chains
|
|
3703
|
+
// ✅ PUBLIC: For public chains
|
|
3700
3704
|
ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl, undefined, {
|
|
3701
3705
|
staticNetwork: false,
|
|
3702
3706
|
polling: false,
|
|
3703
3707
|
});
|
|
3704
3708
|
}
|
|
3709
|
+
console.log(`✅ [getWeb3FCD] Provider created successfully`);
|
|
3705
3710
|
return {
|
|
3706
3711
|
web3Provider: null,
|
|
3707
3712
|
ethersProvider: ethersProvider,
|
|
3708
3713
|
isAuthenticated: !!chainData.authHeader,
|
|
3709
3714
|
};
|
|
3710
3715
|
};
|
|
3716
|
+
// ✅ NEW: Async wrapper with retry for higher-level usage
|
|
3717
|
+
const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
|
|
3718
|
+
let lastError = null;
|
|
3719
|
+
for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {
|
|
3720
|
+
try {
|
|
3721
|
+
console.log(`🔄 [Web3Provider] Attempt ${attempt}/${retryConfig.maxAttempts} for chain ${chainData.chainId || 'unknown'}`);
|
|
3722
|
+
// ✅ SYNC CALL: Use the original sync function
|
|
3723
|
+
const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
|
|
3724
|
+
await validateChainConnection(provider.ethersProvider, chainData.authHeader ? 'private' : 'public');
|
|
3725
|
+
console.log(`✅ [Web3Provider] Successfully connected on attempt ${attempt}`);
|
|
3726
|
+
return provider;
|
|
3727
|
+
}
|
|
3728
|
+
catch (error) {
|
|
3729
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
3730
|
+
console.warn(`⚠️ [Web3Provider] Attempt ${attempt} failed:`, lastError.message);
|
|
3731
|
+
// ✅ NO RETRY: if auth error, no retry
|
|
3732
|
+
if (isAuthError(lastError) && chainData.authHeader) {
|
|
3733
|
+
console.error(`❌ [Web3Provider] Auth error, stopping retries`);
|
|
3734
|
+
break;
|
|
3735
|
+
}
|
|
3736
|
+
if (attempt === retryConfig.maxAttempts)
|
|
3737
|
+
break;
|
|
3738
|
+
const delay = Math.min(retryConfig.baseDelay * Math.pow(2, attempt - 1), retryConfig.maxDelay);
|
|
3739
|
+
console.log(`⏳ [Web3Provider] Retrying in ${delay}ms...`);
|
|
3740
|
+
await sleep(delay);
|
|
3741
|
+
}
|
|
3742
|
+
}
|
|
3743
|
+
throw new Error(`Failed to create Web3 provider after ${retryConfig.maxAttempts} attempts. Last error: ${lastError?.message}`);
|
|
3744
|
+
};
|
|
3745
|
+
async function validateChainConnection(provider, chainType) {
|
|
3746
|
+
try {
|
|
3747
|
+
console.log(`🔍 [Validation] Testing ${chainType} chain connection...`);
|
|
3748
|
+
// ✅ LIGHTWEIGHT TEST: Use eth_chainId (works for both public and private)
|
|
3749
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
3750
|
+
setTimeout(() => reject(new Error(`${chainType} chain validation timeout`)), 3000);
|
|
3751
|
+
});
|
|
3752
|
+
// Try chainId first (fast, lightweight, universal)
|
|
3753
|
+
const chainIdPromise = provider.send('eth_chainId', []);
|
|
3754
|
+
const result = await Promise.race([chainIdPromise, timeoutPromise]);
|
|
3755
|
+
console.log(`✅ [Validation] ${chainType} chain connection validated - Chain ID: ${result}`);
|
|
3756
|
+
}
|
|
3757
|
+
catch (error) {
|
|
3758
|
+
// ✅ FALLBACK: Try net_version if chainId fails
|
|
3759
|
+
try {
|
|
3760
|
+
console.log(`🔄 [Validation] Trying fallback validation for ${chainType} chain...`);
|
|
3761
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
3762
|
+
setTimeout(() => reject(new Error(`${chainType} chain fallback validation timeout`)), 3000);
|
|
3763
|
+
});
|
|
3764
|
+
const versionPromise = provider.send('net_version', []);
|
|
3765
|
+
const result = await Promise.race([versionPromise, timeoutPromise]);
|
|
3766
|
+
console.log(`✅ [Validation] ${chainType} chain connection validated via fallback - Network Version: ${result}`);
|
|
3767
|
+
}
|
|
3768
|
+
catch (fallbackError) {
|
|
3769
|
+
throw new Error(`${chainType} chain validation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
3770
|
+
}
|
|
3771
|
+
}
|
|
3772
|
+
}
|
|
3773
|
+
// ✅ HELPER: Auth error detection
|
|
3774
|
+
function isAuthError(error) {
|
|
3775
|
+
const message = error.message.toLowerCase();
|
|
3776
|
+
return (message.includes('unauthorized') ||
|
|
3777
|
+
message.includes('401') ||
|
|
3778
|
+
message.includes('token expired') ||
|
|
3779
|
+
message.includes('-40100'));
|
|
3780
|
+
}
|
|
3781
|
+
// ✅ HELPER: Sleep utility
|
|
3782
|
+
function sleep(ms) {
|
|
3783
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
3784
|
+
}
|
|
3785
|
+
/*
|
|
3786
|
+
//IMPORTANT//
|
|
3787
|
+
//This function is temporary so we install ethers just to make it work, once we delete this function we must uninstall Ethers
|
|
3788
|
+
|
|
3789
|
+
import { ChainData } from "@explorins/web3-ts";
|
|
3790
|
+
import { FetchRequest, JsonRpcProvider } from "ethers";
|
|
3791
|
+
|
|
3792
|
+
export const getWeb3ProviderFromChainData = (
|
|
3793
|
+
chainData: ChainData,
|
|
3794
|
+
timeout = 15000,
|
|
3795
|
+
customUserAgentName = '',
|
|
3796
|
+
tokenRefresher?: () => Promise<string>
|
|
3797
|
+
) => {
|
|
3798
|
+
|
|
3799
|
+
// Fixed ethers provider setup for authenticated requests
|
|
3800
|
+
let ethersProvider: JsonRpcProvider;
|
|
3801
|
+
|
|
3802
|
+
if (chainData.authHeader) {
|
|
3803
|
+
// For authenticated requests, create a custom FetchRequest
|
|
3804
|
+
const fetchRequest = new FetchRequest(chainData.rpcUrl);
|
|
3805
|
+
fetchRequest.timeout = timeout;
|
|
3806
|
+
fetchRequest.setHeader('Authorization', chainData.authHeader);
|
|
3807
|
+
fetchRequest.setHeader('Content-Type', 'application/json');
|
|
3808
|
+
|
|
3809
|
+
if (customUserAgentName) {
|
|
3810
|
+
fetchRequest.setHeader('User-Agent', customUserAgentName);
|
|
3811
|
+
}
|
|
3812
|
+
|
|
3813
|
+
// Create provider with the configured FetchRequest
|
|
3814
|
+
ethersProvider = new JsonRpcProvider(fetchRequest, undefined, {
|
|
3815
|
+
staticNetwork: false,
|
|
3816
|
+
polling: false, // Disable polling for better Lambda performance
|
|
3817
|
+
});
|
|
3818
|
+
} else {
|
|
3819
|
+
// For public chains, use simple URL-based provider
|
|
3820
|
+
ethersProvider = new JsonRpcProvider(chainData.rpcUrl, undefined, {
|
|
3821
|
+
staticNetwork: false,
|
|
3822
|
+
polling: false,
|
|
3823
|
+
});
|
|
3824
|
+
}
|
|
3825
|
+
|
|
3826
|
+
return {
|
|
3827
|
+
web3Provider: null,
|
|
3828
|
+
ethersProvider: ethersProvider,
|
|
3829
|
+
isAuthenticated: !!chainData.authHeader,
|
|
3830
|
+
};
|
|
3831
|
+
}; */
|
|
3711
3832
|
|
|
3712
3833
|
class Web3ProviderService {
|
|
3713
|
-
constructor(
|
|
3714
|
-
this.publicHttpProviderService = publicHttpProviderService;
|
|
3834
|
+
constructor() {
|
|
3715
3835
|
this._web3 = null;
|
|
3716
3836
|
this._currentChainId = null;
|
|
3837
|
+
this._creationPromise = null;
|
|
3717
3838
|
}
|
|
3718
|
-
async getWeb3(chainId, chainType,
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
try {
|
|
3723
|
-
this._currentChainId = chainId;
|
|
3724
|
-
const provider = await this.getWeb3ByChainId(chainId, chainType, privateChainData);
|
|
3725
|
-
this._web3 = this.convertToWeb3(provider);
|
|
3726
|
-
}
|
|
3727
|
-
catch (error) {
|
|
3728
|
-
console.error('Error getting web3 connection from chain id ' + chainId, error);
|
|
3729
|
-
throw new Error('Error getting web3 connection from chain id ' + chainId);
|
|
3730
|
-
}
|
|
3839
|
+
async getWeb3(chainId, chainType, chainData) {
|
|
3840
|
+
// ✅ EARLY RETURN: Reuse existing provider
|
|
3841
|
+
if (this._web3 && this._currentChainId === chainId) {
|
|
3842
|
+
return this._web3;
|
|
3731
3843
|
}
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
getWeb3ByChainId(chainId, chainType, privateChainData = null) {
|
|
3736
|
-
// Rest of the method remains the same
|
|
3737
|
-
if (chainType === web3Ts.ChainTypes.PRIVATE && privateChainData) {
|
|
3738
|
-
//const privateProvider = this.privateChainProviderService.getProviderFromChainData(privateChainData)
|
|
3739
|
-
const privateProvider = getWeb3ProviderFromChainData(privateChainData);
|
|
3740
|
-
if (!privateProvider || privateProvider instanceof Error)
|
|
3741
|
-
throw new Error('Error getting web3 provider');
|
|
3742
|
-
return privateProvider;
|
|
3844
|
+
// ✅ PREVENT RACE CONDITION: Wait for ongoing creation
|
|
3845
|
+
if (this._creationPromise) {
|
|
3846
|
+
return await this._creationPromise;
|
|
3743
3847
|
}
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3848
|
+
if (!chainId)
|
|
3849
|
+
throw new Error('ChainId not found');
|
|
3850
|
+
if (!chainData)
|
|
3851
|
+
throw new Error('ChainData not found');
|
|
3852
|
+
// ✅ CREATE AND CACHE: Single promise for concurrent calls
|
|
3853
|
+
this._creationPromise = this.createProvider(chainId, chainType, chainData);
|
|
3854
|
+
try {
|
|
3855
|
+
const web3Instance = await this._creationPromise;
|
|
3856
|
+
this._web3 = web3Instance;
|
|
3857
|
+
this._currentChainId = chainId;
|
|
3858
|
+
return web3Instance;
|
|
3859
|
+
}
|
|
3860
|
+
finally {
|
|
3861
|
+
// ✅ CLEANUP: Always reset promise after completion
|
|
3862
|
+
this._creationPromise = null;
|
|
3749
3863
|
}
|
|
3750
3864
|
}
|
|
3865
|
+
async createProvider(chainId, chainType, chainData) {
|
|
3866
|
+
const provider = await getWeb3ProviderWithRetry(chainData);
|
|
3867
|
+
return this.convertToWeb3(provider);
|
|
3868
|
+
}
|
|
3751
3869
|
convertToWeb3(provider) {
|
|
3752
3870
|
if (provider instanceof Web3) {
|
|
3753
3871
|
return provider;
|
|
@@ -3799,6 +3917,128 @@ class Web3ProviderService {
|
|
|
3799
3917
|
{};
|
|
3800
3918
|
}
|
|
3801
3919
|
}
|
|
3920
|
+
/* import Web3 from "web3";
|
|
3921
|
+
import { ChainData, ChainType, ChainTypes } from "@explorins/web3-ts";
|
|
3922
|
+
import { PublicHttpProviderService } from "./public-http-provider.service";
|
|
3923
|
+
import { getWeb3ProviderFromChainData } from "./getWeb3FCD.service";
|
|
3924
|
+
|
|
3925
|
+
|
|
3926
|
+
export class Web3ProviderService {
|
|
3927
|
+
|
|
3928
|
+
private _web3: Web3 | null = null;
|
|
3929
|
+
private _currentChainId: number | null = null;
|
|
3930
|
+
|
|
3931
|
+
constructor(
|
|
3932
|
+
private readonly publicHttpProviderService: PublicHttpProviderService,
|
|
3933
|
+
) {
|
|
3934
|
+
}
|
|
3935
|
+
|
|
3936
|
+
public async getWeb3(chainId: number, chainType: ChainType, privateChainData: ChainData | null = null) {
|
|
3937
|
+
if (!this._web3 || this._currentChainId !== chainId) {
|
|
3938
|
+
|
|
3939
|
+
if(!chainId) throw new Error('ChainId not found')
|
|
3940
|
+
|
|
3941
|
+
try {
|
|
3942
|
+
this._currentChainId = chainId;
|
|
3943
|
+
const provider = await this.getWeb3ByChainId(chainId, chainType, privateChainData);
|
|
3944
|
+
this._web3 = this.convertToWeb3(provider);
|
|
3945
|
+
} catch (error) {
|
|
3946
|
+
console.error('Error getting web3 connection from chain id ' + chainId , error)
|
|
3947
|
+
throw new Error('Error getting web3 connection from chain id ' + chainId)
|
|
3948
|
+
}
|
|
3949
|
+
}
|
|
3950
|
+
return this._web3 as Web3;
|
|
3951
|
+
}
|
|
3952
|
+
|
|
3953
|
+
// Keep return type as 'any' to avoid TypeScript errors while still being adapted later
|
|
3954
|
+
private getWeb3ByChainId(chainId: number, chainType: ChainType, privateChainData: ChainData | null = null): any {
|
|
3955
|
+
// Rest of the method remains the same
|
|
3956
|
+
if(chainType === ChainTypes.PRIVATE && privateChainData) {
|
|
3957
|
+
//const privateProvider = this.privateChainProviderService.getProviderFromChainData(privateChainData)
|
|
3958
|
+
const privateProvider = getWeb3ProviderFromChainData(privateChainData);
|
|
3959
|
+
|
|
3960
|
+
if(!privateProvider || privateProvider instanceof Error) throw new Error('Error getting web3 provider');
|
|
3961
|
+
|
|
3962
|
+
|
|
3963
|
+
return privateProvider;
|
|
3964
|
+
|
|
3965
|
+
} else {
|
|
3966
|
+
|
|
3967
|
+
const publicProvider = this.publicHttpProviderService.getProvider(chainId)
|
|
3968
|
+
if(!publicProvider || publicProvider instanceof Error) throw new Error('Error getting web3 provider');
|
|
3969
|
+
|
|
3970
|
+
return publicProvider;
|
|
3971
|
+
}
|
|
3972
|
+
}
|
|
3973
|
+
|
|
3974
|
+
private convertToWeb3(provider: unknown): Web3 {
|
|
3975
|
+
if (provider instanceof Web3) {
|
|
3976
|
+
return provider as Web3;
|
|
3977
|
+
}
|
|
3978
|
+
|
|
3979
|
+
if (provider && typeof provider === 'object' && 'web3Provider' in provider) {
|
|
3980
|
+
const providerObj = provider as {
|
|
3981
|
+
web3Provider?: unknown;
|
|
3982
|
+
ethersProvider?: any;
|
|
3983
|
+
isAuthenticated?: boolean;
|
|
3984
|
+
};
|
|
3985
|
+
|
|
3986
|
+
// If we want to user the web3Provider directly:
|
|
3987
|
+
/*if (providerObj.web3Provider) {
|
|
3988
|
+
return new Web3(providerObj.web3Provider as never);
|
|
3989
|
+
}*/
|
|
3990
|
+
/*if (providerObj.ethersProvider) {
|
|
3991
|
+
|
|
3992
|
+
const url = this.extractUrlFromEthersProvider(providerObj.ethersProvider);
|
|
3993
|
+
const headers = this.extractHeadersFromEthersProvider(providerObj.ethersProvider);
|
|
3994
|
+
|
|
3995
|
+
const web3 = new Web3(url);
|
|
3996
|
+
const currentProvider = web3.currentProvider as unknown as Record<string, unknown>;
|
|
3997
|
+
|
|
3998
|
+
if (currentProvider) {
|
|
3999
|
+
currentProvider['url'] = url;
|
|
4000
|
+
|
|
4001
|
+
if (headers && Object.keys(headers).length > 0) {
|
|
4002
|
+
currentProvider['request'] = async (payload: Record<string, unknown>): Promise<Record<string, unknown>> => {
|
|
4003
|
+
const response = await fetch(url, {
|
|
4004
|
+
method: 'POST',
|
|
4005
|
+
headers: {
|
|
4006
|
+
'Content-Type': 'application/json',
|
|
4007
|
+
...headers
|
|
4008
|
+
},
|
|
4009
|
+
body: JSON.stringify(payload)
|
|
4010
|
+
});
|
|
4011
|
+
|
|
4012
|
+
if (!response.ok) {
|
|
4013
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
4014
|
+
}
|
|
4015
|
+
|
|
4016
|
+
return await response.json() as Record<string, unknown>;
|
|
4017
|
+
};
|
|
4018
|
+
}
|
|
4019
|
+
}
|
|
4020
|
+
|
|
4021
|
+
return web3;
|
|
4022
|
+
}
|
|
4023
|
+
}
|
|
4024
|
+
|
|
4025
|
+
return new Web3(provider as never);
|
|
4026
|
+
}
|
|
4027
|
+
|
|
4028
|
+
|
|
4029
|
+
private extractUrlFromEthersProvider(ethersProvider: any): string {
|
|
4030
|
+
return ethersProvider.connection?.url ||
|
|
4031
|
+
ethersProvider._getConnection?.()?.url ||
|
|
4032
|
+
ethersProvider.url ||
|
|
4033
|
+
'';
|
|
4034
|
+
}
|
|
4035
|
+
|
|
4036
|
+
private extractHeadersFromEthersProvider(ethersProvider: any): Record<string, string> {
|
|
4037
|
+
return ethersProvider.connection?.headers ||
|
|
4038
|
+
ethersProvider._getConnection?.()?.headers ||
|
|
4039
|
+
{};
|
|
4040
|
+
}
|
|
4041
|
+
} */
|
|
3802
4042
|
|
|
3803
4043
|
/**
|
|
3804
4044
|
* Web3 Chain Domain Models
|
|
@@ -4149,7 +4389,10 @@ class Web3Service {
|
|
|
4149
4389
|
}
|
|
4150
4390
|
}
|
|
4151
4391
|
|
|
4152
|
-
|
|
4392
|
+
//import { PublicHttpProviderService } from '../web3-chain/services/public-http-provider.service';
|
|
4393
|
+
function createWeb3SDK(apiClient) {
|
|
4394
|
+
// TODO: FIX LATER - TEMPORARY CONSTRUCTION
|
|
4395
|
+
const web3ProviderService = new Web3ProviderService();
|
|
4153
4396
|
const web3ChainSDK = createWeb3ChainSDK(apiClient, web3ProviderService);
|
|
4154
4397
|
const web3Api = new Web3Api(web3ChainSDK.service);
|
|
4155
4398
|
const web3Service = new Web3Service(web3Api, web3ChainSDK.service);
|