@shadow-corp/nearconnect 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 (179) hide show
  1. package/README.md +546 -0
  2. package/build/InjectedWallet.d.ts +22 -0
  3. package/build/InjectedWallet.js +58 -0
  4. package/build/InjectedWallet.js.map +1 -0
  5. package/build/NearConnector.d.ts +151 -0
  6. package/build/NearConnector.js +536 -0
  7. package/build/NearConnector.js.map +1 -0
  8. package/build/ParentFrameWallet.d.ts +22 -0
  9. package/build/ParentFrameWallet.js +66 -0
  10. package/build/ParentFrameWallet.js.map +1 -0
  11. package/build/SandboxedWallet/code.d.ts +7 -0
  12. package/build/SandboxedWallet/code.js +324 -0
  13. package/build/SandboxedWallet/code.js.map +1 -0
  14. package/build/SandboxedWallet/executor.d.ts +23 -0
  15. package/build/SandboxedWallet/executor.js +338 -0
  16. package/build/SandboxedWallet/executor.js.map +1 -0
  17. package/build/SandboxedWallet/iframe.d.ts +18 -0
  18. package/build/SandboxedWallet/iframe.js +78 -0
  19. package/build/SandboxedWallet/iframe.js.map +1 -0
  20. package/build/SandboxedWallet/index.d.ts +24 -0
  21. package/build/SandboxedWallet/index.js +54 -0
  22. package/build/SandboxedWallet/index.js.map +1 -0
  23. package/build/actions/index.d.ts +3 -0
  24. package/build/actions/index.js +105 -0
  25. package/build/actions/index.js.map +1 -0
  26. package/build/actions/types.d.ts +76 -0
  27. package/build/actions/types.js +3 -0
  28. package/build/actions/types.js.map +1 -0
  29. package/build/connection/health.d.ts +213 -0
  30. package/build/connection/health.js +391 -0
  31. package/build/connection/health.js.map +1 -0
  32. package/build/connection/index.d.ts +4 -0
  33. package/build/connection/index.js +48 -0
  34. package/build/connection/index.js.map +1 -0
  35. package/build/connection/reconnect.d.ts +261 -0
  36. package/build/connection/reconnect.js +454 -0
  37. package/build/connection/reconnect.js.map +1 -0
  38. package/build/connection/retry.d.ts +187 -0
  39. package/build/connection/retry.js +427 -0
  40. package/build/connection/retry.js.map +1 -0
  41. package/build/connection/state.d.ts +222 -0
  42. package/build/connection/state.js +431 -0
  43. package/build/connection/state.js.map +1 -0
  44. package/build/errors.d.ts +177 -0
  45. package/build/errors.js +546 -0
  46. package/build/errors.js.map +1 -0
  47. package/build/hardware/errors.d.ts +36 -0
  48. package/build/hardware/errors.js +127 -0
  49. package/build/hardware/errors.js.map +1 -0
  50. package/build/hardware/index.d.ts +7 -0
  51. package/build/hardware/index.js +39 -0
  52. package/build/hardware/index.js.map +1 -0
  53. package/build/hardware/near-app.d.ts +95 -0
  54. package/build/hardware/near-app.js +291 -0
  55. package/build/hardware/near-app.js.map +1 -0
  56. package/build/hardware/transport.d.ts +94 -0
  57. package/build/hardware/transport.js +267 -0
  58. package/build/hardware/transport.js.map +1 -0
  59. package/build/hardware/types.d.ts +98 -0
  60. package/build/hardware/types.js +72 -0
  61. package/build/hardware/types.js.map +1 -0
  62. package/build/helpers/analytics.d.ts +191 -0
  63. package/build/helpers/analytics.js +304 -0
  64. package/build/helpers/analytics.js.map +1 -0
  65. package/build/helpers/base58.d.ts +6 -0
  66. package/build/helpers/base58.js +47 -0
  67. package/build/helpers/base58.js.map +1 -0
  68. package/build/helpers/events.d.ts +42 -0
  69. package/build/helpers/events.js +68 -0
  70. package/build/helpers/events.js.map +1 -0
  71. package/build/helpers/html.d.ts +8 -0
  72. package/build/helpers/html.js +30 -0
  73. package/build/helpers/html.js.map +1 -0
  74. package/build/helpers/indexdb.d.ts +14 -0
  75. package/build/helpers/indexdb.js +166 -0
  76. package/build/helpers/indexdb.js.map +1 -0
  77. package/build/helpers/manifest.d.ts +147 -0
  78. package/build/helpers/manifest.js +329 -0
  79. package/build/helpers/manifest.js.map +1 -0
  80. package/build/helpers/queue.d.ts +11 -0
  81. package/build/helpers/queue.js +48 -0
  82. package/build/helpers/queue.js.map +1 -0
  83. package/build/helpers/session.d.ts +119 -0
  84. package/build/helpers/session.js +289 -0
  85. package/build/helpers/session.js.map +1 -0
  86. package/build/helpers/simulation.d.ts +128 -0
  87. package/build/helpers/simulation.js +441 -0
  88. package/build/helpers/simulation.js.map +1 -0
  89. package/build/helpers/storage.d.ts +58 -0
  90. package/build/helpers/storage.js +190 -0
  91. package/build/helpers/storage.js.map +1 -0
  92. package/build/helpers/trust.d.ts +157 -0
  93. package/build/helpers/trust.js +340 -0
  94. package/build/helpers/trust.js.map +1 -0
  95. package/build/helpers/url.d.ts +1 -0
  96. package/build/helpers/url.js +13 -0
  97. package/build/helpers/url.js.map +1 -0
  98. package/build/helpers/uuid.d.ts +1 -0
  99. package/build/helpers/uuid.js +14 -0
  100. package/build/helpers/uuid.js.map +1 -0
  101. package/build/index.d.ts +21 -0
  102. package/build/index.js +167 -0
  103. package/build/index.js.map +1 -0
  104. package/build/popups/IframeWalletPopup.d.ts +16 -0
  105. package/build/popups/IframeWalletPopup.js +38 -0
  106. package/build/popups/IframeWalletPopup.js.map +1 -0
  107. package/build/popups/NearWalletsPopup.d.ts +25 -0
  108. package/build/popups/NearWalletsPopup.js +153 -0
  109. package/build/popups/NearWalletsPopup.js.map +1 -0
  110. package/build/popups/Popup.d.ts +22 -0
  111. package/build/popups/Popup.js +94 -0
  112. package/build/popups/Popup.js.map +1 -0
  113. package/build/popups/styles.d.ts +1 -0
  114. package/build/popups/styles.js +257 -0
  115. package/build/popups/styles.js.map +1 -0
  116. package/build/security/audit-log.d.ts +123 -0
  117. package/build/security/audit-log.js +268 -0
  118. package/build/security/audit-log.js.map +1 -0
  119. package/build/security/csp.d.ts +68 -0
  120. package/build/security/csp.js +328 -0
  121. package/build/security/csp.js.map +1 -0
  122. package/build/security/index.d.ts +10 -0
  123. package/build/security/index.js +42 -0
  124. package/build/security/index.js.map +1 -0
  125. package/build/security/origin-guard.d.ts +90 -0
  126. package/build/security/origin-guard.js +244 -0
  127. package/build/security/origin-guard.js.map +1 -0
  128. package/build/security/rate-limiter.d.ts +84 -0
  129. package/build/security/rate-limiter.js +212 -0
  130. package/build/security/rate-limiter.js.map +1 -0
  131. package/build/security/secure-storage.d.ts +77 -0
  132. package/build/security/secure-storage.js +242 -0
  133. package/build/security/secure-storage.js.map +1 -0
  134. package/build/security/transaction-guard.d.ts +71 -0
  135. package/build/security/transaction-guard.js +239 -0
  136. package/build/security/transaction-guard.js.map +1 -0
  137. package/build/types.d.ts +508 -0
  138. package/build/types.js +3 -0
  139. package/build/types.js.map +1 -0
  140. package/build/ui/AccountSwitcherModal.d.ts +53 -0
  141. package/build/ui/AccountSwitcherModal.js +239 -0
  142. package/build/ui/AccountSwitcherModal.js.map +1 -0
  143. package/build/ui/Modal.d.ts +84 -0
  144. package/build/ui/Modal.js +278 -0
  145. package/build/ui/Modal.js.map +1 -0
  146. package/build/ui/TransactionModal.d.ts +84 -0
  147. package/build/ui/TransactionModal.js +406 -0
  148. package/build/ui/TransactionModal.js.map +1 -0
  149. package/build/ui/WalletSelectorModal.d.ts +97 -0
  150. package/build/ui/WalletSelectorModal.js +481 -0
  151. package/build/ui/WalletSelectorModal.js.map +1 -0
  152. package/build/ui/icons.d.ts +19 -0
  153. package/build/ui/icons.js +65 -0
  154. package/build/ui/icons.js.map +1 -0
  155. package/build/ui/index.d.ts +10 -0
  156. package/build/ui/index.js +31 -0
  157. package/build/ui/index.js.map +1 -0
  158. package/build/ui/styles.d.ts +5 -0
  159. package/build/ui/styles.js +973 -0
  160. package/build/ui/styles.js.map +1 -0
  161. package/build/ui/theme.d.ts +133 -0
  162. package/build/ui/theme.js +204 -0
  163. package/build/ui/theme.js.map +1 -0
  164. package/build/wallets/external/index.d.ts +4 -0
  165. package/build/wallets/external/index.js +9 -0
  166. package/build/wallets/external/index.js.map +1 -0
  167. package/build/wallets/external/manager.d.ts +152 -0
  168. package/build/wallets/external/manager.js +586 -0
  169. package/build/wallets/external/manager.js.map +1 -0
  170. package/build/wallets/privileged/index.d.ts +5 -0
  171. package/build/wallets/privileged/index.js +12 -0
  172. package/build/wallets/privileged/index.js.map +1 -0
  173. package/build/wallets/privileged/ledger.d.ts +132 -0
  174. package/build/wallets/privileged/ledger.js +563 -0
  175. package/build/wallets/privileged/ledger.js.map +1 -0
  176. package/build/wallets/privileged/manager.d.ts +54 -0
  177. package/build/wallets/privileged/manager.js +174 -0
  178. package/build/wallets/privileged/manager.js.map +1 -0
  179. package/package.json +33 -0
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionSimulator = void 0;
4
+ exports.quickGasEstimate = quickGasEstimate;
5
+ const errors_1 = require("../errors");
6
+ /**
7
+ * Default RPC endpoints
8
+ */
9
+ const DEFAULT_RPC_ENDPOINTS = {
10
+ mainnet: "https://rpc.mainnet.near.org",
11
+ testnet: "https://rpc.testnet.near.org",
12
+ };
13
+ /**
14
+ * Gas constants
15
+ */
16
+ const GAS_CONSTANTS = {
17
+ /** Base gas for a function call */
18
+ BASE_FUNCTION_CALL: 5000000000000n, // 5 TGas
19
+ /** Gas per byte of arguments */
20
+ GAS_PER_BYTE: 100000000n, // 0.0001 TGas
21
+ /** Base gas for transfer */
22
+ TRANSFER_GAS: 450000000000n, // 0.45 TGas
23
+ /** Base gas for creating account */
24
+ CREATE_ACCOUNT_GAS: 1000000000000n, // 1 TGas
25
+ /** Base gas for add key */
26
+ ADD_KEY_GAS: 1000000000000n, // 1 TGas
27
+ /** Base gas for delete key */
28
+ DELETE_KEY_GAS: 450000000000n, // 0.45 TGas
29
+ /** Base gas for deploy contract */
30
+ DEPLOY_CONTRACT_BASE: 10000000000000n, // 10 TGas
31
+ /** Gas per byte of contract code */
32
+ DEPLOY_GAS_PER_BYTE: 6812999n,
33
+ /** Base gas for stake */
34
+ STAKE_GAS: 450000000000n, // 0.45 TGas
35
+ /** Base gas for delete account */
36
+ DELETE_ACCOUNT_GAS: 450000000000n, // 0.45 TGas
37
+ /** Maximum gas allowed */
38
+ MAX_GAS: 300000000000000n, // 300 TGas
39
+ /** Gas price in yoctoNEAR (approximate) */
40
+ GAS_PRICE: 100000000n, // 0.0001 NEAR per TGas
41
+ };
42
+ /**
43
+ * High deposit threshold in NEAR
44
+ */
45
+ const HIGH_DEPOSIT_THRESHOLD = 10n * 10n ** 24n; // 10 NEAR
46
+ /**
47
+ * Transaction simulator
48
+ */
49
+ class TransactionSimulator {
50
+ network;
51
+ rpcEndpoint;
52
+ constructor(options = {}) {
53
+ this.network = options.network ?? "mainnet";
54
+ this.rpcEndpoint = options.rpcEndpoint ?? DEFAULT_RPC_ENDPOINTS[this.network];
55
+ }
56
+ /**
57
+ * Simulate a transaction and get gas estimates
58
+ */
59
+ async simulate(transaction, signerAccount) {
60
+ const warnings = [];
61
+ const logs = [];
62
+ let success = true;
63
+ let error;
64
+ let returnValue;
65
+ // Calculate gas estimate
66
+ const gasEstimate = await this.estimateGas(transaction, signerAccount);
67
+ // Calculate total deposit
68
+ const totalDeposit = this.calculateTotalDeposit(transaction);
69
+ const totalDepositNear = this.formatNear(totalDeposit);
70
+ // Check for high deposit
71
+ if (BigInt(totalDeposit) > HIGH_DEPOSIT_THRESHOLD) {
72
+ warnings.push({
73
+ type: "high_deposit",
74
+ message: `This transaction requires a large deposit of ${totalDepositNear}`,
75
+ severity: "warning",
76
+ });
77
+ }
78
+ // Check for dangerous actions
79
+ this.checkDangerousActions(transaction, warnings);
80
+ // Check account balance
81
+ try {
82
+ const balance = await this.getAccountBalance(signerAccount.accountId);
83
+ const requiredBalance = BigInt(totalDeposit) + BigInt(gasEstimate.gasCostNear.replace(" NEAR", "")) * 10n ** 24n;
84
+ if (BigInt(balance) < requiredBalance) {
85
+ warnings.push({
86
+ type: "low_balance",
87
+ message: "Account balance may be insufficient for this transaction",
88
+ severity: "warning",
89
+ });
90
+ gasEstimate.canAfford = false;
91
+ }
92
+ }
93
+ catch {
94
+ // Can't check balance, skip
95
+ }
96
+ // Try to simulate function calls via RPC
97
+ if (transaction.actions) {
98
+ for (const action of transaction.actions) {
99
+ if (typeof action === "object" && ("FunctionCall" in action || "functionCall" in action)) {
100
+ const fc = action.FunctionCall ?? action.functionCall;
101
+ const fcData = fc;
102
+ try {
103
+ const result = await this.simulateFunctionCall(transaction.receiverId, fcData.methodName, fcData.args);
104
+ if (result.logs)
105
+ logs.push(...result.logs);
106
+ if (result.result)
107
+ returnValue = result.result;
108
+ }
109
+ catch (e) {
110
+ success = false;
111
+ error = e instanceof Error ? e.message : "Simulation failed";
112
+ logs.push(`Simulation error: ${error}`);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ return {
118
+ success,
119
+ gasEstimate,
120
+ totalDeposit,
121
+ totalDepositNear,
122
+ logs,
123
+ returnValue,
124
+ error,
125
+ warnings,
126
+ };
127
+ }
128
+ /**
129
+ * Estimate gas for a transaction
130
+ */
131
+ async estimateGas(transaction, signerAccount) {
132
+ const breakdown = [];
133
+ let totalGas = 0n;
134
+ if (!transaction.actions) {
135
+ return {
136
+ gas: "0",
137
+ tgas: 0,
138
+ gasCostNear: "0 NEAR",
139
+ canAfford: true,
140
+ breakdown: [],
141
+ };
142
+ }
143
+ for (const action of transaction.actions) {
144
+ const estimate = this.estimateActionGas(action);
145
+ breakdown.push(estimate);
146
+ totalGas += BigInt(estimate.gas);
147
+ }
148
+ // Cap at max gas
149
+ if (totalGas > GAS_CONSTANTS.MAX_GAS) {
150
+ totalGas = GAS_CONSTANTS.MAX_GAS;
151
+ }
152
+ const tgas = Number(totalGas) / 1e12;
153
+ const gasCostYocto = totalGas * GAS_CONSTANTS.GAS_PRICE;
154
+ const gasCostNear = this.formatNear(gasCostYocto.toString());
155
+ // Check if account can afford
156
+ let canAfford = true;
157
+ try {
158
+ const balance = await this.getAccountBalance(signerAccount.accountId);
159
+ canAfford = BigInt(balance) >= gasCostYocto;
160
+ }
161
+ catch {
162
+ // Assume can afford if we can't check
163
+ }
164
+ return {
165
+ gas: totalGas.toString(),
166
+ tgas,
167
+ gasCostNear,
168
+ canAfford,
169
+ breakdown,
170
+ };
171
+ }
172
+ /**
173
+ * Estimate gas for a single action
174
+ */
175
+ estimateActionGas(action) {
176
+ if (typeof action === "string") {
177
+ return { type: action, gas: GAS_CONSTANTS.BASE_FUNCTION_CALL.toString(), tgas: 5 };
178
+ }
179
+ const actionType = Object.keys(action)[0];
180
+ const actionData = action[actionType];
181
+ switch (actionType) {
182
+ case "FunctionCall":
183
+ case "functionCall": {
184
+ const fc = actionData;
185
+ // Use provided gas or estimate
186
+ if (fc.gas) {
187
+ const gas = BigInt(fc.gas);
188
+ return {
189
+ type: "FunctionCall",
190
+ methodName: fc.methodName,
191
+ gas: gas.toString(),
192
+ tgas: Number(gas) / 1e12,
193
+ };
194
+ }
195
+ // Estimate based on args size
196
+ const argsSize = fc.args ? (typeof fc.args === "string" ? fc.args.length : fc.args.length) : 0;
197
+ const gas = GAS_CONSTANTS.BASE_FUNCTION_CALL + BigInt(argsSize) * GAS_CONSTANTS.GAS_PER_BYTE;
198
+ return {
199
+ type: "FunctionCall",
200
+ methodName: fc.methodName,
201
+ gas: gas.toString(),
202
+ tgas: Number(gas) / 1e12,
203
+ };
204
+ }
205
+ case "Transfer":
206
+ case "transfer":
207
+ return { type: "Transfer", gas: GAS_CONSTANTS.TRANSFER_GAS.toString(), tgas: 0.45 };
208
+ case "CreateAccount":
209
+ case "createAccount":
210
+ return { type: "CreateAccount", gas: GAS_CONSTANTS.CREATE_ACCOUNT_GAS.toString(), tgas: 1 };
211
+ case "AddKey":
212
+ case "addKey":
213
+ return { type: "AddKey", gas: GAS_CONSTANTS.ADD_KEY_GAS.toString(), tgas: 1 };
214
+ case "DeleteKey":
215
+ case "deleteKey":
216
+ return { type: "DeleteKey", gas: GAS_CONSTANTS.DELETE_KEY_GAS.toString(), tgas: 0.45 };
217
+ case "DeployContract":
218
+ case "deployContract": {
219
+ const dc = actionData;
220
+ const codeSize = dc.code?.length ?? 0;
221
+ const gas = GAS_CONSTANTS.DEPLOY_CONTRACT_BASE + BigInt(codeSize) * GAS_CONSTANTS.DEPLOY_GAS_PER_BYTE;
222
+ return { type: "DeployContract", gas: gas.toString(), tgas: Number(gas) / 1e12 };
223
+ }
224
+ case "Stake":
225
+ case "stake":
226
+ return { type: "Stake", gas: GAS_CONSTANTS.STAKE_GAS.toString(), tgas: 0.45 };
227
+ case "DeleteAccount":
228
+ case "deleteAccount":
229
+ return { type: "DeleteAccount", gas: GAS_CONSTANTS.DELETE_ACCOUNT_GAS.toString(), tgas: 0.45 };
230
+ default:
231
+ return { type: actionType, gas: GAS_CONSTANTS.BASE_FUNCTION_CALL.toString(), tgas: 5 };
232
+ }
233
+ }
234
+ /**
235
+ * Calculate total deposit required
236
+ */
237
+ calculateTotalDeposit(transaction) {
238
+ if (!transaction.actions)
239
+ return "0";
240
+ let total = 0n;
241
+ for (const action of transaction.actions) {
242
+ if (typeof action === "object") {
243
+ const actionType = Object.keys(action)[0];
244
+ const actionData = action[actionType];
245
+ if (actionType === "FunctionCall" || actionType === "functionCall") {
246
+ const fc = actionData;
247
+ if (fc.deposit)
248
+ total += BigInt(fc.deposit);
249
+ }
250
+ else if (actionType === "Transfer" || actionType === "transfer") {
251
+ const t = actionData;
252
+ if (t.deposit)
253
+ total += BigInt(t.deposit);
254
+ }
255
+ else if (actionType === "Stake" || actionType === "stake") {
256
+ const s = actionData;
257
+ if (s.stake)
258
+ total += BigInt(s.stake);
259
+ }
260
+ }
261
+ }
262
+ return total.toString();
263
+ }
264
+ /**
265
+ * Check for dangerous actions
266
+ */
267
+ checkDangerousActions(transaction, warnings) {
268
+ if (!transaction.actions)
269
+ return;
270
+ for (const action of transaction.actions) {
271
+ if (typeof action === "object") {
272
+ const actionType = Object.keys(action)[0];
273
+ if (actionType === "DeleteAccount" || actionType === "deleteAccount") {
274
+ warnings.push({
275
+ type: "dangerous_action",
276
+ message: "This transaction will DELETE your account permanently!",
277
+ severity: "error",
278
+ });
279
+ }
280
+ if (actionType === "DeleteKey" || actionType === "deleteKey") {
281
+ warnings.push({
282
+ type: "dangerous_action",
283
+ message: "This transaction will remove an access key from your account",
284
+ severity: "warning",
285
+ });
286
+ }
287
+ if (actionType === "AddKey" || actionType === "addKey") {
288
+ const ak = action[actionType];
289
+ if (ak.accessKey?.permission === "FullAccess") {
290
+ warnings.push({
291
+ type: "dangerous_action",
292
+ message: "This transaction grants FULL ACCESS to your account",
293
+ severity: "error",
294
+ });
295
+ }
296
+ }
297
+ }
298
+ }
299
+ }
300
+ /**
301
+ * Simulate a function call via RPC view call
302
+ */
303
+ async simulateFunctionCall(contractId, methodName, args) {
304
+ const argsBase64 = args
305
+ ? typeof args === "string"
306
+ ? btoa(args)
307
+ : btoa(String.fromCharCode(...args))
308
+ : "";
309
+ try {
310
+ const response = await fetch(this.rpcEndpoint, {
311
+ method: "POST",
312
+ headers: { "Content-Type": "application/json" },
313
+ body: JSON.stringify({
314
+ jsonrpc: "2.0",
315
+ id: "simulation",
316
+ method: "query",
317
+ params: {
318
+ request_type: "call_function",
319
+ finality: "optimistic",
320
+ account_id: contractId,
321
+ method_name: methodName,
322
+ args_base64: argsBase64,
323
+ },
324
+ }),
325
+ });
326
+ const data = await response.json();
327
+ if (data.error) {
328
+ throw new errors_1.WalletError({
329
+ code: errors_1.ErrorCode.RPC_ERROR,
330
+ message: data.error.message ?? "RPC call failed",
331
+ });
332
+ }
333
+ const result = data.result;
334
+ const logs = result?.logs ?? [];
335
+ let parsedResult;
336
+ if (result?.result) {
337
+ try {
338
+ const decoded = String.fromCharCode(...result.result);
339
+ parsedResult = JSON.parse(decoded);
340
+ }
341
+ catch {
342
+ parsedResult = result.result;
343
+ }
344
+ }
345
+ return { result: parsedResult, logs };
346
+ }
347
+ catch (e) {
348
+ if (e instanceof errors_1.WalletError)
349
+ throw e;
350
+ throw new errors_1.WalletError({
351
+ code: errors_1.ErrorCode.RPC_ERROR,
352
+ message: e instanceof Error ? e.message : "Simulation failed",
353
+ originalError: e instanceof Error ? e : undefined,
354
+ });
355
+ }
356
+ }
357
+ /**
358
+ * Get account balance
359
+ */
360
+ async getAccountBalance(accountId) {
361
+ try {
362
+ const response = await fetch(this.rpcEndpoint, {
363
+ method: "POST",
364
+ headers: { "Content-Type": "application/json" },
365
+ body: JSON.stringify({
366
+ jsonrpc: "2.0",
367
+ id: "balance",
368
+ method: "query",
369
+ params: {
370
+ request_type: "view_account",
371
+ finality: "optimistic",
372
+ account_id: accountId,
373
+ },
374
+ }),
375
+ });
376
+ const data = await response.json();
377
+ return data.result?.amount ?? "0";
378
+ }
379
+ catch {
380
+ return "0";
381
+ }
382
+ }
383
+ /**
384
+ * Format yoctoNEAR to NEAR
385
+ */
386
+ formatNear(yocto) {
387
+ try {
388
+ const value = BigInt(yocto);
389
+ const near = Number(value) / 1e24;
390
+ if (near < 0.0001 && near > 0) {
391
+ return "< 0.0001 NEAR";
392
+ }
393
+ return `${near.toFixed(4)} NEAR`;
394
+ }
395
+ catch {
396
+ return "0 NEAR";
397
+ }
398
+ }
399
+ /**
400
+ * Set network
401
+ */
402
+ setNetwork(network) {
403
+ this.network = network;
404
+ this.rpcEndpoint = DEFAULT_RPC_ENDPOINTS[network];
405
+ }
406
+ /**
407
+ * Set custom RPC endpoint
408
+ */
409
+ setRpcEndpoint(endpoint) {
410
+ this.rpcEndpoint = endpoint;
411
+ }
412
+ }
413
+ exports.TransactionSimulator = TransactionSimulator;
414
+ /**
415
+ * Quick gas estimate without full simulation
416
+ */
417
+ function quickGasEstimate(transaction) {
418
+ const simulator = new TransactionSimulator();
419
+ const breakdown = [];
420
+ let totalGas = 0n;
421
+ if (transaction.actions) {
422
+ for (const action of transaction.actions) {
423
+ const estimate = simulator.estimateActionGas(action);
424
+ breakdown.push(estimate);
425
+ totalGas += BigInt(estimate.gas);
426
+ }
427
+ }
428
+ if (totalGas > GAS_CONSTANTS.MAX_GAS) {
429
+ totalGas = GAS_CONSTANTS.MAX_GAS;
430
+ }
431
+ const tgas = Number(totalGas) / 1e12;
432
+ const gasCostYocto = totalGas * GAS_CONSTANTS.GAS_PRICE;
433
+ return {
434
+ gas: totalGas.toString(),
435
+ tgas,
436
+ gasCostNear: `${(Number(gasCostYocto) / 1e24).toFixed(6)} NEAR`,
437
+ canAfford: true, // Can't check without account
438
+ breakdown,
439
+ };
440
+ }
441
+ //# sourceMappingURL=simulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulation.js","sourceRoot":"","sources":["../../src/helpers/simulation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export interface DataStorage {
2
+ get(key: string): Promise<string | null>;
3
+ set(key: string, value: string): Promise<void>;
4
+ remove(key: string): Promise<void>;
5
+ }
6
+ /**
7
+ * localStorage adapter - persists across browser sessions
8
+ */
9
+ export declare class LocalStorage implements DataStorage {
10
+ get(key: string): Promise<string | null>;
11
+ set(key: string, value: string): Promise<void>;
12
+ remove(key: string): Promise<void>;
13
+ }
14
+ /**
15
+ * sessionStorage adapter - cleared when browser tab closes
16
+ */
17
+ export declare class SessionStorage implements DataStorage {
18
+ get(key: string): Promise<string | null>;
19
+ set(key: string, value: string): Promise<void>;
20
+ remove(key: string): Promise<void>;
21
+ }
22
+ /**
23
+ * Memory-only adapter - no persistence, lost on page refresh
24
+ */
25
+ export declare class MemoryStorage implements DataStorage {
26
+ private data;
27
+ get(key: string): Promise<string | null>;
28
+ set(key: string, value: string): Promise<void>;
29
+ remove(key: string): Promise<void>;
30
+ clear(): void;
31
+ }
32
+ /**
33
+ * IndexedDB adapter - for larger data, survives browser sessions
34
+ */
35
+ export declare class IndexedDBStorage implements DataStorage {
36
+ private dbName;
37
+ private storeName;
38
+ private dbPromise;
39
+ constructor(dbName?: string, storeName?: string);
40
+ private getDB;
41
+ get(key: string): Promise<string | null>;
42
+ set(key: string, value: string): Promise<void>;
43
+ remove(key: string): Promise<void>;
44
+ }
45
+ /**
46
+ * Encrypted storage wrapper - encrypts data before storing
47
+ * Uses AES-GCM with a derived key from password
48
+ */
49
+ export declare class EncryptedStorage implements DataStorage {
50
+ private storage;
51
+ private keyPromise;
52
+ private password;
53
+ constructor(storage: DataStorage, password: string);
54
+ private getKey;
55
+ get(key: string): Promise<string | null>;
56
+ set(key: string, value: string): Promise<void>;
57
+ remove(key: string): Promise<void>;
58
+ }