codecrypto-cli 1.0.9 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +238 -399
  2. package/dist/commands/auth.js +1 -1
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/deploy-sc.d.ts.map +1 -1
  5. package/dist/commands/deploy-sc.js +35 -18
  6. package/dist/commands/deploy-sc.js.map +1 -1
  7. package/dist/commands/deploy.d.ts.map +1 -1
  8. package/dist/commands/deploy.js +296 -97
  9. package/dist/commands/deploy.js.map +1 -1
  10. package/dist/index.js +65 -0
  11. package/dist/index.js.map +1 -1
  12. package/package.json +1 -1
  13. package/src/commands/auth.ts +1 -1
  14. package/src/commands/deploy-sc.ts +32 -18
  15. package/src/commands/deploy.ts +327 -107
  16. package/src/index.ts +37 -0
  17. package/Dockerfile +0 -15
  18. package/docker-build/Dockerfile +0 -18
  19. package/docker-build/standalone/.next/BUILD_ID +0 -1
  20. package/docker-build/standalone/.next/app-path-routes-manifest.json +0 -6
  21. package/docker-build/standalone/.next/build-manifest.json +0 -19
  22. package/docker-build/standalone/.next/package.json +0 -1
  23. package/docker-build/standalone/.next/prerender-manifest.json +0 -114
  24. package/docker-build/standalone/.next/required-server-files.json +0 -164
  25. package/docker-build/standalone/.next/routes-manifest.json +0 -68
  26. package/docker-build/standalone/.next/server/app/_global-error/page/app-paths-manifest.json +0 -3
  27. package/docker-build/standalone/.next/server/app/_global-error/page/build-manifest.json +0 -16
  28. package/docker-build/standalone/.next/server/app/_global-error/page/next-font-manifest.json +0 -6
  29. package/docker-build/standalone/.next/server/app/_global-error/page/react-loadable-manifest.json +0 -1
  30. package/docker-build/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +0 -4
  31. package/docker-build/standalone/.next/server/app/_global-error/page.js +0 -11
  32. package/docker-build/standalone/.next/server/app/_global-error/page.js.map +0 -5
  33. package/docker-build/standalone/.next/server/app/_global-error/page.js.nft.json +0 -1
  34. package/docker-build/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +0 -2
  35. package/docker-build/standalone/.next/server/app/_global-error.html +0 -2
  36. package/docker-build/standalone/.next/server/app/_global-error.meta +0 -15
  37. package/docker-build/standalone/.next/server/app/_global-error.rsc +0 -13
  38. package/docker-build/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +0 -5
  39. package/docker-build/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +0 -13
  40. package/docker-build/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +0 -6
  41. package/docker-build/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +0 -4
  42. package/docker-build/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +0 -1
  43. package/docker-build/standalone/.next/server/app/_not-found/page/app-paths-manifest.json +0 -3
  44. package/docker-build/standalone/.next/server/app/_not-found/page/build-manifest.json +0 -16
  45. package/docker-build/standalone/.next/server/app/_not-found/page/next-font-manifest.json +0 -11
  46. package/docker-build/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +0 -1
  47. package/docker-build/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +0 -4
  48. package/docker-build/standalone/.next/server/app/_not-found/page.js +0 -14
  49. package/docker-build/standalone/.next/server/app/_not-found/page.js.map +0 -5
  50. package/docker-build/standalone/.next/server/app/_not-found/page.js.nft.json +0 -1
  51. package/docker-build/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +0 -2
  52. package/docker-build/standalone/.next/server/app/_not-found.html +0 -1
  53. package/docker-build/standalone/.next/server/app/_not-found.meta +0 -16
  54. package/docker-build/standalone/.next/server/app/_not-found.rsc +0 -14
  55. package/docker-build/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +0 -14
  56. package/docker-build/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +0 -6
  57. package/docker-build/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +0 -5
  58. package/docker-build/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
  59. package/docker-build/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -4
  60. package/docker-build/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -2
  61. package/docker-build/standalone/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
  62. package/docker-build/standalone/.next/server/app/favicon.ico/route/build-manifest.json +0 -11
  63. package/docker-build/standalone/.next/server/app/favicon.ico/route.js +0 -6
  64. package/docker-build/standalone/.next/server/app/favicon.ico/route.js.map +0 -5
  65. package/docker-build/standalone/.next/server/app/favicon.ico/route.js.nft.json +0 -1
  66. package/docker-build/standalone/.next/server/app/favicon.ico.body +0 -0
  67. package/docker-build/standalone/.next/server/app/favicon.ico.meta +0 -1
  68. package/docker-build/standalone/.next/server/app/index.html +0 -1
  69. package/docker-build/standalone/.next/server/app/index.meta +0 -14
  70. package/docker-build/standalone/.next/server/app/index.rsc +0 -16
  71. package/docker-build/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -5
  72. package/docker-build/standalone/.next/server/app/index.segments/_full.segment.rsc +0 -16
  73. package/docker-build/standalone/.next/server/app/index.segments/_head.segment.rsc +0 -6
  74. package/docker-build/standalone/.next/server/app/index.segments/_index.segment.rsc +0 -5
  75. package/docker-build/standalone/.next/server/app/index.segments/_tree.segment.rsc +0 -4
  76. package/docker-build/standalone/.next/server/app/page/app-paths-manifest.json +0 -3
  77. package/docker-build/standalone/.next/server/app/page/build-manifest.json +0 -16
  78. package/docker-build/standalone/.next/server/app/page/next-font-manifest.json +0 -11
  79. package/docker-build/standalone/.next/server/app/page/react-loadable-manifest.json +0 -1
  80. package/docker-build/standalone/.next/server/app/page/server-reference-manifest.json +0 -4
  81. package/docker-build/standalone/.next/server/app/page.js +0 -16
  82. package/docker-build/standalone/.next/server/app/page.js.map +0 -5
  83. package/docker-build/standalone/.next/server/app/page.js.nft.json +0 -1
  84. package/docker-build/standalone/.next/server/app/page_client-reference-manifest.js +0 -2
  85. package/docker-build/standalone/.next/server/app-paths-manifest.json +0 -6
  86. package/docker-build/standalone/.next/server/chunks/66d90_example-navidad__next-internal_server_app_favicon_ico_route_actions_a30dceae.js +0 -3
  87. package/docker-build/standalone/.next/server/chunks/[externals]_next_dist_03fe02e0._.js +0 -3
  88. package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__4b49000d._.js +0 -21
  89. package/docker-build/standalone/.next/server/chunks/[turbopack]_runtime.js +0 -795
  90. package/docker-build/standalone/.next/server/chunks/ssr/10072_infra_example-navidad__next-internal_server_app_page_actions_a387aef9.js +0 -3
  91. package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_example-navidad_377109b0._.js +0 -3
  92. package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_example-navidad_90799f30._.js +0 -4
  93. package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_example-navidad_app_b9057478._.js +0 -3
  94. package/docker-build/standalone/.next/server/chunks/ssr/66d90_example-navidad__next-internal_server_app__global-error_page_actions_a079475f.js +0 -3
  95. package/docker-build/standalone/.next/server/chunks/ssr/66d90_example-navidad__next-internal_server_app__not-found_page_actions_ac88cec2.js +0 -3
  96. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_51be1544._.js +0 -4
  97. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_8dba0557._.js +0 -6
  98. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_client_components_41330064._.js +0 -3
  99. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_client_components_builtin_forbidden_ff3a0457.js +0 -3
  100. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_client_components_builtin_global-error_e0d57e6e.js +0 -3
  101. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_client_components_builtin_unauthorized_f1c47e13.js +0 -3
  102. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_d332f292._.js +0 -3
  103. package/docker-build/standalone/.next/server/chunks/ssr/77a20_next_dist_esm_build_templates_app-page_cf6afba1.js +0 -4
  104. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__02f3f427._.js +0 -3
  105. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__2f460610._.js +0 -4
  106. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__4722e53c._.js +0 -3
  107. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__53b749fa._.js +0 -3
  108. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__61942f2d._.js +0 -3
  109. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__7707ad1b._.js +0 -3
  110. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__864cadbf._.js +0 -10
  111. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__9939e281._.js +0 -3
  112. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__b4b0aa8a._.js +0 -3
  113. package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__d2b7072b._.js +0 -3
  114. package/docker-build/standalone/.next/server/chunks/ssr/[turbopack]_runtime.js +0 -795
  115. package/docker-build/standalone/.next/server/functions-config-manifest.json +0 -4
  116. package/docker-build/standalone/.next/server/middleware-build-manifest.js +0 -20
  117. package/docker-build/standalone/.next/server/middleware-manifest.json +0 -6
  118. package/docker-build/standalone/.next/server/next-font-manifest.js +0 -1
  119. package/docker-build/standalone/.next/server/next-font-manifest.json +0 -15
  120. package/docker-build/standalone/.next/server/pages/404.html +0 -1
  121. package/docker-build/standalone/.next/server/pages/500.html +0 -2
  122. package/docker-build/standalone/.next/server/pages-manifest.json +0 -4
  123. package/docker-build/standalone/.next/server/server-reference-manifest.js +0 -1
  124. package/docker-build/standalone/.next/server/server-reference-manifest.json +0 -5
  125. package/docker-build/standalone/.next/static/_NbfI2TKfapiyxsQgIG3h/_buildManifest.js +0 -11
  126. package/docker-build/standalone/.next/static/_NbfI2TKfapiyxsQgIG3h/_clientMiddlewareManifest.json +0 -1
  127. package/docker-build/standalone/.next/static/_NbfI2TKfapiyxsQgIG3h/_ssgManifest.js +0 -1
  128. package/docker-build/standalone/.next/static/chunks/57d1af92f5dc15fa.js +0 -1
  129. package/docker-build/standalone/.next/static/chunks/6ae71d5e8ea4d1eb.js +0 -1
  130. package/docker-build/standalone/.next/static/chunks/70977d70c9306213.js +0 -1
  131. package/docker-build/standalone/.next/static/chunks/777dac7104fe2a30.js +0 -5
  132. package/docker-build/standalone/.next/static/chunks/a6dad97d9634a72d.js +0 -1
  133. package/docker-build/standalone/.next/static/chunks/a6dad97d9634a72d.js.map +0 -1
  134. package/docker-build/standalone/.next/static/chunks/d6aec49b013224a2.css +0 -3
  135. package/docker-build/standalone/.next/static/chunks/turbopack-0ce517fb6224c1f0.js +0 -4
  136. package/docker-build/standalone/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  137. package/docker-build/standalone/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  138. package/docker-build/standalone/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  139. package/docker-build/standalone/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  140. package/docker-build/standalone/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  141. package/docker-build/standalone/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  142. package/docker-build/standalone/.next/static/media/favicon.0b3bf435.ico +0 -0
  143. package/docker-build/standalone/package.json +0 -26
  144. package/docker-build/standalone/public/file.svg +0 -1
  145. package/docker-build/standalone/public/globe.svg +0 -1
  146. package/docker-build/standalone/public/next.svg +0 -1
  147. package/docker-build/standalone/public/vercel.svg +0 -1
  148. package/docker-build/standalone/public/window.svg +0 -1
  149. package/docker-build/standalone/server.js +0 -38
  150. package/token.json +0 -69
