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/README.md CHANGED
@@ -1,22 +1,18 @@
1
1
  # CodeCrypto CLI
2
2
 
3
- CLI tool for CodeCrypto operations - Deploy, manage users, configure settings, and handle database operations.
3
+ CLI tool para desplegar aplicaciones Next.js/Express y smart contracts con Foundry.
4
4
 
5
5
  ## Instalación
6
6
 
7
- ### Usando NPX (sin instalación)
8
7
  ```bash
8
+ # Usando NPX (sin instalación)
9
9
  npx codecrypto-cli [command]
10
- ```
11
10
 
12
- ### Instalación Global
13
- ```bash
11
+ # Instalación global
14
12
  npm install -g codecrypto-cli
15
13
  codecrypto [command]
16
- ```
17
14
 
18
- ### Instalación Local (desarrollo)
19
- ```bash
15
+ # Desarrollo local
20
16
  git clone <repository>
21
17
  cd cli-cc
22
18
  npm install
@@ -24,527 +20,370 @@ npm run build
24
20
  npm link
25
21
  ```
26
22
 
27
- ## Comandos Disponibles
23
+ ## Comandos
28
24
 
29
- ### 📦 Deploy
25
+ ### 🔐 `auth` - Autenticación
30
26
 
31
- Despliega tu aplicación en diferentes entornos.
27
+ Autentica el CLI con el servidor CodeCrypto.
32
28
 
33
29
  ```bash
34
- # Despliegue básico
35
- codecrypto deploy
36
-
37
- # Despliegue con opciones
38
- codecrypto deploy --env prod --branch main --region us-west-2
39
-
40
- # Despliegue sin tests
41
- codecrypto deploy --skip-tests
42
-
43
- # Simulación (dry-run)
44
- codecrypto deploy --dry-run
30
+ codecrypto auth
31
+ codecrypto auth --force # Forzar renovación de token
45
32
  ```
46
33
 
47
- **Opciones:**
48
- - `-e, --env <environment>` - Entorno (dev, staging, prod). Default: `dev`
49
- - `-b, --branch <branch>` - Rama de Git. Default: `main`
50
- - `-r, --region <region>` - Región AWS. Default: `us-east-1`
51
- - `--skip-tests` - Omitir tests antes del deployment
52
- - `--dry-run` - Simular sin ejecutar
53
-
54
- **Ejemplos:**
55
- ```bash
56
- # Desplegar a producción desde rama release
57
- codecrypto deploy -e prod -b release
58
-
59
- # Desplegar a staging sin tests
60
- codecrypto deploy -e staging --skip-tests
61
-
62
- # Simular despliegue a producción
63
- codecrypto deploy -e prod --dry-run
64
- ```
34
+ **Funcionamiento:**
35
+ - Genera código de autenticación
36
+ - Abre navegador para autorizar
37
+ - Guarda token en `~/.codecrypto/token.json`
38
+ - Incluye certificados Docker en `adminGlobals`
65
39
 
66
40
  ---
67
41
 
68
- ### 👤 User
42
+ ### 🏥 `doctor` - Validación del Sistema
69
43
 
70
- Gestiona usuarios en el sistema.
71
-
72
- #### Crear Usuario
44
+ Valida todos los requisitos necesarios para desplegar.
73
45
 
74
46
  ```bash
75
- # Modo interactivo
76
- codecrypto user create --interactive
77
-
78
- # Con parámetros
79
- codecrypto user create -u john_doe -e john@example.com -r admin
80
-
81
- # Modo mixto (parámetros + interactivo)
82
- codecrypto user create -u john_doe --interactive
47
+ codecrypto doctor
48
+ codecrypto doctor --verbose
83
49
  ```
84
50
 
