@proxygate/cli 0.1.5 → 0.1.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-handlers.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel-handlers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAoC9D,sFAAsF;AACtF,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,SAAS,EAAE,UAAU,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CA2BD;AAED,yDAAyD;AACzD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/E;AAED,yCAAyC;AACzC,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAMD,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAWrE;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnD;AAED,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED,mCAAmC;AACnC,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIhF"}
1
+ {"version":3,"file":"tunnel-handlers.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel-handlers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,sFAAsF;AACtF,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,SAAS,EAAE,UAAU,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CA2BD;AAED,yDAAyD;AACzD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/E;AAED,yCAAyC;AACzC,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAMD,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAWrE;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnD;AAED,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED,mCAAmC;AACnC,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIhF"}
@@ -2,39 +2,8 @@ import { readFile } from 'node:fs/promises';
2
2
  import { resolve } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import nacl from 'tweetnacl';
5
+ import { encodeBase58 } from '@proxygate/sdk';
5
6
  import { bold, green, yellow, red, dim, cyan } from '../format.js';
6
- // ---------------------------------------------------------------------------
7
- // Helpers
8
- // ---------------------------------------------------------------------------
9
- /** Base58 alphabet (same as Solana). */
10
- const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
11
- /** Encode bytes as base58 string. */
12
- function encodeBase58(bytes) {
13
- const digits = [0];
14
- for (const byte of bytes) {
15
- let carry = byte;
16
- for (let j = 0; j < digits.length; j++) {
17
- carry += digits[j] << 8;
18
- digits[j] = carry % 58;
19
- carry = (carry / 58) | 0;
20
- }
21
- while (carry > 0) {
22
- digits.push(carry % 58);
23
- carry = (carry / 58) | 0;
24
- }
25
- }
26
- let result = '';
27
- for (const byte of bytes) {
28
- if (byte === 0)
29
- result += BASE58_ALPHABET[0];
30
- else
31
- break;
32
- }
33
- for (let i = digits.length - 1; i >= 0; i--) {
34
- result += BASE58_ALPHABET[digits[i]];
35
- }
36
- return result;
37
- }
38
7
  /** Load and parse a Solana keypair JSON file, returning secretKey + walletAddress. */