package/dist/index.js CHANGED
@@ -1,11 +1,76 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
3
36
  Object.defineProperty(exports, "__esModule", { value: true });
4
37
  const commander_1 = require("commander");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const os = __importStar(require("os"));
5
41
  const deploy_1 = require("./commands/deploy");
6
42
  const deploy_sc_1 = require("./commands/deploy-sc");
7
43
  const auth_1 = require("./commands/auth");
8
44
  const doctor_1 = require("./commands/doctor");
45
+ // Cargar variables de entorno desde ~/.codecrypto/.env si existe
46
+ function loadEnvFile() {
47
+ const homeDir = os.homedir();
48
+ const codecryptoDir = path.join(homeDir, '.codecrypto');
49
+ const envFilePath = path.join(codecryptoDir, '.env');
50
+ // Si el archivo .env existe, cargarlo
51
+ if (fs.existsSync(envFilePath)) {
52
+ const envContent = fs.readFileSync(envFilePath, 'utf-8');
53
+ const envLines = envContent.split('\n');
54
+ for (const line of envLines) {
55
+ const trimmed = line.trim();
56
+ // Ignorar comentarios y líneas vacías
57
+ if (!trimmed || trimmed.startsWith('#'))
58
+ continue;
59
+ const equalIndex = trimmed.indexOf('=');
60
+ if (equalIndex === -1)
61
+ continue;
62
+ const key = trimmed.substring(0, equalIndex).trim();
63
+ const value = trimmed.substring(equalIndex + 1).trim();
64
+ // Solo establecer si no está ya definida en process.env (las variables del sistema tienen prioridad)
65
+ if (!process.env[key]) {
66
+ process.env[key] = value;
67
+ }
68
+ }
69
+ }
70
+ // Si el folder no existe, se creará automáticamente cuando se ejecute 'auth' por primera vez
71
+ }
72
+ // Cargar .env antes de ejecutar comandos
73
+ loadEnvFile();
9
74
  const program = new commander_1.Command();
