jaspervault_cli 1.1.0 → 1.1.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.
- package/README.md +8 -19
- package/config/chains.json +1 -3
- package/dist/bin/jv.js +4 -2
- package/dist/bin/jv.js.map +1 -1
- package/dist/src/commands/deposit.js +1 -1
- package/dist/src/commands/deposit.js.map +1 -1
- package/dist/src/commands/install.js +1 -1
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/order.js +179 -46
- package/dist/src/commands/order.js.map +1 -1
- package/dist/src/commands/orders.js +2 -2
- package/dist/src/commands/orders.js.map +1 -1
- package/dist/src/commands/sl.js +3 -3
- package/dist/src/commands/sl.js.map +1 -1
- package/dist/src/commands/tp.js +3 -3
- package/dist/src/commands/tp.js.map +1 -1
- package/dist/src/commands/vault.d.ts +1 -6
- package/dist/src/commands/vault.js +15 -70
- package/dist/src/commands/vault.js.map +1 -1
- package/dist/src/commands/wallet.d.ts +2 -0
- package/dist/src/commands/wallet.js +126 -0
- package/dist/src/commands/wallet.js.map +1 -0
- package/dist/src/commands/withdraw.js +2 -2
- package/dist/src/commands/withdraw.js.map +1 -1
- package/dist/src/mcp/index.js +3 -7
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/tools.js +23 -6
- package/dist/src/mcp/tools.js.map +1 -1
- package/dist/src/services/chain-config.d.ts +4 -3
- package/dist/src/services/chain-config.js +13 -5
- package/dist/src/services/chain-config.js.map +1 -1
- package/dist/src/services/key-manager.js +4 -12
- package/dist/src/services/key-manager.js.map +1 -1
- package/dist/src/services/order-signer.js +2 -2
- package/dist/src/services/order-signer.js.map +1 -1
- package/dist/src/services/perps-order.d.ts +48 -0
- package/dist/src/services/perps-order.js +66 -0
- package/dist/src/services/perps-order.js.map +1 -0
- package/dist/src/services/profile-manager.d.ts +49 -0
- package/dist/src/services/profile-manager.js +179 -0
- package/dist/src/services/profile-manager.js.map +1 -0
- package/dist/src/services/vault-profile.js +4 -12
- package/dist/src/services/vault-profile.js.map +1 -1
- package/dist/src/templates/skill-content/SKILL.core.md +26 -24
- package/dist/src/templates/skill-content/references/onboarding.md +1 -1
- package/dist/src/templates/skill-content/references/queries.md +20 -0
- package/dist/src/templates/skill-content/references/trading.md +64 -33
- package/docs/OPENCLAW_GUIDE.md +136 -0
- package/docs/USER_GUIDE.md +276 -0
- package/package.json +3 -2
- package/dist/src/commands/connect.d.ts +0 -26
- package/dist/src/commands/connect.js +0 -93
- package/dist/src/commands/connect.js.map +0 -1
- package/dist/src/commands/init.d.ts +0 -4
- package/dist/src/commands/init.js +0 -114
- package/dist/src/commands/init.js.map +0 -1
- package/dist/src/commands/skill.d.ts +0 -4
- package/dist/src/commands/skill.js +0 -117
- package/dist/src/commands/skill.js.map +0 -1
|
@@ -27,8 +27,8 @@ function loadConfig() {
|
|
|
27
27
|
return cachedConfig;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* Get network configuration
|
|
31
|
-
*
|
|
30
|
+
* Get network configuration. Base RPC URL must come from BASE_HTTP_RPC_URL env var
|
|
31
|
+
* (single source of truth for all services). JV_JASPERVAULT_RPC_URL overrides Jasper.
|
|
32
32
|
*/
|
|
33
33
|
export function getNetworkConfig(network) {
|
|
34
34
|
const config = loadConfig();
|
|
@@ -37,8 +37,11 @@ export function getNetworkConfig(network) {
|
|
|
37
37
|
throw new Error(`Unknown network: ${network}. Supported: ${Object.keys(config.networks).join(', ')}`);
|
|
38
38
|
}
|
|
39
39
|
let rpcUrl = net.rpcUrl;
|
|
40
|
-
if (network === 'base_uat'
|
|
41
|
-
rpcUrl = process.env.
|
|
40
|
+
if (network === 'base_uat') {
|
|
41
|
+
rpcUrl = process.env.BASE_HTTP_RPC_URL;
|
|
42
|
+
if (!rpcUrl) {
|
|
43
|
+
throw new Error('BASE_HTTP_RPC_URL env var is required for base_uat network.');
|
|
44
|
+
}
|
|
42
45
|
}
|
|
43
46
|
if (network === 'jaspervault' && process.env.JV_JASPERVAULT_RPC_URL) {
|
|
44
47
|
rpcUrl = process.env.JV_JASPERVAULT_RPC_URL;
|
|
@@ -83,9 +86,14 @@ export function getWarpConfig(token) {
|
|
|
83
86
|
}
|
|
84
87
|
/**
|
|
85
88
|
* Get Base chain RPC URL for deposit (source chain).
|
|
89
|
+
* Single source of truth: BASE_HTTP_RPC_URL env var.
|
|
86
90
|
*/
|
|
87
91
|
export function getBaseRpcUrl() {
|
|
88
|
-
|
|
92
|
+
const url = process.env.BASE_HTTP_RPC_URL;
|
|
93
|
+
if (!url) {
|
|
94
|
+
throw new Error('BASE_HTTP_RPC_URL env var is required.');
|
|
95
|
+
}
|
|
96
|
+
return url;
|
|
89
97
|
}
|
|
90
98
|
/**
|
|
91
99
|
* Get JasperVault chain RPC URL for deposit (destination chain, vault address computation).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../../src/services/chain-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,mEAAmE;AACnE,MAAM,aAAa,GAAG,GAAW,EAAE;IACjC,2DAA2D;IAC3D,+DAA+D;IAC/D,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;KAC3D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,KAAK,CACb,iCAAiC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,CACrF,CAAC;AACJ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../../src/services/chain-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import { Wallet } from 'ethers';
|
|
2
|
-
import { existsSync,
|
|
2
|
+
import { existsSync, readFileSync, chmodSync, writeFileSync } from 'fs';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
|
|
5
|
-
return join(process.env.HOME || process.env.USERPROFILE || '', '.jaspervault');
|
|
6
|
-
}
|
|
4
|
+
import { resolveActiveProfileDir, ensureActiveProfileDir } from './profile-manager.js';
|
|
7
5
|
function getKeysFile() {
|
|
8
|
-
return join(
|
|
9
|
-
}
|
|
10
|
-
function ensureKeysDir() {
|
|
11
|
-
const dir = getKeysDir();
|
|
12
|
-
if (!existsSync(dir)) {
|
|
13
|
-
mkdirSync(dir, { recursive: true });
|
|
14
|
-
}
|
|
6
|
+
return join(resolveActiveProfileDir(), 'keys.json');
|
|
15
7
|
}
|
|
16
8
|
/**
|
|
17
9
|
* Load delegation key from env var, file, or return null (caller can generate).
|
|
@@ -60,7 +52,7 @@ export function loadOrGenerateDelegationKey(network) {
|
|
|
60
52
|
* Save delegation key to ~/.jaspervault/keys.json with mode 0600.
|
|
61
53
|
*/
|
|
62
54
|
export function saveDelegationKey(privateKey, address, network) {
|
|
63
|
-
|
|
55
|
+
ensureActiveProfileDir();
|
|
64
56
|
const data = {
|
|
65
57
|
delegationPrivateKey: privateKey,
|
|
66
58
|
delegationAddress: address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-manager.js","sourceRoot":"","sources":["../../../src/services/key-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"key-manager.js","sourceRoot":"","sources":["../../../src/services/key-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,uBAAuB,EAAE,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AASD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9C,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,OAAO;YACL,oBAAoB,EAAE,OAAO,CAAC,IAAI,EAAE;YACpC,iBAAiB,EAAE,CAAC,CAAC,OAAO;YAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QAC/C,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,8GAA8G;AAC9G,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAK1D,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,oBAAoB;YACzC,OAAO,EAAE,QAAQ,CAAC,iBAAiB;YACnC,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACrC,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,OAAe,EAAE,OAAgB;IACrF,sBAAsB,EAAE,CAAC;IACzB,MAAM,IAAI,GAAmB;QAC3B,oBAAoB,EAAE,UAAU;QAChC,iBAAiB,EAAE,OAAO;QAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;KAC5B,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -15,7 +15,7 @@ export async function buildSignData(intent, profile, network) {
|
|
|
15
15
|
const baseIntent = intent;
|
|
16
16
|
const marginAccount = profile.marginAccount ?? baseIntent.marginAccount;
|
|
17
17
|
if (!marginAccount && !isTpSl) {
|
|
18
|
-
throw new Error('marginAccount required. Run
|
|
18
|
+
throw new Error('marginAccount required. Run "jv enable" or pass --margin-account.');
|
|
19
19
|
}
|
|
20
20
|
const recipient = marginAccount;
|
|
21
21
|
const symbol = baseIntent.symbol?.toUpperCase() ?? intent.symbol.toUpperCase();
|
|
@@ -47,7 +47,7 @@ export async function buildSignData(intent, profile, network) {
|
|
|
47
47
|
const orderIntent = intent;
|
|
48
48
|
const positionAccount = orderIntent.positionAccount ?? getPositionAccountFromProfile(profile, orderIntent.side);
|
|
49
49
|
if (!positionAccount) {
|
|
50
|
-
throw new Error(`positionAccount required for ${orderIntent.side}. Run
|
|
50
|
+
throw new Error(`positionAccount required for ${orderIntent.side}. Run "jv enable" or pass --position-account.`);
|
|
51
51
|
}
|
|
52
52
|
orderID = orderIntent.orderID ?? 0;
|
|
53
53
|
if (orderIntent.limitPrice) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-signer.js","sourceRoot":"","sources":["../../../src/services/order-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,GAAG,gFAAgF,CAAC;AACrG,MAAM,eAAe,GAAG,GAAG,IAAI,GAAG,CAAC;AAEnC,MAAM,gCAAgC,GAAG;IACvC,qfAAqf;CACtf,CAAC;AAQF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA4C,EAC5C,OAAqB,EACrB,OAAe;IAEf,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,IAAI,MAAM,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAoC,CAAC;IAExD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC;IACxE,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"order-signer.js","sourceRoot":"","sources":["../../../src/services/order-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,GAAG,gFAAgF,CAAC;AACrG,MAAM,eAAe,GAAG,GAAG,IAAI,GAAG,CAAC;AAEnC,MAAM,gCAAgC,GAAG;IACvC,qfAAqf;CACtf,CAAC;AAQF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA4C,EAC5C,OAAqB,EACrB,OAAe;IAEf,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,IAAI,MAAM,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAoC,CAAC;IAExD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC;IACxE,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,SAAS,GAAG,aAAc,CAAC;IAEjC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,IAAK,MAA2B,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACrG,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAK,MAA2B,CAAC,IAAI,IAAI,MAAM,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,IAAK,MAA2B,CAAC,UAAU,IAAI,IAAI,CAAC;IACrF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEvD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC;IAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,WAAmB,CAAC;IACxB,IAAI,YAAoB,CAAC;IACzB,IAAI,WAAmB,CAAC;IACxB,IAAI,OAAe,CAAC;IACpB,IAAI,UAA4B,CAAC;IACjC,IAAI,aAAqB,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,MAA0B,CAAC;QAC9C,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjE,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,GAAG,CAAC;QAC9C,WAAW,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,UAAU,GAAG,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,aAAa,GAAG,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,MAA2B,CAAC;QAChD,MAAM,eAAe,GACnB,WAAW,CAAC,eAAe,IAAI,6BAA6B,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,gCAAgC,WAAW,CAAC,IAAI,+CAA+C,CAChG,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;QACnC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC3B,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,CAAC;QACD,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClG,WAAW,GAAG,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3D,UAAU,GAAG,IAAI,CAAC;QAClB,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAA4B,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO;QACL,SAAS;QACT,OAAO;QACP,SAAS,EAAE,aAAa;QACxB,WAAW;QACX,WAAW;QACX,UAAU;QACV,MAAM,EAAE,OAAO,CAAC,GAAG;QACnB,MAAM,EAAE,aAAa;QACrB,SAAS;QACT,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,iBAAiB,CAAC,OAAO;QACtC,YAAY;QACZ,eAAe,EAAE,WAAW,CAAC,OAAO;KACrC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAkB,EAAE,gBAA+B;IACpF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CAC1D;QACE,OAAO;QACP,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV,EACD;QACE,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,eAAe;KACzB,CACF,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,aAAqB,EACrB,SAAiB,EACjB,eAAuB,EACvB,QAAyB,EACzB,qBAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAClC,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,CACT,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAKvE,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,eAAe;YAAE,SAAS;QAC5D,IAAI,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,gBAAgB;YAAE,SAAS;QAEzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC;gBAC1B,OAAO;oBACL,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;oBACxB,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBACjC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,aAAa,eAAe,SAAS,qBAAqB,eAAe,EAAE,CACtH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,aAAqB,EACrB,UAAkB,EAClB,eAAuB,EACvB,eAAuB,EACvB,QAAyB,EACzB,qBAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAClC,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,CACT,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAKvE,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,eAAe;YAAE,SAAS;QAC5D,IAAI,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,gBAAgB;YAAE,SAAS;QAEzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;gBAC/C,OAAO;oBACL,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;oBACxB,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBACjC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sCAAsC,aAAa,gBAAgB,UAAU,IAAI;QACjF,mBAAmB,eAAe,cAAc,eAAe,GAAG,CACnE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,aAA4B,EAC5B,MAAc,EACd,WAAmB,GAAG;IAEtB,OAAO;QACL,MAAM;QACN,QAAQ;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,MAAM,CAAC,WAAW;QACjC,gBAAgB,EAAE,GAAG;QACrB,gBAAgB,EAAE,KAAK;QACvB,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,oFAAoF;AACpF,MAAM,wBAAwB,GAC5B,6TAA6T,CAAC;AAEhU,MAAM,kBAAkB,GACtB,2KAA2K,wBAAwB,+EAA+E,CAAC;AAErR,MAAM,wBAAwB,GAC5B,SAAS,kBAAkB,0BAA0B,CAAC;AAMxD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAqC,EACrC,OAAe,EACf,MAAqB;IAErB,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC;IAEpC,MAAM,MAAM,GAAG;QACb,KAAK,EAAE;YACL,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;YACvC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC;YACjD,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC;YACvD,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;YAC7C,aAAa,EAAE,YAAY,CAAC,aAAa;YACzC,WAAW,EAAE;gBACX,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;gBAC3B,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;gBACnC,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;gBACnC,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;gBACrC,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;gBACjC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;gBACjC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;gBAC7B,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;gBACjC,YAAY,EAAE,EAAE,CAAC,YAAY;gBAC7B,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;gBACjC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC/B,UAAU,EAAE,EAAE,CAAC,UAAU;aAC1B;YACD,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC;YACvD,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;SACtC;QACD,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;KAC1B,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CAC1D,CAAC,wBAAwB,CAAC,EAC1B,CAAC,MAAM,CAAC,CACT,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { MarketOrderResponse, LimitOrderResponse, PPOSettings, SSEWatchResult, VaultProfile } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parameters for submitting a perps order. This is the common shape shared by
|
|
4
|
+
* `jv order create` (user-supplied) and `jv order close` (derived from an
|
|
5
|
+
* existing position). Keeping a single submit path means there is exactly one
|
|
6
|
+
* place that builds calldata, signs, and posts to the Manager API.
|
|
7
|
+
*/
|
|
8
|
+
export interface SubmitPerpsOrderParams {
|
|
9
|
+
side: 'long' | 'short';
|
|
10
|
+
symbol: string;
|
|
11
|
+
leverage: number;
|
|
12
|
+
/** Human-readable USDC margin, e.g. "1" or "100.5". */
|
|
13
|
+
margin: string;
|
|
14
|
+
/** Omit for a market order; set for a limit order. */
|
|
15
|
+
limitPrice?: string;
|
|
16
|
+
network: string;
|
|
17
|
+
ttlSeconds: number;
|
|
18
|
+
/** 0 = Normal (no PPO), 1 = PPO. */
|
|
19
|
+
limitType: number;
|
|
20
|
+
ppoSettings: PPOSettings;
|
|
21
|
+
/**
|
|
22
|
+
* Margin (collateral) vault. Optional: `buildSignData` falls back to
|
|
23
|
+
* `profile.marginAccount` and throws if neither is present.
|
|
24
|
+
*/
|
|
25
|
+
marginAccount?: string;
|
|
26
|
+
positionAccount: string;
|
|
27
|
+
}
|
|
28
|
+
export interface SubmitPerpsOrderResult {
|
|
29
|
+
/** Raw Manager API response. */
|
|
30
|
+
apiResponse: MarketOrderResponse | LimitOrderResponse;
|
|
31
|
+
/** Job stream result — present only for market orders that returned a jobId. */
|
|
32
|
+
sseResult?: SSEWatchResult;
|
|
33
|
+
/** Estimated position size in the underlying asset (informational). */
|
|
34
|
+
estimatedSize: number;
|
|
35
|
+
/** Spot price (USD) used for the size estimate. */
|
|
36
|
+
priceUsd: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build, sign, and submit a single perps order.
|
|
40
|
+
*
|
|
41
|
+
* This is the canonical submit path. Both `jv order create` and `jv order
|
|
42
|
+
* close` call it — `close` simply derives `side`/`margin`/`leverage` from an
|
|
43
|
+
* existing Subgraph position instead of CLI flags.
|
|
44
|
+
*
|
|
45
|
+
* The function does NOT print, exit, or handle SSE-failure exit codes — the
|
|
46
|
+
* caller owns presentation and process exit semantics.
|
|
47
|
+
*/
|
|
48
|
+
export declare function submitPerpsOrder(params: SubmitPerpsOrderParams, profile: VaultProfile, delegationPrivateKey: string): Promise<SubmitPerpsOrderResult>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ethers, Wallet, JsonRpcProvider } from 'ethers';
|
|
2
|
+
import { ApiClient } from '../client.js';
|
|
3
|
+
import { ENDPOINTS } from '../utils/endpoints.js';
|
|
4
|
+
import { loadConfig } from '../utils/config.js';
|
|
5
|
+
import { getNetworkConfig } from './chain-config.js';
|
|
6
|
+
import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from './order-signer.js';
|
|
7
|
+
import { fetchCurrentPrice, calculateQuantity } from './price-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build, sign, and submit a single perps order.
|
|
10
|
+
*
|
|
11
|
+
* This is the canonical submit path. Both `jv order create` and `jv order
|
|
12
|
+
* close` call it — `close` simply derives `side`/`margin`/`leverage` from an
|
|
13
|
+
* existing Subgraph position instead of CLI flags.
|
|
14
|
+
*
|
|
15
|
+
* The function does NOT print, exit, or handle SSE-failure exit codes — the
|
|
16
|
+
* caller owns presentation and process exit semantics.
|
|
17
|
+
*/
|
|
18
|
+
export async function submitPerpsOrder(params, profile, delegationPrivateKey) {
|
|
19
|
+
const net = getNetworkConfig(params.network);
|
|
20
|
+
// marginAmount is normalized to 6 decimal places of precision, matching the
|
|
21
|
+
// behavior of `jv order create` before this function was extracted.
|
|
22
|
+
const actualMargin = parseFloat(params.margin).toFixed(6);
|
|
23
|
+
const notionalAmount = parseFloat(actualMargin) * params.leverage;
|
|
24
|
+
const intent = {
|
|
25
|
+
side: params.side,
|
|
26
|
+
symbol: params.symbol,
|
|
27
|
+
leverage: params.leverage,
|
|
28
|
+
marginAmount: actualMargin,
|
|
29
|
+
marginAccount: params.marginAccount,
|
|
30
|
+
positionAccount: params.positionAccount,
|
|
31
|
+
limitPrice: params.limitPrice,
|
|
32
|
+
network: params.network,
|
|
33
|
+
ttlSeconds: params.ttlSeconds,
|
|
34
|
+
limitType: params.limitType,
|
|
35
|
+
};
|
|
36
|
+
const provider = new JsonRpcProvider(net.rpcUrl);
|
|
37
|
+
const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
|
|
38
|
+
const signData = await buildSignData(intent, profile, params.network);
|
|
39
|
+
const writerIndices = await fetchWriterIndices(signData.writer, signData.orderType, signData.underlyingAsset, provider, optionModuleV2);
|
|
40
|
+
const marginDecimals = net.marginAsset?.decimals ?? 6;
|
|
41
|
+
const currentPrice = await fetchCurrentPrice(params.symbol, params.network);
|
|
42
|
+
const quantity = calculateQuantity(signData.marginAmount, currentPrice, marginDecimals);
|
|
43
|
+
const priceUsd = Number(ethers.formatUnits(currentPrice, 18));
|
|
44
|
+
const estimatedSize = priceUsd > 0 ? notionalAmount / priceUsd : 0;
|
|
45
|
+
const delegationWallet = new Wallet(delegationPrivateKey);
|
|
46
|
+
const signature = await signSignData(signData, delegationWallet);
|
|
47
|
+
const managedOrder = buildManagedOrder(signData, writerIndices, params.positionAccount, quantity);
|
|
48
|
+
const body = {
|
|
49
|
+
signData,
|
|
50
|
+
signature,
|
|
51
|
+
managedOrder,
|
|
52
|
+
ppoSettings: params.ppoSettings,
|
|
53
|
+
};
|
|
54
|
+
const config = loadConfig();
|
|
55
|
+
const client = new ApiClient(config);
|
|
56
|
+
const res = await client.post(ENDPOINTS.ORDER_CREATE, body);
|
|
57
|
+
const apiResponse = res.data;
|
|
58
|
+
let sseResult;
|
|
59
|
+
if (apiResponse.orderType === 'market' &&
|
|
60
|
+
'jobId' in apiResponse &&
|
|
61
|
+
apiResponse.jobId) {
|
|
62
|
+
sseResult = await client.watchJobStream(apiResponse.jobId, 60);
|
|
63
|
+
}
|
|
64
|
+
return { apiResponse, sseResult, estimatedSize, priceUsd };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=perps-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perps-order.js","sourceRoot":"","sources":["../../../src/services/perps-order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAiD1E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA8B,EAC9B,OAAqB,EACrB,oBAA4B;IAE5B,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7C,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAElE,MAAM,MAAM,GAAsB;QAChC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,YAAY;QAC1B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;IAE7E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAC5C,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,eAAe,EACxB,QAAQ,EACR,cAAc,CACf,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAExF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,iBAAiB,CACpC,QAAQ,EACR,aAAa,EACb,MAAM,CAAC,eAAe,EACtB,QAAQ,CACT,CAAC;IAEF,MAAM,IAAI,GAAuB;QAC/B,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;IAEF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,SAAS,CAAC,YAAY,EACtB,IAAI,CACL,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,CAAC,IAAgD,CAAC;IAEzE,IAAI,SAAqC,CAAC;IAC1C,IACE,WAAW,CAAC,SAAS,KAAK,QAAQ;QAClC,OAAO,IAAI,WAAW;QACtB,WAAW,CAAC,KAAK,EACjB,CAAC;QACD,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare function getProfilesDir(): string;
|
|
2
|
+
export declare function getProfileDir(name: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Read the active profile name from active.json.
|
|
5
|
+
* Returns null if no active profile is set.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getActiveProfileName(): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Set the active profile by writing active.json.
|
|
10
|
+
*/
|
|
11
|
+
export declare function setActiveProfile(name: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Check if a profile directory exists.
|
|
14
|
+
*/
|
|
15
|
+
export declare function profileExists(name: string): boolean;
|
|
16
|
+
export interface ProfileInfo {
|
|
17
|
+
name: string;
|
|
18
|
+
eoa: string | null;
|
|
19
|
+
delegationAddress: string | null;
|
|
20
|
+
network: string | null;
|
|
21
|
+
isActive: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* List all profiles with summary info.
|
|
25
|
+
*/
|
|
26
|
+
export declare function listProfiles(): ProfileInfo[];
|
|
27
|
+
/**
|
|
28
|
+
* Rename a profile directory. Updates active.json if the renamed profile was active.
|
|
29
|
+
*/
|
|
30
|
+
export declare function renameProfile(oldName: string, newName: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Remove a profile directory. Cannot remove the active profile.
|
|
33
|
+
*/
|
|
34
|
+
export declare function removeProfile(name: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Migrate legacy ~/.jaspervault/keys.json + profile.json into profiles/default/.
|
|
37
|
+
* Only runs once — skips if profiles/ directory already exists with content.
|
|
38
|
+
*/
|
|
39
|
+
export declare function migrateIfNeeded(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the current active profile directory path.
|
|
42
|
+
* Runs migration if needed, then returns the path.
|
|
43
|
+
* If no active profile is set and profiles exist, activates the first one.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveActiveProfileDir(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Ensure the active profile directory exists.
|
|
48
|
+
*/
|
|
49
|
+
export declare function ensureActiveProfileDir(): string;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, renameSync, rmSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
const DEFAULT_PROFILE_NAME = 'default';
|
|
4
|
+
function getJvDir() {
|
|
5
|
+
return join(process.env.HOME || process.env.USERPROFILE || '', '.jaspervault');
|
|
6
|
+
}
|
|
7
|
+
export function getProfilesDir() {
|
|
8
|
+
return join(getJvDir(), 'profiles');
|
|
9
|
+
}
|
|
10
|
+
function getActiveFile() {
|
|
11
|
+
return join(getJvDir(), 'active.json');
|
|
12
|
+
}
|
|
13
|
+
export function getProfileDir(name) {
|
|
14
|
+
return join(getProfilesDir(), name);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Read the active profile name from active.json.
|
|
18
|
+
* Returns null if no active profile is set.
|
|
19
|
+
*/
|
|
20
|
+
export function getActiveProfileName() {
|
|
21
|
+
const file = getActiveFile();
|
|
22
|
+
if (!existsSync(file))
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
const data = JSON.parse(readFileSync(file, 'utf-8'));
|
|
26
|
+
return data.profile || null;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set the active profile by writing active.json.
|
|
34
|
+
*/
|
|
35
|
+
export function setActiveProfile(name) {
|
|
36
|
+
const dir = getJvDir();
|
|
37
|
+
if (!existsSync(dir)) {
|
|
38
|
+
mkdirSync(dir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
writeFileSync(getActiveFile(), JSON.stringify({ profile: name }, null, 2), { mode: 0o600 });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if a profile directory exists.
|
|
44
|
+
*/
|
|
45
|
+
export function profileExists(name) {
|
|
46
|
+
return existsSync(getProfileDir(name));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* List all profiles with summary info.
|
|
50
|
+
*/
|
|
51
|
+
export function listProfiles() {
|
|
52
|
+
const dir = getProfilesDir();
|
|
53
|
+
if (!existsSync(dir))
|
|
54
|
+
return [];
|
|
55
|
+
const activeName = getActiveProfileName();
|
|
56
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
57
|
+
return entries
|
|
58
|
+
.filter((e) => e.isDirectory())
|
|
59
|
+
.map((e) => {
|
|
60
|
+
const name = e.name;
|
|
61
|
+
const profileFile = join(dir, name, 'profile.json');
|
|
62
|
+
let eoa = null;
|
|
63
|
+
let delegationAddress = null;
|
|
64
|
+
let network = null;
|
|
65
|
+
if (existsSync(profileFile)) {
|
|
66
|
+
try {
|
|
67
|
+
const data = JSON.parse(readFileSync(profileFile, 'utf-8'));
|
|
68
|
+
eoa = data.eoa || null;
|
|
69
|
+
delegationAddress = data.delegationAddress || null;
|
|
70
|
+
network = data.network || null;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// ignore parse errors
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return { name, eoa, delegationAddress, network, isActive: name === activeName };
|
|
77
|
+
})
|
|
78
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Rename a profile directory. Updates active.json if the renamed profile was active.
|
|
82
|
+
*/
|
|
83
|
+
export function renameProfile(oldName, newName) {
|
|
84
|
+
if (!profileExists(oldName)) {
|
|
85
|
+
throw new Error(`Profile "${oldName}" does not exist`);
|
|
86
|
+
}
|
|
87
|
+
if (profileExists(newName)) {
|
|
88
|
+
throw new Error(`Profile "${newName}" already exists`);
|
|
89
|
+
}
|
|
90
|
+
renameSync(getProfileDir(oldName), getProfileDir(newName));
|
|
91
|
+
if (getActiveProfileName() === oldName) {
|
|
92
|
+
setActiveProfile(newName);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Remove a profile directory. Cannot remove the active profile.
|
|
97
|
+
*/
|
|
98
|
+
export function removeProfile(name) {
|
|
99
|
+
if (!profileExists(name)) {
|
|
100
|
+
throw new Error(`Profile "${name}" does not exist`);
|
|
101
|
+
}
|
|
102
|
+
if (getActiveProfileName() === name) {
|
|
103
|
+
throw new Error(`Cannot remove active profile "${name}". Switch to another profile first.`);
|
|
104
|
+
}
|
|
105
|
+
rmSync(getProfileDir(name), { recursive: true, force: true });
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Migrate legacy ~/.jaspervault/keys.json + profile.json into profiles/default/.
|
|
109
|
+
* Only runs once — skips if profiles/ directory already exists with content.
|
|
110
|
+
*/
|
|
111
|
+
export function migrateIfNeeded() {
|
|
112
|
+
const jvDir = getJvDir();
|
|
113
|
+
const legacyKeys = join(jvDir, 'keys.json');
|
|
114
|
+
const legacyProfile = join(jvDir, 'profile.json');
|
|
115
|
+
// Skip if no legacy files exist
|
|
116
|
+
if (!existsSync(legacyKeys) && !existsSync(legacyProfile))
|
|
117
|
+
return;
|
|
118
|
+
// Skip if profiles dir already has content (already migrated)
|
|
119
|
+
const profilesDir = getProfilesDir();
|
|
120
|
+
if (existsSync(profilesDir)) {
|
|
121
|
+
try {
|
|
122
|
+
const entries = readdirSync(profilesDir, { withFileTypes: true });
|
|
123
|
+
if (entries.some((e) => e.isDirectory()))
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// continue with migration
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Create default profile directory
|
|
131
|
+
const defaultDir = getProfileDir(DEFAULT_PROFILE_NAME);
|
|
132
|
+
mkdirSync(defaultDir, { recursive: true });
|
|
133
|
+
// Move legacy files
|
|
134
|
+
if (existsSync(legacyKeys)) {
|
|
135
|
+
const data = readFileSync(legacyKeys, 'utf-8');
|
|
136
|
+
writeFileSync(join(defaultDir, 'keys.json'), data, { mode: 0o600 });
|
|
137
|
+
rmSync(legacyKeys);
|
|
138
|
+
}
|
|
139
|
+
if (existsSync(legacyProfile)) {
|
|
140
|
+
const data = readFileSync(legacyProfile, 'utf-8');
|
|
141
|
+
writeFileSync(join(defaultDir, 'profile.json'), data, { mode: 0o600 });
|
|
142
|
+
rmSync(legacyProfile);
|
|
143
|
+
}
|
|
144
|
+
// Set active profile
|
|
145
|
+
setActiveProfile(DEFAULT_PROFILE_NAME);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Resolve the current active profile directory path.
|
|
149
|
+
* Runs migration if needed, then returns the path.
|
|
150
|
+
* If no active profile is set and profiles exist, activates the first one.
|
|
151
|
+
*/
|
|
152
|
+
export function resolveActiveProfileDir() {
|
|
153
|
+
migrateIfNeeded();
|
|
154
|
+
let name = getActiveProfileName();
|
|
155
|
+
if (!name) {
|
|
156
|
+
// Try to pick the first available profile
|
|
157
|
+
const profiles = listProfiles();
|
|
158
|
+
if (profiles.length > 0) {
|
|
159
|
+
name = profiles[0].name;
|
|
160
|
+
setActiveProfile(name);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// No profiles at all — return default dir (will be created on save)
|
|
164
|
+
name = DEFAULT_PROFILE_NAME;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return getProfileDir(name);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Ensure the active profile directory exists.
|
|
171
|
+
*/
|
|
172
|
+
export function ensureActiveProfileDir() {
|
|
173
|
+
const dir = resolveActiveProfileDir();
|
|
174
|
+
if (!existsSync(dir)) {
|
|
175
|
+
mkdirSync(dir, { recursive: true });
|
|
176
|
+
}
|
|
177
|
+
return dir;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=profile-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-manager.js","sourceRoot":"","sources":["../../../src/services/profile-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
import { existsSync,
|
|
1
|
+
import { existsSync, readFileSync, chmodSync, writeFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
-
|
|
4
|
-
return join(process.env.HOME || process.env.USERPROFILE || '', '.jaspervault');
|
|
5
|
-
}
|
|
3
|
+
import { resolveActiveProfileDir, ensureActiveProfileDir } from './profile-manager.js';
|
|
6
4
|
function getProfileFile() {
|
|
7
|
-
return join(
|
|
8
|
-
}
|
|
9
|
-
function ensureDir() {
|
|
10
|
-
const dir = getJvDir();
|
|
11
|
-
if (!existsSync(dir)) {
|
|
12
|
-
mkdirSync(dir, { recursive: true });
|
|
13
|
-
}
|
|
5
|
+
return join(resolveActiveProfileDir(), 'profile.json');
|
|
14
6
|
}
|
|
15
7
|
/**
|
|
16
8
|
* Load vault profile from ~/.jaspervault/profile.json.
|
|
@@ -34,7 +26,7 @@ export function loadVaultProfile(network) {
|
|
|
34
26
|
* Save vault profile to ~/.jaspervault/profile.json with mode 0600.
|
|
35
27
|
*/
|
|
36
28
|
export function saveVaultProfile(profile) {
|
|
37
|
-
|
|
29
|
+
ensureActiveProfileDir();
|
|
38
30
|
const file = getProfileFile();
|
|
39
31
|
writeFileSync(file, JSON.stringify(profile, null, 2), { mode: 0o600 });
|
|
40
32
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-profile.js","sourceRoot":"","sources":["../../../src/services/vault-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"vault-profile.js","sourceRoot":"","sources":["../../../src/services/vault-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,SAAS,cAAc;IACrB,OAAO,IAAI,CAAC,uBAAuB,EAAE,EAAE,cAAc,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,sBAAsB,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAqB,EAAE,IAAsB;IACzF,MAAM,UAAU,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC7E,OAAO,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;AAChC,CAAC"}
|