@wlfi-agent/cli 1.4.13 → 1.4.14

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 (289) hide show
  1. package/Cargo.lock +3968 -0
  2. package/Cargo.toml +50 -0
  3. package/README.md +426 -6
  4. package/crates/vault-cli-admin/Cargo.toml +26 -0
  5. package/crates/vault-cli-admin/src/io_utils.rs +500 -0
  6. package/crates/vault-cli-admin/src/main.rs +3990 -0
  7. package/crates/vault-cli-admin/src/shared_config.rs +624 -0
  8. package/crates/vault-cli-admin/src/tui/amounts.rs +180 -0
  9. package/crates/vault-cli-admin/src/tui/token_rpc.rs +250 -0
  10. package/crates/vault-cli-admin/src/tui/utils.rs +82 -0
  11. package/crates/vault-cli-admin/src/tui.rs +3410 -0
  12. package/crates/vault-cli-agent/Cargo.toml +24 -0
  13. package/crates/vault-cli-agent/src/io_utils.rs +576 -0
  14. package/crates/vault-cli-agent/src/main.rs +833 -0
  15. package/crates/vault-cli-daemon/Cargo.toml +28 -0
  16. package/crates/vault-cli-daemon/src/bin/wlfi-agent-system-keychain.rs +216 -0
  17. package/crates/vault-cli-daemon/src/main.rs +644 -0
  18. package/crates/vault-cli-daemon/src/relay_sync.rs +894 -0
  19. package/crates/vault-cli-daemon/tests/system_keychain_helper_acl.rs +167 -0
  20. package/crates/vault-daemon/Cargo.toml +32 -0
  21. package/crates/vault-daemon/src/daemon_parts/api_impl_and_utils.rs +1041 -0
  22. package/crates/vault-daemon/src/daemon_parts/core_helpers.rs +1256 -0
  23. package/crates/vault-daemon/src/daemon_parts/types_api_rpc.rs +622 -0
  24. package/crates/vault-daemon/src/lib.rs +54 -0
  25. package/crates/vault-daemon/src/persistence.rs +441 -0
  26. package/crates/vault-daemon/src/tests.rs +237 -0
  27. package/crates/vault-daemon/src/tests_parts/part1.rs +1224 -0
  28. package/crates/vault-daemon/src/tests_parts/part2.rs +1021 -0
  29. package/crates/vault-daemon/src/tests_parts/part3.rs +835 -0
  30. package/crates/vault-daemon/src/tests_parts/part4.rs +604 -0
  31. package/crates/vault-domain/Cargo.toml +20 -0
  32. package/crates/vault-domain/src/action.rs +849 -0
  33. package/crates/vault-domain/src/address.rs +51 -0
  34. package/crates/vault-domain/src/approval.rs +90 -0
  35. package/crates/vault-domain/src/constants.rs +4 -0
  36. package/crates/vault-domain/src/error.rs +54 -0
  37. package/crates/vault-domain/src/keys.rs +71 -0
  38. package/crates/vault-domain/src/lib.rs +42 -0
  39. package/crates/vault-domain/src/nonce.rs +102 -0
  40. package/crates/vault-domain/src/policy.rs +172 -0
  41. package/crates/vault-domain/src/request.rs +53 -0
  42. package/crates/vault-domain/src/scope.rs +24 -0
  43. package/crates/vault-domain/src/session.rs +50 -0
  44. package/crates/vault-domain/src/signature.rs +34 -0
  45. package/crates/vault-domain/src/tests.rs +651 -0
  46. package/crates/vault-domain/src/u128_as_decimal_string.rs +44 -0
  47. package/crates/vault-policy/Cargo.toml +17 -0
  48. package/crates/vault-policy/src/engine.rs +301 -0
  49. package/crates/vault-policy/src/error.rs +81 -0
  50. package/crates/vault-policy/src/lib.rs +17 -0
  51. package/crates/vault-policy/src/report.rs +34 -0
  52. package/crates/vault-policy/src/tests.rs +891 -0
  53. package/crates/vault-policy/src/tests_explain.rs +78 -0
  54. package/crates/vault-sdk-agent/Cargo.toml +21 -0
  55. package/crates/vault-sdk-agent/src/lib.rs +711 -0
  56. package/crates/vault-signer/Cargo.toml +25 -0
  57. package/crates/vault-signer/src/lib.rs +731 -0
  58. package/crates/vault-signer/tests/secure_enclave_acl.rs +54 -0
  59. package/crates/vault-transport-unix/Cargo.toml +24 -0
  60. package/crates/vault-transport-unix/src/lib.rs +1640 -0
  61. package/crates/vault-transport-xpc/Cargo.toml +25 -0
  62. package/crates/vault-transport-xpc/src/client_codec_api.rs +635 -0
  63. package/crates/vault-transport-xpc/src/lib.rs +680 -0
  64. package/crates/vault-transport-xpc/src/tests.rs +818 -0
  65. package/crates/vault-transport-xpc/tests/e2e_flow.rs +773 -0
  66. package/dist/cli.cjs +35088 -0
  67. package/dist/cli.cjs.map +1 -0
  68. package/package.json +49 -43
  69. package/packages/cache/.turbo/turbo-build.log +52 -0
  70. package/packages/cache/dist/chunk-2QFWMUXT.cjs +43 -0
  71. package/packages/cache/dist/chunk-2QFWMUXT.cjs.map +1 -0
  72. package/packages/cache/dist/chunk-4U63TZTQ.js +43 -0
  73. package/packages/cache/dist/chunk-4U63TZTQ.js.map +1 -0
  74. package/packages/cache/dist/chunk-ALQ6H7KG.cjs +404 -0
  75. package/packages/cache/dist/chunk-ALQ6H7KG.cjs.map +1 -0
  76. package/packages/cache/dist/chunk-FGJEEF5N.js +404 -0
  77. package/packages/cache/dist/chunk-FGJEEF5N.js.map +1 -0
  78. package/packages/cache/dist/chunk-UYNEHZHB.cjs +45 -0
  79. package/packages/cache/dist/chunk-UYNEHZHB.cjs.map +1 -0
  80. package/packages/cache/dist/chunk-VXVMPG3W.js +45 -0
  81. package/packages/cache/dist/chunk-VXVMPG3W.js.map +1 -0
  82. package/packages/cache/dist/client/index.cjs +11 -0
  83. package/packages/cache/dist/client/index.cjs.map +1 -0
  84. package/packages/cache/dist/client/index.d.cts +15 -0
  85. package/packages/cache/dist/client/index.d.ts +15 -0
  86. package/packages/cache/dist/client/index.js +11 -0
  87. package/packages/cache/dist/client/index.js.map +1 -0
  88. package/packages/cache/dist/errors/index.cjs +11 -0
  89. package/packages/cache/dist/errors/index.cjs.map +1 -0
  90. package/packages/cache/dist/errors/index.d.cts +26 -0
  91. package/packages/cache/dist/errors/index.d.ts +26 -0
  92. package/packages/cache/dist/errors/index.js +11 -0
  93. package/packages/cache/dist/errors/index.js.map +1 -0
  94. package/packages/cache/dist/index.cjs +29 -0
  95. package/packages/cache/dist/index.cjs.map +1 -0
  96. package/packages/cache/dist/index.d.cts +4 -0
  97. package/packages/cache/dist/index.d.ts +4 -0
  98. package/packages/cache/dist/index.js +29 -0
  99. package/packages/cache/dist/index.js.map +1 -0
  100. package/packages/cache/dist/service/index.cjs +15 -0
  101. package/packages/cache/dist/service/index.cjs.map +1 -0
  102. package/packages/cache/dist/service/index.d.cts +184 -0
  103. package/packages/cache/dist/service/index.d.ts +184 -0
  104. package/packages/cache/dist/service/index.js +15 -0
  105. package/packages/cache/dist/service/index.js.map +1 -0
  106. package/packages/cache/node_modules/.bin/jiti +17 -0
  107. package/packages/cache/node_modules/.bin/tsc +17 -0
  108. package/packages/cache/node_modules/.bin/tsserver +17 -0
  109. package/packages/cache/node_modules/.bin/tsup +17 -0
  110. package/packages/cache/node_modules/.bin/tsup-node +17 -0
  111. package/packages/cache/node_modules/.bin/tsx +17 -0
  112. package/packages/cache/node_modules/.bin/vitest +17 -0
  113. package/packages/cache/package.json +48 -0
  114. package/packages/cache/src/client/index.ts +56 -0
  115. package/packages/cache/src/errors/index.ts +53 -0
  116. package/packages/cache/src/index.ts +3 -0
  117. package/packages/cache/src/service/index.test.ts +263 -0
  118. package/packages/cache/src/service/index.ts +678 -0
  119. package/packages/cache/tsconfig.json +13 -0
  120. package/packages/cache/tsup.config.ts +13 -0
  121. package/packages/cache/vitest.config.ts +16 -0
  122. package/packages/config/.turbo/turbo-build.log +18 -0
  123. package/packages/config/dist/index.cjs +1037 -0
  124. package/packages/config/dist/index.cjs.map +1 -0
  125. package/packages/config/dist/index.d.ts +131 -0
  126. package/packages/config/node_modules/.bin/jiti +17 -0
  127. package/packages/config/node_modules/.bin/tsc +17 -0
  128. package/packages/config/node_modules/.bin/tsserver +17 -0
  129. package/packages/config/node_modules/.bin/tsup +17 -0
  130. package/packages/config/node_modules/.bin/tsup-node +17 -0
  131. package/packages/config/node_modules/.bin/tsx +17 -0
  132. package/packages/config/package.json +21 -0
  133. package/packages/config/src/index.js +1 -0
  134. package/packages/config/src/index.ts +1282 -0
  135. package/packages/config/tsconfig.json +4 -0
  136. package/packages/rpc/.turbo/turbo-build.log +32 -0
  137. package/packages/rpc/dist/_esm-BCLXDO2R.cjs +3660 -0
  138. package/packages/rpc/dist/_esm-BCLXDO2R.cjs.map +1 -0
  139. package/packages/rpc/dist/ccip-OWJLAW55.cjs +16 -0
  140. package/packages/rpc/dist/ccip-OWJLAW55.cjs.map +1 -0
  141. package/packages/rpc/dist/chunk-APQIFZ3B.cjs +6247 -0
  142. package/packages/rpc/dist/chunk-APQIFZ3B.cjs.map +1 -0
  143. package/packages/rpc/dist/chunk-CDO2GWRD.cjs +410 -0
  144. package/packages/rpc/dist/chunk-CDO2GWRD.cjs.map +1 -0
  145. package/packages/rpc/dist/chunk-QGTNTFJ7.cjs +2249 -0
  146. package/packages/rpc/dist/chunk-QGTNTFJ7.cjs.map +1 -0
  147. package/packages/rpc/dist/chunk-TZDTAHWR.cjs +44 -0
  148. package/packages/rpc/dist/chunk-TZDTAHWR.cjs.map +1 -0
  149. package/packages/rpc/dist/index.cjs +7342 -0
  150. package/packages/rpc/dist/index.cjs.map +1 -0
  151. package/packages/rpc/dist/index.d.ts +3857 -0
  152. package/packages/rpc/dist/secp256k1-WCNM675D.cjs +18 -0
  153. package/packages/rpc/dist/secp256k1-WCNM675D.cjs.map +1 -0
  154. package/packages/rpc/node_modules/.bin/jiti +17 -0
  155. package/packages/rpc/node_modules/.bin/tsc +17 -0
  156. package/packages/rpc/node_modules/.bin/tsserver +17 -0
  157. package/packages/rpc/node_modules/.bin/tsup +17 -0
  158. package/packages/rpc/node_modules/.bin/tsup-node +17 -0
  159. package/packages/rpc/node_modules/.bin/tsx +17 -0
  160. package/packages/rpc/package.json +25 -0
  161. package/packages/rpc/src/index.ts +206 -0
  162. package/packages/rpc/tsconfig.json +4 -0
  163. package/packages/typescript/base.json +36 -0
  164. package/packages/typescript/nextjs.json +17 -0
  165. package/packages/typescript/package.json +10 -0
  166. package/packages/ui/.turbo/turbo-build.log +44 -0
  167. package/packages/ui/dist/chunk-MOAFBKSA.js +11 -0
  168. package/packages/ui/dist/chunk-MOAFBKSA.js.map +1 -0
  169. package/packages/ui/dist/components/badge.d.ts +12 -0
  170. package/packages/ui/dist/components/badge.js +31 -0
  171. package/packages/ui/dist/components/badge.js.map +1 -0
  172. package/packages/ui/dist/components/button.d.ts +13 -0
  173. package/packages/ui/dist/components/button.js +40 -0
  174. package/packages/ui/dist/components/button.js.map +1 -0
  175. package/packages/ui/dist/components/card.d.ts +10 -0
  176. package/packages/ui/dist/components/card.js +39 -0
  177. package/packages/ui/dist/components/card.js.map +1 -0
  178. package/packages/ui/dist/components/input.d.ts +5 -0
  179. package/packages/ui/dist/components/input.js +28 -0
  180. package/packages/ui/dist/components/input.js.map +1 -0
  181. package/packages/ui/dist/components/label.d.ts +5 -0
  182. package/packages/ui/dist/components/label.js +13 -0
  183. package/packages/ui/dist/components/label.js.map +1 -0
  184. package/packages/ui/dist/components/separator.d.ts +5 -0
  185. package/packages/ui/dist/components/separator.js +13 -0
  186. package/packages/ui/dist/components/separator.js.map +1 -0
  187. package/packages/ui/dist/components/textarea.d.ts +5 -0
  188. package/packages/ui/dist/components/textarea.js +27 -0
  189. package/packages/ui/dist/components/textarea.js.map +1 -0
  190. package/packages/ui/dist/tailwind.d.ts +56 -0
  191. package/packages/ui/dist/tailwind.js +60 -0
  192. package/packages/ui/dist/tailwind.js.map +1 -0
  193. package/packages/ui/dist/utils/cn.d.ts +5 -0
  194. package/packages/ui/dist/utils/cn.js +7 -0
  195. package/packages/ui/dist/utils/cn.js.map +1 -0
  196. package/packages/ui/node_modules/.bin/jiti +17 -0
  197. package/packages/ui/node_modules/.bin/tsc +17 -0
  198. package/packages/ui/node_modules/.bin/tsserver +17 -0
  199. package/packages/ui/node_modules/.bin/tsup +17 -0
  200. package/packages/ui/node_modules/.bin/tsup-node +17 -0
  201. package/packages/ui/node_modules/.bin/tsx +17 -0
  202. package/packages/ui/package.json +69 -0
  203. package/packages/ui/src/components/badge.tsx +27 -0
  204. package/packages/ui/src/components/button.tsx +40 -0
  205. package/packages/ui/src/components/card.tsx +31 -0
  206. package/packages/ui/src/components/input.tsx +21 -0
  207. package/packages/ui/src/components/label.tsx +6 -0
  208. package/packages/ui/src/components/separator.tsx +6 -0
  209. package/packages/ui/src/components/textarea.tsx +20 -0
  210. package/packages/ui/src/globals.css +70 -0
  211. package/packages/ui/src/tailwind.ts +56 -0
  212. package/packages/ui/src/utils/cn.ts +6 -0
  213. package/packages/ui/tsconfig.json +20 -0
  214. package/packages/ui/tsup.config.ts +20 -0
  215. package/pnpm-workspace.yaml +4 -0
  216. package/scripts/install-rust-binaries.mjs +84 -0
  217. package/scripts/launchd/install-user-daemon.sh +358 -0
  218. package/scripts/launchd/run-vault-daemon.sh +5 -0
  219. package/scripts/launchd/run-wlfi-agent-daemon.sh +73 -0
  220. package/scripts/launchd/uninstall-user-daemon.sh +103 -0
  221. package/src/cli.ts +2121 -0
  222. package/src/lib/admin-guard.js +1 -0
  223. package/src/lib/admin-guard.ts +185 -0
  224. package/src/lib/admin-passthrough.ts +33 -0
  225. package/src/lib/admin-reset.ts +751 -0
  226. package/src/lib/admin-setup.ts +1612 -0
  227. package/src/lib/agent-auth-clear.js +1 -0
  228. package/src/lib/agent-auth-clear.ts +58 -0
  229. package/src/lib/agent-auth-forwarding.js +1 -0
  230. package/src/lib/agent-auth-forwarding.ts +149 -0
  231. package/src/lib/agent-auth-migrate.js +1 -0
  232. package/src/lib/agent-auth-migrate.ts +150 -0
  233. package/src/lib/agent-auth-revoke.ts +103 -0
  234. package/src/lib/agent-auth-rotate.ts +107 -0
  235. package/src/lib/agent-auth-token.js +1 -0
  236. package/src/lib/agent-auth-token.ts +25 -0
  237. package/src/lib/agent-auth.ts +89 -0
  238. package/src/lib/asset-broadcast.js +1 -0
  239. package/src/lib/asset-broadcast.ts +285 -0
  240. package/src/lib/bootstrap-artifacts.js +1 -0
  241. package/src/lib/bootstrap-artifacts.ts +205 -0
  242. package/src/lib/bootstrap-credentials.js +1 -0
  243. package/src/lib/bootstrap-credentials.ts +832 -0
  244. package/src/lib/config-amounts.js +1 -0
  245. package/src/lib/config-amounts.ts +189 -0
  246. package/src/lib/config-mutation.ts +27 -0
  247. package/src/lib/fs-trust.js +1 -0
  248. package/src/lib/fs-trust.ts +537 -0
  249. package/src/lib/keychain.js +1 -0
  250. package/src/lib/keychain.ts +225 -0
  251. package/src/lib/local-admin-access.ts +106 -0
  252. package/src/lib/network-selection.js +1 -0
  253. package/src/lib/network-selection.ts +71 -0
  254. package/src/lib/passthrough-security.js +1 -0
  255. package/src/lib/passthrough-security.ts +114 -0
  256. package/src/lib/rpc-guard.js +1 -0
  257. package/src/lib/rpc-guard.ts +7 -0
  258. package/src/lib/rust-spawn-options.js +1 -0
  259. package/src/lib/rust-spawn-options.ts +98 -0
  260. package/src/lib/rust.js +1 -0
  261. package/src/lib/rust.ts +143 -0
  262. package/src/lib/signed-tx.js +1 -0
  263. package/src/lib/signed-tx.ts +116 -0
  264. package/src/lib/status-repair-cli.ts +116 -0
  265. package/src/lib/sudo.js +1 -0
  266. package/src/lib/sudo.ts +172 -0
  267. package/src/lib/vault-password-forwarding.js +1 -0
  268. package/src/lib/vault-password-forwarding.ts +155 -0
  269. package/src/lib/wallet-profile.js +1 -0
  270. package/src/lib/wallet-profile.ts +332 -0
  271. package/src/lib/wallet-repair.js +1 -0
  272. package/src/lib/wallet-repair.ts +304 -0
  273. package/src/lib/wallet-setup.js +1 -0
  274. package/src/lib/wallet-setup.ts +1466 -0
  275. package/src/lib/wallet-status.js +1 -0
  276. package/src/lib/wallet-status.ts +640 -0
  277. package/tsconfig.base.json +17 -0
  278. package/tsconfig.json +10 -0
  279. package/tsup.config.ts +25 -0
  280. package/turbo.json +41 -0
  281. package/LICENSE.md +0 -1
  282. package/dist/wlfa/index.cjs +0 -250
  283. package/dist/wlfa/index.d.cts +0 -1
  284. package/dist/wlfa/index.d.ts +0 -1
  285. package/dist/wlfa/index.js +0 -250
  286. package/dist/wlfc/index.cjs +0 -1839
  287. package/dist/wlfc/index.d.cts +0 -1
  288. package/dist/wlfc/index.d.ts +0 -1
  289. package/dist/wlfc/index.js +0 -1839