85
- **Opciones:**
86
- - `-u, --username <username>` - Nombre de usuario
87
- - `-e, --email <email>` - Correo electrónico
88
- - `-r, --role <role>` - Rol (admin, user, guest). Default: `user`
89
- - `--interactive` - Modo interactivo
90
-
91
- **Ejemplos:**
92
- ```bash
93
- # Crear admin
94
- codecrypto user create -u admin_user -e admin@company.com -r admin
95
-
96
- # Crear usuario guest
97
- codecrypto user create -u guest01 -e guest@example.com -r guest
98
- ```
99
-
100
- #### Listar Usuarios
101
-
102
- ```bash
103
- # Listar todos
104
- codecrypto user list
105
-
106
- # Filtrar por rol
107
- codecrypto user list -r admin
108
-
109
- # Limitar resultados
110
- codecrypto user list -l 5
111
- ```
112
-
113
- **Opciones:**
114
- - `-r, --role <role>` - Filtrar por rol
115
- - `-l, --limit <number>` - Límite de resultados. Default: `10`
116
-
117
- #### Eliminar Usuario
118
-
119
- ```bash
120
- # Con confirmación
121
- codecrypto user delete 123
122
-
123
- # Sin confirmación (forzar)
124
- codecrypto user delete 123 --force
125
- ```
126
-
127
- **Opciones:**
128
- - `-f, --force` - Omitir confirmación
51
+ **Valida:**
52
+ - Node.js y npm
53
+ - Docker y Docker Buildx
54
+ - Docker Hub authentication
55
+ - CodeCrypto token
56
+ - ✅ Certificados Docker (desde token.json)
57
+ - ✅ Git
58
+ - ✅ Foundry (forge, cast, anvil)
59
+ - Anvil corriendo (puerto 55556)
60
+ - Acceso a cuenta Anvil 0
129
61
 
130
62
  ---
131
63
 
132
- ### ⚙️ Config
133
-
134
- Gestiona la configuración del CLI.
135
-
136
- #### Set (Establecer valor)
137
-
138
- ```bash
139
- # Configuración local
140
- codecrypto config set api.url https://api.example.com
141
-
142
- # Configuración global
143
- codecrypto config set api.token my-secret-token --global
144
- ```
145
-
146
- **Opciones:**
147
- - `-g, --global` - Configuración global
64
+ ### 🐳 `deploy` - Despliegue de Aplicaciones
148
65
 
149
- **Ejemplos:**
150
- ```bash
151
- codecrypto config set default.region us-west-2
152
- codecrypto config set api.timeout 5000 --global
153
- ```
154
-
155
- #### Get (Obtener valor)
156
-
157
- ```bash
158
- codecrypto config get api.url
159
- codecrypto config get default.region
160
- ```
66
+ Despliega aplicaciones **Next.js** o **Express** usando Docker.
161
67
 
162
- #### List (Listar configuración)
68
+ **Detección automática:** Analiza `package.json` para detectar el tipo:
69
+ - Si tiene `next` → Next.js
70
+ - Si tiene `express` → Express
163
71
 
164
72
  ```bash
165
- # Configuración local
166
- codecrypto config list
73
+ # Básico
74
+ codecrypto deploy <project-path>
167
75
 
168
- # Configuración global
169
- codecrypto config list --global
76
+ # Con opciones
77
+ codecrypto deploy <project-path> [dest-folder] \
78
+ --deploy \
79
+ --service-name mi-app \
80
+ --port 3000 \
81
+ --domain-base proyectos.codecrypto.academy \
82
+ --env-file .env \
83
+ --image-version 1.0.0 \
84
+ --skip-build \
85
+ --no-push \
86
+ --skip-git-check
170
87
  ```
171
88
 
172
89
  **Opciones:**
