wallet-agent-ai-radix 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.
- package/LICENSE +13 -0
- package/README.md +284 -0
- package/dist/agent.d.ts +2 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +158 -0
- package/dist/agent.js.map +1 -0
- package/dist/cli/derive.d.ts +5 -0
- package/dist/cli/derive.d.ts.map +1 -0
- package/dist/cli/derive.js +78 -0
- package/dist/cli/derive.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +32 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +171 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/recover.d.ts +2 -0
- package/dist/cli/recover.d.ts.map +1 -0
- package/dist/cli/recover.js +112 -0
- package/dist/cli/recover.js.map +1 -0
- package/dist/cli/unlock.d.ts +3 -0
- package/dist/cli/unlock.d.ts.map +1 -0
- package/dist/cli/unlock.js +70 -0
- package/dist/cli/unlock.js.map +1 -0
- package/dist/core/AGGRClient.d.ts +19 -0
- package/dist/core/AGGRClient.d.ts.map +1 -0
- package/dist/core/AGGRClient.js +103 -0
- package/dist/core/AGGRClient.js.map +1 -0
- package/dist/core/AgentWallet.d.ts +64 -0
- package/dist/core/AgentWallet.d.ts.map +1 -0
- package/dist/core/AgentWallet.js +658 -0
- package/dist/core/AgentWallet.js.map +1 -0
- package/dist/core/RadixClient.d.ts +15 -0
- package/dist/core/RadixClient.d.ts.map +1 -0
- package/dist/core/RadixClient.js +112 -0
- package/dist/core/RadixClient.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/keystore/Keystore.d.ts +17 -0
- package/dist/keystore/Keystore.d.ts.map +1 -0
- package/dist/keystore/Keystore.js +97 -0
- package/dist/keystore/Keystore.js.map +1 -0
- package/dist/tools/LangChainTools.d.ts +19 -0
- package/dist/tools/LangChainTools.d.ts.map +1 -0
- package/dist/tools/LangChainTools.js +613 -0
- package/dist/tools/LangChainTools.js.map +1 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +44 -0
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
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.init = init;
|
|
37
|
+
const bip39 = __importStar(require("@scure/bip39"));
|
|
38
|
+
const english_js_1 = require("@scure/bip39/wordlists/english.js");
|
|
39
|
+
const radix_engine_toolkit_1 = require("@radixdlt/radix-engine-toolkit");
|
|
40
|
+
const Keystore_1 = require("../keystore/Keystore");
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
42
|
+
const readline = __importStar(require("readline"));
|
|
43
|
+
const derive_1 = require("./derive");
|
|
44
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
45
|
+
function ask(rl, question) {
|
|
46
|
+
return new Promise((resolve) => rl.question(question, resolve));
|
|
47
|
+
}
|
|
48
|
+
async function askYesNo(rl, question) {
|
|
49
|
+
const answer = await ask(rl, `${question} (y/n): `);
|
|
50
|
+
return answer.trim().toLowerCase() === "y";
|
|
51
|
+
}
|
|
52
|
+
function displayMnemonic(mnemonic) {
|
|
53
|
+
const words = mnemonic.split(" ");
|
|
54
|
+
console.log();
|
|
55
|
+
words.forEach((w, i) => {
|
|
56
|
+
process.stdout.write(` ${String(i + 1).padStart(2, "0")}. ${w.padEnd(12)}`);
|
|
57
|
+
if ((i + 1) % 4 === 0)
|
|
58
|
+
process.stdout.write("\n");
|
|
59
|
+
});
|
|
60
|
+
console.log();
|
|
61
|
+
}
|
|
62
|
+
// ─── Init ─────────────────────────────────────────────────────────────────────
|
|
63
|
+
async function init() {
|
|
64
|
+
console.log("\n🤖 AgentWallet — Initialize");
|
|
65
|
+
console.log("================================\n");
|
|
66
|
+
if (Keystore_1.Keystore.exists()) {
|
|
67
|
+
console.log("⚠️ A keystore already exists:", Keystore_1.Keystore.path());
|
|
68
|
+
console.log(" Current address:", Keystore_1.Keystore.load()?.address);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const rl = readline.createInterface({
|
|
72
|
+
input: process.stdin,
|
|
73
|
+
output: process.stdout,
|
|
74
|
+
});
|
|
75
|
+
try {
|
|
76
|
+
// ── 1. Mnemonic ────────────────────────────────────────────────────────
|
|
77
|
+
let mnemonic;
|
|
78
|
+
const useOwnMnemonic = await askYesNo(rl, "Do you want to use your own 24-word mnemonic?");
|
|
79
|
+
if (useOwnMnemonic) {
|
|
80
|
+
console.log("\nEnter your 24 words separated by spaces:");
|
|
81
|
+
mnemonic = (await ask(rl, "> ")).trim();
|
|
82
|
+
if (!bip39.validateMnemonic(mnemonic, english_js_1.wordlist)) {
|
|
83
|
+
console.error("\n❌ Invalid mnemonic. Please check your words and try again.");
|
|
84
|
+
rl.close();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
console.log("✅ Mnemonic validated.\n");
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
mnemonic = bip39.generateMnemonic(english_js_1.wordlist, 256);
|
|
91
|
+
console.log("\n⚠️ SAVE THESE 24 WORDS IN A SAFE PLACE — shown only once:");
|
|
92
|
+
displayMnemonic(mnemonic);
|
|
93
|
+
}
|
|
94
|
+
// ── 2. BIP39 Passphrase ────────────────────────────────────────────────
|
|
95
|
+
let bip39Passphrase;
|
|
96
|
+
const useOwnPassphrase = await askYesNo(rl, "Do you want to use your own BIP39 passphrase (extra word)?");
|
|
97
|
+
if (useOwnPassphrase) {
|
|
98
|
+
bip39Passphrase = (await ask(rl, "Enter your BIP39 passphrase (leave empty for none): ")).trim();
|
|
99
|
+
// if (!bip39Passphrase) {
|
|
100
|
+
// console.error("\n❌ Passphrase cannot be empty.");
|
|
101
|
+
// rl.close();
|
|
102
|
+
// return;
|
|
103
|
+
// }
|
|
104
|
+
console.log("✅ BIP39 passphrase set.\n");
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
bip39Passphrase = english_js_1.wordlist[crypto.randomInt(english_js_1.wordlist.length)];
|
|
108
|
+
console.log("\n🔑 BIP39 PASSPHRASE (SAVE with your 24 words):");
|
|
109
|
+
console.log(" ", bip39Passphrase);
|
|
110
|
+
console.log("\n⚠️ Without this passphrase + 24 words, wallet recovery is impossible.\n");
|
|
111
|
+
}
|
|
112
|
+
// ── 3. Encryption password ─────────────────────────────────────────────
|
|
113
|
+
let encryptionPassword;
|
|
114
|
+
let savePasswordFile = false;
|
|
115
|
+
const useOwnPassword = await askYesNo(rl, "Do you want to use your own encryption password for the keystore?");
|
|
116
|
+
if (useOwnPassword) {
|
|
117
|
+
encryptionPassword = (await ask(rl, "Enter your encryption password: ")).trim();
|
|
118
|
+
if (!encryptionPassword) {
|
|
119
|
+
console.error("\n❌ Password cannot be empty.");
|
|
120
|
+
rl.close();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
console.log("✅ Encryption password set.\n");
|
|
124
|
+
console.log("⚠️ Remember this password — you will need it every time the agent starts.\n");
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
encryptionPassword = crypto.randomBytes(32).toString("hex");
|
|
128
|
+
savePasswordFile = true;
|
|
129
|
+
console.log("\n🔐 Encryption password generated automatically and saved to disk.\n");
|
|
130
|
+
}
|
|
131
|
+
// ── 4. Derive keys ─────────────────────────────────────────────────────
|
|
132
|
+
const seed = await bip39.mnemonicToSeed(mnemonic, bip39Passphrase);
|
|
133
|
+
const privateKeyBytes = (0, derive_1.slip10DeriveEd25519)(seed, derive_1.RADIX_PATH);
|
|
134
|
+
const privateKeyHex = Buffer.from(privateKeyBytes).toString("hex");
|
|
135
|
+
const publicKeyBytes = (0, derive_1.derivePublicKey)(privateKeyBytes);
|
|
136
|
+
const publicKey = new radix_engine_toolkit_1.PublicKey.Ed25519(publicKeyBytes.toString("hex"));
|
|
137
|
+
// ── 5. Radix address ───────────────────────────────────────────────────
|
|
138
|
+
const address = await radix_engine_toolkit_1.RadixEngineToolkit.Derive.virtualAccountAddressFromPublicKey(publicKey, radix_engine_toolkit_1.NetworkId.Mainnet);
|
|
139
|
+
// ── 6. Encrypt and save keystore ───────────────────────────────────────
|
|
140
|
+
const encrypted = Keystore_1.Keystore.encrypt(privateKeyHex, encryptionPassword);
|
|
141
|
+
Keystore_1.Keystore.save({
|
|
142
|
+
version: 1,
|
|
143
|
+
address: address.toString(),
|
|
144
|
+
bip39Passphrase,
|
|
145
|
+
...encrypted,
|
|
146
|
+
});
|
|
147
|
+
// ── 7. Save password file if auto-generated ────────────────────────────
|
|
148
|
+
if (savePasswordFile) {
|
|
149
|
+
const passwordFile = Keystore_1.Keystore.path().replace("keystore.json", "passphrase.key");
|
|
150
|
+
const { writeFileSync } = await Promise.resolve().then(() => __importStar(require("fs")));
|
|
151
|
+
writeFileSync(passwordFile, encryptionPassword, { mode: 0o600 });
|
|
152
|
+
console.log("🔐 Encryption password saved to:", passwordFile);
|
|
153
|
+
}
|
|
154
|
+
// ── 8. Final output ────────────────────────────────────────────────────
|
|
155
|
+
console.log("📍 Agent-Notarized Wallet Address — SAVE THIS:");
|
|
156
|
+
console.log(" ", address.toString());
|
|
157
|
+
console.log();
|
|
158
|
+
console.log("💰 Deposit at least 20 XRD to this address for transaction fees.");
|
|
159
|
+
console.log(" This XRD is used for notarization only — not for operations.");
|
|
160
|
+
console.log();
|
|
161
|
+
console.log("ℹ️ You can optionally import these seeds into the Radix Wallet app");
|
|
162
|
+
console.log(" to control the Agent-Notarized Wallet manually when needed.");
|
|
163
|
+
console.log();
|
|
164
|
+
console.log("✅ Keystore saved to:", Keystore_1.Keystore.path());
|
|
165
|
+
console.log("\n🚀 Next step: go to the AgentWallet web dashboard and instantiate your component.\n");
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
rl.close();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recover.d.ts","sourceRoot":"","sources":["../../src/cli/recover.ts"],"names":[],"mappings":"AAiBA,wBAAsB,OAAO,kBA4E5B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
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.recover = recover;
|
|
37
|
+
const bip39 = __importStar(require("@scure/bip39"));
|
|
38
|
+
const english_js_1 = require("@scure/bip39/wordlists/english.js");
|
|
39
|
+
const radix_engine_toolkit_1 = require("@radixdlt/radix-engine-toolkit");
|
|
40
|
+
const Keystore_1 = require("../keystore/Keystore");
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const readline = __importStar(require("readline"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const derive_1 = require("./derive");
|
|
47
|
+
function ask(rl, question) {
|
|
48
|
+
return new Promise(resolve => rl.question(question, resolve));
|
|
49
|
+
}
|
|
50
|
+
async function recover() {
|
|
51
|
+
console.log("\n🔄 Agent Wallet — Recover");
|
|
52
|
+
console.log("==============================\n");
|
|
53
|
+
const rl = readline.createInterface({
|
|
54
|
+
input: process.stdin,
|
|
55
|
+
output: process.stdout,
|
|
56
|
+
});
|
|
57
|
+
try {
|
|
58
|
+
// 1. Pedir las 24 palabras
|
|
59
|
+
console.log("Put your 24 palabras seed with a space between each one:");
|
|
60
|
+
const mnemonicInput = (await ask(rl, "> ")).trim();
|
|
61
|
+
// 2. Validar mnemonic
|
|
62
|
+
if (!bip39.validateMnemonic(mnemonicInput, english_js_1.wordlist)) {
|
|
63
|
+
console.log("❌ Mnemonic invalid. Verifia the 24 words.");
|
|
64
|
+
rl.close();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// 3. Pedir palabra clave
|
|
68
|
+
const bip39Passphrase = (await ask(rl, "\n🔑 Pass word: ")).trim();
|
|
69
|
+
rl.close();
|
|
70
|
+
// 4. Derivar seed y private key
|
|
71
|
+
console.log("\n⏳ Deriving wallet...");
|
|
72
|
+
const seed = await bip39.mnemonicToSeed(mnemonicInput, bip39Passphrase);
|
|
73
|
+
const privateKeyBytes = (0, derive_1.slip10DeriveEd25519)(seed, derive_1.RADIX_PATH);
|
|
74
|
+
const privateKeyHex = Buffer.from(privateKeyBytes).toString("hex");
|
|
75
|
+
// 5. Derivar public key y address
|
|
76
|
+
const publicKeyBytes = (0, derive_1.derivePublicKey)(privateKeyBytes);
|
|
77
|
+
const publicKey = new radix_engine_toolkit_1.PublicKey.Ed25519(publicKeyBytes.toString("hex"));
|
|
78
|
+
const address = await radix_engine_toolkit_1.RadixEngineToolkit.Derive.virtualAccountAddressFromPublicKey(publicKey, radix_engine_toolkit_1.NetworkId.Mainnet);
|
|
79
|
+
// 6. Mostrar address para que el usuario confirme
|
|
80
|
+
console.log("\n📍 Direction recovery:", address.toString());
|
|
81
|
+
const rl2 = readline.createInterface({
|
|
82
|
+
input: process.stdin,
|
|
83
|
+
output: process.stdout,
|
|
84
|
+
});
|
|
85
|
+
const confirm = (await ask(rl2, "\n¿Is correc? (y/n): ")).trim().toLowerCase();
|
|
86
|
+
rl2.close();
|
|
87
|
+
if (confirm !== "s") {
|
|
88
|
+
console.log("❌ Recovery canceled. Verify the words and the pass word.");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// 7. Regenerar keystore
|
|
92
|
+
const passphrase = crypto.randomBytes(32).toString("hex");
|
|
93
|
+
const encrypted = Keystore_1.Keystore.encrypt(privateKeyHex, passphrase);
|
|
94
|
+
Keystore_1.Keystore.save({
|
|
95
|
+
version: 1,
|
|
96
|
+
address: address.toString(),
|
|
97
|
+
bip39Passphrase,
|
|
98
|
+
...encrypted,
|
|
99
|
+
});
|
|
100
|
+
// 8. Guardar nueva passphrase
|
|
101
|
+
const passphraseFile = path.join(os.homedir(), ".agent-wallet", "passphrase.key");
|
|
102
|
+
fs.writeFileSync(passphraseFile, passphrase, { mode: 0o600 });
|
|
103
|
+
console.log("\n✅ Wallet correctly recover.");
|
|
104
|
+
console.log("📍 Direction:", address.toString());
|
|
105
|
+
console.log("✅ Keystore save on:", Keystore_1.Keystore.path());
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
rl.close();
|
|
109
|
+
console.log("❌ Error:", e.message);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=recover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recover.js","sourceRoot":"","sources":["../../src/cli/recover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../src/cli/unlock.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,IAAI,MAAM,CA0BvC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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.unlockKeystore = unlockKeystore;
|
|
37
|
+
exports.getNotarizerAddress = getNotarizerAddress;
|
|
38
|
+
const Keystore_1 = require("../keystore/Keystore");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
const PASSPHRASE_FILE = path.join(os.homedir(), ".agent-wallet", "passphrase.key");
|
|
43
|
+
function unlockKeystore() {
|
|
44
|
+
// 1. Verificar que existe el keystore
|
|
45
|
+
const keystoreData = Keystore_1.Keystore.load();
|
|
46
|
+
if (!keystoreData) {
|
|
47
|
+
throw new Error("❌ A keystore dont found. Execute first: npx agent-wallet init");
|
|
48
|
+
}
|
|
49
|
+
// 2. Leer passphrase del fichero
|
|
50
|
+
if (!fs.existsSync(PASSPHRASE_FILE)) {
|
|
51
|
+
throw new Error("❌ A passphrase.key dont found. The keystore could be corrupt.");
|
|
52
|
+
}
|
|
53
|
+
const passphrase = fs.readFileSync(PASSPHRASE_FILE, "utf-8").trim();
|
|
54
|
+
// 3. Desencriptar y devolver private key
|
|
55
|
+
try {
|
|
56
|
+
const privateKeyHex = Keystore_1.Keystore.decrypt(keystoreData, passphrase);
|
|
57
|
+
return privateKeyHex;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
throw new Error("❌ Error desencript keystore. The file could be corrupt.");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function getNotarizerAddress() {
|
|
64
|
+
const keystoreData = Keystore_1.Keystore.load();
|
|
65
|
+
if (!keystoreData) {
|
|
66
|
+
throw new Error("❌ Dont found the keystore.");
|
|
67
|
+
}
|
|
68
|
+
return keystoreData.address;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=unlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../src/cli/unlock.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,wCA0BC;AAED,kDAMC;AAzCD,mDAAgD;AAChD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAEnF,SAAgB,cAAc;IAC5B,sCAAsC;IACtC,MAAM,YAAY,GAAG,mBAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpE,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,mBAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACjE,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB;IACjC,MAAM,YAAY,GAAG,mBAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,YAAY,CAAC,OAAO,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AGGRConfig, SupportedAsset } from "../types";
|
|
2
|
+
export interface SwapQuote {
|
|
3
|
+
outputTokens: number;
|
|
4
|
+
manifest: string;
|
|
5
|
+
fromAsset: SupportedAsset;
|
|
6
|
+
toAsset: SupportedAsset;
|
|
7
|
+
amountIn: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class AGGRClient {
|
|
10
|
+
private endpoint;
|
|
11
|
+
private partnerId;
|
|
12
|
+
private timeoutMs;
|
|
13
|
+
private mockMode;
|
|
14
|
+
constructor(config: AGGRConfig);
|
|
15
|
+
getSwapQuote(fromTokenAddress: string, toTokenAddress: string, amount: number, fromAddress: string): Promise<SwapQuote>;
|
|
16
|
+
watchPrice(fromTokenAddress: string, toTokenAddress: string, referenceAmount: number, fromAddress: string, triggerPrice: number, condition: "above" | "below", intervalMs: number, callback: (quote: SwapQuote) => void): Promise<() => void>;
|
|
17
|
+
private fetchWithTimeout;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AGGRClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AGGRClient.d.ts","sourceRoot":"","sources":["../../src/core/AGGRClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAc,cAAc,EAAc,MAAM,UAAU,CAAC;AAS9E,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAU;gBAEd,MAAM,EAAE,UAAU;IAQxB,YAAY,CAChB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC;IA6Cf,UAAU,CACd,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,GAAG,OAAO,EAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,IAAI,CAAC;YA6CR,gBAAgB;CAwB/B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AGGRClient = void 0;
|
|
4
|
+
class AGGRClient {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.endpoint = config.endpoint.replace(/\/$/, "");
|
|
7
|
+
this.partnerId = config.partnerId;
|
|
8
|
+
this.timeoutMs = config.timeoutMs ?? 5000;
|
|
9
|
+
this.mockMode = config.mockMode ?? false;
|
|
10
|
+
}
|
|
11
|
+
// Obtiene quote Y manifiesto listo para firmar en una sola llamada
|
|
12
|
+
async getSwapQuote(fromTokenAddress, toTokenAddress, amount, fromAddress) {
|
|
13
|
+
// MOCK FIRST
|
|
14
|
+
if (this.mockMode) {
|
|
15
|
+
console.log("[AGGRClient] MOCK mode — simulating swap quote");
|
|
16
|
+
return {
|
|
17
|
+
outputTokens: amount * 0.95,
|
|
18
|
+
manifest: `CALL_METHOD
|
|
19
|
+
Address("${fromAddress}")
|
|
20
|
+
"try_deposit_batch_or_abort"
|
|
21
|
+
Expression("ENTIRE_WORKTOP")
|
|
22
|
+
None
|
|
23
|
+
;`,
|
|
24
|
+
fromAsset: fromTokenAddress,
|
|
25
|
+
toAsset: toTokenAddress,
|
|
26
|
+
amountIn: amount,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// REAL
|
|
30
|
+
const response = await this.fetchWithTimeout(`${this.endpoint}/partner/${this.partnerId}/swap`, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: { "Content-Type": "application/json" },
|
|
33
|
+
body: JSON.stringify({
|
|
34
|
+
inputToken: fromTokenAddress,
|
|
35
|
+
outputToken: toTokenAddress,
|
|
36
|
+
inputAmount: amount,
|
|
37
|
+
fromAddress: fromAddress,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
const data = await response.json();
|
|
41
|
+
return {
|
|
42
|
+
outputTokens: data.outputTokens,
|
|
43
|
+
manifest: data.manifest,
|
|
44
|
+
fromAsset: fromTokenAddress,
|
|
45
|
+
toAsset: toTokenAddress,
|
|
46
|
+
amountIn: amount,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Monitorea precio via quotes y ejecuta callback cuando se cumple condición
|
|
50
|
+
async watchPrice(fromTokenAddress, toTokenAddress, referenceAmount, fromAddress, triggerPrice, condition, intervalMs, callback) {
|
|
51
|
+
//MOCK
|
|
52
|
+
if (this.mockMode) {
|
|
53
|
+
console.log("[AGGRClient] MOCK watchPrice — triggering immediately");
|
|
54
|
+
const mockQuote = {
|
|
55
|
+
outputTokens: referenceAmount * 0.95,
|
|
56
|
+
manifest: "",
|
|
57
|
+
fromAsset: fromTokenAddress,
|
|
58
|
+
toAsset: toTokenAddress,
|
|
59
|
+
amountIn: referenceAmount,
|
|
60
|
+
};
|
|
61
|
+
setTimeout(() => callback(mockQuote), 300000);
|
|
62
|
+
return () => { };
|
|
63
|
+
}
|
|
64
|
+
//REAL
|
|
65
|
+
const interval = setInterval(async () => {
|
|
66
|
+
try {
|
|
67
|
+
const quote = await this.getSwapQuote(fromTokenAddress, toTokenAddress, referenceAmount, fromAddress);
|
|
68
|
+
// El precio implícito es outputTokens / referenceAmount
|
|
69
|
+
const implicitPrice = quote.outputTokens / referenceAmount;
|
|
70
|
+
const triggered = condition === "above"
|
|
71
|
+
? implicitPrice >= triggerPrice
|
|
72
|
+
: implicitPrice <= triggerPrice;
|
|
73
|
+
if (triggered) {
|
|
74
|
+
callback(quote);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error(`[AGGRClient] Error watching price:`, error);
|
|
79
|
+
}
|
|
80
|
+
}, intervalMs);
|
|
81
|
+
return () => clearInterval(interval);
|
|
82
|
+
}
|
|
83
|
+
// Fetch con timeout
|
|
84
|
+
async fetchWithTimeout(url, options) {
|
|
85
|
+
const controller = new AbortController();
|
|
86
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
87
|
+
try {
|
|
88
|
+
const response = await fetch(url, {
|
|
89
|
+
...options,
|
|
90
|
+
signal: controller.signal,
|
|
91
|
+
});
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
throw new Error(`[AGGRClient] HTTP error: ${response.status} ${response.statusText}`);
|
|
94
|
+
}
|
|
95
|
+
return response;
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
clearTimeout(timeout);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.AGGRClient = AGGRClient;
|
|
103
|
+
//# sourceMappingURL=AGGRClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AGGRClient.js","sourceRoot":"","sources":["../../src/core/AGGRClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { AgentWalletConfig, TransferParams, TransferResult, SwapParams, SwapResult, BalanceResult, ConditionalOrder, SupportedAsset, CustomAssetAddresses } from "../types";
|
|
2
|
+
export declare class AgentWallet {
|
|
3
|
+
private config;
|
|
4
|
+
private networkConfig;
|
|
5
|
+
private assetAddresses;
|
|
6
|
+
private aggrClient?;
|
|
7
|
+
private activeOrders;
|
|
8
|
+
private customAssets;
|
|
9
|
+
private radixClient;
|
|
10
|
+
constructor(config: AgentWalletConfig);
|
|
11
|
+
private checkFunds;
|
|
12
|
+
getAssetAddress(asset: SupportedAsset): string;
|
|
13
|
+
registerAsset(symbol: string, addresses: CustomAssetAddresses): void;
|
|
14
|
+
listAssets(): string[];
|
|
15
|
+
getBalance(): Promise<BalanceResult>;
|
|
16
|
+
transfer(params: TransferParams): Promise<TransferResult>;
|
|
17
|
+
getConfig(): Promise<{
|
|
18
|
+
maxPerTransaction: number;
|
|
19
|
+
multisigThreshold: number;
|
|
20
|
+
dailyCap: number;
|
|
21
|
+
frozen: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
requestLargeTransfer(params: {
|
|
24
|
+
to: string;
|
|
25
|
+
amount: number;
|
|
26
|
+
asset: SupportedAsset;
|
|
27
|
+
reason: string;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
requested: boolean;
|
|
30
|
+
to: string;
|
|
31
|
+
amount: number;
|
|
32
|
+
asset: string;
|
|
33
|
+
reason: string;
|
|
34
|
+
}>;
|
|
35
|
+
getPendingTransfer(): Promise<{
|
|
36
|
+
hasPending: boolean;
|
|
37
|
+
to?: string;
|
|
38
|
+
amount?: string;
|
|
39
|
+
asset?: string;
|
|
40
|
+
reason?: string;
|
|
41
|
+
requestedAtEpoch?: string;
|
|
42
|
+
} | null>;
|
|
43
|
+
swap(params: SwapParams): Promise<SwapResult>;
|
|
44
|
+
createConditionalOrder(order: ConditionalOrder): Promise<string>;
|
|
45
|
+
cancelOrder(orderId: string): boolean;
|
|
46
|
+
listActiveOrders(): string[];
|
|
47
|
+
private buildTransferManifest;
|
|
48
|
+
protected submitManifest(manifest: string): Promise<string>;
|
|
49
|
+
waitForOwnerApproval(pendingDetails: {
|
|
50
|
+
to: string;
|
|
51
|
+
amount: string;
|
|
52
|
+
asset: string;
|
|
53
|
+
reason: string;
|
|
54
|
+
}, intervalMs?: number): () => void;
|
|
55
|
+
getWhitelist(): Promise<{
|
|
56
|
+
name: string;
|
|
57
|
+
address: string;
|
|
58
|
+
}[]>;
|
|
59
|
+
getSwapQuote(fromAsset: string, toAsset: string, amount: number): Promise<{
|
|
60
|
+
outputTokens: number;
|
|
61
|
+
price: number;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=AgentWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentWallet.d.ts","sourceRoot":"","sources":["../../src/core/AgentWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,aAAa,EACb,gBAAgB,EAGhB,cAAc,EACd,oBAAoB,EACrB,MAAM,UAAU,CAAC;AA6ClB,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAAc;gBAGvB,MAAM,EAAE,iBAAiB;YA0BrB,UAAU;IAyB1B,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAuB9C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAYpE,UAAU,IAAI,MAAM,EAAE;IAShB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAuCpC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAkFzD,SAAS,IAAI,OAAO,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IAsEI,oBAAoB,CAAC,MAAM,EAAE;QACjC,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,cAAc,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAwDxF,kBAAkB,IAAI,OAAO,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;QACpB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,IAAI,CAAC;IAmEH,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAuG3C,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoDtE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWrC,gBAAgB,IAAI,MAAM,EAAE;IAM5B,OAAO,CAAC,qBAAqB;cAgDb,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnE,oBAAoB,CAClB,cAAc,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC7E,UAAU,GAAE,MAAc,GACzB,MAAM,IAAI;IAyEP,YAAY,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAyC5D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAsBvH"}
|