@explorins/pers-sdk 1.1.2 → 1.1.3

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 (291) hide show
  1. package/dist/analytics/api/analytics-api.d.ts +17 -0
  2. package/dist/analytics/api/analytics-api.d.ts.map +1 -0
  3. package/{src/analytics/index.ts → dist/analytics/index.d.ts} +28 -52
  4. package/dist/analytics/index.d.ts.map +1 -0
  5. package/dist/analytics/models/index.d.ts +61 -0
  6. package/dist/analytics/models/index.d.ts.map +1 -0
  7. package/dist/analytics/services/analytics-service.d.ts +19 -0
  8. package/dist/analytics/services/analytics-service.d.ts.map +1 -0
  9. package/dist/analytics.cjs +76 -0
  10. package/dist/analytics.cjs.map +1 -0
  11. package/dist/analytics.d.ts +28 -0
  12. package/dist/analytics.js +72 -0
  13. package/dist/analytics.js.map +1 -0
  14. package/dist/auth-admin/api/auth-admin-api.d.ts +27 -0
  15. package/dist/auth-admin/api/auth-admin-api.d.ts.map +1 -0
  16. package/dist/auth-admin/index.d.ts +26 -0
  17. package/dist/auth-admin/index.d.ts.map +1 -0
  18. package/dist/auth-admin/services/auth-admin-service.d.ts +23 -0
  19. package/dist/auth-admin/services/auth-admin-service.d.ts.map +1 -0
  20. package/dist/auth-admin.cjs +96 -0
  21. package/dist/auth-admin.cjs.map +1 -0
  22. package/dist/auth-admin.d.ts +26 -0
  23. package/dist/auth-admin.js +92 -0
  24. package/dist/auth-admin.js.map +1 -0
  25. package/dist/business/api/business-api.d.ts +133 -0
  26. package/dist/business/api/business-api.d.ts.map +1 -0
  27. package/dist/business/index.d.ts +34 -0
  28. package/dist/business/index.d.ts.map +1 -0
  29. package/dist/business/models/index.d.ts +8 -0
  30. package/dist/business/models/index.d.ts.map +1 -0
  31. package/dist/business/services/business-service.d.ts +51 -0
  32. package/dist/business/services/business-service.d.ts.map +1 -0
  33. package/dist/business.cjs +303 -0
  34. package/dist/business.cjs.map +1 -0
  35. package/dist/business.d.ts +34 -0
  36. package/dist/business.js +299 -0
  37. package/dist/business.js.map +1 -0
  38. package/dist/campaign/api/campaign-api.d.ts +213 -0
  39. package/dist/campaign/api/campaign-api.d.ts.map +1 -0
  40. package/dist/campaign/index.d.ts +44 -0
  41. package/dist/campaign/index.d.ts.map +1 -0
  42. package/dist/campaign/services/campaign-service.d.ts +88 -0
  43. package/dist/campaign/services/campaign-service.d.ts.map +1 -0
  44. package/dist/campaign.cjs +506 -0
  45. package/dist/campaign.cjs.map +1 -0
  46. package/dist/campaign.d.ts +44 -0
  47. package/dist/campaign.js +502 -0
  48. package/dist/campaign.js.map +1 -0
  49. package/dist/core/abstractions/http-client.d.ts +22 -0
  50. package/dist/core/abstractions/http-client.d.ts.map +1 -0
  51. package/dist/core/auth/auth-provider.interface.d.ts +12 -0
  52. package/dist/core/auth/auth-provider.interface.d.ts.map +1 -0
  53. package/dist/core/auth/create-auth-provider.d.ts +27 -0
  54. package/dist/core/auth/create-auth-provider.d.ts.map +1 -0
  55. package/dist/core/auth/simple-auth-config.interface.d.ts +15 -0
  56. package/dist/core/auth/simple-auth-config.interface.d.ts.map +1 -0
  57. package/dist/core/index.d.ts +13 -0
  58. package/dist/core/index.d.ts.map +1 -0
  59. package/dist/core/pers-api-client.d.ts +54 -0
  60. package/dist/core/pers-api-client.d.ts.map +1 -0
  61. package/dist/core/pers-config.d.ts +38 -0
  62. package/dist/core/pers-config.d.ts.map +1 -0
  63. package/dist/core/utils/jwt.function.d.ts +2 -0
  64. package/dist/core/utils/jwt.function.d.ts.map +1 -0
  65. package/dist/core.cjs +506 -0
  66. package/dist/core.cjs.map +1 -0
  67. package/dist/core.d.ts +13 -0
  68. package/dist/core.js +497 -0
  69. package/dist/core.js.map +1 -0
  70. package/dist/donation/api/donation-api.d.ts +18 -0
  71. package/dist/donation/api/donation-api.d.ts.map +1 -0
  72. package/dist/donation/index.d.ts +25 -0
  73. package/dist/donation/index.d.ts.map +1 -0
  74. package/{src/donation/models/index.ts → dist/donation/models/index.d.ts} +8 -11
  75. package/dist/donation/models/index.d.ts.map +1 -0
  76. package/dist/donation/services/donation-service.d.ts +19 -0
  77. package/dist/donation/services/donation-service.d.ts.map +1 -0
  78. package/dist/donation.cjs +78 -0
  79. package/dist/donation.cjs.map +1 -0
  80. package/dist/donation.d.ts +25 -0
  81. package/dist/donation.js +74 -0
  82. package/dist/donation.js.map +1 -0
  83. package/dist/index.cjs +4217 -0
  84. package/dist/index.cjs.map +1 -0
  85. package/dist/index.d.ts +21 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +4164 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/package.json +148 -0
  90. package/dist/payment/api/payment-api.d.ts +105 -0
  91. package/dist/payment/api/payment-api.d.ts.map +1 -0
  92. package/dist/payment/index.d.ts +36 -0
  93. package/dist/payment/index.d.ts.map +1 -0
  94. package/dist/payment/models/index.d.ts +12 -0
  95. package/dist/payment/models/index.d.ts.map +1 -0
  96. package/dist/payment/services/payment-service.d.ts +40 -0
  97. package/dist/payment/services/payment-service.d.ts.map +1 -0
  98. package/dist/payment.cjs +258 -0
  99. package/dist/payment.cjs.map +1 -0
  100. package/dist/payment.d.ts +36 -0
  101. package/dist/payment.js +254 -0
  102. package/dist/payment.js.map +1 -0
  103. package/dist/pers-sdk.d.ts +29 -0
  104. package/dist/pers-sdk.d.ts.map +1 -0
  105. package/dist/redemption/api/redemption-api.d.ts +147 -0
  106. package/dist/redemption/api/redemption-api.d.ts.map +1 -0
  107. package/dist/redemption/index.d.ts +35 -0
  108. package/dist/redemption/index.d.ts.map +1 -0
  109. package/dist/redemption/models/index.d.ts +8 -0
  110. package/dist/redemption/models/index.d.ts.map +1 -0
  111. package/dist/redemption/services/redemption-service.d.ts +56 -0
  112. package/dist/redemption/services/redemption-service.d.ts.map +1 -0
  113. package/dist/redemption.cjs +333 -0
  114. package/dist/redemption.cjs.map +1 -0
  115. package/dist/redemption.d.ts +35 -0
  116. package/dist/redemption.js +329 -0
  117. package/dist/redemption.js.map +1 -0
  118. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +18 -0
  119. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -0
  120. package/dist/tenant/api/tenant-api.d.ts +56 -0
  121. package/dist/tenant/api/tenant-api.d.ts.map +1 -0
  122. package/dist/tenant/index.d.ts +34 -0
  123. package/dist/tenant/index.d.ts.map +1 -0
  124. package/dist/tenant/models/index.d.ts +11 -0
  125. package/dist/tenant/models/index.d.ts.map +1 -0
  126. package/dist/tenant/services/tenant-service.d.ts +46 -0
  127. package/dist/tenant/services/tenant-service.d.ts.map +1 -0
  128. package/dist/tenant.cjs +177 -0
  129. package/dist/tenant.cjs.map +1 -0
  130. package/dist/tenant.d.ts +34 -0
  131. package/dist/tenant.js +173 -0
  132. package/dist/tenant.js.map +1 -0
  133. package/dist/token/api/token-api.d.ts +64 -0
  134. package/dist/token/api/token-api.d.ts.map +1 -0
  135. package/dist/token/base/base-token-service.d.ts +87 -0
  136. package/dist/token/base/base-token-service.d.ts.map +1 -0
  137. package/dist/token/index.d.ts +13 -0
  138. package/dist/token/index.d.ts.map +1 -0
  139. package/dist/token/models/index.d.ts +18 -0
  140. package/dist/token/models/index.d.ts.map +1 -0
  141. package/dist/token/services/token-service.d.ts +68 -0
  142. package/dist/token/services/token-service.d.ts.map +1 -0
  143. package/dist/token/token-sdk.d.ts +140 -0
  144. package/dist/token/token-sdk.d.ts.map +1 -0
  145. package/dist/token.cjs +537 -0
  146. package/dist/token.cjs.map +1 -0
  147. package/dist/token.d.ts +13 -0
  148. package/dist/token.js +532 -0
  149. package/dist/token.js.map +1 -0
  150. package/dist/transaction/api/transaction-api.d.ts +133 -0
  151. package/dist/transaction/api/transaction-api.d.ts.map +1 -0
  152. package/dist/transaction/index.d.ts +38 -0
  153. package/dist/transaction/index.d.ts.map +1 -0
  154. package/dist/transaction/models/index.d.ts +42 -0
  155. package/dist/transaction/models/index.d.ts.map +1 -0
  156. package/dist/transaction/services/transaction-service.d.ts +56 -0
  157. package/dist/transaction/services/transaction-service.d.ts.map +1 -0
  158. package/dist/transaction.cjs +394 -0
  159. package/dist/transaction.cjs.map +1 -0
  160. package/dist/transaction.d.ts +38 -0
  161. package/dist/transaction.js +390 -0
  162. package/dist/transaction.js.map +1 -0
  163. package/dist/user/api/user-api.d.ts +56 -0
  164. package/dist/user/api/user-api.d.ts.map +1 -0
  165. package/dist/user/index.d.ts +36 -0
  166. package/dist/user/index.d.ts.map +1 -0
  167. package/{src/user/models/index.ts → dist/user/models/index.d.ts} +12 -10
  168. package/dist/user/models/index.d.ts.map +1 -0
  169. package/dist/user/services/user-service.d.ts +46 -0
  170. package/dist/user/services/user-service.d.ts.map +1 -0
  171. package/dist/user-status/api/user-status-api.d.ts +37 -0
  172. package/dist/user-status/api/user-status-api.d.ts.map +1 -0
  173. package/dist/user-status/index.d.ts +28 -0
  174. package/dist/user-status/index.d.ts.map +1 -0
  175. package/{src/user-status/models/index.ts → dist/user-status/models/index.d.ts} +8 -11
  176. package/dist/user-status/models/index.d.ts.map +1 -0
  177. package/dist/user-status/services/user-status-service.d.ts +26 -0
  178. package/dist/user-status/services/user-status-service.d.ts.map +1 -0
  179. package/dist/user-status.cjs +147 -0
  180. package/dist/user-status.cjs.map +1 -0
  181. package/dist/user-status.d.ts +28 -0
  182. package/dist/user-status.js +143 -0
  183. package/dist/user-status.js.map +1 -0
  184. package/dist/user.cjs +188 -0
  185. package/dist/user.cjs.map +1 -0
  186. package/dist/user.d.ts +36 -0
  187. package/dist/user.js +184 -0
  188. package/dist/user.js.map +1 -0
  189. package/dist/web3/api/web3-api.d.ts +27 -0
  190. package/dist/web3/api/web3-api.d.ts.map +1 -0
  191. package/dist/web3/index.d.ts +16 -0
  192. package/dist/web3/index.d.ts.map +1 -0
  193. package/dist/web3/models/index.d.ts +92 -0
  194. package/dist/web3/models/index.d.ts.map +1 -0
  195. package/dist/web3/services/web3-service.d.ts +21 -0
  196. package/dist/web3/services/web3-service.d.ts.map +1 -0
  197. package/dist/web3-chain/api/web3-chain-api.d.ts +19 -0
  198. package/dist/web3-chain/api/web3-chain-api.d.ts.map +1 -0
  199. package/dist/web3-chain/index.d.ts +17 -0
  200. package/dist/web3-chain/index.d.ts.map +1 -0
  201. package/{src/web3-chain/models/index.ts → dist/web3-chain/models/index.d.ts} +38 -45
  202. package/dist/web3-chain/models/index.d.ts.map +1 -0
  203. package/dist/web3-chain/services/getWeb3FCD.service.d.ts +8 -0
  204. package/dist/web3-chain/services/getWeb3FCD.service.d.ts.map +1 -0
  205. package/dist/web3-chain/services/provider.service.d.ts +15 -0
  206. package/dist/web3-chain/services/provider.service.d.ts.map +1 -0
  207. package/dist/web3-chain/services/public-http-provider.service.d.ts +8 -0
  208. package/dist/web3-chain/services/public-http-provider.service.d.ts.map +1 -0
  209. package/dist/web3-chain/services/web3-chain-service.d.ts +17 -0
  210. package/dist/web3-chain/services/web3-chain-service.d.ts.map +1 -0
  211. package/dist/web3-chain.cjs +316 -0
  212. package/dist/web3-chain.cjs.map +1 -0
  213. package/dist/web3-chain.d.ts +17 -0
  214. package/dist/web3-chain.js +310 -0
  215. package/dist/web3-chain.js.map +1 -0
  216. package/dist/web3.cjs +516 -0
  217. package/dist/web3.cjs.map +1 -0
  218. package/dist/web3.d.ts +16 -0
  219. package/dist/web3.js +513 -0
  220. package/dist/web3.js.map +1 -0
  221. package/package.json +70 -67
  222. package/config/domains.js +0 -22
  223. package/explorins-pers-sdk-1.0.0-alpha.1.tgz +0 -0
  224. package/rollup.config.js +0 -74
  225. package/scripts/copy-declarations.js +0 -147
  226. package/src/analytics/api/analytics-api.ts +0 -24
  227. package/src/analytics/models/index.ts +0 -74
  228. package/src/analytics/services/analytics-service.ts +0 -28
  229. package/src/auth-admin/api/auth-admin-api.ts +0 -42
  230. package/src/auth-admin/index.ts +0 -47
  231. package/src/auth-admin/services/auth-admin-service.ts +0 -36
  232. package/src/business/api/business-api.ts +0 -234
  233. package/src/business/index.ts +0 -53
  234. package/src/business/models/index.ts +0 -13
  235. package/src/business/services/business-service.ts +0 -88
  236. package/src/campaign/api/campaign-api.ts +0 -376
  237. package/src/campaign/index.ts +0 -67
  238. package/src/campaign/services/campaign-service.ts +0 -164
  239. package/src/core/abstractions/http-client.ts +0 -24
  240. package/src/core/auth/auth-provider.interface.ts +0 -16
  241. package/src/core/auth/create-auth-provider.ts +0 -136
  242. package/src/core/auth/simple-auth-config.interface.ts +0 -15
  243. package/src/core/index.ts +0 -33
  244. package/src/core/pers-api-client.ts +0 -343
  245. package/src/core/pers-config.ts +0 -65
  246. package/src/core/utils/jwt.function.ts +0 -24
  247. package/src/donation/api/donation-api.ts +0 -24
  248. package/src/donation/index.ts +0 -47
  249. package/src/donation/services/donation-service.ts +0 -25
  250. package/src/index.ts +0 -55
  251. package/src/payment/api/payment-api.ts +0 -185
  252. package/src/payment/index.ts +0 -64
  253. package/src/payment/models/index.ts +0 -29
  254. package/src/payment/services/payment-service.ts +0 -70
  255. package/src/pers-sdk.ts +0 -45
  256. package/src/redemption/api/redemption-api.ts +0 -241
  257. package/src/redemption/index.ts +0 -60
  258. package/src/redemption/models/index.ts +0 -17
  259. package/src/redemption/services/redemption-service.ts +0 -103
  260. package/src/shared/interfaces/pers-shared-lib.interfaces.ts +0 -99
  261. package/src/tenant/api/tenant-api.ts +0 -92
  262. package/src/tenant/index.ts +0 -61
  263. package/src/tenant/models/index.ts +0 -20
  264. package/src/tenant/services/tenant-service.ts +0 -78
  265. package/src/token/api/token-api.ts +0 -129
  266. package/src/token/base/base-token-service.ts +0 -167
  267. package/src/token/index.ts +0 -38
  268. package/src/token/models/index.ts +0 -30
  269. package/src/token/services/token-service.ts +0 -125
  270. package/src/token/token-sdk.ts +0 -231
  271. package/src/transaction/api/transaction-api.ts +0 -296
  272. package/src/transaction/index.ts +0 -65
  273. package/src/transaction/models/index.ts +0 -60
  274. package/src/transaction/services/transaction-service.ts +0 -104
  275. package/src/user/api/user-api.ts +0 -98
  276. package/src/user/index.ts +0 -62
  277. package/src/user/services/user-service.ts +0 -75
  278. package/src/user-status/api/user-status-api.ts +0 -78
  279. package/src/user-status/index.ts +0 -55
  280. package/src/user-status/services/user-status-service.ts +0 -51
  281. package/src/web3/api/web3-api.ts +0 -68
  282. package/src/web3/index.ts +0 -38
  283. package/src/web3/models/index.ts +0 -150
  284. package/src/web3/services/web3-service.ts +0 -338
  285. package/src/web3-chain/api/web3-chain-api.ts +0 -42
  286. package/src/web3-chain/index.ts +0 -27
  287. package/src/web3-chain/services/getWeb3FCD.service.ts +0 -47
  288. package/src/web3-chain/services/provider.service.ts +0 -123
  289. package/src/web3-chain/services/public-http-provider.service.ts +0 -26
  290. package/src/web3-chain/services/web3-chain-service.ts +0 -131
  291. package/tsconfig.json +0 -28