173
- - `-g, --global` - Mostrar configuración global
90
+ - `<project-path>` - Ruta al proyecto (requerido)
91
+ - `[dest-folder]` - Carpeta destino para build Docker (default: `./docker-build`)
92
+ - `--deploy` - Desplegar en servidor remoto después del build
93
+ - `--service-name <name>` - Nombre del servicio para Traefik
94
+ - `--port <port>` - Puerto de la aplicación (default: `3000`)
95
+ - `--domain-base <domain>` - Dominio base (default: `proyectos.codecrypto.academy`)
96
+ - `--env-file <path>` - Archivo `.env` con variables de entorno
97
+ - `--image-version <version>` - Versión/tag de la imagen (sobrescribe package.json)
98
+ - `--skip-build` - Omitir `npm run build`
99
+ - `--no-push` - Construir pero no hacer push a Docker Hub
100
+ - `--skip-git-check` - Omitir verificación de estado Git
101
+
102
+ **Proceso:**
103
+ 1. Detecta tipo de proyecto (Next.js/Express)
104
+ 2. Valida estado Git (a menos que se omita)
105
+ 3. Build del proyecto (si no se omite)
106
+ 4. Genera Dockerfile optimizado
107
+ 5. Construye imagen multi-plataforma (linux/amd64, linux/arm64)
108
+ 6. Push a Docker Hub (si no se omite)
109
+ 7. Despliega en servidor remoto (si `--deploy`)
110
+
111
+ **Dockerfile generado:**
112
+ - **Next.js:** Usa `node:20-alpine`, copia `.next/standalone`, `.next/static`, `public`
113
+ - **Express:** Usa `node:20-alpine`, multi-stage build, solo dependencias de producción
114
+
115
+ **Certificados Docker:**
116
+ - Se leen desde `~/.codecrypto/token.json` → `adminGlobals`
117
+ - Keys: `docker-client/ca-pem`, `docker-client/cert.pem`, `docker-client/key.pem`
174
118
 
175
119
  ---
176
120
 
177
- ### 💾 Database (db)
178
-
179
- Operaciones de base de datos.
121
+ ### 🔷 `deploy-sc` - Despliegue de Smart Contracts
180
122
 
181
- #### Migraciones
123
+ Despliega smart contracts usando **Foundry**.
182
124
 
183
125
  ```bash
184
- # Ejecutar migraciones
185
- codecrypto db migrate
186
-
187
- # Ejecutar en producción
188
- codecrypto db migrate -e prod
126
+ # Básico
127
+ codecrypto deploy-sc <script-path>
189
128
 
190
- # Rollback última migración
191
- codecrypto db migrate --rollback
192
-
193
- # Rollback 3 migraciones
194
- codecrypto db migrate --rollback --steps 3
129
+ # Con opciones
130
+ codecrypto deploy-sc <script-path> \
131
+ --url http://localhost:8545 \
132
+ --private-key 0x... \
133
+ --account 0 \
134
+ --anvil \
135
+ --broadcast \
136
+ --verify \
137
+ --slow \
138
+ --debug
195
139
  ```
196
140
 
197
141
  **Opciones:**
198
- - `-e, --env <environment>` - Entorno. Default: `dev`
199
- - `--rollback` - Revertir migración
200
- - `--steps <number>` - Número de migraciones. Default: `all`
201
-
202
- #### Seed (Poblar datos)
142
+ - `<script-path>` - Ruta al script Foundry `.s.sol` (requerido)
143
+ - `-u, --url <rpc-url>` - URL RPC (default: `http://server.codecrypto.academy:8546`)
144
+ - `-k, --private-key <key>` - Clave privada (o usar `PRIVATE_KEY` env var)
145
+ - `--account <index>` - Índice de cuenta (para Anvil, usa `0`)
146
+ - `--anvil` - Forzar uso de cuenta Anvil 0 (ignora private-key)
147
+ - `--verify` - Verificar contrato en block explorer
148
+ - `--broadcast` - Transmitir transacción (default: `true`)
149
+ - `--slow` - Modo lento para deployment
150
+ - `--debug` - Mostrar información de debug
151
+
152
+ **Proceso:**
153
+ 1. Valida que el script existe y es `.s.sol`
154
+ 2. Detecta proyecto Foundry (busca `foundry.toml`)
155
+ 3. Ejecuta `forge script` con configuración
156
+ 4. Guarda resultados en `broadcast/`
157
+ 5. Sube transacciones a BD vía `/api/uploadSmartContract`
158
+
159
+ **Datos subidos a BD:**
160
+ - Email del usuario
161
+ - Carpeta del proyecto
162
+ - JSON completo de transacciones (`run-latest.json`)
163
+ - RPC URL usado
164
+ - Clave privada (o `account-{index}`)
203
165
 
204
- ```bash
205
- # Seed básico
206
- codecrypto db seed
207
-
208
- # Limpiar y seed
209
- codecrypto db seed --clear
210
-
211
- # Seed archivo específico
212
- codecrypto db seed -f users.sql
213
-
214
- # Seed en staging
215
- codecrypto db seed -e staging
216
- ```
166
+ ---
217
167
 
