@suzaku-network/suzaku-cli 1.0.2

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 (194) hide show
  1. package/LICENSE +96 -0
  2. package/README.md +1080 -0
  3. package/bin/cli.js +3 -0
  4. package/defaults/.env.anvil +4 -0
  5. package/defaults/.env.dexalot +7 -0
  6. package/defaults/.env.fuji +4 -0
  7. package/defaults/.env.kiteai +2 -0
  8. package/defaults/.env.mainnet +4 -0
  9. package/defaults/.env.template +10 -0
  10. package/dist/abis/AccessControl.d.ts +176 -0
  11. package/dist/abis/AccessControl.js +230 -0
  12. package/dist/abis/AccessControl.js.map +1 -0
  13. package/dist/abis/BalancerValidatorManager.d.ts +1121 -0
  14. package/dist/abis/BalancerValidatorManager.js +1469 -0
  15. package/dist/abis/BalancerValidatorManager.js.map +1 -0
  16. package/dist/abis/DefaultCollateral.d.ts +620 -0
  17. package/dist/abis/DefaultCollateral.js +811 -0
  18. package/dist/abis/DefaultCollateral.js.map +1 -0
  19. package/dist/abis/ERC20.d.ts +635 -0
  20. package/dist/abis/ERC20.js +831 -0
  21. package/dist/abis/ERC20.js.map +1 -0
  22. package/dist/abis/IWarpMessenger.d.ts +104 -0
  23. package/dist/abis/IWarpMessenger.js +139 -0
  24. package/dist/abis/IWarpMessenger.js.map +1 -0
  25. package/dist/abis/KiteStakingManager.d.ts +1459 -0
  26. package/dist/abis/KiteStakingManager.js +1886 -0
  27. package/dist/abis/KiteStakingManager.js.map +1 -0
  28. package/dist/abis/L1Middleware.d.ts +1712 -0
  29. package/dist/abis/L1Middleware.js +2242 -0
  30. package/dist/abis/L1Middleware.js.map +1 -0
  31. package/dist/abis/L1Registry.d.ts +415 -0
  32. package/dist/abis/L1Registry.js +544 -0
  33. package/dist/abis/L1Registry.js.map +1 -0
  34. package/dist/abis/L1RestakeDelegator.d.ts +865 -0
  35. package/dist/abis/L1RestakeDelegator.js +1118 -0
  36. package/dist/abis/L1RestakeDelegator.js.map +1 -0
  37. package/dist/abis/OperatorL1OptInService.d.ts +288 -0
  38. package/dist/abis/OperatorL1OptInService.js +374 -0
  39. package/dist/abis/OperatorL1OptInService.js.map +1 -0
  40. package/dist/abis/OperatorRegistry.d.ts +125 -0
  41. package/dist/abis/OperatorRegistry.js +166 -0
  42. package/dist/abis/OperatorRegistry.js.map +1 -0
  43. package/dist/abis/OperatorVaultOptInService.d.ts +288 -0
  44. package/dist/abis/OperatorVaultOptInService.js +374 -0
  45. package/dist/abis/OperatorVaultOptInService.js.map +1 -0
  46. package/dist/abis/Ownable.d.ts +59 -0
  47. package/dist/abis/Ownable.js +79 -0
  48. package/dist/abis/Ownable.js.map +1 -0
  49. package/dist/abis/PoASecurityModule.d.ts +225 -0
  50. package/dist/abis/PoASecurityModule.js +299 -0
  51. package/dist/abis/PoASecurityModule.js.map +1 -0
  52. package/dist/abis/RewardsNativeToken.d.ts +1334 -0
  53. package/dist/abis/RewardsNativeToken.js +1749 -0
  54. package/dist/abis/RewardsNativeToken.js.map +1 -0
  55. package/dist/abis/StakingVault.d.ts +2913 -0
  56. package/dist/abis/StakingVault.js +3780 -0
  57. package/dist/abis/StakingVault.js.map +1 -0
  58. package/dist/abis/StakingVaultOperations.d.ts +980 -0
  59. package/dist/abis/StakingVaultOperations.js +1270 -0
  60. package/dist/abis/StakingVaultOperations.js.map +1 -0
  61. package/dist/abis/UptimeTracker.d.ts +300 -0
  62. package/dist/abis/UptimeTracker.js +397 -0
  63. package/dist/abis/UptimeTracker.js.map +1 -0
  64. package/dist/abis/ValidatorManager.d.ts +842 -0
  65. package/dist/abis/ValidatorManager.js +1101 -0
  66. package/dist/abis/ValidatorManager.js.map +1 -0
  67. package/dist/abis/VaultFactory.d.ts +288 -0
  68. package/dist/abis/VaultFactory.js +378 -0
  69. package/dist/abis/VaultFactory.js.map +1 -0
  70. package/dist/abis/VaultManager.d.ts +519 -0
  71. package/dist/abis/VaultManager.js +678 -0
  72. package/dist/abis/VaultManager.js.map +1 -0
  73. package/dist/abis/VaultTokenized.d.ts +1626 -0
  74. package/dist/abis/VaultTokenized.js +2114 -0
  75. package/dist/abis/VaultTokenized.js.map +1 -0
  76. package/dist/abis/abi-selectors.json +700 -0
  77. package/dist/abis/index.d.ts +18356 -0
  78. package/dist/abis/index.js +58 -0
  79. package/dist/abis/index.js.map +1 -0
  80. package/dist/accessControl.d.ts +15 -0
  81. package/dist/accessControl.js +36 -0
  82. package/dist/accessControl.js.map +1 -0
  83. package/dist/balancer.d.ts +25 -0
  84. package/dist/balancer.js +42 -0
  85. package/dist/balancer.js.map +1 -0
  86. package/dist/cli.d.mts +1 -0
  87. package/dist/cli.d.ts +2 -0
  88. package/dist/cli.js +3183 -0
  89. package/dist/cli.js.map +1 -0
  90. package/dist/cli.mjs +31343 -0
  91. package/dist/cli.mjs.map +1 -0
  92. package/dist/client.d.ts +34 -0
  93. package/dist/client.js +76 -0
  94. package/dist/client.js.map +1 -0
  95. package/dist/config.d.ts +10 -0
  96. package/dist/config.js +63 -0
  97. package/dist/config.js.map +1 -0
  98. package/dist/delegator.d.ts +4 -0
  99. package/dist/delegator.js +16 -0
  100. package/dist/delegator.js.map +1 -0
  101. package/dist/index.d.mts +19770 -0
  102. package/dist/index.d.ts +7 -0
  103. package/dist/index.js +24 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/index.mjs +27451 -0
  106. package/dist/index.mjs.map +1 -0
  107. package/dist/keyStore.d.ts +3 -0
  108. package/dist/keyStore.js +105 -0
  109. package/dist/keyStore.js.map +1 -0
  110. package/dist/kiteStaking.d.ts +91 -0
  111. package/dist/kiteStaking.js +731 -0
  112. package/dist/kiteStaking.js.map +1 -0
  113. package/dist/l1.d.ts +5 -0
  114. package/dist/l1.js +22 -0
  115. package/dist/l1.js.map +1 -0
  116. package/dist/lib/autoCompletion.d.ts +3 -0
  117. package/dist/lib/autoCompletion.js +55 -0
  118. package/dist/lib/autoCompletion.js.map +1 -0
  119. package/dist/lib/cChainUtils.d.ts +42 -0
  120. package/dist/lib/cChainUtils.js +271 -0
  121. package/dist/lib/cChainUtils.js.map +1 -0
  122. package/dist/lib/castUtils.d.ts +18 -0
  123. package/dist/lib/castUtils.js +81 -0
  124. package/dist/lib/castUtils.js.map +1 -0
  125. package/dist/lib/chainList.d.ts +5 -0
  126. package/dist/lib/chainList.js +86 -0
  127. package/dist/lib/chainList.js.map +1 -0
  128. package/dist/lib/cliParser.d.ts +27 -0
  129. package/dist/lib/cliParser.js +167 -0
  130. package/dist/lib/cliParser.js.map +1 -0
  131. package/dist/lib/commandUtils.d.ts +13 -0
  132. package/dist/lib/commandUtils.js +38 -0
  133. package/dist/lib/commandUtils.js.map +1 -0
  134. package/dist/lib/coreWalletUtils.d.ts +3 -0
  135. package/dist/lib/coreWalletUtils.js +74 -0
  136. package/dist/lib/coreWalletUtils.js.map +1 -0
  137. package/dist/lib/justification.d.ts +90 -0
  138. package/dist/lib/justification.js +577 -0
  139. package/dist/lib/justification.js.map +1 -0
  140. package/dist/lib/ledgerUtils.d.ts +4 -0
  141. package/dist/lib/ledgerUtils.js +258 -0
  142. package/dist/lib/ledgerUtils.js.map +1 -0
  143. package/dist/lib/logger.d.ts +46 -0
  144. package/dist/lib/logger.js +226 -0
  145. package/dist/lib/logger.js.map +1 -0
  146. package/dist/lib/pChainUtils.d.ts +128 -0
  147. package/dist/lib/pChainUtils.js +436 -0
  148. package/dist/lib/pChainUtils.js.map +1 -0
  149. package/dist/lib/pass.d.ts +81 -0
  150. package/dist/lib/pass.js +353 -0
  151. package/dist/lib/pass.js.map +1 -0
  152. package/dist/lib/safeUtils.d.ts +25 -0
  153. package/dist/lib/safeUtils.js +93 -0
  154. package/dist/lib/safeUtils.js.map +1 -0
  155. package/dist/lib/transferUtils.d.ts +643 -0
  156. package/dist/lib/transferUtils.js +141 -0
  157. package/dist/lib/transferUtils.js.map +1 -0
  158. package/dist/lib/utils.d.ts +28 -0
  159. package/dist/lib/utils.js +166 -0
  160. package/dist/lib/utils.js.map +1 -0
  161. package/dist/lib/viemUtils.d.ts +80 -0
  162. package/dist/lib/viemUtils.js +317 -0
  163. package/dist/lib/viemUtils.js.map +1 -0
  164. package/dist/lib/warpUtils.d.ts +76 -0
  165. package/dist/lib/warpUtils.js +448 -0
  166. package/dist/lib/warpUtils.js.map +1 -0
  167. package/dist/middleware.d.ts +75 -0
  168. package/dist/middleware.js +430 -0
  169. package/dist/middleware.js.map +1 -0
  170. package/dist/operator.d.ts +4 -0
  171. package/dist/operator.js +22 -0
  172. package/dist/operator.js.map +1 -0
  173. package/dist/operatorOptIn.d.ts +8 -0
  174. package/dist/operatorOptIn.js +39 -0
  175. package/dist/operatorOptIn.js.map +1 -0
  176. package/dist/rewards.d.ts +116 -0
  177. package/dist/rewards.js +244 -0
  178. package/dist/rewards.js.map +1 -0
  179. package/dist/securityModule.d.ts +8 -0
  180. package/dist/securityModule.js +305 -0
  181. package/dist/securityModule.js.map +1 -0
  182. package/dist/stakingVault.d.ts +184 -0
  183. package/dist/stakingVault.js +1224 -0
  184. package/dist/stakingVault.js.map +1 -0
  185. package/dist/uptime.d.ts +54 -0
  186. package/dist/uptime.js +246 -0
  187. package/dist/uptime.js.map +1 -0
  188. package/dist/vault.d.ts +16 -0
  189. package/dist/vault.js +131 -0
  190. package/dist/vault.js.map +1 -0
  191. package/dist/vaultManager.d.ts +8 -0
  192. package/dist/vaultManager.js +40 -0
  193. package/dist/vaultManager.js.map +1 -0
  194. package/package.json +62 -0