@@ -0,0 +1,316 @@
1
+ 'use strict';
2
+
3
+ var jwtDecode = require('jwt-decode');
4
+ var Web3 = require('web3');
5
+ var web3Ts = require('@explorins/web3-ts');
6
+ var ethers = require('ethers');
7
+
8
+ /**
9
+ * Platform-Agnostic Web3 Chain API Client
10
+ *
11
+ * Handles blockchain chain operations using the PERS backend.
12
+ * Uses @explorins/web3-ts types for perfect framework compatibility.
13
+ */
14
+ class Web3ChainApi {
15
+ constructor(apiClient) {
16
+ this.apiClient = apiClient;
17
+ this.basePath = '/chains';
18
+ }
19
+ // ==========================================
20
+ // PUBLIC OPERATIONS
21
+ // ==========================================
22
+ /**
23
+ * PUBLIC: Get chain data by chain ID
24
+ * ✅ Returns ChainData exactly as framework expects from @explorins/web3-ts
25
+ */
26
+ async getChainData(chainId) {
27
+ try {
28
+ console.log('🔍 [Web3ChainApi] Fetching chain data for chainId:', chainId);
29
+ const response = await this.apiClient.get(`${this.basePath}/${chainId}`);
30
+ if (!response) {
31
+ throw new Error(`No chain data received for chainId: ${chainId}`);
32
+ }
33
+ return response;
34
+ }
35
+ catch (error) {
36
+ console.error('❌ [Web3ChainApi] Failed to get chain data:', {
37
+ chainId,
38
+ error: error instanceof Error ? error.message : String(error)
39
+ });
40
+ throw error;
41
+ }
42
+ }
43
+ }
44
+
45
+ const isTokenExpired = (token, margin = 60) => {
46
+ // ✅ SANITIZE: Remove any words (Bearer etc) if exists and get the token
47
+ const cleanToken = token.split(' ')[1] || token;
48
+ // ✅ VALIDATION: Check if token is jwt
49
+ if (!cleanToken || cleanToken.split('.').length !== 3) {
50
+ return true; // Consider invalid tokens as expired
51
+ }
52
+ try {
53
+ // ✅ TYPE-SAFE: Decode with proper typing
54
+ const decoded = jwtDecode.jwtDecode(cleanToken);
55
+ const currentTime = Math.floor(Date.now() / 1000);
56
+ // ✅ CONFIGURABLE: Use provided margin (default 60 seconds)
57
+ return decoded.exp < (currentTime + margin);
58
+ }
59
+ catch (error) {
60
+ console.error('[SDK JWT Utils] Error decoding JWT token:', error);
61
+ return true; // Consider unparseable tokens as expired
62
+ }
63
+ };
64
+
65
+ class Web3ChainService {
66
+ constructor(web3ChainApi, providerService) {
67
+ this.web3ChainApi = web3ChainApi;
68
+ this.providerService = providerService;
69
+ this.web3InstanceCache = new Map();
70
+ }
71
+ async getWeb3ByChainId(chainId) {
72
+ const cached = this.web3InstanceCache.get(chainId);
73
+ // ✅ SMART CACHE: Check if cache is valid based on token expiration
74
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
75
+ console.log(`♻️ [Web3ChainService] Using cached Web3 instance for chain ${chainId}`);
76
+ return cached.web3Instance;
77
+ }
78
+ // ✅ CREATE WITH ERROR RECOVERY: Handle auth errors gracefully
79
+ try {
80
+ console.log(`🔧 [Web3ChainService] Creating new Web3 instance for chain ${chainId}`);
81
+ const { web3, chainData } = await this.createWeb3Instance(chainId);
82
+ // ✅ CACHE NEW INSTANCE
83
+ this.web3InstanceCache.set(chainId, {
84
+ web3Instance: web3,
85
+ chainData: chainData,
86
+ createdAt: Date.now(),
87
+ chainId
88
+ });
89
+ return web3;
90
+ }
91
+ catch (error) {
92
+ // ✅ AUTH ERROR RECOVERY: Clear cache and retry once
93
+ if (this.isAuthError(error)) {
94
+ console.warn(`🔄 [Web3ChainService] Auth error detected, clearing cache and retrying...`);
95
+ this.web3InstanceCache.delete(chainId);
96
+ // Retry once with fresh instance
97
+ const { web3, chainData } = await this.createWeb3Instance(chainId);
98
+ this.web3InstanceCache.set(chainId, {
99
+ web3Instance: web3,
100
+ chainData: chainData,
101
+ createdAt: Date.now(),
102
+ chainId
103
+ });
104
+ return web3;
105
+ }
106
+ throw error;
107
+ }
108
+ }
109
+ async getChainDataWithCache(chainId) {
110
+ const cached = this.web3InstanceCache.get(chainId);
111
+ //const now = Date.now();
112
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
113
+ console.log(`♻️ [Web3ChainService] Using cached ChainData for chain ${chainId}`);
114
+ return cached.chainData;
115
+ }
116
+ // If not cached, fetch fresh data
117
+ const chainData = await this.getChainDataById(chainId);
118
+ if (!chainData) {
119
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
120
+ }
121
+ return chainData;
122
+ }
123
+ checkIsTokenExpired(authHeader) {
124
+ // ✅ NULL CHECK: Handle undefined case
125
+ if (!authHeader) {
126
+ return false; // No token means no expiration (public chains)
127
+ }
128
+ // ✅ FUNCTION CALL: Use imported function, not method
129
+ return isTokenExpired(authHeader);
130
+ }
131
+ async createWeb3Instance(chainId) {
132
+ const chainData = await this.getChainDataById(chainId);
133
+ if (!chainData) {
134
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
135
+ }
136
+ // ✅ CRITICAL CHECK: Ensure authHeader is present for private chains
137
+ if (chainData.chainType === 'PRIVATE' && !chainData.authHeader) {
138
+ console.error('❌ [Web3ChainService] CRITICAL: Private chain missing authHeader!');
139
+ throw new Error(`Private chain ${chainId} missing authentication header`);
140
+ }
141
+ const web3 = await this.providerService.getWeb3(chainId, chainData.chainType || 'PUBLIC', chainData);
142
+ return { web3, chainData };
143
+ }
144
+ // ✅ HELPER: Type-safe error checking
145
+ isAuthError(error) {
146
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
147
+ return (message.includes('unauthorized') ||
148
+ message.includes('401') ||
149
+ message.includes('token expired') ||
150
+ message.includes('invalid token'));
151
+ }
152
+ async getChainDataById(chainId) {
153
+ try {
154
+ return await this.web3ChainApi.getChainData(chainId);
155
+ }
156
+ catch (error) {
157
+ console.error('❌ [SDK Web3ChainService] Error getting chain data for chainId:', chainId, error);
158
+ return null;
159
+ }
160
+ }
161
+ }
162
+
163
+ //IMPORTANT//
164
+ //This function is temporary so we install ethers just to make it work, once we delete this function we must uninstall Ethers
165
+ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
166
+ // Fixed ethers provider setup for authenticated requests
167
+ let ethersProvider;
168
+ if (chainData.authHeader) {
169
+ // For authenticated requests, create a custom FetchRequest
170
+ const fetchRequest = new ethers.FetchRequest(chainData.rpcUrl);
171
+ fetchRequest.timeout = timeout;
172
+ fetchRequest.setHeader('Authorization', chainData.authHeader);
173
+ fetchRequest.setHeader('Content-Type', 'application/json');
174
+ if (customUserAgentName) {
175
+ fetchRequest.setHeader('User-Agent', customUserAgentName);
176
+ }
177
+ // Create provider with the configured FetchRequest
178
+ ethersProvider = new ethers.JsonRpcProvider(fetchRequest, undefined, {
179
+ staticNetwork: false,
180
+ polling: false, // Disable polling for better Lambda performance
181
+ });
182
+ }
183
+ else {
184
+ // For public chains, use simple URL-based provider
185
+ ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl, undefined, {
186
+ staticNetwork: false,
187
+ polling: false,
188
+ });
189
+ }
190
+ return {
191
+ web3Provider: null,
192
+ ethersProvider: ethersProvider,
193
+ isAuthenticated: !!chainData.authHeader,
194
+ };
195
+ };
196
+
197
+ class Web3ProviderService {
198
+ constructor(publicHttpProviderService) {
199
+ this.publicHttpProviderService = publicHttpProviderService;
200
+ this._web3 = null;
201
+ this._currentChainId = null;
202
+ }
203
+ async getWeb3(chainId, chainType, privateChainData = null) {
204
+ if (!this._web3 || this._currentChainId !== chainId) {
205
+ if (!chainId)
206
+ throw new Error('ChainId not found');
207
+ try {
208
+ this._currentChainId = chainId;
209
+ const provider = await this.getWeb3ByChainId(chainId, chainType, privateChainData);
210
+ this._web3 = this.convertToWeb3(provider);
211
+ }
212
+ catch (error) {
213
+ console.error('Error getting web3 connection from chain id ' + chainId, error);
214
+ throw new Error('Error getting web3 connection from chain id ' + chainId);
215
+ }
216
+ }
217
+ return this._web3;
218
+ }
219
+ // Keep return type as 'any' to avoid TypeScript errors while still being adapted later
220
+ getWeb3ByChainId(chainId, chainType, privateChainData = null) {
221
+ // Rest of the method remains the same
222
+ if (chainType === web3Ts.ChainTypes.PRIVATE && privateChainData) {
223
+ //const privateProvider = this.privateChainProviderService.getProviderFromChainData(privateChainData)
224
+ const privateProvider = getWeb3ProviderFromChainData(privateChainData);
225
+ if (!privateProvider || privateProvider instanceof Error)
226
+ throw new Error('Error getting web3 provider');
227
+ return privateProvider;
228
+ }
229
+ else {
230
+ const publicProvider = this.publicHttpProviderService.getProvider(chainId);
231
+ if (!publicProvider || publicProvider instanceof Error)
232
+ throw new Error('Error getting web3 provider');
233
+ return publicProvider;
234
+ }
235
+ }
236
+ convertToWeb3(provider) {
237
+ if (provider instanceof Web3) {
238
+ return provider;
239
+ }
240
+ if (provider && typeof provider === 'object' && 'web3Provider' in provider) {
241
+ const providerObj = provider;
242
+ // If we want to user the web3Provider directly:
243
+ /*if (providerObj.web3Provider) {
244
+ return new Web3(providerObj.web3Provider as never);
245
+ }*/
246
+ if (providerObj.ethersProvider) {
247
+ const url = this.extractUrlFromEthersProvider(providerObj.ethersProvider);
248
+ const headers = this.extractHeadersFromEthersProvider(providerObj.ethersProvider);
249
+ const web3 = new Web3(url);
250
+ const currentProvider = web3.currentProvider;
251
+ if (currentProvider) {
252
+ currentProvider['url'] = url;
253
+ if (headers && Object.keys(headers).length > 0) {
254
+ currentProvider['request'] = async (payload) => {
255
+ const response = await fetch(url, {
256
+ method: 'POST',
257
+ headers: {
258
+ 'Content-Type': 'application/json',
259
+ ...headers
260
+ },
261
+ body: JSON.stringify(payload)
262
+ });
263
+ if (!response.ok) {
264
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
265
+ }
266
+ return await response.json();
267
+ };
268
+ }
269
+ }
270
+ return web3;
271
+ }
272
+ }
273
+ return new Web3(provider);
274
+ }
275
+ extractUrlFromEthersProvider(ethersProvider) {
276
+ return ethersProvider.connection?.url ||
277
+ ethersProvider._getConnection?.()?.url ||
278
+ ethersProvider.url ||
279
+ '';
280
+ }
281
+ extractHeadersFromEthersProvider(ethersProvider) {
282
+ return ethersProvider.connection?.headers ||
283
+ ethersProvider._getConnection?.()?.headers ||
284
+ {};
285
+ }
286
+ }
287
+
288
+ /**
289
+ * Web3 Chain Domain Models
290
+ *
291
+ * Minimal interface definitions matching framework usage exactly.
292
+ * Local ChainData interface to avoid external dependency issues.
293
+ */
294
+ const ChainTypes = {
295
+ PUBLIC: 'PUBLIC',
296
+ PRIVATE: 'PRIVATE'
297
+ };
298
+
299
+ function createWeb3ChainSDK(apiClient, providerService) {
300
+ const web3ChainApi = new Web3ChainApi(apiClient);
301
+ const web3ChainService = new Web3ChainService(web3ChainApi, providerService); // ✅ DIRECT INJECTION
302
+ return {
303
+ // ✅ REPLICA: Same methods as framework
304
+ getChainDataById: (chainId) => web3ChainService.getChainDataById(chainId),
305
+ getWeb3ByChainId: (chainId) => web3ChainService.getWeb3ByChainId(chainId),
306
+ api: web3ChainApi,
307
+ service: web3ChainService
308
+ };
309
+ }
310
+
311
+ exports.ChainTypes = ChainTypes;
312
+ exports.Web3ChainApi = Web3ChainApi;
313
+ exports.Web3ChainService = Web3ChainService;
314
+ exports.Web3ProviderService = Web3ProviderService;
315
+ exports.createWeb3ChainSDK = createWeb3ChainSDK;
316
+ //# sourceMappingURL=web3-chain.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web3-chain.cjs","sources":["../../src/web3-chain/api/web3-chain-api.ts","../../src/core/utils/jwt.function.ts","../../src/web3-chain/services/web3-chain-service.ts","../../src/web3-chain/services/getWeb3FCD.service.ts","../../src/web3-chain/services/provider.service.ts","../../src/web3-chain/models/index.ts","../../src/web3-chain/index.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["jwtDecode","FetchRequest","JsonRpcProvider","ChainTypes"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { PersApiClient } from './core/pers-api-client';
2
+ import { Web3ChainApi } from './web3-chain/api/web3-chain-api';
3
+ import { Web3ProviderService } from './web3-chain/services/provider.service';
4
+ import { Web3ChainService } from './web3-chain/services/web3-chain-service';
5
+ export declare function createWeb3ChainSDK(apiClient: PersApiClient, providerService: Web3ProviderService): {
6
+ getChainDataById: (chainId: number) => Promise<import("./models").ChainData | null>;
7
+ getWeb3ByChainId: (chainId: number) => Promise<import("web3").default<import("web3-eth").RegisteredSubscription>>;
8
+ api: Web3ChainApi;
9
+ service: Web3ChainService;
10
+ };
11
+ export { Web3ChainApi } from './web3-chain/api/web3-chain-api';
12
+ export { Web3ChainService } from './web3-chain/services/web3-chain-service';
13
+ export { Web3ProviderService } from './web3-chain/services/provider.service';
14
+ export * from './web3-chain/models';
15
+ export type { ChainData } from './web3-chain/models';
16
+ export * from './shared/interfaces/pers-shared-lib.interfaces';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,310 @@
1
+ import { jwtDecode } from 'jwt-decode';
2
+ import Web3 from 'web3';
3
+ import { ChainTypes as ChainTypes$1 } from '@explorins/web3-ts';
4
+ import { FetchRequest, JsonRpcProvider } from 'ethers';
5
+
6
+ /**
7
+ * Platform-Agnostic Web3 Chain API Client
8
+ *
9
+ * Handles blockchain chain operations using the PERS backend.
10
+ * Uses @explorins/web3-ts types for perfect framework compatibility.
11
+ */
12
+ class Web3ChainApi {
13
+ constructor(apiClient) {
14
+ this.apiClient = apiClient;
15
+ this.basePath = '/chains';
16
+ }
17
+ // ==========================================
18
+ // PUBLIC OPERATIONS
19
+ // ==========================================
20
+ /**
21
+ * PUBLIC: Get chain data by chain ID
22
+ * ✅ Returns ChainData exactly as framework expects from @explorins/web3-ts
23
+ */
24
+ async getChainData(chainId) {
25
+ try {
26
+ console.log('🔍 [Web3ChainApi] Fetching chain data for chainId:', chainId);
27
+ const response = await this.apiClient.get(`${this.basePath}/${chainId}`);
28
+ if (!response) {
29
+ throw new Error(`No chain data received for chainId: ${chainId}`);
30
+ }
31
+ return response;
32
+ }
33
+ catch (error) {
34
+ console.error('❌ [Web3ChainApi] Failed to get chain data:', {
35
+ chainId,
36
+ error: error instanceof Error ? error.message : String(error)
37
+ });
38
+ throw error;
39
+ }
40
+ }
41
+ }
42
+
43
+ const isTokenExpired = (token, margin = 60) => {
44
+ // ✅ SANITIZE: Remove any words (Bearer etc) if exists and get the token
45
+ const cleanToken = token.split(' ')[1] || token;
46
+ // ✅ VALIDATION: Check if token is jwt
47
+ if (!cleanToken || cleanToken.split('.').length !== 3) {
48
+ return true; // Consider invalid tokens as expired
49
+ }
50
+ try {
51
+ // ✅ TYPE-SAFE: Decode with proper typing
52
+ const decoded = jwtDecode(cleanToken);
53
+ const currentTime = Math.floor(Date.now() / 1000);
54
+ // ✅ CONFIGURABLE: Use provided margin (default 60 seconds)
55
+ return decoded.exp < (currentTime + margin);
56
+ }
57
+ catch (error) {
58
+ console.error('[SDK JWT Utils] Error decoding JWT token:', error);
59
+ return true; // Consider unparseable tokens as expired
60
+ }
61
+ };
62
+
63
+ class Web3ChainService {
64
+ constructor(web3ChainApi, providerService) {
65
+ this.web3ChainApi = web3ChainApi;
66
+ this.providerService = providerService;
67
+ this.web3InstanceCache = new Map();
68
+ }
69
+ async getWeb3ByChainId(chainId) {
70
+ const cached = this.web3InstanceCache.get(chainId);
71
+ // ✅ SMART CACHE: Check if cache is valid based on token expiration
72
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
73
+ console.log(`♻️ [Web3ChainService] Using cached Web3 instance for chain ${chainId}`);
74
+ return cached.web3Instance;
75
+ }
76
+ // ✅ CREATE WITH ERROR RECOVERY: Handle auth errors gracefully
77
+ try {
78
+ console.log(`🔧 [Web3ChainService] Creating new Web3 instance for chain ${chainId}`);
79
+ const { web3, chainData } = await this.createWeb3Instance(chainId);
80
+ // ✅ CACHE NEW INSTANCE
81
+ this.web3InstanceCache.set(chainId, {
82
+ web3Instance: web3,
83
+ chainData: chainData,
84
+ createdAt: Date.now(),
85
+ chainId
86
+ });
87
+ return web3;
88
+ }
89
+ catch (error) {
90
+ // ✅ AUTH ERROR RECOVERY: Clear cache and retry once
91
+ if (this.isAuthError(error)) {
92
+ console.warn(`🔄 [Web3ChainService] Auth error detected, clearing cache and retrying...`);
93
+ this.web3InstanceCache.delete(chainId);
94
+ // Retry once with fresh instance
95
+ const { web3, chainData } = await this.createWeb3Instance(chainId);
96
+ this.web3InstanceCache.set(chainId, {
97
+ web3Instance: web3,
98
+ chainData: chainData,
99
+ createdAt: Date.now(),
100
+ chainId
101
+ });
102
+ return web3;
103
+ }
104
+ throw error;
105
+ }
106
+ }
107
+ async getChainDataWithCache(chainId) {
108
+ const cached = this.web3InstanceCache.get(chainId);
109
+ //const now = Date.now();
110
+ if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
111
+ console.log(`♻️ [Web3ChainService] Using cached ChainData for chain ${chainId}`);
112
+ return cached.chainData;
113
+ }
114
+ // If not cached, fetch fresh data
115
+ const chainData = await this.getChainDataById(chainId);
116
+ if (!chainData) {
117
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
118
+ }
119
+ return chainData;
120
+ }
121
+ checkIsTokenExpired(authHeader) {
122
+ // ✅ NULL CHECK: Handle undefined case
123
+ if (!authHeader) {
124
+ return false; // No token means no expiration (public chains)
125
+ }
126
+ // ✅ FUNCTION CALL: Use imported function, not method
127
+ return isTokenExpired(authHeader);
128
+ }
129
+ async createWeb3Instance(chainId) {
130
+ const chainData = await this.getChainDataById(chainId);
131
+ if (!chainData) {
132
+ throw new Error(`Chain data not found for chainId: ${chainId}`);
133
+ }
134
+ // ✅ CRITICAL CHECK: Ensure authHeader is present for private chains
135
+ if (chainData.chainType === 'PRIVATE' && !chainData.authHeader) {
136
+ console.error('❌ [Web3ChainService] CRITICAL: Private chain missing authHeader!');
137
+ throw new Error(`Private chain ${chainId} missing authentication header`);
138
+ }
139
+ const web3 = await this.providerService.getWeb3(chainId, chainData.chainType || 'PUBLIC', chainData);
140
+ return { web3, chainData };
141
+ }
142
+ // ✅ HELPER: Type-safe error checking
143
+ isAuthError(error) {
144
+ const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
145
+ return (message.includes('unauthorized') ||
146
+ message.includes('401') ||
147
+ message.includes('token expired') ||
148
+ message.includes('invalid token'));
149
+ }
150
+ async getChainDataById(chainId) {
151
+ try {
152
+ return await this.web3ChainApi.getChainData(chainId);
153
+ }
154
+ catch (error) {
155
+ console.error('❌ [SDK Web3ChainService] Error getting chain data for chainId:', chainId, error);
156
+ return null;
157
+ }
158
+ }
159
+ }
160
+
161
+ //IMPORTANT//
162
+ //This function is temporary so we install ethers just to make it work, once we delete this function we must uninstall Ethers
163
+ const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
164
+ // Fixed ethers provider setup for authenticated requests
165
+ let ethersProvider;
166
+ if (chainData.authHeader) {
167
+ // For authenticated requests, create a custom FetchRequest
168
+ const fetchRequest = new FetchRequest(chainData.rpcUrl);
169
+ fetchRequest.timeout = timeout;
170
+ fetchRequest.setHeader('Authorization', chainData.authHeader);
171
+ fetchRequest.setHeader('Content-Type', 'application/json');
172
+ if (customUserAgentName) {
173
+ fetchRequest.setHeader('User-Agent', customUserAgentName);
174
+ }
175
+ // Create provider with the configured FetchRequest
176
+ ethersProvider = new JsonRpcProvider(fetchRequest, undefined, {
177
+ staticNetwork: false,
178
+ polling: false, // Disable polling for better Lambda performance
179
+ });
180
+ }
181
+ else {
182
+ // For public chains, use simple URL-based provider
183
+ ethersProvider = new JsonRpcProvider(chainData.rpcUrl, undefined, {
184
+ staticNetwork: false,
185
+ polling: false,
186
+ });
187
+ }
188
+ return {
189
+ web3Provider: null,
190
+ ethersProvider: ethersProvider,
191
+ isAuthenticated: !!chainData.authHeader,
192
+ };
193
+ };
194
+
195
+ class Web3ProviderService {
196
+ constructor(publicHttpProviderService) {
197
+ this.publicHttpProviderService = publicHttpProviderService;
198
+ this._web3 = null;
199
+ this._currentChainId = null;
200
+ }
201
+ async getWeb3(chainId, chainType, privateChainData = null) {
202
+ if (!this._web3 || this._currentChainId !== chainId) {
203
+ if (!chainId)
204
+ throw new Error('ChainId not found');
205
+ try {
206
+ this._currentChainId = chainId;
207
+ const provider = await this.getWeb3ByChainId(chainId, chainType, privateChainData);
208
+ this._web3 = this.convertToWeb3(provider);
209
+ }
210
+ catch (error) {
211
+ console.error('Error getting web3 connection from chain id ' + chainId, error);
212
+ throw new Error('Error getting web3 connection from chain id ' + chainId);
213
+ }
214
+ }
215
+ return this._web3;
216
+ }
217
+ // Keep return type as 'any' to avoid TypeScript errors while still being adapted later
218
+ getWeb3ByChainId(chainId, chainType, privateChainData = null) {
219
+ // Rest of the method remains the same
220
+ if (chainType === ChainTypes$1.PRIVATE && privateChainData) {
221
+ //const privateProvider = this.privateChainProviderService.getProviderFromChainData(privateChainData)
222
+ const privateProvider = getWeb3ProviderFromChainData(privateChainData);
223
+ if (!privateProvider || privateProvider instanceof Error)
224
+ throw new Error('Error getting web3 provider');
225
+ return privateProvider;
226
+ }
227
+ else {
228
+ const publicProvider = this.publicHttpProviderService.getProvider(chainId);
229
+ if (!publicProvider || publicProvider instanceof Error)
230
+ throw new Error('Error getting web3 provider');
231
+ return publicProvider;
232
+ }
233
+ }
234
+ convertToWeb3(provider) {
235
+ if (provider instanceof Web3) {
236
+ return provider;
237
+ }
238
+ if (provider && typeof provider === 'object' && 'web3Provider' in provider) {
239
+ const providerObj = provider;
240
+ // If we want to user the web3Provider directly:
241
+ /*if (providerObj.web3Provider) {
242
+ return new Web3(providerObj.web3Provider as never);
243
+ }*/
244
+ if (providerObj.ethersProvider) {
245
+ const url = this.extractUrlFromEthersProvider(providerObj.ethersProvider);
246
+ const headers = this.extractHeadersFromEthersProvider(providerObj.ethersProvider);
247
+ const web3 = new Web3(url);
248
+ const currentProvider = web3.currentProvider;
249
+ if (currentProvider) {
250
+ currentProvider['url'] = url;
251
+ if (headers && Object.keys(headers).length > 0) {
252
+ currentProvider['request'] = async (payload) => {
253
+ const response = await fetch(url, {
254
+ method: 'POST',
255
+ headers: {
256
+ 'Content-Type': 'application/json',
257
+ ...headers
258
+ },
259
+ body: JSON.stringify(payload)
260
+ });
261
+ if (!response.ok) {
262
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
263
+ }
264
+ return await response.json();
265
+ };
266
+ }
267
+ }
268
+ return web3;
269
+ }
270
+ }
271
+ return new Web3(provider);
272
+ }
273
+ extractUrlFromEthersProvider(ethersProvider) {
274
+ return ethersProvider.connection?.url ||
275
+ ethersProvider._getConnection?.()?.url ||
276
+ ethersProvider.url ||
277
+ '';
278
+ }
279
+ extractHeadersFromEthersProvider(ethersProvider) {
280
+ return ethersProvider.connection?.headers ||
281
+ ethersProvider._getConnection?.()?.headers ||
282
+ {};
283
+ }
284
+ }
285
+
286
+ /**
287
+ * Web3 Chain Domain Models
288
+ *
289
+ * Minimal interface definitions matching framework usage exactly.
290
+ * Local ChainData interface to avoid external dependency issues.
291
+ */
292
+ const ChainTypes = {
293
+ PUBLIC: 'PUBLIC',
294
+ PRIVATE: 'PRIVATE'
295
+ };
296
+
297
+ function createWeb3ChainSDK(apiClient, providerService) {
298
+ const web3ChainApi = new Web3ChainApi(apiClient);
299
+ const web3ChainService = new Web3ChainService(web3ChainApi, providerService); // ✅ DIRECT INJECTION
300
+ return {
301
+ // ✅ REPLICA: Same methods as framework
302
+ getChainDataById: (chainId) => web3ChainService.getChainDataById(chainId),
303
+ getWeb3ByChainId: (chainId) => web3ChainService.getWeb3ByChainId(chainId),
304
+ api: web3ChainApi,
305
+ service: web3ChainService
306
+ };
307
+ }
308
+
309
+ export { ChainTypes, Web3ChainApi, Web3ChainService, Web3ProviderService, createWeb3ChainSDK };
310
+ //# sourceMappingURL=web3-chain.js.map