218
- **Opciones:**
219
- - `-e, --env <environment>` - Entorno. Default: `dev`
220
- - `-f, --file <file>` - Archivo seed específico
221
- - `--clear` - Limpiar datos existentes
168
+ ## Ejemplos de Uso
222
169
 
223
- #### Backup
170
+ ### Desplegar aplicación Next.js
224
171
 
225
172
  ```bash
226
- # Crear backup
227
- codecrypto db backup my-backup
228
-
229
- # Backup de producción
230
- codecrypto db backup prod-backup -e prod
173
+ # Build y push a Docker Hub
174
+ codecrypto deploy ../mi-app-nextjs
231
175
 
232
- # Backup sin comprimir
233
- codecrypto db backup test-backup --compress false
234
-
235
- # Especificar directorio
236
- codecrypto db backup daily-backup -o /backups/daily
176
+ # Build, push y deploy en servidor
177
+ codecrypto deploy ../mi-app-nextjs \
178
+ --deploy \
179
+ --service-name mi-app \
180
+ --env-file ../mi-app-nextjs/.env
237
181
  ```
238
182
 
239
- **Opciones:**
240
- - `-e, --env <environment>` - Entorno origen. Default: `prod`
241
- - `-o, --output <path>` - Directorio de salida. Default: `./backups`
242
- - `--compress` - Comprimir archivo. Default: `true`
243
-
244
- #### Restore
183
+ ### Desplegar aplicación Express
245
184
 
246
185
  ```bash
247
- # Restaurar en dev
248
- codecrypto db restore backup_2024-01-15.sql.gz
249
-
250
- # Restaurar en staging
251
- codecrypto db restore backup.sql -e staging
186
+ # Build y push
187
+ codecrypto deploy ../mi-api-express
252
188
 
253
- # Restaurar en prod (requiere --force)
254
- codecrypto db restore backup.sql -e prod --force
189
+ # Con variables de entorno
190
+ codecrypto deploy ../mi-api-express \
191
+ --env-file ../mi-api-express/.env \
192
+ --port 3000
255
193
  ```
256
194
 
257
- **Opciones:**
258
- - `-e, --env <environment>` - Entorno destino. Default: `dev`
259
- - `--force` - Omitir confirmación (requerido para prod)
260
-
261
- ---
262
-
263
- ## Ayuda
195
+ ### Desplegar Smart Contract
264
196
 
265
197
  ```bash
266
- # Ayuda general
267
- codecrypto --help
198
+ # En Anvil local
199
+ codecrypto deploy-sc ./script/Deploy.s.sol \
200
+ --url http://localhost:8545 \
201
+ --anvil \
202
+ --broadcast
268
203
 
269
- # Ayuda de comando específico
270
- codecrypto deploy --help
271
- codecrypto user --help
272
- codecrypto user create --help
273
- codecrypto db --help
274
- codecrypto db migrate --help
204
+ # En red remota con clave privada
205
+ codecrypto deploy-sc ./script/Deploy.s.sol \
206
+ --url http://server.codecrypto.academy:8546 \
207
+ --private-key 0x1234567890abcdef... \
208
+ --broadcast \
209
+ --verify
275
210
  ```
276
211
 
277
- ## Ejemplos de Uso Completo
212
+ ### Workflow completo
278
213
 
279
- ### Workflow de Deployment
280
214
  ```bash
281
- # 1. Configurar ambiente
282
- codecrypto config set api.url https://api.myapp.com
283
- codecrypto config set default.region us-east-1
215
+ # 1. Validar sistema
216
+ codecrypto doctor
284
217
 
285
- # 2. Ejecutar migraciones
286
- codecrypto db migrate -e staging
218
+ # 2. Autenticarse (si es necesario)
219
+ codecrypto auth
287
220
 
288
- # 3. Deploy a staging
289
- codecrypto deploy -e staging -b develop
221
+ # 3. Desplegar aplicación
222
+ codecrypto deploy ../mi-app --deploy
290
223
 
291
- # 4. Si todo OK, deploy a producción
292
- codecrypto deploy -e prod -b main
224
+ # 4. Desplegar smart contract
225
+ codecrypto deploy-sc ./script/Deploy.s.sol --anvil
293
226
  ```