package/turbo.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://turbo.build/schema.json",
3
+ "tasks": {
4
+ "build": {
5
+ "dependsOn": [
6
+ "^build"
7
+ ],
8
+ "outputs": [
9
+ "dist/**",
10
+ ".next/**"
11
+ ]
12
+ },
13
+ "typecheck": {
14
+ "dependsOn": [
15
+ "^typecheck"
16
+ ],
17
+ "outputs": []
18
+ },
19
+ "check": {
20
+ "dependsOn": [
21
+ "^check",
22
+ "typecheck"
23
+ ],
24
+ "outputs": []
25
+ },
26
+ "lint": {
27
+ "dependsOn": [
28
+ "^lint"
29
+ ],
30
+ "outputs": []
31
+ },
32
+ "test:unit": {
33
+ "dependsOn": [
34
+ "^test:unit"
35
+ ],
36
+ "outputs": [
37
+ "coverage/**"
38
+ ]
39
+ }
40
+ }
41
+ }
package/LICENSE.md DELETED
@@ -1 +0,0 @@
1
- © World Liberty Financial LLC, a Florida limited liability company All rights reserved.
@@ -1,250 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict"; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
3
- // src/wlfa/index.ts
4
- var _promises = require('fs/promises');
5
- var _os = require('os');
6
- var _path = require('path'); var _path2 = _interopRequireDefault(_path);
7
- var _process = require('process'); var _process2 = _interopRequireDefault(_process);
8
-
9
-
10
-
11
- var _agentwalletsdk = require('@wlfi-agent/agent-wallet-sdk');
12
- var _commander = require('commander');
13
- var CONFIG_DIR = _path2.default.join(_os.homedir.call(void 0, ), ".config", "wlfa-agent");
14
- var CONFIG_FILE = _path2.default.join(CONFIG_DIR, "config.json");
15
- var TOKEN_DECIMALS = 18n;
16
- var DECIMAL_AMOUNT_REGEX = /^\d+(\.\d+)?$/;
17
- var resolveBaseUrl = () => (_nullishCoalesce(_nullishCoalesce(_process2.default.env.WLFI_AGENT_BACKEND_URL, () => ( _process2.default.env.WLF_AGENT_BACKEND_URL)), () => ( _agentwalletsdk.DEFAULT_BASE_URL))).trim();
18
- var toFlagKey = (key) => key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
19
- var optionsToFlags = (options) => {
20
- const flags = {};
21
- for (const [key, value] of Object.entries(options)) {
22
- if (value === void 0 || value === null) {
23
- continue;
24
- }
25
- const flagKey = toFlagKey(key);
26
- if (typeof value === "boolean") {
27
- if (value) {
28
- flags[flagKey] = "true";
29
- }
30
- continue;
31
- }
32
- if (typeof value === "number" || typeof value === "string") {
33
- flags[flagKey] = String(value);
34
- }
35
- }
36
- return flags;
37
- };
38
- var collectFlags = (command) => {
39
- const lineage = [];
40
- let cursor = command;
41
- while (cursor) {
42
- lineage.unshift(cursor);
43
- cursor = _nullishCoalesce(cursor.parent, () => ( null));
44
- }
45
- const flags = {};
46
- for (const node of lineage) {
47
- Object.assign(flags, optionsToFlags(node.opts()));
48
- }
49
- return flags;
50
- };
51
- var withUnsupportedBaseUrlOption = (command) => command.addOption(new (0, _commander.Option)("--base-url <url>").hideHelp());
52
- var getCommandFlags = (command) => {
53
- const flags = collectFlags(command);
54
- if (flags["base-url"]) {
55
- throw new Error(
56
- "--base-url is not supported. Use WLFI_AGENT_BACKEND_URL or WLF_AGENT_BACKEND_URL instead."
57
- );
58
- }
59
- return flags;
60
- };
61
- var toTokenBaseUnits = (rawAmount) => {
62
- const normalized = rawAmount.trim();
63
- if (!DECIMAL_AMOUNT_REGEX.test(normalized)) {
64
- throw new Error("amount must be a positive number (example: 1 or 0.5)");
65
- }
66
- const [wholePart = "0", fractionPart = ""] = normalized.split(".");
67
- if (fractionPart.length > Number(TOKEN_DECIMALS)) {
68
- throw new Error(
69
- `amount supports up to ${TOKEN_DECIMALS.toString()} decimal places`
70
- );
71
- }
72
- const base = 10n ** TOKEN_DECIMALS;
73
- const wholeUnits = BigInt(wholePart) * base;
74
- const paddedFraction = fractionPart.padEnd(Number(TOKEN_DECIMALS), "0");
75
- const fractionalUnits = paddedFraction ? BigInt(paddedFraction) : 0n;
76
- const units = wholeUnits + fractionalUnits;
77
- if (units <= 0n) {
78
- throw new Error("amount must be greater than 0");
79
- }
80
- return units.toString();
81
- };
82
- var toNonNegativeInteger = (rawValue, flagName) => {
83
- const normalized = rawValue.trim();
84
- if (!normalized) {
85
- throw new Error(`${flagName} is required`);
86
- }
87
- try {
88
- const value = BigInt(normalized);
89
- if (value < 0n) {
90
- throw new Error(`${flagName} must be non-negative`);
91
- }
92
- } catch (error) {
93
- throw new Error(
94
- error instanceof Error ? error.message : `${flagName} must be a valid integer value`
95
- );
96
- }
97
- return normalized;
98
- };
99
- var loadConfig = async () => {
100
- try {
101
- const raw = await _promises.readFile.call(void 0, CONFIG_FILE, "utf8");
102
- const parsed = JSON.parse(raw);
103
- const agentKey = typeof parsed.agentKey === "string" && parsed.agentKey.trim().length > 0 ? parsed.agentKey.trim() : void 0;
104
- return { agentKey };
105
- } catch (e) {
106
- return {};
107
- }
108
- };
109
- var saveConfig = async (config) => {
110
- await _promises.mkdir.call(void 0, CONFIG_DIR, { mode: 448, recursive: true });
111
- await _promises.writeFile.call(void 0, CONFIG_FILE, JSON.stringify(config, null, 2), {
112
- mode: 384
113
- });
114
- await _promises.chmod.call(void 0, CONFIG_FILE, 384);
115
- };
116
- var login = async (flags) => {
117
- const agentKey = (_nullishCoalesce(flags["agent-key"], () => ( ""))).trim();
118
- if (!agentKey) {
119
- throw new Error("login requires --agent-key <key>");
120
- }
121
- await saveConfig({ agentKey });
122
- console.log("Saved agent key to ~/.config/wlfa-agent/config.json");
123
- };
124
- var pay = async (flags) => {
125
- const address = (_nullishCoalesce(flags.address, () => ( ""))).trim();
126
- const amount = (_nullishCoalesce(flags.amount, () => ( ""))).trim();
127
- if (!(address && amount)) {
128
- throw new Error("pay requires --address <address> and --amount <amount>");
129
- }
130
- const config = await loadConfig();
131
- const agentKey = (_nullishCoalesce(_nullishCoalesce(flags["agent-key"], () => ( config.agentKey)), () => ( ""))).trim();
132
- if (!agentKey) {
133
- throw new Error(
134
- "Agent key is missing. Run `wlfa login --agent-key <key>` first."
135
- );
136
- }
137
- const client = _agentwalletsdk.createAgentWalletClient.call(void 0, {
138
- baseUrl: resolveBaseUrl()
139
- });
140
- const result = await client.pay({
141
- address,
142
- agent_key: agentKey,
143
- amount: toTokenBaseUnits(amount)
144
- });
145
- console.log(JSON.stringify(result, null, 2));
146
- };
147
- var approve = async (flags) => {
148
- const address = (_nullishCoalesce(flags.address, () => ( ""))).trim();
149
- const amount = (_nullishCoalesce(flags.amount, () => ( ""))).trim();
150
- if (!(address && amount)) {
151
- throw new Error(
152
- "approve requires --address <spender-address> and --amount <amount>"
153
- );
154
- }
155
- const config = await loadConfig();
156
- const agentKey = (_nullishCoalesce(_nullishCoalesce(flags["agent-key"], () => ( config.agentKey)), () => ( ""))).trim();
157
- if (!agentKey) {
158
- throw new Error(
159
- "Agent key is missing. Run `wlfa login --agent-key <key>` first."
160
- );
161
- }
162
- const client = _agentwalletsdk.createAgentWalletClient.call(void 0, {
163
- baseUrl: resolveBaseUrl()
164
- });
165
- const result = await client.approve({
166
- address,
167
- agent_key: agentKey,
168
- amount: toTokenBaseUnits(amount)
169
- });
170
- console.log(JSON.stringify(result, null, 2));
171
- };
172
- var sendTx = async (flags) => {
173
- const from = (_nullishCoalesce(flags.from, () => ( ""))).trim();
174
- const to = (_nullishCoalesce(flags.to, () => ( ""))).trim();
175
- const data = (_nullishCoalesce(flags.data, () => ( ""))).trim();
176
- const value = toNonNegativeInteger(_nullishCoalesce(flags.value, () => ( "")), "--value");
177
- if (!(from && to && data)) {
178
- throw new Error(
179
- "send-tx requires --from <address> --to <address> --data <hex> --value <integer>"
180
- );
181
- }
182
- const config = await loadConfig();
183
- const agentKey = (_nullishCoalesce(_nullishCoalesce(flags["agent-key"], () => ( config.agentKey)), () => ( ""))).trim();
184
- if (!agentKey) {
185
- throw new Error(
186
- "Agent key is missing. Run `wlfa login --agent-key <key>` first."
187
- );
188
- }
189
- const client = _agentwalletsdk.createAgentWalletClient.call(void 0, {
190
- baseUrl: resolveBaseUrl()
191
- });
192
- const result = await client.sendTx({
193
- agent_key: agentKey,
194
- tx: {
195
- data,
196
- from,
197
- to,
198
- value
199
- }
200
- });
201
- console.log(JSON.stringify(result, null, 2));
202
- };
203
- var createProgram = () => {
204
- const program = new (0, _commander.Command)();
205
- program.name("wlfa").description("WLFI Agent Wallet CLI").showHelpAfterError().showSuggestionAfterError().addHelpText(
206
- "after",
207
- `
208
- Environment:
209
- WLFI_AGENT_BACKEND_URL Backend URL override (default: ${_agentwalletsdk.DEFAULT_BASE_URL})
210
- `
211
- );
212
- withUnsupportedBaseUrlOption(program);
213
- withUnsupportedBaseUrlOption(
214
- program.command("login").description("Save agent key locally").requiredOption("--agent-key <key>", "Agent key")
215
- ).action(async (_options, command) => {
216
- await login(getCommandFlags(command));
217
- });
218
- withUnsupportedBaseUrlOption(
219
- program.command("pay").description("Create payment request").requiredOption("--address <address>", "Destination address").requiredOption("--amount <amount>", "Token amount in decimal units").option("--agent-key <key>", "Agent key override")
220
- ).action(async (_options, command) => {
221
- await pay(getCommandFlags(command));
222
- });
223
- withUnsupportedBaseUrlOption(
224
- program.command("approve").description("Create ERC20 approve transaction request").requiredOption("--address <address>", "Spender address").requiredOption("--amount <amount>", "Allowance amount in decimal units").option("--agent-key <key>", "Agent key override")
225
- ).action(async (_options, command) => {
226
- await approve(getCommandFlags(command));
227
- });
228
- withUnsupportedBaseUrlOption(
229
- program.command("send-tx").description("Create arbitrary transaction request").requiredOption(
230
- "--from <address>",
231
- "Wallet address (must match agent key)"
232
- ).requiredOption("--to <address>", "Destination address").requiredOption("--data <hex>", "Transaction data hex").requiredOption("--value <integer>", "Transaction value in base units").option("--agent-key <key>", "Agent key override")
233
- ).action(async (_options, command) => {
234
- await sendTx(getCommandFlags(command));
235
- });
236
- return program;
237
- };
238
- var main = async () => {
239
- const program = createProgram();
240
- if (_process2.default.argv.length <= 2) {
241
- program.outputHelp();
242
- return;
243
- }
244
- await program.parseAsync(_process2.default.argv);
245
- };
246
- main().catch((error) => {
247
- const message = error instanceof Error ? error.message : String(error);
248
- console.error(message);
249
- _process2.default.exit(1);
250
- });
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
@@ -1,250 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/wlfa/index.ts
4
- import { chmod, mkdir, readFile, writeFile } from "fs/promises";
5
- import { homedir } from "os";
6
- import path from "path";
7
- import process from "process";
8
- import {
9
- createAgentWalletClient,
10
- DEFAULT_BASE_URL
11
- } from "@wlfi-agent/agent-wallet-sdk";
12
- import { Command, Option } from "commander";
13
- var CONFIG_DIR = path.join(homedir(), ".config", "wlfa-agent");
14
- var CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
15
- var TOKEN_DECIMALS = 18n;
16
- var DECIMAL_AMOUNT_REGEX = /^\d+(\.\d+)?$/;
17
- var resolveBaseUrl = () => (process.env.WLFI_AGENT_BACKEND_URL ?? process.env.WLF_AGENT_BACKEND_URL ?? DEFAULT_BASE_URL).trim();
18
- var toFlagKey = (key) => key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
19
- var optionsToFlags = (options) => {
20
- const flags = {};
21
- for (const [key, value] of Object.entries(options)) {
22
- if (value === void 0 || value === null) {
23
- continue;
24
- }
25
- const flagKey = toFlagKey(key);
26
- if (typeof value === "boolean") {
27
- if (value) {
28
- flags[flagKey] = "true";
29
- }
30
- continue;
31
- }
32
- if (typeof value === "number" || typeof value === "string") {
33
- flags[flagKey] = String(value);
34
- }
35
- }
36
- return flags;
37
- };
38
- var collectFlags = (command) => {
39
- const lineage = [];
40
- let cursor = command;
41
- while (cursor) {
42
- lineage.unshift(cursor);
43
- cursor = cursor.parent ?? null;
44
- }
45
- const flags = {};
46
- for (const node of lineage) {
47
- Object.assign(flags, optionsToFlags(node.opts()));
48
- }
49
- return flags;
50
- };
51
- var withUnsupportedBaseUrlOption = (command) => command.addOption(new Option("--base-url <url>").hideHelp());
52
- var getCommandFlags = (command) => {
53
- const flags = collectFlags(command);
54
- if (flags["base-url"]) {
55
- throw new Error(
56
- "--base-url is not supported. Use WLFI_AGENT_BACKEND_URL or WLF_AGENT_BACKEND_URL instead."
57
- );
58
- }
59
- return flags;
60
- };
61
- var toTokenBaseUnits = (rawAmount) => {
62
- const normalized = rawAmount.trim();
63
- if (!DECIMAL_AMOUNT_REGEX.test(normalized)) {
64
- throw new Error("amount must be a positive number (example: 1 or 0.5)");
65
- }
66
- const [wholePart = "0", fractionPart = ""] = normalized.split(".");
67
- if (fractionPart.length > Number(TOKEN_DECIMALS)) {
68
- throw new Error(
69
- `amount supports up to ${TOKEN_DECIMALS.toString()} decimal places`
70
- );
71
- }
72
- const base = 10n ** TOKEN_DECIMALS;
73
- const wholeUnits = BigInt(wholePart) * base;
74
- const paddedFraction = fractionPart.padEnd(Number(TOKEN_DECIMALS), "0");
75
- const fractionalUnits = paddedFraction ? BigInt(paddedFraction) : 0n;
76
- const units = wholeUnits + fractionalUnits;
77
- if (units <= 0n) {
78
- throw new Error("amount must be greater than 0");
79
- }
80
- return units.toString();
81
- };
82
- var toNonNegativeInteger = (rawValue, flagName) => {
83
- const normalized = rawValue.trim();
84
- if (!normalized) {
85
- throw new Error(`${flagName} is required`);
86
- }
87
- try {
88
- const value = BigInt(normalized);
89
- if (value < 0n) {
90
- throw new Error(`${flagName} must be non-negative`);
91
- }
92
- } catch (error) {
93
- throw new Error(
94
- error instanceof Error ? error.message : `${flagName} must be a valid integer value`
95
- );
96
- }
97
- return normalized;
98
- };
99
- var loadConfig = async () => {
100
- try {
101
- const raw = await readFile(CONFIG_FILE, "utf8");
102
- const parsed = JSON.parse(raw);
103
- const agentKey = typeof parsed.agentKey === "string" && parsed.agentKey.trim().length > 0 ? parsed.agentKey.trim() : void 0;
104
- return { agentKey };
105
- } catch {
106
- return {};
107
- }
108
- };
109
- var saveConfig = async (config) => {
110
- await mkdir(CONFIG_DIR, { mode: 448, recursive: true });
111
- await writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), {
112
- mode: 384
113
- });
114
- await chmod(CONFIG_FILE, 384);
115
- };
116
- var login = async (flags) => {
117
- const agentKey = (flags["agent-key"] ?? "").trim();
118
- if (!agentKey) {
119
- throw new Error("login requires --agent-key <key>");
120
- }
121
- await saveConfig({ agentKey });
122
- console.log("Saved agent key to ~/.config/wlfa-agent/config.json");
123
- };
124
- var pay = async (flags) => {
125
- const address = (flags.address ?? "").trim();
126
- const amount = (flags.amount ?? "").trim();
127
- if (!(address && amount)) {
128
- throw new Error("pay requires --address <address> and --amount <amount>");
129
- }
130
- const config = await loadConfig();
131
- const agentKey = (flags["agent-key"] ?? config.agentKey ?? "").trim();
132
- if (!agentKey) {
133
- throw new Error(
134
- "Agent key is missing. Run `wlfa login --agent-key <key>` first."
135
- );
136
- }
137
- const client = createAgentWalletClient({
138
- baseUrl: resolveBaseUrl()
139
- });
140
- const result = await client.pay({
141
- address,
142
- agent_key: agentKey,
143
- amount: toTokenBaseUnits(amount)
144
- });
145
- console.log(JSON.stringify(result, null, 2));
146
- };
147
- var approve = async (flags) => {
148
- const address = (flags.address ?? "").trim();
149
- const amount = (flags.amount ?? "").trim();
150
- if (!(address && amount)) {
151
- throw new Error(
152
- "approve requires --address <spender-address> and --amount <amount>"
153
- );
154
- }
155
- const config = await loadConfig();
156
- const agentKey = (flags["agent-key"] ?? config.agentKey ?? "").trim();
157
- if (!agentKey) {
158
- throw new Error(
159
- "Agent key is missing. Run `wlfa login --agent-key <key>` first."
160
- );
161
- }
162
- const client = createAgentWalletClient({
163
- baseUrl: resolveBaseUrl()
164
- });
165
- const result = await client.approve({
166
- address,
167
- agent_key: agentKey,
168
- amount: toTokenBaseUnits(amount)
169
- });
170
- console.log(JSON.stringify(result, null, 2));
171
- };
172
- var sendTx = async (flags) => {
173
- const from = (flags.from ?? "").trim();
174
- const to = (flags.to ?? "").trim();
175
- const data = (flags.data ?? "").trim();
176
- const value = toNonNegativeInteger(flags.value ?? "", "--value");
177
- if (!(from && to && data)) {
178
- throw new Error(
179
- "send-tx requires --from <address> --to <address> --data <hex> --value <integer>"
180
- );
181
- }
182
- const config = await loadConfig();
183
- const agentKey = (flags["agent-key"] ?? config.agentKey ?? "").trim();
184
- if (!agentKey) {
185
- throw new Error(
186
- "Agent key is missing. Run `wlfa login --agent-key <key>` first."
187
- );
188
- }
189
- const client = createAgentWalletClient({
190
- baseUrl: resolveBaseUrl()
191
- });
192
- const result = await client.sendTx({
193
- agent_key: agentKey,
194
- tx: {
195
- data,
196
- from,
197
- to,
198
- value
199
- }
200
- });
201
- console.log(JSON.stringify(result, null, 2));
202
- };
203
- var createProgram = () => {
204
- const program = new Command();
205
- program.name("wlfa").description("WLFI Agent Wallet CLI").showHelpAfterError().showSuggestionAfterError().addHelpText(
206
- "after",
207
- `
208
- Environment:
209
- WLFI_AGENT_BACKEND_URL Backend URL override (default: ${DEFAULT_BASE_URL})
210
- `
211
- );
212
- withUnsupportedBaseUrlOption(program);
213
- withUnsupportedBaseUrlOption(
214
- program.command("login").description("Save agent key locally").requiredOption("--agent-key <key>", "Agent key")
215
- ).action(async (_options, command) => {
216
- await login(getCommandFlags(command));
217
- });
218
- withUnsupportedBaseUrlOption(
219
- program.command("pay").description("Create payment request").requiredOption("--address <address>", "Destination address").requiredOption("--amount <amount>", "Token amount in decimal units").option("--agent-key <key>", "Agent key override")
220
- ).action(async (_options, command) => {
221
- await pay(getCommandFlags(command));
222
- });
223
- withUnsupportedBaseUrlOption(
224
- program.command("approve").description("Create ERC20 approve transaction request").requiredOption("--address <address>", "Spender address").requiredOption("--amount <amount>", "Allowance amount in decimal units").option("--agent-key <key>", "Agent key override")
225
- ).action(async (_options, command) => {
226
- await approve(getCommandFlags(command));
227
- });
228
- withUnsupportedBaseUrlOption(
229
- program.command("send-tx").description("Create arbitrary transaction request").requiredOption(
230
- "--from <address>",
231
- "Wallet address (must match agent key)"
232
- ).requiredOption("--to <address>", "Destination address").requiredOption("--data <hex>", "Transaction data hex").requiredOption("--value <integer>", "Transaction value in base units").option("--agent-key <key>", "Agent key override")
233
- ).action(async (_options, command) => {
234
- await sendTx(getCommandFlags(command));
235
- });
236
- return program;
237
- };
238
- var main = async () => {
239
- const program = createProgram();
240
- if (process.argv.length <= 2) {
241
- program.outputHelp();
242
- return;
243
- }
244
- await program.parseAsync(process.argv);
245
- };
246
- main().catch((error) => {
247
- const message = error instanceof Error ? error.message : String(error);
248
- console.error(message);
249
- process.exit(1);
250
- });