httpcat-cli 0.0.20 → 0.0.22

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.
@@ -23,7 +23,17 @@
23
23
  "Bash(gh pr list:*)",
24
24
  "Bash(gh pr view:*)",
25
25
  "Bash(gh pr diff:*)",
26
- "Bash(gh pr merge:*)"
26
+ "Bash(gh pr merge:*)",
27
+ "Bash(cat:*)",
28
+ "Bash(git pull:*)",
29
+ "Bash(git rebase:*)",
30
+ "Bash(bun test:*)",
31
+ "Bash(gh run list:*)",
32
+ "Bash(gh run:*)",
33
+ "Bash(ssh:*)",
34
+ "Bash(md5sum:*)",
35
+ "Bash(xargs:*)",
36
+ "Bash(jq)"
27
37
  ],
28
38
  "deny": [],
29
39
  "ask": []
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,MAAM,EAAE,CAAC,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;WAUM,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IAqBvD,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EACtC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAiF9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAsCrC,WAAW,IAAI,MAAM;IAIrB,UAAU,IAAI,MAAM;CAGrB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACD,MAAM,EAAE,MAAM;IAAS,OAAO,CAAC,EAAE,GAAG;gBAA5D,OAAO,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM,EAAS,OAAO,CAAC,EAAE,GAAG,YAAA;CAIzE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,MAAM,EAAE,CAAC,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;WAUM,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IAqBvD,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EACtC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IA2G9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAsCrC,WAAW,IAAI,MAAM;IAIrB,UAAU,IAAI,MAAM;CAGrB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACD,MAAM,EAAE,MAAM;IAAS,OAAO,CAAC,EAAE,GAAG;gBAA5D,OAAO,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM,EAAS,OAAO,CAAC,EAAE,GAAG,YAAA;CAIzE"}
package/dist/client.js CHANGED
@@ -48,12 +48,47 @@ export class HttpcatClient {
48
48
  try {
49
49
  errorDetails = JSON.parse(responseText);
50
50
  // Extract message from nested error structures
51
- errorMessage =
52
- errorDetails.error?.message ||
53
- errorDetails.error ||
54
- errorDetails.message ||
55
- errorDetails.details?.message ||
56
- `Request failed with status ${response.status}`;
51
+ // Handle various error formats
52
+ if (typeof errorDetails === 'string') {
53
+ errorMessage = errorDetails;
54
+ }
55
+ else if (errorDetails.error) {
56
+ if (typeof errorDetails.error === 'string') {
57
+ errorMessage = errorDetails.error;
58
+ }
59
+ else if (errorDetails.error.message) {
60
+ errorMessage = errorDetails.error.message;
61
+ }
62
+ else if (typeof errorDetails.error === 'object') {
63
+ // Try to stringify the error object
64
+ const errorStr = JSON.stringify(errorDetails.error);
65
+ if (errorStr !== '{}') {
66
+ errorMessage = errorStr;
67
+ }
68
+ else {
69
+ errorMessage = errorDetails.message || `Request failed with status ${response.status}`;
70
+ }
71
+ }
72
+ else {
73
+ errorMessage = String(errorDetails.error);
74
+ }
75
+ }
76
+ else if (errorDetails.message) {
77
+ errorMessage = errorDetails.message;
78
+ }
79
+ else if (errorDetails.details?.message) {
80
+ errorMessage = errorDetails.details.message;
81
+ }
82
+ else {
83
+ // Last resort: try to stringify the whole object
84
+ const errorStr = JSON.stringify(errorDetails);
85
+ if (errorStr !== '{}' && errorStr.length < 500) {
86
+ errorMessage = errorStr;
87
+ }
88
+ else {
89
+ errorMessage = `Request failed with status ${response.status}`;
90
+ }
91
+ }
57
92
  // For 500 errors, try to extract more context
58
93
  if (response.status >= 500 && errorDetails.error) {
59
94
  // If error is an object, try to stringify it for more info
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"buy.d.ts","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAKD,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAAE,mCAAmC;AACvD,MAAM,EAAE,MAAM,EACd,UAAU,UAAO,EACjB,MAAM,UAAQ,GACb,OAAO,CAAC,cAAc,CAAC,CAuBzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAkB7D"}
1
+ {"version":3,"file":"buy.d.ts","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,YAAY,UAA2B,CAAC;AACrD,eAAO,MAAM,YAAY,UAAuB,CAAC;AAEjD,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAAE,mCAAmC;AACvD,MAAM,EAAE,MAAM,EACd,UAAU,UAAO,EACjB,MAAM,UAAQ,GACb,OAAO,CAAC,cAAc,CAAC,CAuBzB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAkB7D"}
@@ -2,8 +2,8 @@ import { validateTokenId, validateAmount } from '../utils/validation.js';
2
2
  import { printBox, formatTokenAmount, formatCurrency } from '../utils/formatting.js';
3
3
  import { printSuccess, printGraduationProgress } from '../interactive/art.js';
4
4
  import { resolveTokenId } from '../utils/token-resolver.js';
5
- const TEST_AMOUNTS = ['0.05', '0.10', '0.20'];
6
- const PROD_AMOUNTS = ['50', '100', '200'];
5
+ export const TEST_AMOUNTS = ['0.05', '0.10', '0.20'];
6
+ export const PROD_AMOUNTS = ['50', '100', '200'];
7
7
  export async function buyToken(client, identifier, // Can be token ID, name, or symbol
8
8
  amount, isTestMode = true, silent = false // Suppress resolver output for quiet/JSON mode
9
9
  ) {
@@ -12,12 +12,12 @@ amount, isTestMode = true, silent = false // Suppress resolver output for quiet/
12
12
  // Validate input
13
13
  validateTokenId(tokenId);
14
14
  const validAmounts = isTestMode ? TEST_AMOUNTS : PROD_AMOUNTS;
15
- validateAmount(amount, validAmounts);
16
- const input = { tokenId, amount };
15
+ const normalizedAmount = validateAmount(amount, validAmounts, isTestMode);
16
+ const input = { tokenId, amount: normalizedAmount };
17
17
  // Route to correct entrypoint based on test mode and amount
18
18
  // Test mode: token_buy_0_05, token_buy_0_10, token_buy_0_20
19
19
  // Production mode: token_buy (single entrypoint)
20
- const entrypoint = isTestMode ? `token_buy_${amount.replace('.', '_')}` : 'token_buy';
20
+ const entrypoint = isTestMode ? `token_buy_${normalizedAmount.replace('.', '_')}` : 'token_buy';
21
21
  // Make request
22
22
  const { data } = await client.invoke(entrypoint, input);
23
23
  return data;
@@ -1 +1 @@
1
- {"version":3,"file":"buy.js","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAkB5D,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAqB,EACrB,UAAkB,EAAE,mCAAmC;AACvD,MAAc,EACd,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,KAAK,CAAC,+CAA+C;;IAE9D,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE,iBAAiB;IACjB,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAC9D,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErC,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAEjD,4DAA4D;IAC5D,4DAA4D;IAC5D,iDAAiD;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAEtF,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAClC,UAAU,EACV,KAAK,CACN,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,YAAY,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;IAExD,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAiB;QAC/C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAE/C,QAAQ,CAAC,qBAAqB,EAAE;QAC9B,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC;QAC3D,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAClD,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;QACtC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5C,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"buy.js","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAkB5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAqB,EACrB,UAAkB,EAAE,mCAAmC;AACvD,MAAc,EACd,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,KAAK,CAAC,+CAA+C;;IAE9D,iCAAiC;IACjC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE,iBAAiB;IACjB,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAC9D,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAEnE,4DAA4D;IAC5D,4DAA4D;IAC5D,iDAAiD;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAEhG,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAClC,UAAU,EACV,KAAK,CACN,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,YAAY,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;IAExD,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAiB;QAC/C,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAE/C,QAAQ,CAAC,qBAAqB,EAAE;QAC9B,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC;QAC3D,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;QAClD,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;QACtC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5C,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;QAChD,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,uBAAuB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAW7C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,OAAO,CAAC;IAC5C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkC7E;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,aAAa,EACrB,eAAe,CAAC,EAAE,MAAM,EACxB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,cAAc,CAAC,CA+BzB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAa5B;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAS/B;AAgND,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,OAAe,EACzB,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,GAAE,MAAM,GAAG,aAAsB,GAC3C,OAAO,CAAC,IAAI,CAAC,CAm2Df;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAQjE"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAW7C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,OAAO,CAAC;IAC5C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkC7E;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,cAAc,CAAC,CAoCzB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAa5B;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAS/B;AAiND,wBAAsB,eAAe,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,OAAe,EACzB,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,GAAE,MAAM,GAAG,aAAsB,GAC3C,OAAO,CAAC,IAAI,CAAC,CAq2Df;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAQjE"}
@@ -55,7 +55,7 @@ export function normalizeWebSocketUrl(wsUrl, agentUrl) {
55
55
  return wsUrl;
56
56
  }
57
57
  }
58
- export async function joinChat(client, tokenIdentifier, silent = false) {
58
+ export async function joinChat(client, userAddress, tokenIdentifier, silent = false) {
59
59
  let tokenId;
60
60
  // If token identifier provided, resolve it to tokenId
61
61
  if (tokenIdentifier) {
@@ -70,7 +70,11 @@ export async function joinChat(client, tokenIdentifier, silent = false) {
70
70
  tokenId = await resolveTokenId(tokenIdentifier, client, silent);
71
71
  }
72
72
  }
73
- const input = tokenId ? { tokenId } : {};
73
+ // Validate userAddress is defined
74
+ if (!userAddress || typeof userAddress !== 'string') {
75
+ throw new Error(`userAddress is required but got: ${typeof userAddress} - ${userAddress}`);
76
+ }
77
+ const input = tokenId ? { tokenId, userAddress } : { userAddress };
74
78
  const { data } = await client.invoke(CHAT_JOIN_ENTRYPOINT, input);
75
79
  // Format author addresses for last messages
76
80
  data.lastMessages = data.lastMessages.map((msg) => ({
@@ -79,16 +83,16 @@ export async function joinChat(client, tokenIdentifier, silent = false) {
79
83
  }));
80
84
  return data;
81
85
  }
82
- export async function sendChatMessage(client, message, leaseId) {
86
+ export async function sendChatMessage(client, message, leaseId, userAddress) {
83
87
  if (!message.trim()) {
84
88
  throw new Error("Message cannot be empty");
85
89
  }
86
- const input = { message, leaseId };
90
+ const input = { message, leaseId, userAddress };
87
91
  const { data } = await client.invoke(CHAT_MESSAGE_ENTRYPOINT, input);
88
92
  return data;
89
93
  }
90
- export async function renewLease(client, leaseId) {
91
- const input = leaseId ? { leaseId } : {};
94
+ export async function renewLease(client, userAddress, leaseId) {
95
+ const input = leaseId ? { leaseId, userAddress } : { userAddress };
92
96
  const { data } = await client.invoke(CHAT_RENEW_LEASE_ENTRYPOINT, input);
93
97
  return data;
94
98
  }
@@ -236,7 +240,7 @@ function updateHeaderBox(headerBox, leaseInfo, tokenName, isConnected = false) {
236
240
  // Clear and set content to prevent overlapping
237
241
  headerBox.setContent(lines.join("\n"));
238
242
  }
239
- async function ensureLeaseValid(client, leaseInfo, messageLogBox, screen) {
243
+ async function ensureLeaseValid(client, userAddress, leaseInfo, messageLogBox, screen) {
240
244
  if (!leaseInfo || leaseInfo.leaseExpiresAt.getTime() <= Date.now()) {
241
245
  // Lease expired or doesn't exist, renew it
242
246
  if (messageLogBox) {
@@ -248,7 +252,7 @@ async function ensureLeaseValid(client, leaseInfo, messageLogBox, screen) {
248
252
  clearLine();
249
253
  console.log(chalk.yellow("⏱️ Lease expired. Renewing..."));
250
254
  }
251
- const renewal = await renewLease(client, leaseInfo?.leaseId);
255
+ const renewal = await renewLease(client, userAddress, leaseInfo?.leaseId);
252
256
  return {
253
257
  leaseId: renewal.leaseId,
254
258
  leaseExpiresAt: new Date(renewal.leaseExpiresAt),
@@ -276,6 +280,23 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
276
280
  let headerBox = null;
277
281
  let messageLogBox = null;
278
282
  let inputBox = null;
283
+ // Get userAddress from private key first (required for all chat operations)
284
+ try {
285
+ const privateKey = config.getPrivateKey();
286
+ if (privateKey) {
287
+ const account = privateKeyToAccount(privateKey);
288
+ userAddress = account.address;
289
+ }
290
+ else {
291
+ throw new Error("Private key not configured. Please run 'httpcat config' or set HTTPCAT_PRIVATE_KEY environment variable.");
292
+ }
293
+ }
294
+ catch (error) {
295
+ if (error instanceof Error && error.message.includes("Private key")) {
296
+ throw error;
297
+ }
298
+ throw new Error("Failed to get user address from private key. Please check your configuration.");
299
+ }
279
300
  // Join chat
280
301
  try {
281
302
  if (!jsonMode) {
@@ -286,24 +307,11 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
286
307
  console.log(chalk.dim("Joining general chat room..."));
287
308
  }
288
309
  }
289
- const joinResult = await joinChat(client, tokenIdentifier, jsonMode);
310
+ const joinResult = await joinChat(client, userAddress, tokenIdentifier, jsonMode);
290
311
  leaseInfo = {
291
312
  leaseId: joinResult.leaseId,
292
313
  leaseExpiresAt: new Date(joinResult.leaseExpiresAt),
293
314
  };
294
- // Initialize userAddress from config if available (fallback until first message)
295
- if (!userAddress) {
296
- try {
297
- const privateKey = config.getPrivateKey();
298
- if (privateKey) {
299
- const account = privateKeyToAccount(privateKey);
300
- userAddress = account.address;
301
- }
302
- }
303
- catch (error) {
304
- // Ignore - will be set from first message send
305
- }
306
- }
307
315
  if (jsonMode) {
308
316
  // JSON mode: output join result and stream messages as JSON
309
317
  console.log(JSON.stringify({
@@ -918,7 +926,7 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
918
926
  try {
919
927
  inputBox?.setValue("⏱️ Renewing lease...");
920
928
  screen?.render();
921
- const renewal = await renewLease(client, leaseInfo?.leaseId);
929
+ const renewal = await renewLease(client, userAddress, leaseInfo?.leaseId);
922
930
  leaseInfo = {
923
931
  leaseId: renewal.leaseId,
924
932
  leaseExpiresAt: new Date(renewal.leaseExpiresAt),
@@ -1260,7 +1268,7 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
1260
1268
  pulseIntervals.set(tempMessageId, pulseInterval);
1261
1269
  try {
1262
1270
  // Ensure lease is valid before sending
1263
- leaseInfo = await ensureLeaseValid(client, leaseInfo, messageLogBox || undefined, screen || undefined);
1271
+ leaseInfo = await ensureLeaseValid(client, userAddress, leaseInfo, messageLogBox || undefined, screen || undefined);
1264
1272
  if (headerBox) {
1265
1273
  updateHeaderBox(headerBox, leaseInfo, tokenIdentifier, true);
1266
1274
  screen?.render();
@@ -1270,7 +1278,7 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
1270
1278
  if (!ws || ws.readyState !== 1) {
1271
1279
  throw new Error("WebSocket connection lost. Please wait for reconnection.");
1272
1280
  }
1273
- const result = await sendChatMessage(client, trimmed, leaseInfo.leaseId);
1281
+ const result = await sendChatMessage(client, trimmed, leaseInfo.leaseId, userAddress);
1274
1282
  userAddress = result.author;
1275
1283
  // Track this message
1276
1284
  pendingMessages.set(result.messageId, tempMessageId);
@@ -1330,7 +1338,7 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
1330
1338
  case "/renew": {
1331
1339
  try {
1332
1340
  console.log(chalk.yellow("⏱️ Renewing lease..."));
1333
- const renewal = await renewLease(client, leaseInfo?.leaseId);
1341
+ const renewal = await renewLease(client, userAddress, leaseInfo?.leaseId);
1334
1342
  leaseInfo = {
1335
1343
  leaseId: renewal.leaseId,
1336
1344
  leaseExpiresAt: new Date(renewal.leaseExpiresAt),
@@ -1553,13 +1561,12 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
1553
1561
  currentInput = trimmed;
1554
1562
  try {
1555
1563
  // Ensure lease is valid before sending
1556
- leaseInfo = await ensureLeaseValid(client, leaseInfo, undefined, undefined);
1564
+ leaseInfo = await ensureLeaseValid(client, userAddress, leaseInfo, undefined, undefined);
1557
1565
  // Double-check websocket is still connected
1558
1566
  if (!ws || ws.readyState !== 1) {
1559
1567
  throw new Error("WebSocket connection lost. Please wait for reconnection.");
1560
1568
  }
1561
- const result = await sendChatMessage(client, trimmed, leaseInfo.leaseId);
1562
- userAddress = result.author;
1569
+ const result = await sendChatMessage(client, trimmed, leaseInfo.leaseId, userAddress);
1563
1570
  // Track this message
1564
1571
  const tempMessageId = `pending-${Date.now()}-${Math.random()}`;
1565
1572
  pendingMessages.set(result.messageId, tempMessageId);
@@ -1689,7 +1696,7 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
1689
1696
  case '/renew': {
1690
1697
  try {
1691
1698
  console.log(JSON.stringify({ type: 'renewing_lease' }));
1692
- const renewal = await renewLease(client, leaseInfo?.leaseId);
1699
+ const renewal = await renewLease(client, userAddress, leaseInfo?.leaseId);
1693
1700
  leaseInfo = {
1694
1701
  leaseId: renewal.leaseId,
1695
1702
  leaseExpiresAt: new Date(renewal.leaseExpiresAt),
@@ -1835,12 +1842,11 @@ export async function startChatStream(client, jsonMode = false, tokenIdentifier,
1835
1842
  // Send message
1836
1843
  isSending = true;
1837
1844
  try {
1838
- leaseInfo = await ensureLeaseValid(client, leaseInfo, undefined, undefined);
1845
+ leaseInfo = await ensureLeaseValid(client, userAddress, leaseInfo, undefined, undefined);
1839
1846
  if (!ws || ws.readyState !== 1) {
1840
1847
  throw new Error("WebSocket connection lost. Please wait for reconnection.");
1841
1848
  }
1842
- const result = await sendChatMessage(client, messageText, leaseInfo.leaseId);
1843
- userAddress = result.author;
1849
+ const result = await sendChatMessage(client, messageText, leaseInfo.leaseId, userAddress);
1844
1850
  // Track this message
1845
1851
  const tempMessageId = `pending-${Date.now()}-${Math.random()}`;
1846
1852
  pendingMessages.set(result.messageId, tempMessageId);