294
227
 
295
- ### Setup Inicial de DB
296
- ```bash
297
- # 1. Crear backup de seguridad
298
- codecrypto db backup safety-backup -e prod
299
-
300
- # 2. Ejecutar migraciones
301
- codecrypto db migrate -e dev
302
-
303
- # 3. Poblar datos de prueba
304
- codecrypto db seed --clear
305
- ```
306
-
307
- ### Gestión de Usuarios
308
- ```bash
309
- # Crear varios usuarios
310
- codecrypto user create -u admin -e admin@co.com -r admin
311
- codecrypto user create -u user1 -e user1@co.com -r user
312
- codecrypto user create -u guest1 -e guest1@co.com -r guest
313
-
314
- # Listar usuarios admin
315
- codecrypto user list -r admin
316
-
317
- # Eliminar usuario
318
- codecrypto user delete 5 --force
319
- ```
228
+ ---
320
229
 
321
- ## Desarrollo
230
+ ## Estructura del Proyecto
322
231
 
323
- ### Estructura del Proyecto
324
232
  ```
325
233
  cli-cc/
326
234
  ├── src/
327
235
  │ ├── index.ts # Punto de entrada
328
236
  │ └── commands/
329
- │ ├── deploy.ts # Comando deploy
330
- │ ├── user.ts # Comando user
331
- │ ├── config.ts # Comando config
332
- │ └── database.ts # Comando db
237
+ │ ├── auth.ts # Autenticación
238
+ │ ├── deploy.ts # Deploy Next.js/Express
239
+ │ ├── deploy-sc.ts # Deploy Smart Contracts
240
+ │ └── doctor.ts # Validación del sistema
333
241
  ├── dist/ # Build output
334
242
  ├── package.json
335
243
  ├── tsconfig.json
336
244
  └── README.md
337
245
  ```
338
246
 
339
- ### Scripts de Desarrollo
247
+ ---
248
+
249
+ ## Desarrollo
340
250
 
341
251
  ```bash
342
252
  # Instalar dependencias
343
253
  npm install
344
254
 
345
- # Desarrollo (ejecutar sin compilar)
255
+ # Desarrollo (sin compilar)
346
256
  npm run dev -- deploy --help
347
257
 
348
258
  # Compilar
349
259
  npm run build
350
260
 
351
- # Probar compilado
352
- npm run test
353
-
354
- # Testear localmente con npm link
261
+ # Probar localmente
355
262
  npm link
356
263
  codecrypto --help
357
264
  ```
358
265
 