39
8
  export async function loadKeypair(keypairPath) {
40
9
  let resolvedPath = keypairPath;
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-handlers.js","sourceRoot":"","sources":["../../src/commands/tunnel-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel-handlers.js","sourceRoot":"","sources":["../../src/commands/tunnel-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEnE,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IAInD,IAAI,YAAY,GAAG,WAAW,CAAC;IAC/B,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAErC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE1C,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxB,QAAQ,CAAC,MAAM,KAAK,EAAE;QACtB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAC7C,CAAC;QACD,MAAM,IAAI,KAAK,CACb,gEACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,QACnE,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAoB,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AACtC,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAAY;IAC3D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,oBAAoB,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,SAAS;IACvB,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,QAAmC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,eAAe,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,OAAO,CAAC,KAAY;IAClC,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,SAAS,CAAC,SAAiB,EAAE,OAAe,EAAE,IAAY;IACxE,OAAO,CAAC,GAAG,CACT,GAAG,SAAS,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CACxF,CAAC;AACJ,CAAC"}
package/dist/keypair.d.ts CHANGED
@@ -1,13 +1,8 @@
1
1
  /**
2
2
  * Parse and convert Solana keypairs from various formats.
3
3
  *
4
- * Supported input formats:
5
- * - JSON array of 64 numbers (Solana CLI: solana-keygen)
6
- * - JSON array of 32 numbers (seed only)
7
- * - Base58 string, 64 bytes decoded (Phantom private key export)
8
- * - Base58 string, 32 bytes decoded (seed)
9
- * - Raw base64 string, 64 bytes decoded
10
- * - Raw base64 string, 32 bytes decoded
4
+ * Delegates core parsing to @proxygate/sdk's parseKeypairBytes.
5
+ * Adds CLI-specific format detection labels for user display.
11
6
  *
12
7
  * Output: Solana-compatible JSON array of 64 numbers [secretKey(32) + publicKey(32)].
13
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"keypair.d.ts","sourceRoot":"","sources":["../src/keypair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwCH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CA6ErD"}
1
+ {"version":3,"file":"keypair.d.ts","sourceRoot":"","sources":["../src/keypair.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAqCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAIrD"}
package/dist/keypair.js CHANGED
@@ -1,129 +1,65 @@
1
1
  /**
2
2
  * Parse and convert Solana keypairs from various formats.
3
3
  *
4
- * Supported input formats:
5
- * - JSON array of 64 numbers (Solana CLI: solana-keygen)
6
- * - JSON array of 32 numbers (seed only)
7
- * - Base58 string, 64 bytes decoded (Phantom private key export)
8
- * - Base58 string, 32 bytes decoded (seed)
9
- * - Raw base64 string, 64 bytes decoded
10
- * - Raw base64 string, 32 bytes decoded
4
+ * Delegates core parsing to @proxygate/sdk's parseKeypairBytes.
5
+ * Adds CLI-specific format detection labels for user display.
11
6
  *
12
7
  * Output: Solana-compatible JSON array of 64 numbers [secretKey(32) + publicKey(32)].
13
8
  */
14
- import nacl from 'tweetnacl';
15
- const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
16
- const BASE58_SET = new Set(BASE58_ALPHABET);
17
- const BASE58_MAP = new Map();
18
- for (let i = 0; i < BASE58_ALPHABET.length; i++) {
19
- BASE58_MAP.set(BASE58_ALPHABET[i], i);
20
- }
21
- function decodeBase58(str) {
22
- let leadingOnes = 0;
23
- for (let i = 0; i < str.length && str[i] === '1'; i++)
24
- leadingOnes++;
25
- let num = BigInt(0);
26
- for (let i = 0; i < str.length; i++) {
27
- const v = BASE58_MAP.get(str[i]);
28
- if (v === undefined)
29
- throw new Error(`Invalid base58 character: ${str[i]}`);
30
- num = num * 58n + BigInt(v);
31
- }
32
- const bytes = [];
33
- while (num > 0n) {
34
- bytes.unshift(Number(num % 256n));
35
- num /= 256n;
36
- }
37
- for (let i = 0; i < leadingOnes; i++)
38
- bytes.unshift(0);
39
- return Uint8Array.from(bytes);
40
- }
9
+ import { parseKeypairBytes, decodeBase58 } from '@proxygate/sdk';
10
+ const BASE58_CHARS = new Set('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
41
11
  function isBase58(str) {
42
12
  for (const ch of str) {
43
- if (!BASE58_SET.has(ch))
13
+ if (!BASE58_CHARS.has(ch))
44
14
  return false;
45
15
  }
46
16
  return str.length > 0;
47
17
  }
48
- function isBase64(str) {
49
- return /^[A-Za-z0-9+/]+=*$/.test(str) && str.length > 0;
50
- }
51
- function keypairFromSeed(seed) {
52
- const kp = nacl.sign.keyPair.fromSeed(seed);
53
- return kp.secretKey; // 64 bytes: seed(32) + pubkey(32)
54
- }
55
- /**
56
- * Parse raw content (file contents or pasted string) into a 64-byte Solana keypair.
57
- * Throws descriptive errors for unsupported formats.
58
- */
59
- export function parseKeypair(raw) {
18
+ /** Detect the human-readable format label for CLI display. */
19
+ function detectFormat(raw) {
60
20
  const trimmed = raw.trim();
61
- // 1. JSON array
62
21
  if (trimmed.startsWith('[')) {
63
22
  try {
64
23
  const arr = JSON.parse(trimmed);
65
- if (!Array.isArray(arr) || !arr.every((n) => typeof n === 'number' && n >= 0 && n <= 255)) {
66
- throw new Error('JSON array must contain numbers 0-255');
24
+ if (Array.isArray(arr)) {
25
+ if (arr.length === 64)
26
+ return 'Solana CLI keypair (64-byte JSON array)';
27
+ if (arr.length === 32)
28
+ return '32-byte seed (JSON array, expanded to keypair)';
67
29
  }
68
- if (arr.length === 64) {
69
- return { secretKey: arr, format: 'Solana CLI keypair (64-byte JSON array)' };
70
- }
71
- if (arr.length === 32) {
72
- const full = keypairFromSeed(Uint8Array.from(arr));
73
- return { secretKey: Array.from(full), format: '32-byte seed (JSON array, expanded to keypair)' };
74
- }
75
- throw new Error(`Expected 32 or 64 numbers, got ${arr.length}`);
76
- }
77
- catch (err) {
78
- if (err instanceof SyntaxError)
79
- throw new Error('Invalid JSON in keypair file');
80
- throw err;
81
30
  }
31
+ catch { /* fall through */ }
82
32
  }
83
- // 2. Base58 string (Phantom export, etc.)
84
33
  if (isBase58(trimmed) && trimmed.length >= 32 && trimmed.length <= 96) {
85
34
  const bytes = decodeBase58(trimmed);
86
- if (bytes.length === 64) {
87
- return { secretKey: Array.from(bytes), format: 'Base58 private key (64 bytes, e.g. Phantom export)' };
88
- }
89
- if (bytes.length === 32) {
90
- const full = keypairFromSeed(bytes);
91
- return { secretKey: Array.from(full), format: 'Base58 seed (32 bytes, expanded to keypair)' };
92
- }
93
- // Could be a public key (32 bytes are valid base58 at shorter lengths)
94
- throw new Error(`Base58 decoded to ${bytes.length} bytes. Expected 32 (seed) or 64 (keypair).`);
35
+ if (bytes.length === 64)
36
+ return 'Base58 private key (64 bytes, e.g. Phantom export)';
37
+ if (bytes.length === 32)
38
+ return 'Base58 seed (32 bytes, expanded to keypair)';
95
39
  }
96
- // 3. Hex string (check before base64, since hex chars are valid base64)
97
40
  if (/^(0x)?[0-9a-fA-F]+$/.test(trimmed)) {
98
41
  const hex = trimmed.startsWith('0x') ? trimmed.slice(2) : trimmed;
99
- if (hex.length === 128 || hex.length === 64) {
100
- const bytes = Uint8Array.from(Buffer.from(hex, 'hex'));
101
- if (bytes.length === 64) {
102
- return { secretKey: Array.from(bytes), format: 'Hex private key (64 bytes)' };
103
- }
104
- if (bytes.length === 32) {
105
- const full = keypairFromSeed(bytes);
106
- return { secretKey: Array.from(full), format: 'Hex seed (32 bytes, expanded to keypair)' };
107
- }
108
- }
42
+ if (hex.length === 128)
43
+ return 'Hex private key (64 bytes)';
44
+ if (hex.length === 64)
45
+ return 'Hex seed (32 bytes, expanded to keypair)';
109
46
  }
110
- // 4. Base64 string
111
- if (isBase64(trimmed) && trimmed.length >= 43) {
112
- const bytes = Uint8Array.from(Buffer.from(trimmed, 'base64'));
113
- if (bytes.length === 64) {
114
- return { secretKey: Array.from(bytes), format: 'Base64 private key (64 bytes)' };
115
- }
116
- if (bytes.length === 32) {
117
- const full = keypairFromSeed(bytes);
118
- return { secretKey: Array.from(full), format: 'Base64 seed (32 bytes, expanded to keypair)' };
119
- }
120
- throw new Error(`Base64 decoded to ${bytes.length} bytes. Expected 32 (seed) or 64 (keypair).`);
47
+ if (/^[A-Za-z0-9+/]+=*$/.test(trimmed) && trimmed.length >= 43) {
48
+ const bytes = Buffer.from(trimmed, 'base64');
49
+ if (bytes.length === 64)
50
+ return 'Base64 private key (64 bytes)';
51
+ if (bytes.length === 32)
52
+ return 'Base64 seed (32 bytes, expanded to keypair)';
121
53
  }
122
- throw new Error('Unrecognized keypair format. Supported formats:\n' +
123
- ' - JSON array of 64 numbers (Solana CLI)\n' +
124
- ' - JSON array of 32 numbers (seed)\n' +
125
- ' - Base58 string (Phantom export)\n' +
126
- ' - Base64 string\n' +
127
- ' - Hex string');
54
+ return 'Unknown format';
55
+ }
56
+ /**
57
+ * Parse raw content (file contents or pasted string) into a 64-byte Solana keypair.
58
+ * Throws descriptive errors for unsupported formats.
59
+ */
60
+ export function parseKeypair(raw) {
61
+ const format = detectFormat(raw);
62
+ const secretKey = parseKeypairBytes(raw);
63
+ return { secretKey: Array.from(secretKey), format };
128
64
  }
129
65
  //# sourceMappingURL=keypair.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../src/keypair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../src/keypair.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAE3F,SAAS,QAAQ,CAAC,GAAW;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;IAAC,CAAC;IAClE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,CAAC;AAOD,8DAA8D;AAC9D,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;oBAAE,OAAO,yCAAyC,CAAC;gBACxE,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;oBAAE,OAAO,gDAAgD,CAAC;YACjF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,oDAAoD,CAAC;QACrF,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,6CAA6C,CAAC;IAChF,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAClE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,4BAA4B,CAAC;QAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,0CAA0C,CAAC;IAC3E,CAAC;IAED,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,+BAA+B,CAAC;QAChE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,6CAA6C,CAAC;IAChF,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;AACtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proxygate/cli",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "ProxyGate CLI — buy APIs, sell agent capacity, and post jobs on the autonomous agent marketplace. USDC on Solana.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@inquirer/prompts": "^8.3.0",
49
- "@proxygate/sdk": "^0.3.0",
49
+ "@proxygate/sdk": "workspace:*",
50
50
  "commander": "^14.0.3",
51
51
  "js-yaml": "^4.1.1",
52
52
  "tweetnacl": "^1.0.3"