@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,239 @@
1
+ "use strict";
2
+ /**
3
+ * Transaction Verification Layer
4
+ * Analyzes transactions for risks before signing
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TransactionGuard = void 0;
8
+ exports.createDefaultTransactionGuard = createDefaultTransactionGuard;
9
+ /** Methods that grant significant account control */
10
+ const DANGEROUS_METHODS = [
11
+ 'add_full_access_key',
12
+ 'delete_account',
13
+ 'deploy',
14
+ 'add_key',
15
+ 'delete_key',
16
+ ];
17
+ /** Known scam contracts - maintained from community reports */
18
+ const KNOWN_SCAM_CONTRACTS = new Set([
19
+ // Add known scam contracts here
20
+ ]);
21
+ /** Suspicious patterns in function call arguments */
22
+ const SUSPICIOUS_PATTERNS = [
23
+ /add_full_access_key/i,
24
+ /delete_account/i,
25
+ /\.near['"]?\s*:/, // Hidden account references
26
+ /base64/i, // Encoded payloads that might hide malicious intent
27
+ ];
28
+ class TransactionGuard {
29
+ limits;
30
+ customScamContracts;
31
+ constructor(limits = {}) {
32
+ this.limits = limits;
33
+ this.customScamContracts = new Set();
34
+ }
35
+ /**
36
+ * Add custom scam contracts to the blocklist
37
+ */
38
+ addScamContract(contractId) {
39
+ this.customScamContracts.add(contractId);
40
+ }
41
+ /**
42
+ * Remove a contract from the custom blocklist
43
+ */
44
+ removeScamContract(contractId) {
45
+ this.customScamContracts.delete(contractId);
46
+ }
47
+ /**
48
+ * Update transaction limits
49
+ */
50
+ updateLimits(limits) {
51
+ this.limits = { ...this.limits, ...limits };
52
+ }
53
+ /**
54
+ * Analyze transaction for risks before signing
55
+ */
56
+ analyzeRisk(tx) {
57
+ const reasons = [];
58
+ let level = 'low';
59
+ // Check receiver against known scams
60
+ if (KNOWN_SCAM_CONTRACTS.has(tx.receiverId) || this.customScamContracts.has(tx.receiverId)) {
61
+ reasons.push(`Receiver ${tx.receiverId} is a known scam contract`);
62
+ level = 'critical';
63
+ }
64
+ // Check receiver against blocklist
65
+ if (this.limits.blockedReceivers?.includes(tx.receiverId)) {
66
+ reasons.push(`Receiver ${tx.receiverId} is blocked`);
67
+ level = 'critical';
68
+ }
69
+ // Check receiver against allowlist
70
+ if (this.limits.allowedReceivers?.length &&
71
+ !this.limits.allowedReceivers.includes(tx.receiverId)) {
72
+ reasons.push(`Receiver ${tx.receiverId} is not in allowlist`);
73
+ level = this.escalate(level, 'medium');
74
+ }
75
+ // Check each action
76
+ for (const action of tx.actions) {
77
+ const actionRisk = this.analyzeAction(action, tx.receiverId);
78
+ reasons.push(...actionRisk.reasons);
79
+ level = this.escalate(level, actionRisk.level);
80
+ }
81
+ return {
82
+ level,
83
+ reasons,
84
+ requiresExplicitApproval: level === 'high' || level === 'critical' || this.limits.requireConfirmation === true,
85
+ };
86
+ }
87
+ analyzeAction(action, _receiverId) {
88
+ const reasons = [];
89
+ let level = 'low';
90
+ // Handle both action formats (near-wallet-selector and near-api-js)
91
+ const actionType = 'type' in action ? action.type : action.enum;
92
+ const params = 'params' in action ? action.params : action;
93
+ switch (actionType) {
94
+ case 'Transfer': {
95
+ const deposit = params?.deposit;
96
+ const amount = BigInt(deposit || '0');
97
+ if (this.limits.maxTransferAmount && amount > this.limits.maxTransferAmount) {
98
+ reasons.push(`Transfer amount exceeds configured limit`);
99
+ level = 'high';
100
+ }
101
+ // Large transfers (>100 NEAR)
102
+ const hundredNear = BigInt('100000000000000000000000000');
103
+ if (amount > hundredNear) {
104
+ reasons.push(`Large transfer: ${this.formatNear(amount)} NEAR`);
105
+ level = this.escalate(level, 'medium');
106
+ }
107
+ // Very large transfers (>1000 NEAR)
108
+ const thousandNear = BigInt('1000000000000000000000000000');
109
+ if (amount > thousandNear) {
110
+ reasons.push(`Very large transfer: ${this.formatNear(amount)} NEAR`);
111
+ level = this.escalate(level, 'high');
112
+ }
113
+ break;
114
+ }
115
+ case 'FunctionCall': {
116
+ const methodName = params?.methodName || '';
117
+ const gas = params?.gas;
118
+ const args = params?.args;
119
+ // Check dangerous methods
120
+ if (DANGEROUS_METHODS.includes(methodName)) {
121
+ reasons.push(`Dangerous method: ${methodName}`);
122
+ level = 'critical';
123
+ }
124
+ // Check blocked methods
125
+ if (this.limits.blockedMethods?.includes(methodName)) {
126
+ reasons.push(`Method ${methodName} is blocked`);
127
+ level = 'critical';
128
+ }
129
+ // Check method allowlist
130
+ if (this.limits.allowedMethods?.length &&
131
+ !this.limits.allowedMethods.includes(methodName)) {
132
+ reasons.push(`Method ${methodName} is not in allowlist`);
133
+ level = this.escalate(level, 'medium');
134
+ }
135
+ // Check gas limits
136
+ if (gas && this.limits.maxGasPerAction) {
137
+ const gasAmount = BigInt(gas);
138
+ if (gasAmount > this.limits.maxGasPerAction) {
139
+ reasons.push(`Gas exceeds configured limit`);
140
+ level = this.escalate(level, 'medium');
141
+ }
142
+ }
143
+ // Check for suspicious patterns in args
144
+ if (args && this.containsSuspiciousPatterns(JSON.stringify(args))) {
145
+ reasons.push('Arguments contain suspicious patterns');
146
+ level = this.escalate(level, 'high');
147
+ }
148
+ break;
149
+ }
150
+ case 'AddKey': {
151
+ const accessKey = params?.accessKey;
152
+ const permission = accessKey?.permission;
153
+ if (permission === 'FullAccess' || (typeof permission === 'object' && 'fullAccess' in permission)) {
154
+ reasons.push('Adding full access key - grants complete account control');
155
+ level = 'critical';
156
+ }
157
+ else {
158
+ reasons.push('Adding function call access key');
159
+ level = this.escalate(level, 'medium');
160
+ }
161
+ break;
162
+ }
163
+ case 'DeleteKey': {
164
+ reasons.push('Deleting access key');
165
+ level = this.escalate(level, 'high');
166
+ break;
167
+ }
168
+ case 'DeleteAccount': {
169
+ reasons.push('Deleting account - this action is irreversible');
170
+ level = 'critical';
171
+ break;
172
+ }
173
+ case 'DeployContract': {
174
+ reasons.push('Deploying contract code to account');
175
+ level = 'critical';
176
+ break;
177
+ }
178
+ case 'Stake': {
179
+ reasons.push('Staking NEAR tokens');
180
+ level = this.escalate(level, 'medium');
181
+ break;
182
+ }
183
+ case 'CreateAccount': {
184
+ reasons.push('Creating new account');
185
+ level = this.escalate(level, 'low');
186
+ break;
187
+ }
188
+ }
189
+ return { level, reasons, requiresExplicitApproval: level !== 'low' };
190
+ }
191
+ containsSuspiciousPatterns(str) {
192
+ return SUSPICIOUS_PATTERNS.some(pattern => pattern.test(str));
193
+ }
194
+ escalate(current, proposed) {
195
+ const levels = ['low', 'medium', 'high', 'critical'];
196
+ return levels.indexOf(proposed) > levels.indexOf(current) ? proposed : current;
197
+ }
198
+ formatNear(yocto) {
199
+ return (Number(yocto) / 1e24).toFixed(2);
200
+ }
201
+ /**
202
+ * Validate transaction can proceed (returns false for critical risks)
203
+ */
204
+ validate(tx) {
205
+ const risk = this.analyzeRisk(tx);
206
+ if (risk.level === 'critical') {
207
+ return {
208
+ valid: false,
209
+ error: `Transaction blocked: ${risk.reasons.join(', ')}`,
210
+ risk,
211
+ };
212
+ }
213
+ return { valid: true, risk };
214
+ }
215
+ /**
216
+ * Get human-readable risk description
217
+ */
218
+ getRiskDescription(risk) {
219
+ const levelDescriptions = {
220
+ low: 'This transaction appears safe.',
221
+ medium: 'This transaction has some risk factors. Review carefully.',
222
+ high: 'This transaction has significant risks. Proceed with caution.',
223
+ critical: 'This transaction is potentially dangerous and has been blocked.',
224
+ };
225
+ return levelDescriptions[risk.level];
226
+ }
227
+ }
228
+ exports.TransactionGuard = TransactionGuard;
229
+ /**
230
+ * Create a TransactionGuard with default safe limits
231
+ */
232
+ function createDefaultTransactionGuard() {
233
+ return new TransactionGuard({
234
+ maxTransferAmount: BigInt('1000000000000000000000000000'), // 1000 NEAR
235
+ blockedMethods: DANGEROUS_METHODS,
236
+ requireConfirmation: true,
237
+ });
238
+ }
239
+ //# sourceMappingURL=transaction-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-guard.js","sourceRoot":"","sources":["../../src/security/transaction-guard.ts"],"names":[],"mappings":"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"}