@paymechain/sdk 1.0.0

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 (207) hide show
  1. package/README.md +152 -0
  2. package/assets/PaymeSDK.png +0 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +24 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/models/account-balance.model.d.ts +6 -0
  8. package/dist/models/account-balance.model.d.ts.map +1 -0
  9. package/dist/models/account-balance.model.js +3 -0
  10. package/dist/models/account-balance.model.js.map +1 -0
  11. package/dist/models/account-info.model.d.ts +7 -0
  12. package/dist/models/account-info.model.d.ts.map +1 -0
  13. package/dist/models/account-info.model.js +3 -0
  14. package/dist/models/account-info.model.js.map +1 -0
  15. package/dist/models/balance-line.model.d.ts +6 -0
  16. package/dist/models/balance-line.model.d.ts.map +1 -0
  17. package/dist/models/balance-line.model.js +3 -0
  18. package/dist/models/balance-line.model.js.map +1 -0
  19. package/dist/models/block-header.model.d.ts +8 -0
  20. package/dist/models/block-header.model.d.ts.map +1 -0
  21. package/dist/models/block-header.model.js +3 -0
  22. package/dist/models/block-header.model.js.map +1 -0
  23. package/dist/models/block-summary.model.d.ts +11 -0
  24. package/dist/models/block-summary.model.d.ts.map +1 -0
  25. package/dist/models/block-summary.model.js +3 -0
  26. package/dist/models/block-summary.model.js.map +1 -0
  27. package/dist/models/command-result.model.d.ts +18 -0
  28. package/dist/models/command-result.model.d.ts.map +1 -0
  29. package/dist/models/command-result.model.js +16 -0
  30. package/dist/models/command-result.model.js.map +1 -0
  31. package/dist/models/create-wallet.model.d.ts +6 -0
  32. package/dist/models/create-wallet.model.d.ts.map +1 -0
  33. package/dist/models/create-wallet.model.js +3 -0
  34. package/dist/models/create-wallet.model.js.map +1 -0
  35. package/dist/models/derive-address-request.model.d.ts +5 -0
  36. package/dist/models/derive-address-request.model.d.ts.map +1 -0
  37. package/dist/models/derive-address-request.model.js +3 -0
  38. package/dist/models/derive-address-request.model.js.map +1 -0
  39. package/dist/models/derive-address.model.d.ts +5 -0
  40. package/dist/models/derive-address.model.d.ts.map +1 -0
  41. package/dist/models/derive-address.model.js +3 -0
  42. package/dist/models/derive-address.model.js.map +1 -0
  43. package/dist/models/explorer-transaction-summary.model.d.ts +9 -0
  44. package/dist/models/explorer-transaction-summary.model.d.ts.map +1 -0
  45. package/dist/models/explorer-transaction-summary.model.js +3 -0
  46. package/dist/models/explorer-transaction-summary.model.js.map +1 -0
  47. package/dist/models/index.d.ts +153 -0
  48. package/dist/models/index.d.ts.map +1 -0
  49. package/dist/models/index.js +12 -0
  50. package/dist/models/index.js.map +1 -0
  51. package/dist/models/merkle-proof.model.d.ts +7 -0
  52. package/dist/models/merkle-proof.model.d.ts.map +1 -0
  53. package/dist/models/merkle-proof.model.js +3 -0
  54. package/dist/models/merkle-proof.model.js.map +1 -0
  55. package/dist/models/network-statistics.model.d.ts +8 -0
  56. package/dist/models/network-statistics.model.d.ts.map +1 -0
  57. package/dist/models/network-statistics.model.js +3 -0
  58. package/dist/models/network-statistics.model.js.map +1 -0
  59. package/dist/models/node-selection-strategy.enum.d.ts +6 -0
  60. package/dist/models/node-selection-strategy.enum.d.ts.map +1 -0
  61. package/dist/models/node-selection-strategy.enum.js +10 -0
  62. package/dist/models/node-selection-strategy.enum.js.map +1 -0
  63. package/dist/models/node-status.model.d.ts +6 -0
  64. package/dist/models/node-status.model.d.ts.map +1 -0
  65. package/dist/models/node-status.model.js +3 -0
  66. package/dist/models/node-status.model.js.map +1 -0
  67. package/dist/models/node.model.d.ts +5 -0
  68. package/dist/models/node.model.d.ts.map +1 -0
  69. package/dist/models/node.model.js +3 -0
  70. package/dist/models/node.model.js.map +1 -0
  71. package/dist/models/paged-result.model.d.ts +7 -0
  72. package/dist/models/paged-result.model.d.ts.map +1 -0
  73. package/dist/models/paged-result.model.js +3 -0
  74. package/dist/models/paged-result.model.js.map +1 -0
  75. package/dist/models/rich-list-item.model.d.ts +5 -0
  76. package/dist/models/rich-list-item.model.d.ts.map +1 -0
  77. package/dist/models/rich-list-item.model.js +3 -0
  78. package/dist/models/rich-list-item.model.js.map +1 -0
  79. package/dist/models/send-transaction-response.model.d.ts +4 -0
  80. package/dist/models/send-transaction-response.model.d.ts.map +1 -0
  81. package/dist/models/send-transaction-response.model.js +3 -0
  82. package/dist/models/send-transaction-response.model.js.map +1 -0
  83. package/dist/models/send-transaction.model.d.ts +9 -0
  84. package/dist/models/send-transaction.model.d.ts.map +1 -0
  85. package/dist/models/send-transaction.model.js +3 -0
  86. package/dist/models/send-transaction.model.js.map +1 -0
  87. package/dist/models/stake.model.d.ts +7 -0
  88. package/dist/models/stake.model.d.ts.map +1 -0
  89. package/dist/models/stake.model.js +3 -0
  90. package/dist/models/stake.model.js.map +1 -0
  91. package/dist/models/submit-transaction-request.model.d.ts +13 -0
  92. package/dist/models/submit-transaction-request.model.d.ts.map +1 -0
  93. package/dist/models/submit-transaction-request.model.js +3 -0
  94. package/dist/models/submit-transaction-request.model.js.map +1 -0
  95. package/dist/models/submit-transaction-response.model.d.ts +4 -0
  96. package/dist/models/submit-transaction-response.model.d.ts.map +1 -0
  97. package/dist/models/submit-transaction-response.model.js +3 -0
  98. package/dist/models/submit-transaction-response.model.js.map +1 -0
  99. package/dist/models/token.model.d.ts +7 -0
  100. package/dist/models/token.model.d.ts.map +1 -0
  101. package/dist/models/token.model.js +3 -0
  102. package/dist/models/token.model.js.map +1 -0
  103. package/dist/models/transaction-details.model.d.ts +11 -0
  104. package/dist/models/transaction-details.model.d.ts.map +1 -0
  105. package/dist/models/transaction-details.model.js +3 -0
  106. package/dist/models/transaction-details.model.js.map +1 -0
  107. package/dist/models/transaction-id.model.d.ts +4 -0
  108. package/dist/models/transaction-id.model.d.ts.map +1 -0
  109. package/dist/models/transaction-id.model.js +3 -0
  110. package/dist/models/transaction-id.model.js.map +1 -0
  111. package/dist/models/transaction-summary.model.d.ts +9 -0
  112. package/dist/models/transaction-summary.model.d.ts.map +1 -0
  113. package/dist/models/transaction-summary.model.js +3 -0
  114. package/dist/models/transaction-summary.model.js.map +1 -0
  115. package/dist/models/unbonding-entry.model.d.ts +6 -0
  116. package/dist/models/unbonding-entry.model.d.ts.map +1 -0
  117. package/dist/models/unbonding-entry.model.js +3 -0
  118. package/dist/models/unbonding-entry.model.js.map +1 -0
  119. package/dist/models/unstake.model.d.ts +7 -0
  120. package/dist/models/unstake.model.d.ts.map +1 -0
  121. package/dist/models/unstake.model.js +3 -0
  122. package/dist/models/unstake.model.js.map +1 -0
  123. package/dist/models/validator.model.d.ts +9 -0
  124. package/dist/models/validator.model.d.ts.map +1 -0
  125. package/dist/models/validator.model.js +3 -0
  126. package/dist/models/validator.model.js.map +1 -0
  127. package/dist/models/wallet-account-balance.model.d.ts +6 -0
  128. package/dist/models/wallet-account-balance.model.d.ts.map +1 -0
  129. package/dist/models/wallet-account-balance.model.js +3 -0
  130. package/dist/models/wallet-account-balance.model.js.map +1 -0
  131. package/dist/models/wallet-detailed-transaction-summary.model.d.ts +20 -0
  132. package/dist/models/wallet-detailed-transaction-summary.model.d.ts.map +1 -0
  133. package/dist/models/wallet-detailed-transaction-summary.model.js +3 -0
  134. package/dist/models/wallet-detailed-transaction-summary.model.js.map +1 -0
  135. package/dist/models/wallet.model.d.ts +6 -0
  136. package/dist/models/wallet.model.d.ts.map +1 -0
  137. package/dist/models/wallet.model.js +3 -0
  138. package/dist/models/wallet.model.js.map +1 -0
  139. package/dist/payme-client.d.ts +44 -0
  140. package/dist/payme-client.d.ts.map +1 -0
  141. package/dist/payme-client.js +71 -0
  142. package/dist/payme-client.js.map +1 -0
  143. package/dist/services/account.service.d.ts +12 -0
  144. package/dist/services/account.service.d.ts.map +1 -0
  145. package/dist/services/account.service.js +26 -0
  146. package/dist/services/account.service.js.map +1 -0
  147. package/dist/services/base.service.d.ts +11 -0
  148. package/dist/services/base.service.d.ts.map +1 -0
  149. package/dist/services/base.service.js +56 -0
  150. package/dist/services/base.service.js.map +1 -0
  151. package/dist/services/block.service.d.ts +16 -0
  152. package/dist/services/block.service.d.ts.map +1 -0
  153. package/dist/services/block.service.js +23 -0
  154. package/dist/services/block.service.js.map +1 -0
  155. package/dist/services/certificate-manager.service.d.ts +19 -0
  156. package/dist/services/certificate-manager.service.d.ts.map +1 -0
  157. package/dist/services/certificate-manager.service.js +198 -0
  158. package/dist/services/certificate-manager.service.js.map +1 -0
  159. package/dist/services/explorer.service.d.ts +9 -0
  160. package/dist/services/explorer.service.d.ts.map +1 -0
  161. package/dist/services/explorer.service.js +18 -0
  162. package/dist/services/explorer.service.js.map +1 -0
  163. package/dist/services/index.d.ts +15 -0
  164. package/dist/services/index.d.ts.map +1 -0
  165. package/dist/services/index.js +32 -0
  166. package/dist/services/index.js.map +1 -0
  167. package/dist/services/light-client.service.d.ts +9 -0
  168. package/dist/services/light-client.service.d.ts.map +1 -0
  169. package/dist/services/light-client.service.js +18 -0
  170. package/dist/services/light-client.service.js.map +1 -0
  171. package/dist/services/node-manager.service.d.ts +35 -0
  172. package/dist/services/node-manager.service.d.ts.map +1 -0
  173. package/dist/services/node-manager.service.js +170 -0
  174. package/dist/services/node-manager.service.js.map +1 -0
  175. package/dist/services/signalr.service.d.ts +21 -0
  176. package/dist/services/signalr.service.d.ts.map +1 -0
  177. package/dist/services/signalr.service.js +123 -0
  178. package/dist/services/signalr.service.js.map +1 -0
  179. package/dist/services/staking.service.d.ts +12 -0
  180. package/dist/services/staking.service.d.ts.map +1 -0
  181. package/dist/services/staking.service.js +17 -0
  182. package/dist/services/staking.service.js.map +1 -0
  183. package/dist/services/statistics.service.d.ts +8 -0
  184. package/dist/services/statistics.service.d.ts.map +1 -0
  185. package/dist/services/statistics.service.js +13 -0
  186. package/dist/services/statistics.service.js.map +1 -0
  187. package/dist/services/token.service.d.ts +9 -0
  188. package/dist/services/token.service.d.ts.map +1 -0
  189. package/dist/services/token.service.js +16 -0
  190. package/dist/services/token.service.js.map +1 -0
  191. package/dist/services/transaction.service.d.ts +9 -0
  192. package/dist/services/transaction.service.d.ts.map +1 -0
  193. package/dist/services/transaction.service.js +16 -0
  194. package/dist/services/transaction.service.js.map +1 -0
  195. package/dist/services/validator.service.d.ts +16 -0
  196. package/dist/services/validator.service.d.ts.map +1 -0
  197. package/dist/services/validator.service.js +23 -0
  198. package/dist/services/validator.service.js.map +1 -0
  199. package/dist/services/wallet.service.d.ts +11 -0
  200. package/dist/services/wallet.service.d.ts.map +1 -0
  201. package/dist/services/wallet.service.js +23 -0
  202. package/dist/services/wallet.service.js.map +1 -0
  203. package/dist/utils/pem-parser.d.ts +9 -0
  204. package/dist/utils/pem-parser.d.ts.map +1 -0
  205. package/dist/utils/pem-parser.js +140 -0
  206. package/dist/utils/pem-parser.js.map +1 -0
  207. package/package.json +46 -0