10
75
  program
11
76
  .name('codecrypto')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,8CAAkD;AAClD,oDAAuD;AACvD,0CAA8C;AAC9C,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,2BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,8CAAkD;AAClD,oDAAuD;AACvD,0CAA8C;AAC9C,8CAAkD;AAElD,iEAAiE;AACjE,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAErD,sCAAsC;IACtC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,sCAAsC;YACtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAElD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,UAAU,KAAK,CAAC,CAAC;gBAAE,SAAS;YAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEvD,qGAAqG;YACrG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,6FAA6F;AAC/F,CAAC;AAED,yCAAyC;AACzC,WAAW,EAAE,CAAC;AAEd,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qBAAqB;AACrB,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,2BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codecrypto-cli",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "CLI tool for CodeCrypto operations",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -25,7 +25,7 @@ interface TokenVerificationResponse {
25
25
  error?: string;
26
26
  }
27
27
 
28
- const API_BASE_URL = 'http://localhost:3000';
28
+ const API_BASE_URL = process.env.CODECRYPTO_API_URL || process.env.API_URL || 'http://localhost:3000';
29
29
  const POLL_INTERVAL = 3000; // 3 segundos
30
30
  const MAX_POLL_ATTEMPTS = 100; // Máximo 5 minutos (100 * 3 segundos)