@@ -0,0 +1,353 @@
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.Pass = void 0;
37
+ const child_process_1 = require("child_process");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const os = __importStar(require("os"));
41
+ const util = __importStar(require("util"));
42
+ const console_log_colors_1 = require("console-log-colors");
43
+ const logger_1 = require("./logger");
44
+ const utils_1 = require("./utils");
45
+ /** Recursively builds the Tree representation of dirPath. */
46
+ function buildTree(dirPath, extensions = ['gpg']) {
47
+ const node = {};
48
+ const entries = fs.readdirSync(dirPath);
49
+ for (const entry of entries) {
50
+ const fullPath = path.join(dirPath, entry);
51
+ if (fs.statSync(fullPath).isDirectory()) {
52
+ node[entry] = buildTree(fullPath);
53
+ }
54
+ else if (extensions.length === 0 || extensions.some(ext => entry.endsWith(`.${ext}`))) {
55
+ node[entry] = undefined;
56
+ }
57
+ }
58
+ return node;
59
+ }
60
+ function printTree(pass, relativePath, showAddresses = true) {
61
+ const tree = (relativePath ? getSubTree(pass.tree, relativePath) : pass.tree);
62
+ const lines = [];
63
+ const buildLines = (node, prefix, path, showAddresses) => {
64
+ const keys = Object.keys(node);
65
+ const maxKeyLength = Math.max(...keys.map(key => key.length)) + prefix.length;
66
+ keys.forEach((key, i) => {
67
+ const isLast = i === keys.length - 1;
68
+ const child = node[key];
69
+ const formatedKey = key.replace(/\.gpg$/, ''); // Remove .gpg extension for display
70
+ const displayedKey = (child ? console_log_colors_1.color.blue(formatedKey) : formatedKey);
71
+ let address;
72
+ try {
73
+ address = child ? '' : showAddresses ? (0, utils_1.getCchainAddress)(pass.show(path.length ? path + '/' + formatedKey : formatedKey)).trim() : '';
74
+ }
75
+ catch {
76
+ address = 'corrupted';
77
+ }
78
+ lines.push(`${prefix}${isLast ? '└── ' : '├── '}${displayedKey}${address ? ' '.repeat(maxKeyLength + 2 - key.length) + ' (' + address + ')' : ''}`);
79
+ if (child) {
80
+ const newPrefix = prefix + (isLast ? ' ' : '│ ');
81
+ buildLines(child, newPrefix, path.length ? path + '/' + key : key, showAddresses);
82
+ }
83
+ });
84
+ };
85
+ buildLines(tree, '', relativePath ? relativePath : '', showAddresses);
86
+ return lines.join('\n');
87
+ }
88
+ /** Retrieves a subtree at the given relative path, or undefined if not found. */
89
+ const getNode = (node, parts) => {
90
+ if (parts.length === 0)
91
+ return node;
92
+ const [head, ...rest] = parts;
93
+ const child = node[head];
94
+ if (!child)
95
+ return undefined;
96
+ return getNode(child, rest);
97
+ };
98
+ function getSubTree(tree, relativePath) {
99
+ const parts = relativePath.split(path.sep).filter(Boolean);
100
+ return getNode(tree, parts);
101
+ }
102
+ // proxy for Pass to add a relative path layer
103
+ const getPassProxyHandler = (relPath) => {
104
+ // Create a handler that modifies the arguments based on the relative path for each function
105
+ const simpleMethods = ['ls', 'show', 'insert', 'edit', 'generate', 'rm', 'toString'];
106
+ const complexMethods = ['mv', 'cp'];
107
+ const handler = {
108
+ apply(target, thisArg, argArray) {
109
+ const args = argArray;
110
+ if (!complexMethods.includes(target.name)) {
111
+ args[0] = args[0] && typeof args[0] === 'string' ? path.join(relPath, path.sep, args[0]) : relPath;
112
+ }
113
+ else {
114
+ if (args.length < 2) {
115
+ throw new Error(`Method ${target.name} requires at least 2 arguments.`);
116
+ }
117
+ args[0] = args[0] && typeof args[0] === 'string' ? path.join(relPath, path.sep, args[0]) : relPath;
118
+ args[1] = args[1] && typeof args[1] === 'string' ? path.join(relPath, path.sep, args[1]) : relPath;
119
+ }
120
+ return target.apply(thisArg, args);
121
+ }
122
+ };
123
+ // Return a Proxy handler for the Pass instance that intercepts property access (functions in our cases)
124
+ return {
125
+ get(target, prop) {
126
+ if (simpleMethods.includes(prop)) {
127
+ return new Proxy(Reflect.get(target, prop), handler);
128
+ }
129
+ else
130
+ return Reflect.get(target, prop);
131
+ }
132
+ };
133
+ };
134
+ /**
135
+ * Synchronous TypeScript wrapper around `pass` CLI.
136
+ * Returns SubPass when path refers to directory.
137
+ */
138
+ class Pass {
139
+ passBin = 'pass';
140
+ storeDir;
141
+ tree;
142
+ /**
143
+ * @param storePath Absolute path to password-store directory.
144
+ * @param initOptions Provide GPG IDs to initialize if store missing.
145
+ */
146
+ constructor(storePath, gpgIds) {
147
+ if (storePath) {
148
+ if (!path.isAbsolute(storePath)) {
149
+ throw new Error('A valid absolute storePath is required.');
150
+ }
151
+ this.storeDir = storePath;
152
+ // Set PASSWORD_STORE_DIR environment variable for all subsequent commands
153
+ process.env.PASSWORD_STORE_DIR = this.storeDir;
154
+ }
155
+ else {
156
+ this.storeDir = process.env.PASSWORD_STORE_DIR || path.join(os.homedir(), '.password-store');
157
+ }
158
+ // Ensure the store directory exists
159
+ if (!fs.existsSync(this.storeDir)) {
160
+ if (gpgIds && gpgIds.length > 0) {
161
+ logger_1.logger.log(`Store directory ${this.storeDir} does not exist. Initializing with GPG IDs: ${gpgIds.join(', ')}`);
162
+ this.init(gpgIds);
163
+ }
164
+ else {
165
+ throw new Error(`Password store directory ${this.storeDir} does not exist. Please initialize it first.`);
166
+ }
167
+ }
168
+ else if (!fs.statSync(this.storeDir).isDirectory()) {
169
+ throw new Error(`Password store path ${this.storeDir} is not a directory.`);
170
+ }
171
+ // Build SubPass for store
172
+ this.tree = buildTree(this.storeDir);
173
+ try {
174
+ this.version();
175
+ }
176
+ catch {
177
+ throw new Error('`pass` CLI is not installed or not in PATH. pls visit https://www.passwordstore.org/ to install it.');
178
+ }
179
+ }
180
+ refresh() {
181
+ this.tree = buildTree(this.storeDir);
182
+ }
183
+ /** Run a command in the context of the store and return stdout as string (trimmed). */
184
+ run(cmd) {
185
+ try {
186
+ const out = (0, child_process_1.execSync)(cmd, {
187
+ stdio: ['ignore', 'pipe', 'inherit'],
188
+ env: process.env,
189
+ // cwd: this.storeDir,
190
+ }).toString()
191
+ .replace(/\x1b\[[0-9;]*m/g, ''); // Remove ANSI color codes
192
+ return out.trim();
193
+ }
194
+ catch (error) {
195
+ if (cmd.includes('show') || cmd.includes('insert')) { // Hide secrets
196
+ throw new Error(`Command failed: ${error.message}`);
197
+ }
198
+ else {
199
+ throw error;
200
+ }
201
+ }
202
+ }
203
+ static listGPGIds() {
204
+ const cmd = `gpg -k | grep '^uid' | sed 's/.*<\\([^>]*\\)>.*/\\1/p'`;
205
+ const out = (0, child_process_1.execSync)(cmd, {
206
+ stdio: ['ignore', 'pipe', 'inherit']
207
+ }).toString();
208
+ return [...new Set(out.split('\n').map(line => line.trim()).filter(line => !!line))];
209
+ }
210
+ /** Initialize a new password store: pass init gpg-id... */
211
+ init(gpgIds) {
212
+ if (!gpgIds.length)
213
+ throw new Error('At least one GPG ID is required for init.');
214
+ this.run(`${this.passBin} init ${gpgIds.join(' ')}`);
215
+ }
216
+ /** List entries or return SubPass if subfolder path.
217
+ * @returns string[] or SubPass
218
+ */
219
+ ls(subfolder = '') {
220
+ return new Proxy(this, getPassProxyHandler(subfolder));
221
+ }
222
+ exists(name) {
223
+ const fullDir = path.join(this.storeDir, name);
224
+ return fs.existsSync(fullDir) && fs.statSync(fullDir).isFile();
225
+ }
226
+ /** Show entry or return SubPass if name path is directory.
227
+ * @returns string or SubPass
228
+ */
229
+ show(name, options = {}) {
230
+ const fullDir = name ? path.join(this.storeDir, name) : this.storeDir;
231
+ if (fs.existsSync(fullDir) && fs.statSync(fullDir).isDirectory())
232
+ return name ? new Proxy(this, getPassProxyHandler(name)) : this;
233
+ const clipFlag = options.clipLine !== undefined ? `--clip=${options.clipLine}` : '';
234
+ const cmd = `${this.passBin} show ${clipFlag} ${name}`.trim();
235
+ return this.run(cmd);
236
+ }
237
+ /** Search decrypted contents: pass grep [options] search-string */
238
+ grep(searchString, grepOptions = '') {
239
+ const opts = grepOptions ? `${grepOptions}` : '';
240
+ const cmd = `${this.passBin} grep ${opts} ${searchString}`.trim();
241
+ const out = this.run(cmd);
242
+ return out.split('\n').map(line => line.trim()).filter(line => !!line);
243
+ }
244
+ /** Insert or edit an entry: pass insert [--echo | --multiline] [--force] pass-name */
245
+ insert(name, secret, options = {}) {
246
+ const flags = [];
247
+ if (options.multiline)
248
+ flags.push('--multiline');
249
+ if (options.force)
250
+ flags.push('--force');
251
+ const flagStr = flags.join(' ');
252
+ const cmd = `echo "${secret.replace(/"/g, '\\"')}" | ${this.passBin} insert -e ${flagStr} ${name}`;
253
+ this.run(cmd);
254
+ this.refresh();
255
+ }
256
+ /** Edit an entry using system $EDITOR: pass edit pass-name */
257
+ edit(name) {
258
+ this.run(`${this.passBin} edit ${name}`);
259
+ this.refresh();
260
+ }
261
+ /**
262
+ * Generate a password: pass generate [--no-symbols] [--clip] [--in-place | --force] pass-name [length]
263
+ * Returns generated password or SubPass if path exists and is directory.
264
+ */
265
+ generate(name, options = {}) {
266
+ const flags = [];
267
+ if (options.noSymbols)
268
+ flags.push('--no-symbols');
269
+ if (options.clip)
270
+ flags.push('--clip');
271
+ if (options.inPlace)
272
+ flags.push('--in-place');
273
+ if (options.force)
274
+ flags.push('--force');
275
+ const length = options.length || 25;
276
+ const flagStr = flags.join(' ');
277
+ const cmd = `${this.passBin} generate ${flagStr} ${name} ${length}`.trim();
278
+ this.run(cmd);
279
+ this.refresh();
280
+ const entry = this.show(name);
281
+ const firstLine = entry.split('\n')[0].trim();
282
+ return firstLine;
283
+ }
284
+ /** Remove an entry or directory: pass rm [--recursive] [--force] pass-name */
285
+ rm(name, options = {}) {
286
+ // Remove entire directory
287
+ const flags = [];
288
+ if (options.recursive)
289
+ flags.push('--recursive');
290
+ if (options.force)
291
+ flags.push('--force');
292
+ const flagStr = flags.join(' ');
293
+ const cmd = `${this.passBin} rm ${flagStr} ${name}`.trim();
294
+ this.run(cmd);
295
+ this.refresh();
296
+ }
297
+ /** Move or rename: pass mv [--force] old-path new-path */
298
+ mv(oldPath, newPath, options = {}) {
299
+ const flag = options.force ? '--force' : '';
300
+ const cmd = `${this.passBin} mv ${flag} ${oldPath} ${newPath}`.trim();
301
+ this.run(cmd);
302
+ this.refresh();
303
+ }
304
+ /** Copy an entry: pass cp [--force] old-path new-path */
305
+ cp(oldPath, newPath, options = {}) {
306
+ const flag = options.force ? '--force' : '';
307
+ const cmd = `${this.passBin} cp ${flag} ${oldPath} ${newPath}`.trim();
308
+ this.run(cmd);
309
+ this.refresh();
310
+ }
311
+ /** Execute a git command in the store: pass git git-command-args... */
312
+ git(args) {
313
+ if (!args.length) {
314
+ throw new Error('At least one git argument is required.');
315
+ }
316
+ const argStr = args.join(' ');
317
+ const cmd = `${this.passBin} git ${argStr}`.trim();
318
+ return this.run(cmd);
319
+ }
320
+ /** Show help text: pass help */
321
+ help() {
322
+ return this.run(`${this.passBin} help`);
323
+ }
324
+ /** Show version info: pass version */
325
+ version() {
326
+ return this.run(`${this.passBin} version`).match(/(\d+\.\d+\.\d+)/)?.[0] || 'unknown';
327
+ }
328
+ toString(showAddresses = true, name) {
329
+ return printTree(this, name, showAddresses);
330
+ }
331
+ /** Custom inspect method for better console output (auto call toString when logger.log the object) */
332
+ [util.inspect.custom]() {
333
+ return this.toString(true);
334
+ }
335
+ }
336
+ exports.Pass = Pass;
337
+ // const pass = new Pass(path.join(os.homedir(), path.sep, '/Documents/temp/.passwd-store'), [Pass.listGPGIds()[0]]);
338
+ // pass.generate('email/github', { length: 32});
339
+ // pass.insert('email/gitlab', 'MyP@ssw0rd');
340
+ // pass.insert('email/test/test2', 'MyP@ssw0rd');
341
+ // pass.insert('email/test/test3', 'MyP@ssw0rd');
342
+ // const testKeystore = pass.ls('email/test');
343
+ // logger.log(pass)
344
+ // logger.log(testKeystore)
345
+ // logger.log(pass.version());
346
+ // logger.log(pass.ls());
347
+ // logger.log(pass.show('email/gitlab'));
348
+ // logger.log(pass.ls('email'));
349
+ // logger.log(pass.show('email'));
350
+ // pass.rm('email/gitlab');
351
+ // logger.log(pass.show());
352
+ // logger.log(Pass.listGPGIds())
353
+ //# sourceMappingURL=pass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pass.js","sourceRoot":"","sources":["../../src/lib/pass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { SafeClient } from "@safe-global/sdk-starter-kit";
2
+ import { Abi, Hex } from "viem";
3
+ interface TransactionStrategyResponse {
4
+ hash?: Hex;
5
+ nonce?: number;
6
+ action: 'confirm' | 'skip' | 'new' | 'propose';
7
+ }
8
+ /**
9
+ * Safe transaction management strategy (ledger support integrated):
10
+ * 1. Search for similar pending transactions in the Safe.
11
+ * 2. Exact match:
12
+ * - If already signed by the user: Ignore the transaction (Skip).
13
+ * - If not signed: Automatically confirm the existing transaction.
14
+ * 3. Partial match (same function, different arguments):
15
+ * - Display an interactive menu.
16
+ * - Options: Confirm an existing transaction, Create a new one, or Skip all.
17
+ * 4. No match: Create a new transaction.
18
+ * 5. Proposal: Create a new proposal if the client is not an owner (If you're not a proposer, It will result as an error).
19
+ */
20
+ export declare function handleTransactionStrategy(transaction: {
21
+ to: Hex;
22
+ data: Hex;
23
+ value: string | number;
24
+ }, client: SafeClient, abi: Abi, clientAddress: Hex): Promise<TransactionStrategyResponse>;
25
+ export {};
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleTransactionStrategy = handleTransactionStrategy;
4
+ const viem_1 = require("viem");
5
+ const logger_1 = require("./logger");
6
+ /**
7
+ * Safe transaction management strategy (ledger support integrated):
8
+ * 1. Search for similar pending transactions in the Safe.
9
+ * 2. Exact match:
10
+ * - If already signed by the user: Ignore the transaction (Skip).
11
+ * - If not signed: Automatically confirm the existing transaction.
12
+ * 3. Partial match (same function, different arguments):
13
+ * - Display an interactive menu.
14
+ * - Options: Confirm an existing transaction, Create a new one, or Skip all.
15
+ * 4. No match: Create a new transaction.
16
+ * 5. Proposal: Create a new proposal if the client is not an owner (If you're not a proposer, It will result as an error).
17
+ */
18
+ async function handleTransactionStrategy(transaction, client, abi, clientAddress) {
19
+ clientAddress = clientAddress.toLowerCase();
20
+ const [safeAddress, nonce] = await Promise.all([client.getAddress(), client.getNonce()]);
21
+ const pendingTxs = await client.apiKit.getPendingTransactions(safeAddress, { currentNonce: nonce });
22
+ // Determine if the client is an owner or a proposer (a delegate)
23
+ const owners = (await client.getOwners()).map((o) => o.toLowerCase());
24
+ const delegates = (await client.apiKit.getSafeDelegates({ safeAddress })).results.map((d) => d.delegate.toLowerCase());
25
+ const newOrProposal = owners.includes(clientAddress) ? 'new' : 'propose';
26
+ if (newOrProposal === 'propose' && !delegates.includes(clientAddress)) {
27
+ logger_1.logger.exitError(['You are neither an owner or a delegate of this Safe']);
28
+ }
29
+ const selections = pendingTxs.results.reduce((acc, tx) => {
30
+ // filter similar method calls
31
+ if (tx.to === transaction.to && tx.data?.startsWith(transaction.data?.slice(0, 10))) {
32
+ const data = (0, viem_1.decodeFunctionData)({
33
+ abi,
34
+ data: tx.data
35
+ });
36
+ const alreadyConfirmed = tx.confirmations?.find((conf) => conf.owner === clientAddress);
37
+ acc.push({
38
+ safeTxHash: tx.safeTxHash,
39
+ callSignature: `${data.functionName}(${data.args?.join(', ')})`,
40
+ signed: alreadyConfirmed ? true : false,
41
+ partial: !(tx.data === transaction.data && tx.value === transaction.value),
42
+ txNonce: Number(tx.nonce)
43
+ });
44
+ }
45
+ return acc;
46
+ }, []);
47
+ // Check for exact match
48
+ const exactMatch = selections.find(s => !s.partial);
49
+ if (exactMatch) {
50
+ if (exactMatch.signed) {
51
+ logger_1.logger.log(`Transaction ${exactMatch.safeTxHash} matches exactly and is already confirmed. Skipping.`);
52
+ return { action: 'skip', hash: exactMatch.safeTxHash };
53
+ }
54
+ logger_1.logger.log(`Transaction ${exactMatch.safeTxHash} matches exactly. ${newOrProposal === 'propose' ? 'Already proposed.' : 'Confirming.'}`);
55
+ return { hash: exactMatch.safeTxHash, action: newOrProposal === 'propose' ? 'skip' : 'confirm' };
56
+ }
57
+ // Prompt a message which summarizes the pending transactions and asks the user to choose between available actions: 'confirm' | 'skip' | 'new'.
58
+ if (selections.length > 0) {
59
+ let promptMessage = `Similar pending transactions found in the Safe:\n`;
60
+ selections.forEach((sel, index) => {
61
+ promptMessage += `[${index + 1}] ${sel.safeTxHash}:\n ${sel.callSignature} - ${sel.signed ? 'signed' : 'unsigned'} - similar\n`;
62
+ });
63
+ promptMessage += `\nChoose an action:\n`;
64
+ selections.forEach((sel, index) => {
65
+ if (!sel.signed) {
66
+ promptMessage += ` [${index + 1}] Confirm transaction ${sel.safeTxHash}\n`;
67
+ }
68
+ });
69
+ promptMessage += ` [s] Skip all pending transactions\n [n] Create a new transaction\nYour choice: `;
70
+ // Loop 3 times until valid response
71
+ let retryCount = 0;
72
+ while (retryCount < 3) {
73
+ const answer = await logger_1.logger.prompt(promptMessage);
74
+ if (answer === 's') {
75
+ return { action: 'skip' };
76
+ }
77
+ else if (answer === 'n') {
78
+ return { action: newOrProposal };
79
+ }
80
+ else {
81
+ const index = parseInt(answer) - 1;
82
+ if (index >= 0 && index < selections.length && !selections[index].signed) {
83
+ return { hash: selections[index].safeTxHash, action: 'confirm' };
84
+ }
85
+ }
86
+ logger_1.logger.log(`Invalid choice, please try again.`);
87
+ retryCount++;
88
+ }
89
+ logger_1.logger.exitError(['Retry count exceeded']);
90
+ }
91
+ return { action: newOrProposal };
92
+ }
93
+ //# sourceMappingURL=safeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeUtils.js","sourceRoot":"","sources":["../../src/lib/safeUtils.ts"],"names":[],"mappings":"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"}