@@ -0,0 +1,12 @@
1
+ import { BaseService } from './base.service';
2
+ import { AccountViewModel, BalanceLineViewModel, RichListItemViewModel, WalletAccountBalanceViewModel, TransactionSummaryViewModel } from '../models';
3
+ export declare class AccountService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ getAccountInfo(address: string, language?: string): Promise<AccountViewModel>;
7
+ getAccountBalance(address: string, tokenId: string, language?: string): Promise<BalanceLineViewModel>;
8
+ getAccountTransactions(address: string, language?: string): Promise<TransactionSummaryViewModel[]>;
9
+ getRichList(tokenId: string, count?: number, language?: string): Promise<RichListItemViewModel[]>;
10
+ getAllBalances(address: string, language?: string): Promise<WalletAccountBalanceViewModel[]>;
11
+ }
12
+ //# sourceMappingURL=account.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.service.d.ts","sourceRoot":"","sources":["../../src/services/account.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC5B,MAAM,WAAW,CAAC;AAEnB,qBAAa,cAAc;IACb,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAEtC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI7E,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIrG,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAIlG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAItG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,EAAE,CAAC;CAInG"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountService = void 0;
4
+ class AccountService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async getAccountInfo(address, language) {
9
+ return this.baseService.get(`/api/accounts/${address}`, {}, language);
10
+ }
11
+ async getAccountBalance(address, tokenId, language) {
12
+ return this.baseService.get(`/api/accounts/${address}/balance/${tokenId}`, {}, language);
13
+ }
14
+ async getAccountTransactions(address, language) {
15
+ return this.baseService.get(`/api/accounts/${address}/transactions`, {}, language);
16
+ }
17
+ async getRichList(tokenId, count = 100, language) {
18
+ return this.baseService.get(`/api/accounts/rich-list`, { tokenId, count }, language);
19
+ }
20
+ async getAllBalances(address, language) {
21
+ // This endpoint is documented under the /wallet section in blockchain.md, but fits logically here too.
22
+ return this.baseService.get(`/api/wallet/${address}/balance`, {}, language);
23
+ }
24
+ }
25
+ exports.AccountService = AccountService;
26
+ //# sourceMappingURL=account.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.service.js","sourceRoot":"","sources":["../../src/services/account.service.ts"],"names":[],"mappings":";;;AASA,MAAa,cAAc;IACzB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,QAAiB;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAmB,iBAAiB,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,OAAe,EAAE,QAAiB;QACzE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAuB,iBAAiB,OAAO,YAAY,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,OAAe,EAAE,QAAiB;QAC7D,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAgC,iBAAiB,OAAO,eAAe,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,QAAgB,GAAG,EAAE,QAAiB;QACvE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAA0B,yBAAyB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,QAAiB;QACrD,uGAAuG;QACvG,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAkC,eAAe,OAAO,UAAU,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/G,CAAC;CACF;AAvBD,wCAuBC"}
@@ -0,0 +1,11 @@
1
+ import { NodeManagerService } from './node-manager.service';
2
+ export declare class BaseService {
3
+ private nodeManager;
4
+ private defaultLanguage;
5
+ constructor(nodeManager: NodeManagerService);
6
+ private createAxiosInstance;
7
+ get<T>(path: string, params?: Record<string, any>, language?: string): Promise<T>;
8
+ post<T>(path: string, body: any, params?: Record<string, any>, language?: string): Promise<T>;
9
+ private handleResponse;
10
+ }
11
+ //# sourceMappingURL=base.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.service.d.ts","sourceRoot":"","sources":["../../src/services/base.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,WAAW;IAIpB,OAAO,CAAC,WAAW;IAHrB,OAAO,CAAC,eAAe,CAAgB;gBAG7B,WAAW,EAAE,kBAAkB;IAGzC,OAAO,CAAC,mBAAmB;IAiBd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjF,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAO1G,OAAO,CAAC,cAAc;CAYvB"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BaseService = void 0;
7
+ // src/services/base.service.ts
8
+ const axios_1 = __importDefault(require("axios"));
9
+ class BaseService {
10
+ constructor(nodeManager) {
11
+ this.nodeManager = nodeManager;
12
+ this.defaultLanguage = 'pt';
13
+ }
14
+ createAxiosInstance() {
15
+ const baseUrl = this.nodeManager.getHealthyNodeUrl();
16
+ if (!baseUrl) {
17
+ throw new Error("Não foi possível determinar um nó de URL saudável para a solicitação.");
18
+ }
19
+ const httpsAgent = this.nodeManager.createHttpsAgent();
20
+ return axios_1.default.create({
21
+ baseURL: baseUrl,
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ httpsAgent: httpsAgent,
26
+ });
27
+ }
28
+ async get(path, params, language) {
29
+ const axiosInstance = this.createAxiosInstance();
30
+ const finalParams = Object.assign(Object.assign({}, params), { language: language || this.defaultLanguage });
31
+ const response = await axiosInstance.get(path, { params: finalParams });
32
+ return this.handleResponse(response);
33
+ }
34
+ async post(path, body, params, language) {
35
+ const axiosInstance = this.createAxiosInstance();
36
+ const finalParams = Object.assign(Object.assign({}, params), { language: language || this.defaultLanguage });
37
+ const response = await axiosInstance.post(path, body, { params: finalParams });
38
+ return this.handleResponse(response);
39
+ }
40
+ handleResponse(response) {
41
+ const commandResult = response.data;
42
+ if (response.status >= 200 && response.status < 300) {
43
+ if (commandResult.Success) {
44
+ return commandResult.Data;
45
+ }
46
+ else {
47
+ throw new Error(commandResult.Message || 'A API retornou um erro com success=false');
48
+ }
49
+ }
50
+ else {
51
+ throw new Error(commandResult.Message || `A solicitação da API falhou com o status ${response.status}`);
52
+ }
53
+ }
54
+ }
55
+ exports.BaseService = BaseService;
56
+ //# sourceMappingURL=base.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../src/services/base.service.ts"],"names":[],"mappings":";;;;;;AAAA,+BAA+B;AAC/B,kDAA4D;AAI5D,MAAa,WAAW;IAGtB,YACU,WAA+B;QAA/B,gBAAW,GAAX,WAAW,CAAoB;QAHjC,oBAAe,GAAW,IAAI,CAAC;IAInC,CAAC;IAEG,mBAAmB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAEvD,OAAO,eAAK,CAAC,MAAM,CAAC;YAClB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,MAA4B,EAAE,QAAiB;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjD,MAAM,WAAW,mCAAQ,MAAM,KAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,eAAe,GAAE,CAAC;QAC9E,MAAM,QAAQ,GAAqC,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1G,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAS,EAAE,MAA4B,EAAE,QAAiB;QAC3F,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjD,MAAM,WAAW,mCAAQ,MAAM,KAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,eAAe,GAAE,CAAC;QAC9E,MAAM,QAAQ,GAAqC,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACjH,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAEO,cAAc,CAAI,QAA0C;QAClE,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAClD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,aAAa,CAAC,IAAS,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,IAAI,0CAA0C,CAAC,CAAC;YACzF,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,IAAI,4CAA4C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;CACF;AAlDD,kCAkDC"}
@@ -0,0 +1,16 @@
1
+ import { BaseService } from './base.service';
2
+ import { BlockViewModel } from '../models';
3
+ export declare class BlockService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ /**
7
+ * Retorna os detalhes do bloco mais recente na blockchain.
8
+ */
9
+ getLatestBlock(language?: string): Promise<BlockViewModel>;
10
+ /**
11
+ * Retorna os detalhes de um bloco específico, identificado pelo seu hash ou altura.
12
+ * @param hashOrHeight O hash (string) ou a altura (number) do bloco a ser consultado.
13
+ */
14
+ getBlock(hashOrHeight: string | number, language?: string): Promise<BlockViewModel>;
15
+ }
16
+ //# sourceMappingURL=block.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.service.d.ts","sourceRoot":"","sources":["../../src/services/block.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,qBAAa,YAAY;IACX,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C;;OAEG;IACG,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAIhE;;;OAGG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAG1F"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockService = void 0;
4
+ class BlockService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ /**
9
+ * Retorna os detalhes do bloco mais recente na blockchain.
10
+ */
11
+ async getLatestBlock(language) {
12
+ return this.baseService.get('/api/blocks/latest', {}, language);
13
+ }
14
+ /**
15
+ * Retorna os detalhes de um bloco específico, identificado pelo seu hash ou altura.
16
+ * @param hashOrHeight O hash (string) ou a altura (number) do bloco a ser consultado.
17
+ */
18
+ async getBlock(hashOrHeight, language) {
19
+ return this.baseService.get(`/api/blocks/${hashOrHeight}`, {}, language);
20
+ }
21
+ }
22
+ exports.BlockService = BlockService;
23
+ //# sourceMappingURL=block.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.service.js","sourceRoot":"","sources":["../../src/services/block.service.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IACvB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAiB;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAiB,oBAAoB,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,YAA6B,EAAE,QAAiB;QAC7D,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAiB,eAAe,YAAY,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3F,CAAC;CACF;AAjBD,oCAiBC"}
@@ -0,0 +1,19 @@
1
+ export declare class CertificateManagerService {
2
+ private rootCaCertificate;
3
+ private etag;
4
+ private checkTimer;
5
+ private nodeRegistryUrl;
6
+ private storage;
7
+ private static readonly CERT_KEY;
8
+ private static readonly ETAG_KEY;
9
+ constructor(nodeRegistryUrl: string);
10
+ initializeAsync(): Promise<void>;
11
+ private checkAndLoadCertificateAsync;
12
+ private downloadCertificateAsync;
13
+ private loadCertificateFromStorage;
14
+ private scheduleNextCheck;
15
+ private getNextCheckInterval;
16
+ getRootCaCertificate(): string | undefined;
17
+ dispose(): void;
18
+ }
19
+ //# sourceMappingURL=certificate-manager.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate-manager.service.d.ts","sourceRoot":"","sources":["../../src/services/certificate-manager.service.ts"],"names":[],"mappings":"AAkEA,qBAAa,yBAAyB;IAClC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAW;IAE1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAEvC,eAAe,EAAE,MAAM;IAQtB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAM/B,4BAA4B;YA0B5B,wBAAwB;YA0CxB,0BAA0B;IAWxC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,oBAAoB;IAgCrB,oBAAoB,IAAI,MAAM,GAAG,SAAS;IAI1C,OAAO,IAAI,IAAI;CAOzB"}
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CertificateManagerService = void 0;
7
+ // src/services/certificate-manager.service.ts
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const pem_parser_1 = require("../utils/pem-parser");
10
+ // --- Simple Storage Abstraction ---
11
+ const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
12
+ let fs, path;
13
+ if (isNode) {
14
+ fs = require('fs');
15
+ path = require('path');
16
+ }
17
+ class UniversalStorage {
18
+ constructor() {
19
+ this.nodePath = null;
20
+ if (isNode) {
21
+ const appData = process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Preferences' : process.env.HOME + "/.local/share");
22
+ const sdkDataPath = path.join(appData, 'PaymeSDK');
23
+ if (!fs.existsSync(sdkDataPath)) {
24
+ fs.mkdirSync(sdkDataPath, { recursive: true });
25
+ }
26
+ this.nodePath = sdkDataPath;
27
+ }
28
+ }
29
+ getNodeFilePath(key) {
30
+ return path.join(this.nodePath, key);
31
+ }
32
+ async getItem(key) {
33
+ if (isNode) {
34
+ try {
35
+ const filePath = this.getNodeFilePath(key);
36
+ if (fs.existsSync(filePath)) {
37
+ return await fs.promises.readFile(filePath, 'utf8');
38
+ }
39
+ }
40
+ catch (e) {
41
+ console.error(`[UniversalStorage] Error reading from file system for key ${key}:`, e);
42
+ }
43
+ }
44
+ else if (typeof localStorage !== 'undefined') {
45
+ return localStorage.getItem(key);
46
+ }
47
+ return null;
48
+ }
49
+ async setItem(key, value) {
50
+ if (isNode) {
51
+ try {
52
+ await fs.promises.writeFile(this.getNodeFilePath(key), value, 'utf8');
53
+ }
54
+ catch (e) {
55
+ console.error(`[UniversalStorage] Error writing to file system for key ${key}:`, e);
56
+ }
57
+ }
58
+ else if (typeof localStorage !== 'undefined') {
59
+ localStorage.setItem(key, value);
60
+ }
61
+ }
62
+ }
63
+ // --- End of Storage Abstraction ---
64
+ class CertificateManagerService {
65
+ constructor(nodeRegistryUrl) {
66
+ if (!nodeRegistryUrl) {
67
+ console.warn("[CertificateManager] NodeRegistryUrl is not provided. Dynamic CA certificate management will be disabled.");
68
+ }
69
+ this.nodeRegistryUrl = nodeRegistryUrl;
70
+ this.storage = new UniversalStorage();
71
+ }
72
+ async initializeAsync() {
73
+ console.log("[CertificateManager] Initializing...");
74
+ await this.checkAndLoadCertificateAsync(true); // isStartup = true
75
+ console.log("[CertificateManager] Initialization complete.");
76
+ }
77
+ async checkAndLoadCertificateAsync(isStartup = false) {
78
+ try {
79
+ const wasUpdated = await this.downloadCertificateAsync();
80
+ if (wasUpdated) {
81
+ console.log("[CertificateManager] Certificate was updated from remote, loading from storage.");
82
+ await this.loadCertificateFromStorage();
83
+ }
84
+ else if (isStartup && !this.rootCaCertificate) {
85
+ console.log("[CertificateManager] No remote update, attempting to load from cache on startup.");
86
+ await this.loadCertificateFromStorage();
87
+ }
88
+ }
89
+ catch (ex) {
90
+ console.error("[CertificateManager] An error occurred during the certificate check/load process:", ex.message);
91
+ // On failure, especially at startup, try to load from cache as a fallback.
92
+ if (isStartup && !this.rootCaCertificate) {
93
+ console.warn("[CertificateManager] Attempting to load from cache due to error.");
94
+ await this.loadCertificateFromStorage();
95
+ }
96
+ }
97
+ finally {
98
+ // Always schedule the next check unless it's a startup failure with no URL.
99
+ if (this.nodeRegistryUrl) {
100
+ this.scheduleNextCheck();
101
+ }
102
+ }
103
+ }
104
+ async downloadCertificateAsync() {
105
+ if (!this.nodeRegistryUrl) {
106
+ return false;
107
+ }
108
+ try {
109
+ const certUrl = `${this.nodeRegistryUrl}/v1/Certificate/latest`;
110
+ const lastETag = await this.storage.getItem(CertificateManagerService.ETAG_KEY);
111
+ const headers = {};
112
+ if (lastETag) {
113
+ headers['If-None-Match'] = lastETag;
114
+ }
115
+ console.log(`[CertificateManager] Checking for new CA certificate at ${certUrl} with ETag ${lastETag || 'none'}...`);
116
+ const response = await axios_1.default.get(certUrl, {
117
+ headers,
118
+ validateStatus: (status) => (status >= 200 && status < 300) || status === 304,
119
+ });
120
+ if (response.status === 304) {
121
+ console.log("[CertificateManager] CA certificate is up to date (304 Not Modified).");
122
+ return false;
123
+ }
124
+ console.log("[CertificateManager] New CA certificate downloaded. Updating local cache.");
125
+ const newCertPem = response.data;
126
+ const newETag = response.headers['etag'];
127
+ await this.storage.setItem(CertificateManagerService.CERT_KEY, newCertPem);
128
+ if (newETag) {
129
+ await this.storage.setItem(CertificateManagerService.ETAG_KEY, newETag);
130
+ }
131
+ return true;
132
+ }
133
+ catch (ex) {
134
+ console.error("[CertificateManager] Failed to download new certificate:", ex.message);
135
+ return false;
136
+ }
137
+ }
138
+ async loadCertificateFromStorage() {
139
+ const certPem = await this.storage.getItem(CertificateManagerService.CERT_KEY);
140
+ if (certPem) {
141
+ this.rootCaCertificate = certPem;
142
+ console.log("[CertificateManager] Certificate loaded successfully from storage.");
143
+ }
144
+ else {
145
+ console.warn("[CertificateManager] Local CA certificate not found. HTTPS calls may fail until a certificate is downloaded.");
146
+ this.rootCaCertificate = undefined;
147
+ }
148
+ }
149
+ scheduleNextCheck() {
150
+ if (this.checkTimer) {
151
+ clearTimeout(this.checkTimer);
152
+ }
153
+ const nextInterval = this.getNextCheckInterval();
154
+ console.log(`[CertificateManager] Scheduling next certificate check in ${nextInterval / 1000 / 60} minutes.`);
155
+ this.checkTimer = setTimeout(() => this.checkAndLoadCertificateAsync(), nextInterval);
156
+ }
157
+ getNextCheckInterval() {
158
+ if (!this.rootCaCertificate) {
159
+ console.warn("[CertificateManager] No root certificate loaded. Retrying in 5 minutes.");
160
+ return 5 * 60 * 1000;
161
+ }
162
+ const expirationDate = (0, pem_parser_1.parseX509Expiration)(this.rootCaCertificate);
163
+ if (!expirationDate) {
164
+ console.error("[CertificateManager] Could not parse certificate expiration. Defaulting to 24-hour check.");
165
+ return 24 * 60 * 60 * 1000; // 24 hours
166
+ }
167
+ const now = new Date();
168
+ const timeRemaining = expirationDate.getTime() - now.getTime();
169
+ if (timeRemaining <= 0) {
170
+ console.error("[CertificateManager] The current CA certificate has expired! Checking for a new one in 1 minute.");
171
+ return 1 * 60 * 1000; // 1 minute
172
+ }
173
+ if (timeRemaining < 2 * 24 * 60 * 60 * 1000) { // 2 days
174
+ console.warn(`[CertificateManager] CA certificate expires in less than 2 days. Checking for updates every 15 minutes.`);
175
+ return 15 * 60 * 1000; // 15 minutes
176
+ }
177
+ if (timeRemaining < 7 * 24 * 60 * 60 * 1000) { // 7 days
178
+ console.warn(`[CertificateManager] CA certificate expires in less than 7 days. Checking for updates every hour.`);
179
+ return 60 * 60 * 1000; // 1 hour
180
+ }
181
+ // Default: check once a day
182
+ return 24 * 60 * 60 * 1000;
183
+ }
184
+ getRootCaCertificate() {
185
+ return this.rootCaCertificate;
186
+ }
187
+ dispose() {
188
+ if (this.checkTimer) {
189
+ clearTimeout(this.checkTimer);
190
+ this.checkTimer = undefined;
191
+ }
192
+ console.log("[CertificateManager] Disposed.");
193
+ }
194
+ }
195
+ exports.CertificateManagerService = CertificateManagerService;
196
+ CertificateManagerService.CERT_KEY = 'payme_ca.crt';
197
+ CertificateManagerService.ETAG_KEY = 'payme_ca.etag';
198
+ //# sourceMappingURL=certificate-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate-manager.service.js","sourceRoot":"","sources":["../../src/services/certificate-manager.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BaseService } from './base.service';
2
+ import { BlockSummaryViewModel, PagedResult, TransactionSummaryViewModel } from '../models';
3
+ export declare class ExplorerService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ getBlocks(page?: number, pageSize?: number, language?: string): Promise<PagedResult<BlockSummaryViewModel>>;
7
+ getTransactions(page?: number, pageSize?: number, language?: string): Promise<PagedResult<TransactionSummaryViewModel>>;
8
+ }
9
+ //# sourceMappingURL=explorer.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explorer.service.d.ts","sourceRoot":"","sources":["../../src/services/explorer.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACH,qBAAqB,EACrB,WAAW,EACX,2BAA2B,EAC9B,MAAM,WAAW,CAAC;AAEnB,qBAAa,eAAe;IACd,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAEtC,SAAS,CAAC,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAKlH,eAAe,CAAC,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;CAIrI"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExplorerService = void 0;
4
+ class ExplorerService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async getBlocks(page = 1, pageSize = 10, language) {
9
+ const params = { page, pageSize };
10
+ return this.baseService.get(`/api/explorer/blocks`, params, language);
11
+ }
12
+ async getTransactions(page = 1, pageSize = 10, language) {
13
+ const params = { page, pageSize };
14
+ return this.baseService.get(`/api/explorer/transactions`, params, language);
15
+ }
16
+ }
17
+ exports.ExplorerService = ExplorerService;
18
+ //# sourceMappingURL=explorer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explorer.service.js","sourceRoot":"","sources":["../../src/services/explorer.service.ts"],"names":[],"mappings":";;;AAOA,MAAa,eAAe;IAC1B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,SAAS,CAAC,OAAe,CAAC,EAAE,WAAmB,EAAE,EAAE,QAAiB;QACxE,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAqC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe,CAAC,EAAE,WAAmB,EAAE,EAAE,QAAiB;QAC9E,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAA2C,4BAA4B,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxH,CAAC;CACF;AAZD,0CAYC"}
@@ -0,0 +1,15 @@
1
+ export * from './account.service';
2
+ export * from './base.service';
3
+ export * from './block.service';
4
+ export * from './certificate-manager.service';
5
+ export * from './explorer.service';
6
+ export * from './light-client.service';
7
+ export * from './node-manager.service';
8
+ export * from './signalr.service';
9
+ export * from './staking.service';
10
+ export * from './statistics.service';
11
+ export * from './token.service';
12
+ export * from './transaction.service';
13
+ export * from './validator.service';
14
+ export * from './wallet.service';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // src/services/index.ts
18
+ __exportStar(require("./account.service"), exports);
19
+ __exportStar(require("./base.service"), exports);
20
+ __exportStar(require("./block.service"), exports);
21
+ __exportStar(require("./certificate-manager.service"), exports);
22
+ __exportStar(require("./explorer.service"), exports);
23
+ __exportStar(require("./light-client.service"), exports);
24
+ __exportStar(require("./node-manager.service"), exports);
25
+ __exportStar(require("./signalr.service"), exports);
26
+ __exportStar(require("./staking.service"), exports);
27
+ __exportStar(require("./statistics.service"), exports);
28
+ __exportStar(require("./token.service"), exports);
29
+ __exportStar(require("./transaction.service"), exports);
30
+ __exportStar(require("./validator.service"), exports);
31
+ __exportStar(require("./wallet.service"), exports);
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAAwB;AACxB,oDAAkC;AAClC,iDAA+B;AAC/B,kDAAgC;AAChC,gEAA8C;AAC9C,qDAAmC;AACnC,yDAAuC;AACvC,yDAAuC;AACvC,oDAAkC;AAClC,oDAAkC;AAClC,uDAAqC;AACrC,kDAAgC;AAChC,wDAAsC;AACtC,sDAAoC;AACpC,mDAAiC"}
@@ -0,0 +1,9 @@
1
+ import { BaseService } from './base.service';
2
+ import { BlockHeaderViewModel, MerkleProofViewModel } from '../models';
3
+ export declare class LightClientService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ getBlockHeaders(fromHeight: number, toHeight: number, language?: string): Promise<BlockHeaderViewModel[]>;
7
+ getMerkleProof(blockHash: string, transactionHash: string, language?: string): Promise<MerkleProofViewModel>;
8
+ }
9
+ //# sourceMappingURL=light-client.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-client.service.d.ts","sourceRoot":"","sources":["../../src/services/light-client.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,WAAW,CAAC;AAEnB,qBAAa,kBAAkB;IACjB,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAEtC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAKzG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAInH"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LightClientService = void 0;
4
+ class LightClientService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async getBlockHeaders(fromHeight, toHeight, language) {
9
+ const params = { fromHeight, toHeight };
10
+ return this.baseService.get(`/api/light/headers`, params, language);
11
+ }
12
+ async getMerkleProof(blockHash, transactionHash, language) {
13
+ const params = { blockHash, transactionHash };
14
+ return this.baseService.get(`/api/light/merkle-proof`, params, language);
15
+ }
16
+ }
17
+ exports.LightClientService = LightClientService;
18
+ //# sourceMappingURL=light-client.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-client.service.js","sourceRoot":"","sources":["../../src/services/light-client.service.ts"],"names":[],"mappings":";;;AAMA,MAAa,kBAAkB;IAC7B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,QAAgB,EAAE,QAAiB;QAC3E,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAyB,oBAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,eAAuB,EAAE,QAAiB;QAChF,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAuB,yBAAyB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjG,CAAC;CACF;AAZD,gDAYC"}
@@ -0,0 +1,35 @@
1
+ import { NodeSelectionStrategy } from '../models';
2
+ import { CertificateManagerService } from './certificate-manager.service';
3
+ type NodeChangedListener = (newNodeUrl: string) => void;
4
+ export interface NodeInfo {
5
+ url: string;
6
+ latency: number;
7
+ isHealthy: boolean;
8
+ isValidator: boolean;
9
+ }
10
+ export declare class NodeManagerService {
11
+ private certificateManager;
12
+ private seedNodes;
13
+ private nodeRegistryUrl?;
14
+ private healthCheckIntervalSeconds;
15
+ private nodeSelectionStrategy;
16
+ private availableNodes;
17
+ private currentNodeUrl;
18
+ private healthCheckTimer;
19
+ private eventEmitter;
20
+ constructor(certificateManager: CertificateManagerService, seedNodes?: string[], nodeRegistryUrl?: string | undefined, healthCheckIntervalSeconds?: number, nodeSelectionStrategy?: NodeSelectionStrategy);
21
+ initializeAsync(): Promise<void>;
22
+ startPeriodicChecks(): void;
23
+ stopPeriodicChecks(): void;
24
+ onNodeChanged(listener: NodeChangedListener): void;
25
+ offNodeChanged(listener: NodeChangedListener): void;
26
+ getHealthyNodeUrl(): string | undefined;
27
+ private discoverAndSelectBestNode;
28
+ private discoverNodes;
29
+ private performHealthCheck;
30
+ private selectBestNode;
31
+ createHttpsAgent(): any;
32
+ dispose(): void;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=node-manager.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-manager.service.d.ts","sourceRoot":"","sources":["../../src/services/node-manager.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACzH,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAS1E,KAAK,mBAAmB,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;AA0BxD,MAAM,WAAW,QAAQ;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,kBAAkB;IAOvB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,eAAe,CAAC;IACxB,OAAO,CAAC,0BAA0B;IAClC,OAAO,CAAC,qBAAqB;IAVjC,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,YAAY,CAAsB;gBAG9B,kBAAkB,EAAE,yBAAyB,EAC7C,SAAS,GAAE,MAAM,EAAO,EACxB,eAAe,CAAC,EAAE,MAAM,YAAA,EACxB,0BAA0B,GAAE,MAAW,EACvC,qBAAqB,GAAE,qBAA2D;IAGjF,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,mBAAmB,IAAI,IAAI;IAW3B,kBAAkB,IAAI,IAAI;IAQ1B,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAIlD,cAAc,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAInD,iBAAiB,IAAI,MAAM,GAAG,SAAS;YAIhC,yBAAyB;YASzB,aAAa;YA6Bb,kBAAkB;IAuBhC,OAAO,CAAC,cAAc;IAwBf,gBAAgB,IAAI,GAAG;IAevB,OAAO,IAAI,IAAI;CAGzB"}