31
31
 
@@ -10,7 +10,7 @@ export const deployScCommand = new Command('deploy-sc')
10
10
  .description('Deploy smart contract using Foundry')
11
11
  .argument('<script-path>', 'Path to the Foundry deployment script')
12
12
  .option('-u, --url <rpc-url>', 'RPC URL of the blockchain', 'http://server.codecrypto.academy:8546')
13
- .option('-k, --private-key <key>', 'Private key for deployment (or use PRIVATE_KEY env var)')
13
+ .option('-k, --private-key <key>', 'Private key for deployment (required unless using --anvil or --account)')
14
14
  .option('--account <index>', 'Account index to use (for Anvil, use 0 for the default unlocked account)')
15
15
  .option('--anvil', 'Force use of Anvil account 0 (ignores private-key)')
16
16
  .option('--verify', 'Verify contract on block explorer', false)
@@ -80,8 +80,6 @@ export const deployScCommand = new Command('deploy-sc')
80
80
  // Agregar private key si se proporciona
81
81
  if (options.privateKey) {
82
82
  env.PRIVATE_KEY = options.privateKey;
83
- } else if (!process.env.PRIVATE_KEY) {
84
- console.warn(chalk.yellow('⚠️ No se proporcionó PRIVATE_KEY. Asegúrate de tenerla configurada en el entorno.'));
85
83
  }
86
84
 
87
85
  // Construir comando forge script
@@ -101,32 +99,36 @@ export const deployScCommand = new Command('deploy-sc')
101
99
  options.anvil === true;
102
100
 
103
101
  // Agregar private key o account según el caso - REQUERIDO
104
- const privateKey = options.privateKey || process.env.PRIVATE_KEY;
105
-
106
102
  // Si se especifica explícitamente --account, usarlo
