@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,170 @@
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.NodeManagerService = void 0;
7
+ // src/services/node-manager.service.ts
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const models_1 = require("../models");
10
+ // Node.js specific imports - will be used conditionally
11
+ let https;
12
+ if (typeof process !== 'undefined' && process.versions != null && process.versions.node != null) {
13
+ https = require('https');
14
+ }
15
+ class EventEmitter {
16
+ constructor() {
17
+ this.listeners = {};
18
+ }
19
+ on(event, listener) {
20
+ if (!this.listeners[event]) {
21
+ this.listeners[event] = [];
22
+ }
23
+ this.listeners[event].push(listener);
24
+ }
25
+ off(event, listener) {
26
+ if (this.listeners[event]) {
27
+ this.listeners[event] = this.listeners[event].filter(l => l !== listener);
28
+ }
29
+ }
30
+ emit(event, ...args) {
31
+ if (this.listeners[event]) {
32
+ this.listeners[event].forEach(listener => listener(...args));
33
+ }
34
+ }
35
+ }
36
+ class NodeManagerService {
37
+ constructor(certificateManager, seedNodes = [], nodeRegistryUrl, healthCheckIntervalSeconds = 60, nodeSelectionStrategy = models_1.NodeSelectionStrategy.LowestLatency) {
38
+ this.certificateManager = certificateManager;
39
+ this.seedNodes = seedNodes;
40
+ this.nodeRegistryUrl = nodeRegistryUrl;
41
+ this.healthCheckIntervalSeconds = healthCheckIntervalSeconds;
42
+ this.nodeSelectionStrategy = nodeSelectionStrategy;
43
+ this.availableNodes = new Map();
44
+ this.eventEmitter = new EventEmitter();
45
+ }
46
+ async initializeAsync() {
47
+ console.log('[NodeManager] Initializing...');
48
+ await this.discoverAndSelectBestNode();
49
+ }
50
+ startPeriodicChecks() {
51
+ console.log(`[NodeManager] Starting periodic health checks every ${this.healthCheckIntervalSeconds} seconds.`);
52
+ if (this.healthCheckTimer) {
53
+ clearInterval(this.healthCheckTimer);
54
+ }
55
+ this.healthCheckTimer = setInterval(() => this.discoverAndSelectBestNode(), this.healthCheckIntervalSeconds * 1000);
56
+ }
57
+ stopPeriodicChecks() {
58
+ if (this.healthCheckTimer) {
59
+ clearInterval(this.healthCheckTimer);
60
+ this.healthCheckTimer = undefined;
61
+ console.log('[NodeManager] Stopped periodic health checks.');
62
+ }
63
+ }
64
+ onNodeChanged(listener) {
65
+ this.eventEmitter.on('nodeChanged', listener);
66
+ }
67
+ offNodeChanged(listener) {
68
+ this.eventEmitter.off('nodeChanged', listener);
69
+ }
70
+ getHealthyNodeUrl() {
71
+ return this.currentNodeUrl;
72
+ }
73
+ async discoverAndSelectBestNode() {
74
+ console.log('[NodeManager] Starting node discovery and selection process...');
75
+ const nodesToProbe = await this.discoverNodes();
76
+ const healthCheckPromises = nodesToProbe.map(url => this.performHealthCheck(url));
77
+ await Promise.allSettled(healthCheckPromises);
78
+ this.selectBestNode();
79
+ console.log('[NodeManager] Node discovery and selection process finished.');
80
+ }
81
+ async discoverNodes() {
82
+ const discoveredUrls = new Set(this.seedNodes);
83
+ if (this.nodeRegistryUrl) {
84
+ try {
85
+ const requestUri = `${this.nodeRegistryUrl}/v1/Validator`;
86
+ console.log(`[NodeManager] Fetching nodes from registry: ${requestUri}`);
87
+ const response = await axios_1.default.get(requestUri, { timeout: 10000 });
88
+ if (response.data.Success && response.data.Data) {
89
+ response.data.Data.forEach(v => v.NetworkUrl && discoveredUrls.add(v.NetworkUrl));
90
+ }
91
+ else {
92
+ console.warn(`[NodeManager] Failed to get nodes from registry: ${response.data.Message}`);
93
+ }
94
+ }
95
+ catch (error) {
96
+ console.error(`[NodeManager] Error fetching nodes from registry:`, error.message);
97
+ }
98
+ }
99
+ // Ensure all discovered nodes have a base entry in our map
100
+ discoveredUrls.forEach(url => {
101
+ if (!this.availableNodes.has(url)) {
102
+ this.availableNodes.set(url, { url, isHealthy: false, latency: -1, isValidator: false });
103
+ }
104
+ });
105
+ return Array.from(discoveredUrls);
106
+ }
107
+ async performHealthCheck(nodeUrl) {
108
+ const startTime = Date.now();
109
+ try {
110
+ const agent = this.createHttpsAgent();
111
+ const response = await axios_1.default.get(`/api/stats/network`, {
112
+ baseURL: nodeUrl,
113
+ timeout: 5000,
114
+ httpsAgent: agent,
115
+ });
116
+ if (response.status === 200 && response.data.Success) {
117
+ const latency = Date.now() - startTime;
118
+ this.availableNodes.set(nodeUrl, Object.assign(Object.assign({}, this.availableNodes.get(nodeUrl)), { url: nodeUrl, isHealthy: true, latency }));
119
+ console.log(`[NodeManager] Node ${nodeUrl} is healthy. Latency: ${latency}ms.`);
120
+ }
121
+ else {
122
+ throw new Error(response.data.Message || `Status code ${response.status}`);
123
+ }
124
+ }
125
+ catch (error) {
126
+ this.availableNodes.set(nodeUrl, Object.assign(Object.assign({}, this.availableNodes.get(nodeUrl)), { url: nodeUrl, isHealthy: false, latency: -1 }));
127
+ console.warn(`[NodeManager] Node ${nodeUrl} health check failed: ${error.message}`);
128
+ }
129
+ }
130
+ selectBestNode() {
131
+ const healthyNodes = Array.from(this.availableNodes.values()).filter(node => node.isHealthy);
132
+ if (healthyNodes.length === 0) {
133
+ console.error('[NodeManager] No healthy nodes available.');
134
+ // Don't change the current node if all checks fail, maybe it will come back online
135
+ return;
136
+ }
137
+ let selectedNode;
138
+ if (this.nodeSelectionStrategy === models_1.NodeSelectionStrategy.LowestLatency) {
139
+ selectedNode = healthyNodes.sort((a, b) => a.latency - b.latency)[0];
140
+ }
141
+ else { // Fallback or random
142
+ selectedNode = healthyNodes[Math.floor(Math.random() * healthyNodes.length)];
143
+ }
144
+ if (selectedNode && selectedNode.url !== this.currentNodeUrl) {
145
+ const oldUrl = this.currentNodeUrl;
146
+ this.currentNodeUrl = selectedNode.url;
147
+ console.log(`[NodeManager] Node changed from ${oldUrl || 'none'} to ${this.currentNodeUrl}`);
148
+ this.eventEmitter.emit('nodeChanged', this.currentNodeUrl);
149
+ }
150
+ }
151
+ createHttpsAgent() {
152
+ // Only create a custom agent in Node.js environment
153
+ if (typeof process !== 'undefined' && process.versions.node != null) {
154
+ const rootCa = this.certificateManager.getRootCaCertificate();
155
+ if (rootCa) {
156
+ return new https.Agent({
157
+ ca: rootCa,
158
+ rejectUnauthorized: true, // Ensure we validate against the provided CA
159
+ });
160
+ }
161
+ }
162
+ // In browser or if no CA is present, return undefined and let axios use its default.
163
+ return undefined;
164
+ }
165
+ dispose() {
166
+ this.stopPeriodicChecks();
167
+ }
168
+ }
169
+ exports.NodeManagerService = NodeManagerService;
170
+ //# sourceMappingURL=node-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-manager.service.js","sourceRoot":"","sources":["../../src/services/node-manager.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { NodeManagerService } from './node-manager.service';
2
+ export interface ISignalRClient {
3
+ start(): Promise<void>;
4
+ stop(): Promise<void>;
5
+ on(methodName: string, newMethod: (...args: any[]) => void): void;
6
+ dispose(): Promise<void>;
7
+ }
8
+ export declare class SignalRClient implements ISignalRClient {
9
+ private hubConnection?;
10
+ private readonly nodeManager;
11
+ private readonly handlers;
12
+ private isStarted;
13
+ constructor(nodeManager: NodeManagerService);
14
+ private handleNodeChange;
15
+ start(): Promise<void>;
16
+ private connect;
17
+ stop(): Promise<void>;
18
+ on(methodName: string, newMethod: (...args: any[]) => void): void;
19
+ dispose(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=signalr.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalr.service.d.ts","sourceRoot":"","sources":["../../src/services/signalr.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qBAAa,aAAc,YAAW,cAAc;IAChD,OAAO,CAAC,aAAa,CAAC,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAC3F,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,kBAAkB;IAK3C,OAAO,CAAC,gBAAgB,CAMtB;IAEW,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAerB,OAAO;IAoCR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAO3D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAIxC"}
@@ -0,0 +1,123 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SignalRClient = void 0;
37
+ // src/services/signalr.service.ts
38
+ const signalR = __importStar(require("@microsoft/signalr"));
39
+ class SignalRClient {
40
+ constructor(nodeManager) {
41
+ this.handlers = [];
42
+ this.isStarted = false;
43
+ this.handleNodeChange = async (newNodeUrl) => {
44
+ if (!this.isStarted) {
45
+ return; // Don't reconnect if the client hasn't been explicitly started.
46
+ }
47
+ console.log(`[SignalRClient] Node changed to ${newNodeUrl}. Reconnecting SignalR...`);
48
+ await this.connect(newNodeUrl);
49
+ };
50
+ this.nodeManager = nodeManager;
51
+ this.nodeManager.onNodeChanged(this.handleNodeChange);
52
+ }
53
+ async start() {
54
+ if (this.isStarted) {
55
+ return;
56
+ }
57
+ console.log('[SignalRClient] Starting...');
58
+ this.isStarted = true;
59
+ const initialNodeUrl = this.nodeManager.getHealthyNodeUrl();
60
+ if (initialNodeUrl) {
61
+ await this.connect(initialNodeUrl);
62
+ }
63
+ else {
64
+ console.error("[SignalRClient] Cannot start. Initial healthy node URL is not available.");
65
+ // The handleNodeChange event will connect us once a healthy node is found.
66
+ }
67
+ }
68
+ async connect(nodeUrl) {
69
+ // 1. Stop and clean up the old connection
70
+ if (this.hubConnection) {
71
+ await this.hubConnection.stop();
72
+ console.log('[SignalRClient] Previous connection stopped.');
73
+ }
74
+ // 2. Create the new connection
75
+ const hubUrl = `${nodeUrl}/blockchain-hub`;
76
+ console.log(`[SignalRClient] Creating new connection to ${hubUrl}`);
77
+ this.hubConnection = new signalR.HubConnectionBuilder()
78
+ .withUrl(hubUrl)
79
+ .withAutomaticReconnect()
80
+ .build();
81
+ this.hubConnection.onclose(error => {
82
+ if (this.isStarted) {
83
+ console.error(`[SignalRClient] Connection closed with error: ${error}. Automatic reconnect will handle it.`);
84
+ }
85
+ });
86
+ // 3. Re-apply all registered handlers
87
+ this.handlers.forEach(h => {
88
+ this.hubConnection.on(h.methodName, h.method);
89
+ });
90
+ console.log(`[SignalRClient] Re-applied ${this.handlers.length} event handlers.`);
91
+ // 4. Start the new connection
92
+ try {
93
+ await this.hubConnection.start();
94
+ console.log(`[SignalRClient] Connection to ${hubUrl} started successfully.`);
95
+ }
96
+ catch (error) {
97
+ console.error(`[SignalRClient] Failed to start connection to ${hubUrl}:`, error);
98
+ }
99
+ }
100
+ async stop() {
101
+ if (!this.isStarted) {
102
+ return;
103
+ }
104
+ this.isStarted = false;
105
+ if (this.hubConnection) {
106
+ await this.hubConnection.stop();
107
+ console.log('[SignalRClient] Stopped.');
108
+ }
109
+ }
110
+ on(methodName, newMethod) {
111
+ var _a;
112
+ // Store the handler for future reconnections
113
+ this.handlers.push({ methodName, method: newMethod });
114
+ // Apply to the current connection if it exists
115
+ (_a = this.hubConnection) === null || _a === void 0 ? void 0 : _a.on(methodName, newMethod);
116
+ }
117
+ async dispose() {
118
+ this.nodeManager.offNodeChanged(this.handleNodeChange);
119
+ await this.stop();
120
+ }
121
+ }
122
+ exports.SignalRClient = SignalRClient;
123
+ //# sourceMappingURL=signalr.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalr.service.js","sourceRoot":"","sources":["../../src/services/signalr.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { BaseService } from './base.service';
2
+ import { UnbondingEntryViewModel } from '../models';
3
+ export declare class StakingService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ /**
7
+ * Retorna uma lista de todas as solicitações de unbonding (retirada de stake) para um endereço específico.
8
+ * @param address O endereço do delegador a ser consultado.
9
+ */
10
+ getDelegations(address: string, language?: string): Promise<UnbondingEntryViewModel[]>;
11
+ }
12
+ //# sourceMappingURL=staking.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staking.service.d.ts","sourceRoot":"","sources":["../../src/services/staking.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD,qBAAa,cAAc;IACb,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAG7F"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StakingService = void 0;
4
+ class StakingService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ /**
9
+ * Retorna uma lista de todas as solicitações de unbonding (retirada de stake) para um endereço específico.
10
+ * @param address O endereço do delegador a ser consultado.
11
+ */
12
+ async getDelegations(address, language) {
13
+ return this.baseService.get(`/api/staking/delegations/${address}`, {}, language);
14
+ }
15
+ }
16
+ exports.StakingService = StakingService;
17
+ //# sourceMappingURL=staking.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staking.service.js","sourceRoot":"","sources":["../../src/services/staking.service.ts"],"names":[],"mappings":";;;AAGA,MAAa,cAAc;IACzB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,QAAiB;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAA4B,4BAA4B,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9G,CAAC;CACF;AAVD,wCAUC"}
@@ -0,0 +1,8 @@
1
+ import { BaseService } from './base.service';
2
+ import { NetworkStatisticsModel } from '../models';
3
+ export declare class StatisticsService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ getNetworkStatistics(language?: string): Promise<NetworkStatisticsModel>;
7
+ }
8
+ //# sourceMappingURL=statistics.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistics.service.d.ts","sourceRoot":"","sources":["../../src/services/statistics.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,qBAAa,iBAAiB;IAChB,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAEtC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAG/E"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatisticsService = void 0;
4
+ class StatisticsService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async getNetworkStatistics(language) {
9
+ return this.baseService.get('/api/stats/network', {}, language);
10
+ }
11
+ }
12
+ exports.StatisticsService = StatisticsService;
13
+ //# sourceMappingURL=statistics.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistics.service.js","sourceRoot":"","sources":["../../src/services/statistics.service.ts"],"names":[],"mappings":";;;AAGA,MAAa,iBAAiB;IAC5B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,oBAAoB,CAAC,QAAiB;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAyB,oBAAoB,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1F,CAAC;CACF;AAND,8CAMC"}
@@ -0,0 +1,9 @@
1
+ import { BaseService } from './base.service';
2
+ import { TokenViewModel } from '../models';
3
+ export declare class TokenService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ getTokenInfo(tokenId: string, language?: string): Promise<TokenViewModel>;
7
+ listTokens(language?: string): Promise<TokenViewModel[]>;
8
+ }
9
+ //# sourceMappingURL=token.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.service.d.ts","sourceRoot":"","sources":["../../src/services/token.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;IAEtC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAIzE,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAG/D"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenService = void 0;
4
+ class TokenService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async getTokenInfo(tokenId, language) {
9
+ return this.baseService.get(`/api/tokens/${tokenId}`, {}, language);
10
+ }
11
+ async listTokens(language) {
12
+ return this.baseService.get(`/api/tokens/list`, {}, language);
13
+ }
14
+ }
15
+ exports.TokenService = TokenService;
16
+ //# sourceMappingURL=token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.service.js","sourceRoot":"","sources":["../../src/services/token.service.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IACvB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,QAAiB;QACnD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAiB,eAAe,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAiB;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAmB,kBAAkB,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClF,CAAC;CACF;AAVD,oCAUC"}
@@ -0,0 +1,9 @@
1
+ import { BaseService } from './base.service';
2
+ import { SubmitTransactionRequest, TransactionIdViewModel, TransactionViewModel } from '../models';
3
+ export declare class TransactionService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ submitTransaction(request: SubmitTransactionRequest, language?: string): Promise<TransactionIdViewModel>;
7
+ getTransactionByHash(hash: string, language?: string): Promise<TransactionViewModel>;
8
+ }
9
+ //# sourceMappingURL=transaction.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.service.d.ts","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACH,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,WAAW,CAAC;AAEnB,qBAAa,kBAAkB;IACjB,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAEtC,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIxG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAG3F"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionService = void 0;
4
+ class TransactionService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async submitTransaction(request, language) {
9
+ return this.baseService.post('/api/transactions', request, {}, language);
10
+ }
11
+ async getTransactionByHash(hash, language) {
12
+ return this.baseService.get(`/api/transactions/${hash}`, {}, language);
13
+ }
14
+ }
15
+ exports.TransactionService = TransactionService;
16
+ //# sourceMappingURL=transaction.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.service.js","sourceRoot":"","sources":["../../src/services/transaction.service.ts"],"names":[],"mappings":";;;AAOA,MAAa,kBAAkB;IAC7B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,iBAAiB,CAAC,OAAiC,EAAE,QAAiB;QAC1E,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAyB,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnG,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAY,EAAE,QAAiB;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAuB,qBAAqB,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/F,CAAC;CACF;AAVD,gDAUC"}
@@ -0,0 +1,16 @@
1
+ import { BaseService } from './base.service';
2
+ import { ValidatorModel } from '../models';
3
+ export declare class ValidatorService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ /**
7
+ * Retorna uma lista de todos os validadores ativos da rede, juntamente com suas informações de stake.
8
+ */
9
+ getAllValidators(language?: string): Promise<ValidatorModel[]>;
10
+ /**
11
+ * Retorna os detalhes de um validador específico pelo seu endereço.
12
+ * @param address O endereço do validador a ser consultado.
13
+ */
14
+ getValidator(address: string, language?: string): Promise<ValidatorModel>;
15
+ }
16
+ //# sourceMappingURL=validator.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.service.d.ts","sourceRoot":"","sources":["../../src/services/validator.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,qBAAa,gBAAgB;IACf,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE5C;;OAEG;IACG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIpE;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAGhF"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValidatorService = void 0;
4
+ class ValidatorService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ /**
9
+ * Retorna uma lista de todos os validadores ativos da rede, juntamente com suas informações de stake.
10
+ */
11
+ async getAllValidators(language) {
12
+ return this.baseService.get(`/api/validators`, {}, language);
13
+ }
14
+ /**
15
+ * Retorna os detalhes de um validador específico pelo seu endereço.
16
+ * @param address O endereço do validador a ser consultado.
17
+ */
18
+ async getValidator(address, language) {
19
+ return this.baseService.get(`/api/validators/${address}`, {}, language);
20
+ }
21
+ }
22
+ exports.ValidatorService = ValidatorService;
23
+ //# sourceMappingURL=validator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.service.js","sourceRoot":"","sources":["../../src/services/validator.service.ts"],"names":[],"mappings":";;;AAIA,MAAa,gBAAgB;IAC3B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAiB;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAmB,iBAAiB,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,QAAiB;QACnD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAiB,mBAAmB,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1F,CAAC;CACF;AAjBD,4CAiBC"}
@@ -0,0 +1,11 @@
1
+ import { BaseService } from './base.service';
2
+ import { CreateWalletViewModel, DeriveAddressRequest, SendTransactionRequest, TransactionIdViewModel, WalletTransactionHistoryViewModel } from '../models';
3
+ export declare class WalletService {
4
+ private baseService;
5
+ constructor(baseService: BaseService);
6
+ createWallet(language?: string): Promise<CreateWalletViewModel>;
7
+ deriveAddress(request: DeriveAddressRequest, language?: string): Promise<CreateWalletViewModel>;
8
+ getWalletHistory(address: string, tokenId: string, language?: string): Promise<WalletTransactionHistoryViewModel[]>;
9
+ sendTransaction(request: SendTransactionRequest, language?: string): Promise<TransactionIdViewModel>;
10
+ }
11
+ //# sourceMappingURL=wallet.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.service.d.ts","sourceRoot":"","sources":["../../src/services/wallet.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACH,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,iCAAiC,EACpC,MAAM,WAAW,CAAC;AAEnB,qBAAa,aAAa;IACZ,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAEtC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI/D,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAK/F,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iCAAiC,EAAE,CAAC;IAInH,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAG3G"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WalletService = void 0;
4
+ class WalletService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ async createWallet(language) {
9
+ return this.baseService.post('/api/wallet/create', {}, {}, language);
10
+ }
11
+ async deriveAddress(request, language) {
12
+ // The endpoint returns the same shape as creating a new wallet, but without the mnemonic
13
+ return this.baseService.post('/api/wallet/derive', request, {}, language);
14
+ }
15
+ async getWalletHistory(address, tokenId, language) {
16
+ return this.baseService.get(`/api/wallet/${address}/history/${tokenId}`, {}, language);
17
+ }
18
+ async sendTransaction(request, language) {
19
+ return this.baseService.post('/api/wallet/send', request, {}, language);
20
+ }
21
+ }
22
+ exports.WalletService = WalletService;
23
+ //# sourceMappingURL=wallet.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.service.js","sourceRoot":"","sources":["../../src/services/wallet.service.ts"],"names":[],"mappings":";;;AASA,MAAa,aAAa;IACxB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,KAAK,CAAC,YAAY,CAAC,QAAiB;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAwB,oBAAoB,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA6B,EAAE,QAAiB;QAClE,yFAAyF;QACzF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAwB,oBAAoB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnG,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,OAAe,EAAE,QAAiB;QACxE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAsC,eAAe,OAAO,YAAY,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9H,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA+B,EAAE,QAAiB;QACtE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAyB,kBAAkB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClG,CAAC;CACF;AAnBD,sCAmBC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Analisa um certificado X.509 no formato PEM e retorna sua data de expiração.
3
+ * Esta é uma implementação mínima de um analisador DER ASN.1.
4
+ *
5
+ * @param {string} pem O certificado X.509 no formato PEM.
6
+ * @returns {Date | null} A data de expiração do certificado, ou nulo se a análise falhar.
7
+ */
8
+ export declare function parseX509Expiration(pem: string): Date | null;
9
+ //# sourceMappingURL=pem-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pem-parser.d.ts","sourceRoot":"","sources":["../../src/utils/pem-parser.ts"],"names":[],"mappings":"AA6BA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAyG5D"}