359
- ### Compilar y Probar
360
-
361
- ```bash
362
- # Build
363
- npm run build
364
-
365
- # Probar comando compilado
366
- node dist/index.js --help
367
- node dist/index.js deploy --dry-run
368
- node dist/index.js user create --interactive
369
- ```
370
-
371
- ## Publicación a NPM
372
-
373
- ### 1. Preparación
374
-
375
- Asegúrate de tener una cuenta en [npmjs.com](https://www.npmjs.com/) y estar logueado:
266
+ ---
376
267
 
377
- ```bash
378
- npm login
379
- ```
268
+ ## Configuración
380
269
 
381
- ### 2. Actualizar package.json
270
+ ### Token de autenticación
382
271
 
383
- Verifica que tu `package.json` tenga:
384
- - `name`: Nombre único en NPM (verifica disponibilidad en npmjs.com)
385
- - `version`: Versión semántica (ej: 1.0.0)
386
- - `description`: Descripción clara
387
- - `keywords`: Para búsquedas
388
- - `author`: Tu información
389
- - `license`: Tipo de licencia
390
- - `bin`: Configurado correctamente
391
- - `files`: Archivos a incluir (opcional)
272
+ Guardado en: `~/.codecrypto/token.json`
392
273
 
393
274
  ```json
394
275
  {
395
- "name": "codecrypto-cli",
396
- "version": "1.0.0",
397
- "files": ["dist", "README.md"],
398
- ...
276
+ "email": "usuario@example.com",
277
+ "token": "jwt-token",
278
+ "serverUrl": "http://server.codecrypto.academy",
279
+ "adminGlobals": [
280
+ {
281
+ "key": "docker-client/ca-pem",
282
+ "value": "..."
283
+ },
284
+ {
285
+ "key": "docker-client/cert.pem",
286
+ "value": "..."
287
+ },
288
+ {
289
+ "key": "docker-client/key.pem",
290
+ "value": "..."
291
+ }
292
+ ]
399
293
  }
400
294
  ```
401
295
 
402
- ### 3. Verificar el nombre
296
+ ### Variables de entorno
403
297
 
404
- ```bash
405
- # Verificar si el nombre está disponible
406
- npm search codecrypto-cli
407
- ```
298
+ El CLI puede leer variables de entorno de dos formas:
408
299
 
409
- Si está ocupado, cambia el nombre en `package.json`:
410
- ```json
411
- {
412
- "name": "@tu-usuario/codecrypto-cli"
413
- }
414
- ```
300
+ #### 1. Variables del sistema operativo
415
301
 
416
- ### 4. Build Final
302
+ Configura las variables en tu shell:
417
303
 
418
304
  ```bash
419
- npm run build
420
- ```
421
-
422
- ### 5. Probar el paquete localmente
423
-
424
- ```bash
425
- # Simular publicación (ver qué archivos se incluirán)
426
- npm pack
427
-
428
- # Esto crea un archivo .tgz que puedes inspeccionar
429
- # Descomprímelo y verifica el contenido
430
- ```
431
-
432
- ### 6. Publicar
433
-
434
- ```bash
435
- # Publicación pública
436
- npm publish
437
-
438
- # Si usas scoped package (@usuario/nombre)
439
- npm publish --access public
440
- ```
441
-
442
- ### 7. Verificar
305
+ # Linux/Mac
306
+ export CODECRYPTO_API_URL=http://server.codecrypto.academy:3000
307
+ export API_URL=http://server.codecrypto.academy:3000
443
308
 
444
- ```bash
445
- # Probar instalación
446
- npx codecrypto-cli@latest --help
309
+ # Windows (PowerShell)
310
+ $env:CODECRYPTO_API_URL="http://server.codecrypto.academy:3000"
311
+ $env:API_URL="http://server.codecrypto.academy:3000"
447
312
 
448
- # O con el nombre real de tu paquete
449
- npx tu-paquete --help
313
+ # Windows (CMD)
314
+ set CODECRYPTO_API_URL=http://server.codecrypto.academy:3000
315
+ set API_URL=http://server.codecrypto.academy:3000
450
316
  ```
451
317
 
452
- ### 8. Actualizar Versiones
318
+ #### 2. Archivo `.env` (recomendado)
453
319
 
454
- Cuando hagas cambios:
320
+ Crea un archivo `~/.codecrypto/.env` con tus variables:
455
321
 
456
322
  ```bash
457
- # Patch (1.0.0 -> 1.0.1) - bug fixes
458
- npm version patch
459
-
460
- # Minor (1.0.0 -> 1.1.0) - nuevas features
461
- npm version minor
462
-
463
- # Major (1.0.0 -> 2.0.0) - breaking changes
464
- npm version major
323
+ # El folder ~/.codecrypto se crea automáticamente cuando ejecutas 'codecrypto auth' por primera vez
324
+ # O puedes crearlo manualmente:
325
+ mkdir -p ~/.codecrypto
465
326
 
466
- # Publicar nueva versión
467
- npm publish
327
+ # Crear archivo .env
328
+ cat > ~/.codecrypto/.env << EOF
329
+ CODECRYPTO_API_URL=http://server.codecrypto.academy:3000
330
+ # O usar API_URL como alternativa
331
+ # API_URL=http://server.codecrypto.academy:3000
332
+ EOF
468
333
  ```
469
334
 
470
- ### Workflow Completo de Publicación
335
+ **Nota:** El folder `~/.codecrypto` se crea automáticamente la primera vez que ejecutas `codecrypto auth`, pero puedes crearlo manualmente antes si lo necesitas.
471
336
 
472
- ```bash
473
- # 1. Asegurarte que todo funciona
474
- npm run build
475
- npm run test
337
+ **Variables disponibles:**
338
+ - `CODECRYPTO_API_URL` o `API_URL` - URL del servidor API (default: `http://localhost:3000`)
476
339
 
477
- # 2. Login a NPM
478
- npm login
340
+ **Nota:** Las variables del sistema operativo tienen prioridad sobre el archivo `.env`.
479
341
 
480
- # 3. Verificar nombre disponible
481
- npm search codecrypto-cli
342
+ ---
482
343
 
483
- # 4. Publicar
484
- npm publish --access public
344
+ ## Requisitos
485
345
 
486
- # 5. Verificar
487
- npx codecrypto-cli --help
346
+ - Node.js >= 16.0.0
347
+ - Docker y Docker Buildx
348
+ - Git
349
+ - Foundry (forge, cast, anvil)
350
+ - Anvil corriendo en puerto 55556 (para smart contracts locales)
488
351
 
489
- # 6. Para actualizaciones futuras
490
- npm version patch
491
- npm publish
492
- ```
352
+ ---
493
353
 
494
- ### Despublicar (si es necesario)
354
+ ## Ayuda
495
355
 
496
356
  ```bash
497
- # Solo dentro de las primeras 72 horas
498
- npm unpublish codecrypto-cli@1.0.0
357
+ # Ayuda general
358
+ codecrypto --help
499
359
 
500
- # Despublicar todas las versiones (usar con cuidado)
501
- npm unpublish codecrypto-cli --force
360
+ # Ayuda de comando específico
361
+ codecrypto deploy --help
362
+ codecrypto deploy-sc --help
363
+ codecrypto auth --help
364
+ codecrypto doctor --help
502
365
  ```
503
366
 
504
- ## Mejores Prácticas
505
-
506
- 1. **Versionado Semántico**: Usa [semver](https://semver.org/)
507
- - MAJOR: Cambios incompatibles
508
- - MINOR: Nuevas funcionalidades compatibles
509
- - PATCH: Bug fixes
510
-
511
- 2. **README**: Mantén documentación actualizada
512
-
513
- 3. **CHANGELOG**: Documenta cambios en cada versión
367
+ ---
514
368
 
515
- 4. **Testing**: Prueba antes de publicar
369
+ ## Publicación a NPM
516
370
 
517
- 5. **Git Tags**: Crea tags para cada versión
518
- ```bash
519
- git tag v1.0.0
520
- git push --tags
521
- ```
371
+ ```bash
372
+ # 1. Build
373
+ npm run build
522
374
 
523
- ## Troubleshooting
375
+ # 2. Login
376
+ npm login
524
377
 
525
- ### Error: "command not found"
526
- - Verifica que `bin` en package.json apunte a `dist/index.js`
527
- - El archivo debe tener shebang: `#!/usr/bin/env node`
528
- - Asegúrate de compilar: `npm run build`
378
+ # 3. Publicar
379
+ npm publish
529
380
 
530
- ### Error: "permission denied"
531
- ```bash
532
- # Linux/Mac
533
- chmod +x dist/index.js
381
+ # 4. Actualizar versión
382
+ npm version patch|minor|major
383
+ npm publish
534
384
  ```
535
385
 
536
- ### Error al publicar
537
- - Verifica que estés logueado: `npm whoami`
538
- - El nombre no existe: Cambia el nombre en package.json
539
- - Necesitas acceso: Usa `--access public` para scoped packages
540
-
541
- ## Recursos
542
-
543
- - [Commander.js](https://github.com/tj/commander.js) - Framework CLI
544
- - [Chalk](https://github.com/chalk/chalk) - Colores en terminal
545
- - [Inquirer](https://github.com/SBoudrias/Inquirer.js) - Prompts interactivos
546
- - [Ora](https://github.com/sindresorhus/ora) - Spinners
547
- - [NPM Publishing Guide](https://docs.npmjs.com/cli/v10/commands/npm-publish)
386
+ ---
548
387
 
549
388
  ## Licencia
550
389