107
103
  if (options.account !== undefined) {
108
104
  forgeArgs.push('--account', String(options.account));
109
- if (privateKey) {
110
- console.warn(chalk.yellow('⚠️ Se proporcionó PRIVATE_KEY pero se está usando --account. Se ignora la PRIVATE_KEY.'));
105
+ if (options.privateKey) {
106
+ console.warn(chalk.yellow('⚠️ Se proporcionó --private-key pero se está usando --account. Se ignora la --private-key.'));
107
+ }
108
+ } else if (options.anvil) {
109
+ // Si se usa --anvil, usar cuenta 0
110
+ forgeArgs.push('--account', '0');
111
+ if (options.privateKey) {
112
+ console.warn(chalk.yellow('⚠️ Se proporcionó --private-key pero se está usando --anvil. Se ignora la --private-key.'));
111
113
  }
112
- } else if (privateKey) {
113
- // Usar private key proporcionada (preferido)
114
- forgeArgs.push('--private-key', privateKey);
114
+ } else if (options.privateKey) {
115
+ // Usar private key proporcionada
116
+ forgeArgs.push('--private-key', options.privateKey);
115
117
  } else if (isAnvilLocal) {
116
- // Para Anvil, si no se proporciona private key, usar cuenta 0 como fallback
117
- console.warn(chalk.yellow('⚠️ No se proporcionó PRIVATE_KEY.'));
118
+ // Para Anvil local, si no se proporciona private key, usar cuenta 0 como fallback
119
+ console.warn(chalk.yellow('⚠️ No se proporcionó --private-key.'));
118
120
  console.warn(chalk.yellow(' Usando cuenta 0 de Anvil (--account 0) como alternativa.'));
119
121
  console.warn(chalk.yellow(' Recomendado: Proporciona --private-key para mayor control.'));
120
122
  forgeArgs.push('--account', '0');
121
123
  } else {
122
124
  // ERROR: Se requiere private key para redes remotas
123
- console.error(chalk.red('\n❌ Error: Se requiere PRIVATE_KEY para desplegar.'));
124
- console.error(chalk.red(' Para Anvil: usa --account <index> o proporciona --private-key'));
125
- console.error(chalk.red(' Para otras redes: proporciona --private-key o establece PRIVATE_KEY en el entorno'));
125
+ console.error(chalk.red('\n❌ Error: Se requiere --private-key para desplegar.'));
126
+ console.error(chalk.red(' Para Anvil: usa --account <index> o --anvil'));
127
+ console.error(chalk.red(' Para otras redes: proporciona --private-key'));
126
128
  console.error(chalk.cyan('\n Ejemplos:'));
127
129
  console.error(chalk.cyan(' --private-key 0x...'));
128
130
  console.error(chalk.cyan(' --account 0 (solo para Anvil)'));
129
- console.error(chalk.cyan(' export PRIVATE_KEY=0x...'));
131
+ console.error(chalk.cyan(' --anvil (usa cuenta 0 de Anvil)'));
130
132
  process.exit(1);
131
133
  }
132
134
 
@@ -174,11 +176,23 @@ export const deployScCommand = new Command('deploy-sc')
174
176
  if (options.broadcast) {
175
177
  const uploadSpinner = ora('Uploading deployment results to database...').start();
176
178
  try {
179
+ // Determinar qué privateKey/account se usó para el upload
180
+ let privateKeyForUpload: string | null = null;
181
+ if (options.privateKey) {
182
+ privateKeyForUpload = options.privateKey;
183
+ } else if (options.account !== undefined) {
184
+ privateKeyForUpload = `account-${options.account}`;
185
+ } else if (options.anvil) {
186
+ privateKeyForUpload = 'account-0';
187
+ } else if (isAnvilLocal && !options.privateKey) {
188
+ privateKeyForUpload = 'account-0';
189
+ }
190
+
177
191
  await uploadDeploymentResults({
178
192
  scriptPath: scriptRelativePath,
179
193
  foundryProjectDir,
180
194
  rpcUrl: options.url,
181
- privateKey: privateKey || (options.account !== undefined ? `account-${options.account}` : null),
195
+ privateKey: privateKeyForUpload,
182
196
  debug: options.debug || false,
183
197
  });
184
198
  uploadSpinner.succeed('Deployment results uploaded successfully');
@@ -245,7 +259,7 @@ async function uploadDeploymentResults(config: {
245
259
  }
246
260
 
247
261
  const email = tokenData.email;
248
- const serverUrl = tokenData.serverUrl || 'http://localhost:3000';
262
+ const serverUrl = tokenData.serverUrl || process.env.CODECRYPTO_API_URL || process.env.API_URL || 'http://localhost:3000';
249
263
  const token = tokenData.token;
250
264
 
251
265
  if (!email) {