indraq_cli 1.9.0 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +549 -1175
  2. package/cloud-api/dist/index.js +92 -17
  3. package/cloud-api/dist/index.js.map +1 -0
  4. package/cloud-api/node_modules/.package-lock.json +4 -4
  5. package/cloud-api/node_modules/@aws-sdk/client-iam/dist-cjs/index.js +1 -1
  6. package/cloud-api/node_modules/@aws-sdk/client-iam/package.json +1 -1
  7. package/cloud-api/package-lock.json +5 -5
  8. package/cloud-api/package.json +1 -1
  9. package/cloud-api/src/index.ts +77 -12
  10. package/dist/cli/help-content.d.ts.map +1 -1
  11. package/dist/cli/help-content.js +5 -2
  12. package/dist/cli/help-content.js.map +1 -1
  13. package/dist/modules/cloud/config/cloud-config.d.ts +1 -1
  14. package/dist/modules/cloud/config/cloud-config.js +1 -1
  15. package/dist/modules/cloud/services/cloud-jenkins.service.d.ts +13 -1
  16. package/dist/modules/cloud/services/cloud-jenkins.service.d.ts.map +1 -1
  17. package/dist/modules/cloud/services/cloud-jenkins.service.js +102 -6
  18. package/dist/modules/cloud/services/cloud-jenkins.service.js.map +1 -1
  19. package/dist/modules/cloud/services/managed-aws-credential.service.d.ts.map +1 -1
  20. package/dist/modules/cloud/services/managed-aws-credential.service.js +11 -4
  21. package/dist/modules/cloud/services/managed-aws-credential.service.js.map +1 -1
  22. package/dist/modules/jenkins/commands/admin.command.d.ts +3 -0
  23. package/dist/modules/jenkins/commands/admin.command.d.ts.map +1 -1
  24. package/dist/modules/jenkins/commands/admin.command.js +91 -1
  25. package/dist/modules/jenkins/commands/admin.command.js.map +1 -1
  26. package/dist/modules/jenkins/index.d.ts.map +1 -1
  27. package/dist/modules/jenkins/index.js +3 -0
  28. package/dist/modules/jenkins/index.js.map +1 -1
  29. package/dist/modules/users/commands/user.command.d.ts.map +1 -1
  30. package/dist/modules/users/commands/user.command.js +179 -34
  31. package/dist/modules/users/commands/user.command.js.map +1 -1
  32. package/dist/modules/users/providers/aws-user.provider.d.ts.map +1 -1
  33. package/dist/modules/users/providers/aws-user.provider.js +9 -2
  34. package/dist/modules/users/providers/aws-user.provider.js.map +1 -1
  35. package/dist/modules/users/providers/jenkins-user.provider.d.ts +7 -3
  36. package/dist/modules/users/providers/jenkins-user.provider.d.ts.map +1 -1
  37. package/dist/modules/users/providers/jenkins-user.provider.js +60 -14
  38. package/dist/modules/users/providers/jenkins-user.provider.js.map +1 -1
  39. package/dist/modules/users/providers/npm-user.provider.d.ts.map +1 -1
  40. package/dist/modules/users/providers/npm-user.provider.js +3 -1
  41. package/dist/modules/users/providers/npm-user.provider.js.map +1 -1
  42. package/package.json +4 -3
package/README.md CHANGED
@@ -1,1517 +1,891 @@
1
1
  # IndraQ CLI
2
2
 
3
- IndraQ CLI is a cloud-first developer and DevOps command-line platform for creating projects, configuring reusable infrastructure credentials, managing users, and reconciling deployments across GHCR, Jenkins, AWS Route53, and Nginx Proxy Manager.
3
+ **One CLI for project setup, shared infrastructure, access control, Jenkins, AWS Route53, Nginx Proxy Manager, GHCR, Docker and deployments.**
4
4
 
5
- The goal is simple: developers should work with understandable names such as `production`, `staging`, `api.example.com`, and `order-service` instead of remembering server IP addresses, Jenkins details, registry paths, or provider credentials for every project.
5
+ > This guide matches **IndraQ CLI v1.9.1**.
6
6
 
7
- ## What IndraQ manages
7
+ **Jump to:** [Quick start](#quick-start) · [Recommended workflow](#recommended-workflow-in-chronological-order) · [Command reference](#command-reference) · [Common flows](#common-real-world-flows) · [Security](#security-model) · [Troubleshooting](#troubleshooting)
8
8
 
9
- IndraQ has two kinds of configuration:
9
+ IndraQ CLI is built to remove the repetitive DevOps work developers normally have to remember or perform manually. Instead of opening Jenkins, AWS, Nginx Proxy Manager and multiple configuration files for every project, you use one consistent CLI from your terminal.
10
10
 
11
- ### User-level reusable credentials
11
+ A developer can go from a project folder to a deployment with a workflow such as:
12
12
 
13
- Each IndraQ user owns their own provider credentials. They can reuse the same credentials across all projects they can access.
14
-
15
- Supported reusable providers:
16
-
17
- - AWS
18
- - Nginx Proxy Manager (NPM)
19
- - Jenkins Development
20
- - Jenkins Production
21
- - GitHub Container Registry (GHCR)
13
+ ```text
14
+ login
15
+
16
+ configure reusable credentials once
17
+
18
+ init / register / link a project
19
+
20
+ prebuild infrastructure
21
+
22
+ deploy
23
+ ```
22
24
 
23
- Credentials are stored in IndraQ Cloud. They are not copied into every project.
25
+ The CLI keeps **user credentials** separate from **project infrastructure**, so the same AWS, Jenkins, NPM and GHCR credentials can be reused across every project the user is allowed to access.
24
26
 
25
- ### Project-level infrastructure
27
+ ---
26
28
 
27
- Each project stores only the infrastructure associated with that project, for example:
29
+ ## Why use IndraQ?
28
30
 
29
- - GHCR image repository
30
- - Jenkins deployment job
31
- - Route53 record
32
- - Route53 routing policy
33
- - Route53 health checks
34
- - NPM proxy host
35
- - selected shared environment
36
- - host/container ports
31
+ | Problem without IndraQ | What IndraQ does |
32
+ | --- | --- |
33
+ | Developers remember IPs, ports, Jenkins jobs and registry paths | Uses named environments and stored project associations |
34
+ | Provider credentials are copied between projects | Stores reusable credentials once in IndraQ Cloud |
35
+ | New projects need repetitive folder, Docker and environment setup | `indraq init` scaffolds the project safely |
36
+ | DNS, proxy and Jenkins setup drift apart | `indraq prebuild` reconciles them as one workflow |
37
+ | User access has to be changed in several systems | Unified user create/update/delete synchronizes providers |
38
+ | Jenkins jobs require opening the browser and remembering parameters | CLI can discover, prompt for and run any visible pipeline |
39
+ | AWS keys are difficult to recover or rotate safely | IndraQ can store managed IAM credentials encrypted and rotate them |
40
+ | Nobody knows who changed infrastructure | Manager/admin operations are audited in IndraQ Cloud |
37
41
 
38
- A local IndraQ project keeps the Cloud project ID in `.indraq/project.json`. Provider secrets are not stored in the project folder.
42
+ The result is not just fewer commands. The important benefit is **repeatability**: two developers following the same IndraQ workflow should reach the same infrastructure state without having to know every provider-specific detail.
39
43
 
40
44
  ---
41
45
 
42
- # 1. Roles and permissions
46
+ ## The mental model
43
47
 
44
- IndraQ Cloud supports three roles.
48
+ IndraQ is easier to understand if you remember three things.
45
49
 
46
- | Role | Main access |
47
- | --- | --- |
48
- | `user` | View the organization project catalog, create projects, configure their own provider credentials, use shared environments, run prebuild/deploy only on projects where they have WRITE access, retrieve/rotate their own managed AWS IAM credential |
49
- | `manager` | Everything a user can do, plus create/manage normal users, rotate managed users' AWS keys, update/delete Cloud projects with a reason, manage project membership/resource access, and view audit logs |
50
- | `admin` | Full access, including create managers/admins, change roles, rotate any managed AWS key, manage projects/members/resource access, manage shared environments and Route53 health checks, configure AWS policy mappings, and view audit logs |
50
+ ### 1. Your reusable provider credentials
51
51
 
52
- Important rules:
52
+ Each IndraQ user can store their own credentials for:
53
53
 
54
- - Managers can create normal users only.
55
- - Only admins can create another manager or admin.
56
- - Only admins can change a user's IndraQ role.
57
- - Only admins can create/update/delete shared environments.
58
- - Every user has their own AWS/NPM/Jenkins/GHCR provider credentials.
59
- - Shared environments are visible to authenticated users, but only admins manage them.
60
- - Route53 health checks can be listed/selected by users and managers, but only admins create/delete them.
61
- - Organization projects are visible to every authenticated user; VIEW vs WRITE controls whether infrastructure can be changed.
54
+ - AWS
55
+ - Nginx Proxy Manager (NPM)
56
+ - Jenkins Development
57
+ - Jenkins Production
58
+ - GitHub Container Registry (GHCR)
62
59
 
63
- ---
60
+ They are stored in IndraQ Cloud and reused across projects. They are not copied into every repository.
64
61
 
65
- # 2. System architecture
62
+ ### 2. Shared environments
66
63
 
67
- A typical installation looks like this:
64
+ Admins can define friendly environment names that point to server targets, for example:
68
65
 
69
66
  ```text
70
- Developer workstation
71
- |
72
- | indraq CLI
73
- v
74
- IndraQ Cloud API
75
- |
76
- +-- PostgreSQL
77
- |
78
- +-- user credentials
79
- | +-- AWS
80
- | +-- NPM
81
- | +-- Jenkins DEV
82
- | +-- Jenkins PROD
83
- | +-- GHCR
84
- |
85
- +-- shared environments
86
- |
87
- +-- projects
88
- +-- GHCR image
89
- +-- Jenkins job
90
- +-- Route53 record / health checks
91
- +-- NPM proxy
67
+ production → 10.0.0.10
68
+ production-backup → 10.0.0.11
69
+ staging → 10.0.1.10
70
+ qa → 10.0.2.20
92
71
  ```
93
72
 
94
- Example shared environments:
73
+ Developers select `production` or `staging` instead of remembering the IP address.
74
+
75
+ ### 3. Project infrastructure
76
+
77
+ A Cloud project can remember associations such as:
95
78
 
96
79
  ```text
97
- production-api -> 10.0.0.10
98
- production-backup -> 10.0.0.11
99
- staging -> 10.0.1.10
100
- qa -> 10.0.2.20
101
- client-a -> 192.0.2.25
80
+ Project
81
+ ├── GHCR image
82
+ ├── Jenkins deployment job
83
+ ├── Route53 record
84
+ ├── Route53 routing / health checks
85
+ ├── NPM proxy host
86
+ ├── environment
87
+ └── ports / deployment metadata
102
88
  ```
103
89
 
104
- Environment names are completely arbitrary. There is no fixed `PRIMARY` or `SECONDARY` environment type.
90
+ The local project normally needs only its Cloud project reference in:
105
91
 
106
- For a Route53 FAILOVER record, the user chooses which environment acts as PRIMARY and which acts as SECONDARY for that particular DNS record.
92
+ ```text
93
+ .indraq/project.json
94
+ ```
107
95
 
108
96
  ---
109
97
 
110
- # 3. Requirements
98
+ ## Roles and permissions
111
99
 
112
- ## CLI workstation
100
+ | Role | Typical responsibility |
101
+ | --- | --- |
102
+ | `user` | Work on permitted projects, configure personal providers, prebuild/deploy, use shared environments and manage their own supported credentials |
103
+ | `manager` | Everything a user can do, plus manage normal users, project membership/resource access, managed user AWS keys and audit logs |
104
+ | `admin` | Full organization control, including managers/admins, role changes, shared environments and admin-only Route53 health-check operations |
113
105
 
114
- Required:
106
+ Important role rules:
115
107
 
116
- - Node.js 22 or newer
117
- - npm
118
- - Git
108
+ - Managers can create and manage normal `user` accounts.
109
+ - Only admins can create managers/admins or change an existing IndraQ role.
110
+ - The last active admin cannot be deleted or demoted.
111
+ - An admin cannot use the role endpoint to demote their own active session.
112
+ - Role promotion/demotion is synchronized across linked managed providers before the Cloud role is committed.
119
113
 
120
- Recommended/required depending on the workflow:
114
+ Provider role mapping is intentional. Nginx Proxy Manager only provides `user` and `admin`, so IndraQ maps `manager` and `admin` to NPM `admin`. AWS and Jenkins use their IndraQ-managed role/policy mappings.
121
115
 
122
- - Docker, for GHCR image login/build/push
123
- - network access to IndraQ Cloud API
124
- - network access to Jenkins/NPM/AWS/GitHub used by that user
116
+ ---
125
117
 
126
- ## Cloud server
118
+ # Quick start
127
119
 
128
- Required:
120
+ ## 1. Install
129
121
 
130
- - Node.js 22 or newer
131
- - PostgreSQL
132
- - a persistent `MASTER_KEY`
133
- - a strong `JWT_SECRET`
122
+ Requirements:
134
123
 
135
- ## Jenkins
124
+ - Node.js **22+**
125
+ - npm
126
+ - Git
127
+ - Docker when building/pushing Docker images
128
+ - network access to the IndraQ Cloud and providers you use
136
129
 
137
- For deployment creation and unified Jenkins user management, Jenkins must allow the account configured in IndraQ to perform the required administrative operations.
130
+ Install the published CLI:
138
131
 
139
- The included reference pipeline is:
132
+ ```powershell
133
+ npm install -g indraq_cli
134
+ ```
140
135
 
141
- ```text
142
- docs/CREATE-DEPLOYMENT-reference.groovy
136
+ Check it:
137
+
138
+ ```powershell
139
+ indraq --version
140
+ indraq doctor
141
+ indraq --help
143
142
  ```
144
143
 
145
- For its live parameter UI, Jenkins Active Choices is required. Role assignment for Jenkins users requires the Jenkins Role Strategy setup expected by your Jenkins instance.
144
+ When developing the CLI itself:
146
145
 
147
- IndraQ handles Jenkins CSRF crumbs together with the Jenkins web session when `/scriptText` administration is required.
146
+ ```powershell
147
+ npm install
148
+ npm run build
149
+ npm test
150
+ npm link
151
+ ```
148
152
 
149
153
  ---
150
154
 
151
- # 4. Install and start IndraQ Cloud API
152
-
153
- Open the Cloud API folder:
155
+ ## 2. Login
154
156
 
155
157
  ```powershell
156
- cd cloud-api
157
- npm install
158
+ indraq login
158
159
  ```
159
160
 
160
- Copy the example environment file:
161
+ Check the current identity:
161
162
 
162
163
  ```powershell
163
- Copy-Item .env.example .env
164
+ indraq whoami
164
165
  ```
165
166
 
166
- Edit `.env`:
167
+ The normal CLI uses the official IndraQ Cloud endpoint built into the package. Users do not need to configure an API URL manually.
167
168
 
168
- ```env
169
- PORT=4010
170
- DATABASE_URL=postgresql://indraq:change-me@127.0.0.1:5432/indraq_cloud
171
- JWT_SECRET=replace-with-at-least-32-random-characters
172
- MASTER_KEY=replace-with-exactly-64-hex-characters
173
- BOOTSTRAP_ADMIN_EMAIL=admin@example.com
174
- BOOTSTRAP_ADMIN_PASSWORD=use-a-strong-password
175
- ```
169
+ If the account was created with a temporary password, the first login requires a new password before normal Cloud operations continue.
176
170
 
177
- Requirements:
171
+ ---
178
172
 
179
- - `JWT_SECRET`: at least 32 characters
180
- - `MASTER_KEY`: exactly 64 hexadecimal characters (32 bytes)
181
- - `BOOTSTRAP_ADMIN_PASSWORD`: at least 12 characters
173
+ ## 3. Configure your providers once
182
174
 
183
- Generate a valid master key with Node:
175
+ The easiest entry point is:
184
176
 
185
177
  ```powershell
186
- node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
178
+ indraq configure
187
179
  ```
188
180
 
189
- Generate a JWT secret:
181
+ It provides one menu for:
190
182
 
191
- ```powershell
192
- node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
183
+ ```text
184
+ Reusable provider credentials
185
+ Current project infrastructure / prebuild
186
+ Mobile settings
187
+ Provider status
193
188
  ```
194
189
 
195
- Build and start:
190
+ You can also configure a provider directly:
196
191
 
197
192
  ```powershell
198
- npm run build
199
- npm run dev
193
+ indraq provider configure aws
194
+ indraq provider configure npm
195
+ indraq provider configure jenkins-dev
196
+ indraq provider configure jenkins-prod
197
+ indraq provider configure ghcr
200
198
  ```
201
199
 
202
- Production start:
200
+ Review what is configured without exposing secrets:
203
201
 
204
202
  ```powershell
205
- npm run build
206
- npm start
203
+ indraq provider list
207
204
  ```
208
205
 
209
- Expected startup message:
206
+ ---
210
207
 
211
- ```text
212
- IndraQ Cloud API listening on 4010
213
- ```
208
+ ## 4. Create or connect a project
214
209
 
215
- ## Database migrations
210
+ For a brand-new application:
216
211
 
217
- SQL migrations in `cloud-api/sql/` are applied automatically when the Cloud API starts.
212
+ ```powershell
213
+ indraq init
214
+ ```
218
215
 
219
- You do not normally need to run migration files manually.
216
+ For an existing codebase that should become a new Cloud project without scaffolding it:
220
217
 
221
- ## Bootstrap administrator
218
+ ```powershell
219
+ indraq project create
220
+ ```
222
221
 
223
- If no admin exists, the Cloud API creates the first administrator from:
222
+ For a folder that belongs to an existing Cloud project:
224
223
 
225
- ```env
226
- BOOTSTRAP_ADMIN_EMAIL=...
227
- BOOTSTRAP_ADMIN_PASSWORD=...
224
+ ```powershell
225
+ indraq project link
228
226
  ```
229
227
 
230
- After the first administrator is created, remove the bootstrap password from the long-running production environment if your deployment process allows it.
228
+ Check the current association:
231
229
 
232
- Do not change or lose `MASTER_KEY` after secrets have been stored. The same key is required to decrypt provider credentials later.
230
+ ```powershell
231
+ indraq project status
232
+ ```
233
233
 
234
234
  ---
235
235
 
236
- # 5. Build and install the CLI
237
-
238
- From the repository root:
236
+ ## 5. Prepare infrastructure
239
237
 
240
238
  ```powershell
241
- npm install
242
- npm run build
243
- npm test
244
- npm link
239
+ indraq prebuild
245
240
  ```
246
241
 
247
- Confirm installation:
242
+ For web projects, prebuild is the main infrastructure reconciliation command. Depending on the project and selected options, it can prepare/reconcile:
248
243
 
249
- ```powershell
250
- indraq --version
251
- indraq --help
244
+ ```text
245
+ GHCR image association
246
+ Route53 DNS
247
+ Route53 routing / health checks
248
+ NPM reverse proxy / SSL
249
+ Jenkins deployment
250
+ project resource associations
252
251
  ```
253
252
 
254
- Run diagnostics:
255
-
256
- ```powershell
257
- indraq doctor
258
- ```
253
+ Use it when creating a deployment for the first time **and** when infrastructure settings need to be reconciled later.
259
254
 
260
255
  ---
261
256
 
262
- # 6. Login to IndraQ Cloud
263
-
264
- The official IndraQ Cloud API URL is built into the CLI (`https://api.indraq.com`). Users do not configure a backend URL.
257
+ ## 6. Deploy
265
258
 
266
- After installing the npm package, login directly:
259
+ Deploy with a named shared environment:
267
260
 
268
261
  ```powershell
269
- indraq login
262
+ indraq deploy build --env staging
270
263
  ```
271
264
 
272
- Check the active identity:
265
+ Common shortcuts:
273
266
 
274
267
  ```powershell
275
- indraq whoami
268
+ indraq deploy:dev
269
+ indraq deploy:prod
276
270
  ```
277
271
 
278
- Logout:
272
+ The deployment flow builds the Docker image, pushes it to the configured registry and runs the configured Jenkins deployment.
279
273
 
280
- ```powershell
281
- indraq logout
282
- ```
274
+ ---
283
275
 
284
- The aliases below also work:
276
+ # Recommended workflow in chronological order
285
277
 
286
- ```powershell
287
- indraq cloud login
288
- indraq cloud whoami
289
- indraq cloud logout
290
- ```
278
+ | Step | Command | Why it matters |
279
+ | ---: | --- | --- |
280
+ | 1 | `indraq doctor` | Verify the machine and CLI command resolution before debugging anything else |
281
+ | 2 | `indraq login` | Authenticate to the organization control plane |
282
+ | 3 | `indraq configure` | Store reusable provider credentials once |
283
+ | 4 | `indraq environment list` | See which admin-managed server targets are available |
284
+ | 5 | `indraq init` / `project create` / `project link` | Establish the project correctly before infrastructure work |
285
+ | 6 | `indraq project status` | Confirm which Cloud project and resources the folder is using |
286
+ | 7 | `indraq prebuild` | Reconcile DNS, proxy, image and Jenkins infrastructure |
287
+ | 8 | `indraq deploy build --env <name>` | Build, push and deploy the application |
288
+ | 9 | `indraq logs` | Audit administrative/infrastructure activity when investigating changes |
289
+
290
+ For normal daily work after initial setup, developers usually spend most of their time around `project status`, `prebuild`, deployment commands and Jenkins pipeline commands.
291
291
 
292
292
  ---
293
293
 
294
- # 7. Shared environments
294
+ # Command reference
295
295
 
296
- An environment is a friendly name bound to a reusable server IP.
296
+ `indraq --help` and `<command> --help` are the authoritative source for flags. The tables below explain **when to use each command and why it exists**.
297
297
 
298
- Examples:
298
+ Most list/select commands support some combination of:
299
299
 
300
300
  ```text
301
- production
302
- production-backup
303
- staging
304
- qa
305
- client-a
306
- mumbai-app-01
301
+ --search <text> filter results
302
+ --limit <number> control the number loaded
303
+ --all load all results
307
304
  ```
308
305
 
309
- There is no limit such as one primary and one secondary environment. Admins can create as many environments as required and name them freely.
306
+ ## A. Help, diagnostics and authentication
310
307
 
311
- ## Create an environment
308
+ | Command | Usage / importance |
309
+ | --- | --- |
310
+ | `indraq --help` | Show the complete live CLI command tree. Start here when you do not remember a command. |
311
+ | `indraq <command> --help` | Show flags and subcommands for one command. Best source for exact current syntax. |
312
+ | `indraq help [topic]` | Focused help for supported topics such as `configure`, `docker`, `mobile`, `aws` and `doctor`. |
313
+ | `indraq doctor` | Diagnose Node.js and command-resolution problems. Run this before deeper troubleshooting. |
314
+ | `indraq login` | Authenticate to IndraQ Cloud. Supports `--email` and `--password` for scripted use. |
315
+ | `indraq logout` | Remove the current Cloud session from the machine. |
316
+ | `indraq whoami` | Show the authenticated IndraQ identity. Useful before admin or production actions. |
317
+ | `indraq password reset` | Email-OTP password recovery for Cloud, NPM, Jenkins or all password-based accounts. AWS keys are intentionally separate. |
318
+ | `indraq cloud login` | Namespaced alias of `indraq login`. |
319
+ | `indraq cloud logout` | Namespaced alias of `indraq logout`. |
320
+ | `indraq cloud whoami` | Namespaced alias of `indraq whoami`. |
312
321
 
313
- Admin only:
322
+ Examples:
314
323
 
315
324
  ```powershell
316
- indraq environment create
325
+ indraq help aws
326
+ indraq whoami
327
+ indraq password reset --email user@example.com --all
317
328
  ```
318
329
 
319
- The wizard asks for values such as:
320
-
321
- - environment name
322
- - description
323
- - server IPv4 address
324
- - region (optional/useful for latency routing)
325
- - audit reason
326
-
327
- ## List environments
330
+ ---
328
331
 
329
- ```powershell
330
- indraq environment list
331
- ```
332
+ ## B. Reusable providers and shared environments
332
333
 
333
- ## Update an environment
334
+ Configure these before expecting project automation to work.
334
335
 
335
- ```powershell
336
- indraq environment update production
337
- ```
336
+ | Command | Usage / importance |
337
+ | --- | --- |
338
+ | `indraq configure` | Main configuration home. Recommended interactive entry point for providers, current-project prebuild and mobile settings. |
339
+ | `indraq provider configure [provider]` | Configure `aws`, `npm`, `jenkins-dev`, `jenkins-prod` or `ghcr` directly in Cloud. |
340
+ | `indraq provider list` | Show configured providers without exposing secrets. Useful before `prebuild`, user provisioning or Jenkins operations. |
341
+ | `indraq environment create` | **Admin:** create a reusable named server environment. Prevents users from memorizing IPs. |
342
+ | `indraq environment list` | List shared environments and targets. |
343
+ | `indraq environment update [name]` | **Admin:** update an environment target. Projects can keep using the friendly environment name. |
344
+ | `indraq environment delete [name]` | **Admin:** remove an environment. Use `--yes` only when intentionally bypassing confirmation. |
345
+ | `indraq credentials configure [provider]` | Compatibility namespace for provider configuration. Prefer `provider configure`. |
346
+ | `indraq credentials list` | Compatibility namespace for provider listing. Prefer `provider list`. |
347
+ | `indraq credentials sync` | Legacy credential synchronization command retained for compatibility. |
348
+ | `indraq credentials restore` | Legacy credential restore workflow retained for compatibility. |
349
+ | `indraq server create` | Deprecated alias that creates a shared environment. Prefer `environment create`. |
350
+ | `indraq server list` | Deprecated alias that lists shared environments. Prefer `environment list`. |
338
351
 
339
- ## Delete an environment
352
+ Example:
340
353
 
341
354
  ```powershell
342
- indraq environment delete production
355
+ indraq environment create
356
+ indraq environment list --all
357
+ indraq provider configure jenkins-prod
358
+ indraq provider list
343
359
  ```
344
360
 
345
- Environments are shared infrastructure shortcuts. Provider credentials are still private per IndraQ user.
346
-
347
361
  ---
348
362
 
349
- # 8. Configure reusable provider credentials
350
-
351
- The easiest entry point is:
352
-
353
- ```powershell
354
- indraq configure
355
- ```
363
+ ## C. Organization users and roles
356
364
 
357
- Or configure one provider directly:
365
+ Unified user commands coordinate identities across IndraQ Cloud and selected configured providers.
358
366
 
359
- ```powershell
360
- indraq provider configure aws
361
- indraq provider configure npm
362
- indraq provider configure jenkins-dev
363
- indraq provider configure jenkins-prod
364
- indraq provider configure ghcr
365
- ```
367
+ | Command | Usage / importance |
368
+ | --- | --- |
369
+ | `indraq user list` | **Manager/admin:** list organization users. Use it before updates/deletion when you do not remember exact usernames. |
370
+ | `indraq user create [username]` | **Manager/admin:** create a Cloud user and selected AWS/NPM/Jenkins identities in one workflow. |
371
+ | `indraq user update [username]` | Update selected providers. **Admin role changes are synchronized across linked managed providers.** |
372
+ | `indraq user delete [username]` | Permanently delete the selected user's managed identities. External providers are handled before the Cloud row. |
366
373
 
367
- List configured provider profiles:
374
+ Useful examples:
368
375
 
369
376
  ```powershell
370
- indraq provider list
377
+ indraq user create nitin --providers cloud,aws,npm,jenkins --role user
378
+ indraq user update nitin --role manager
379
+ indraq user update nitin --role user
380
+ indraq user delete nitin
371
381
  ```
372
382
 
373
- Secrets are never printed by `provider list`.
383
+ ### Role synchronization
374
384
 
375
- ## AWS provider
385
+ When an admin changes a role, for example:
376
386
 
377
387
  ```powershell
378
- indraq provider configure aws
388
+ indraq user update nitin --role manager
379
389
  ```
380
390
 
381
- The wizard validates AWS access and can configure:
382
-
383
- - AWS region
384
- - access key ID
385
- - secret access key
386
- - optional session token
387
- - default hosted zone
388
- - default managed IAM policies by IndraQ role
389
-
390
- ### AWS policy mapping
391
-
392
- Admins can define managed policy ARNs for:
391
+ IndraQ reconciles linked providers in this direction:
393
392
 
394
393
  ```text
395
- USER
396
- MANAGER
397
- ADMIN
394
+ AWS role/policies
395
+ NPM role
396
+ Jenkins managed roles (DEV/PROD when linked)
397
+
398
+ IndraQ Cloud role LAST
398
399
  ```
399
400
 
400
- Managers can configure the policy mapping needed for normal users but cannot elevate users to manager/admin.
401
+ If an external role update fails, the Cloud role is not committed and already-changed external providers are rolled back on a best-effort basis.
401
402
 
402
- When unified AWS user creation is used, IndraQ applies the policies for the selected Cloud role. If the role changes later, IndraQ removes old IndraQ-managed role policies before applying the new role mapping so stale elevated access is not intentionally retained by the CLI.
403
+ ### Permanent deletion
403
404
 
404
- You can still explicitly provide policies when using low-level IAM commands if required.
405
+ `indraq user delete` is a **real delete**, not a soft-disable command.
405
406
 
406
- ## Nginx Proxy Manager provider
407
+ The unified flow deletes external identities first. Cloud deletion is intentionally last. If an external provider genuinely fails, the Cloud identity is retained so an administrator can repair the problem and retry.
407
408
 
408
- ```powershell
409
- indraq provider configure npm
410
- ```
409
+ When Cloud deletion runs, shared organization resources owned by the target user are preserved/reassigned rather than blindly destroyed, while user-scoped rows are removed according to their database relationships. The final Cloud user row is deleted.
411
410
 
412
- Enter:
411
+ A missing external account during deletion is considered an already-achieved final state where supported; deletion should be safe to retry.
413
412
 
414
- - NPM URL
415
- - NPM administrator email
416
- - NPM administrator password
413
+ ---
417
414
 
418
- IndraQ validates the credentials before storing them.
415
+ ## D. Project membership and resource access
419
416
 
420
- ## Jenkins provider
417
+ Project membership and provider-native resource access are related but not identical.
421
418
 
422
- Development Jenkins:
419
+ | Command | Usage / importance |
420
+ | --- | --- |
421
+ | `indraq project add user` | **Manager/admin:** give a user access to a Cloud project. |
422
+ | `indraq project delete user` | **Manager/admin:** remove a user's Cloud project access. |
423
+ | `indraq access add user` | Grant a project user access to selected native AWS/NPM/Jenkins resources with audited synchronization. |
424
+ | `indraq access delete user` | Revoke selected native resource access without deleting the organization user. |
423
425
 
424
- ```powershell
425
- indraq provider configure jenkins-dev
426
- ```
426
+ Use user deletion only when the person should be removed. Use access commands when the person remains in the organization but should gain/lose a project or resource.
427
427
 
428
- Production Jenkins:
428
+ ---
429
429
 
430
- ```powershell
431
- indraq provider configure jenkins-prod
432
- ```
430
+ ## E. Project lifecycle
433
431
 
434
- Enter:
432
+ | Command | Usage / importance |
433
+ | --- | --- |
434
+ | `indraq init [directory]` | Safely create a new application and IndraQ project setup. Use `--skip-install` when you want files generated without dependency installation. |
435
+ | `indraq project create [name]` | Register an **existing current folder** as a new Cloud project without scaffolding or infrastructure changes. |
436
+ | `indraq project list` | List organization projects and your VIEW/WRITE access. |
437
+ | `indraq project link` | Link/re-link the current folder to an existing accessible Cloud project. |
438
+ | `indraq project sync` | Migrate older local IndraQ metadata to the Cloud model and keep the local project reference minimal. |
439
+ | `indraq project status` | Show the current Cloud project and infrastructure associations, optionally for an environment. |
440
+ | `indraq dockerfile create` | Generate Docker support for an existing project without running the full `init` workflow. |
435
441
 
436
- - Jenkins URL
437
- - Jenkins username
438
- - Jenkins API token/password
442
+ ### `indraq init`
439
443
 
440
- IndraQ validates authentication before storing the profile.
444
+ Use this for a **new project**, not to overwrite a populated application accidentally.
441
445
 
442
- ## GHCR provider
446
+ The wizard can create supported frontend, backend, full-stack and mobile structures, environment files, ignore files and Docker support. Framework/version choices are collected interactively. Dependency installation can be skipped:
443
447
 
444
448
  ```powershell
445
- indraq provider configure ghcr
449
+ indraq init my-service --skip-install
446
450
  ```
447
451
 
448
- Enter:
452
+ ### `indraq project create`
449
453
 
450
- - registry host, normally `ghcr.io`
451
- - GitHub token with the package permissions needed by your workflow
454
+ Use this when code already exists and only Cloud registration is needed:
452
455
 
453
- After authentication, IndraQ fetches:
456
+ ```powershell
457
+ indraq project create order-service --kind backend --framework express --port 5000 --health /health
458
+ ```
454
459
 
455
- - the authenticated GitHub account
456
- - organizations visible to that token
460
+ It does not scaffold the application and does not automatically create DNS/proxy/Jenkins infrastructure.
457
461
 
458
- The user selects the owner instead of typing a hardcoded organization name.
462
+ ### `indraq dockerfile create`
459
463
 
460
- Example generated image path:
464
+ Common flags include:
461
465
 
462
466
  ```text
463
- ghcr.io/acme-platform/order-service
467
+ --framework <framework>
468
+ --node-version <version>
469
+ --output <directory>
470
+ --port <port>
471
+ --health <endpoint>
472
+ --compose
473
+ --force
464
474
  ```
465
475
 
466
- No organization name is hardcoded into IndraQ.
467
-
468
- If GitHub cannot enumerate the required organization for the supplied token, manual owner entry remains available as a fallback.
469
-
470
476
  ---
471
477
 
472
- # 9. User management
478
+ ## F. Infrastructure reconciliation and deployment
473
479
 
474
- Use unified user management when the same person needs accounts across IndraQ Cloud, AWS, NPM, and Jenkins.
480
+ | Command | Usage / importance |
481
+ | --- | --- |
482
+ | `indraq prebuild` | Main web-infrastructure reconciliation command for GHCR, Route53, NPM and Jenkins. Run before first deployment and after infrastructure changes. |
483
+ | `indraq deployment create` | Deployment-oriented entry point to the prebuild/reconciliation flow. |
484
+ | `indraq deployment run --env <name>` | Run the configured deployment for a shared environment. |
485
+ | `indraq deploy build --env <name>` | Build Docker image, push it and run the Jenkins deployment. Primary explicit deploy command. |
486
+ | `indraq deploy configure` | Open the main configuration home from the deploy namespace. |
487
+ | `indraq deploy:configure` | Legacy/top-level alias for configuration. |
488
+ | `indraq deploy:dev` | Shortcut for deployment using the `dev`/development shared environment. |
489
+ | `indraq deploy:prod` | Shortcut for deployment using the `prod`/production shared environment. |
475
490
 
476
- ## Create a user
491
+ Useful prebuild flags:
477
492
 
478
- ```powershell
479
- indraq user create
493
+ ```text
494
+ --env <environment>
495
+ --secondary-env <environment>
496
+ --routing SIMPLE|FAILOVER|WEIGHTED|LATENCY
497
+ --host-port <port>
498
+ --networks <list>
499
+ --volumes <list>
500
+ --flags <flags>
501
+ --yes
480
502
  ```
481
503
 
482
- The wizard asks for:
483
-
484
- - username
485
- - providers to create/manage
486
- - Cloud role (`user`, `manager`, `admin`) when permitted
487
- - email
488
- - temporary first-login password generated by IndraQ (shown once to the operator)
489
- - provider-specific settings where required
490
-
491
- You can also use flags:
504
+ Example failover preparation:
492
505
 
493
506
  ```powershell
494
- indraq user create hk --providers cloud,aws,npm,jenkins --role user
507
+ indraq prebuild --env production --secondary-env production-backup --routing FAILOVER
495
508
  ```
496
509
 
497
- Provider-selection flags also exist:
510
+ The purpose of prebuild is **reconciliation**, not blind creation. It should discover what already exists and create/update what the project requires.
498
511
 
499
- ```powershell
500
- --cloud
501
- --aws
502
- --npm
503
- --jenkins
504
- ```
512
+ ---
505
513
 
506
- ### Role rules
514
+ ## G. Jenkins: pipelines, deployments and users
507
515
 
508
- Manager creating a user:
516
+ Jenkins commands use the Jenkins credentials stored in the authenticated user's IndraQ Cloud profile.
509
517
 
510
- ```text
511
- allowed role: user
512
- ```
518
+ | Command | Usage / importance |
519
+ | --- | --- |
520
+ | `indraq jenkins pipelines` | List all buildable jobs/pipelines visible to the Jenkins account, including jobs in folders. No default 10-job cap when `--limit` is omitted. |
521
+ | `indraq jenkins run [job]` | Select/run any visible pipeline. IndraQ discovers its Jenkins parameters and prompts for values. |
522
+ | `indraq jenkins pipeline:run [job]` | Long-form alias of `jenkins run`. |
523
+ | `indraq jenkins create-deployment` | Trigger only the Jenkins `CREATE-DEPLOYMENT` workflow for a component; it does not create Route53/NPM resources. |
524
+ | `indraq jenkins deployments` | List Jenkins deployment jobs. |
525
+ | `indraq jenkins deployment:update [job]` | Reconcile a deployment through `CREATE-DEPLOYMENT`. |
526
+ | `indraq jenkins deployment:delete [job]` | Delete a Jenkins deployment job after confirmation. |
527
+ | `indraq jenkins users` | List Jenkins users visible to the configured admin-capable identity. |
528
+ | `indraq jenkins user:update [username]` | Update a Jenkins user's password/roles directly. Unified organization role changes should normally use `indraq user update`. |
529
+ | `indraq jenkins user:delete [username]` | Delete a Jenkins user directly. Unified organization deletion should normally use `indraq user delete`. |
513
530
 
514
- Admin creating a user:
531
+ Choose Jenkins environment explicitly when useful:
515
532
 
516
- ```text
517
- allowed roles: user, manager, admin
533
+ ```powershell
534
+ indraq jenkins pipelines --stage dev
535
+ indraq jenkins pipelines --stage prod
518
536
  ```
519
537
 
520
- ### Unified creation safety
521
-
522
- Before creating accounts in multiple providers, IndraQ preflights Jenkins administration when Jenkins is selected.
538
+ ### Run any Jenkins pipeline
523
539
 
524
- If a later provider fails after creation has started, IndraQ performs best-effort rollback of providers created by that command.
525
-
526
- Always review the provider result summary after a failed operation.
527
-
528
- ## Update a user
540
+ Interactive selection:
529
541
 
530
542
  ```powershell
531
- indraq user update hk
543
+ indraq jenkins run
532
544
  ```
533
545
 
534
- Examples:
546
+ Direct job name:
535
547
 
536
548
  ```powershell
537
- indraq user update hk --role manager
538
- indraq user update hk --providers cloud,aws
549
+ indraq jenkins run api-admin-service --stage dev
539
550
  ```
540
551
 
541
- Only an admin can change Cloud roles.
552
+ Folder jobs are supported using their full job path when visible.
553
+
554
+ IndraQ inspects the job's parameter definitions. Parameters with a usable Jenkins default are shown as **optional**; parameters without one are treated as **required**. Boolean, choice, password, text and string parameters get appropriate prompts.
542
555
 
543
- ## Delete a user
556
+ By default the CLI waits for completion. To queue and return immediately:
544
557
 
545
558
  ```powershell
546
- indraq user delete hk
559
+ indraq jenkins run api-admin-service --stage dev --no-wait
547
560
  ```
548
561
 
549
- Skip the confirmation only when you intentionally want non-interactive deletion:
562
+ ### Create only a Jenkins deployment
563
+
564
+ Use this when DNS and proxy already exist or you intentionally want Jenkins only:
550
565
 
551
566
  ```powershell
552
- indraq user delete hk --yes
567
+ indraq jenkins create-deployment --stage dev --component backend --image-name api-service --host-port 5010
553
568
  ```
554
569
 
570
+ Common optional deployment fields include networks, volumes and Docker flags.
571
+
572
+ ---
573
+
574
+ ## H. AWS IAM and managed access keys
555
575
 
556
- ## First login and password reset
576
+ IndraQ IAM users are designed for CLI/API access. Console login is intentionally not part of the IAM-user flow.
557
577
 
558
- When a manager/admin creates a Cloud user, IndraQ generates a temporary password. It is intended only for the first login. On first `indraq login`, the user must choose a new password before other Cloud commands are allowed. Managed NPM/Jenkins identities created by the unified user workflow are rotated to the same new password.
578
+ | Command | Usage / importance |
579
+ | --- | --- |
580
+ | `indraq iam users` | List AWS IAM users. |
581
+ | `indraq iam user:create [username]` | Create an IAM user and normally an access key; optional managed policy ARNs can be attached. |
582
+ | `indraq iam user:update [username]` | Update attached managed policies for an IAM user. |
583
+ | `indraq iam user:delete [username]` | Delete an IAM user and removable dependencies after confirmation. |
584
+ | `indraq iam credentials [username]` | Reveal the authenticated user's own IndraQ-managed AWS access key/secret stored encrypted in Cloud. |
585
+ | `indraq iam access-key rotate [username]` | Rotate an IndraQ-managed IAM access key safely; manager/admin can select managed organization users when authorized. |
559
586
 
560
- Self-service password recovery uses an email OTP:
587
+ Examples:
561
588
 
562
589
  ```powershell
563
- indraq password reset
564
- indraq password reset --email user@example.com --cloud
565
- indraq password reset --email user@example.com --npm
566
- indraq password reset --email user@example.com --jenkins
567
- indraq password reset --email user@example.com --all
590
+ indraq iam users --all
591
+ indraq iam user:create nitin
592
+ indraq iam credentials nitin
593
+ indraq iam access-key rotate nitin --reason "Quarterly credential rotation"
568
594
  ```
569
595
 
570
- `--all` means Cloud + NPM + Jenkins. AWS is intentionally excluded because IndraQ AWS users use access keys rather than console passwords. The Cloud API requires SMTP configuration (`SMTP_HOST`, `SMTP_PORT`, `SMTP_SECURE`, `SMTP_USER`, `SMTP_PASS`, `SMTP_FROM`).
596
+ AWS does not reveal an old secret access key again after creation. For AWS identities created through the managed IndraQ workflow, the generated secret can be stored encrypted in IndraQ Cloud so the owner can retrieve it later through the authorized CLI command.
571
597
 
572
- List/update/delete workflows are searchable and selectable rather than requiring users to remember exact identities. By default list commands return 10 rows; use `--search`, `--limit`, or `--all` where available. This applies to organization users, AWS IAM users/records, NPM users/proxies, Jenkins users/jobs, projects, environments, health checks, and logs.
598
+ During rotation, IndraQ creates/stores the replacement managed key before removing the previous managed key so the recovery record does not point to a key that was never successfully created.
573
599
 
574
600
  ---
575
601
 
576
- # 10. AWS IAM CLI users and recoverable access keys
577
-
578
- AWS does not provide the original secret access key again after access-key creation.
602
+ ## I. Route53 DNS and health checks
579
603
 
580
- When IndraQ creates an AWS IAM user through the unified user workflow, IndraQ stores the generated AWS secret encrypted in IndraQ Cloud and links it to that Cloud user.
581
- IndraQ also attaches an `IndraQBaseRole` inline IAM policy automatically according to the selected IndraQ `user`, `manager`, or `admin` role. Optional AWS managed-policy mappings configured by an operator are reconciled on top of that base role.
582
-
583
-
584
- The user sees the key at creation time and can retrieve their own stored credential later after logging into their IndraQ account. Access keys can also be rotated through IndraQ without losing the encrypted recovery copy.
604
+ | Command | Usage / importance |
605
+ | --- | --- |
606
+ | `indraq dns zones` | List Route53 hosted zones available to the configured AWS identity. |
607
+ | `indraq dns records` | List records in a hosted zone. Use `--zone` when scripting. |
608
+ | `indraq dns create [record]` | Create a Route53 record interactively or with flags. |
609
+ | `indraq dns update [record]` | UPSERT/reconcile a Route53 record. |
610
+ | `indraq dns delete [record]` | Select/delete Route53 record set(s). |
611
+ | `indraq healthcheck list` | List/select Route53 health checks. |
612
+ | `indraq healthcheck create` | **Admin:** create a Route53 health check. |
613
+ | `indraq healthcheck delete [id]` | **Admin:** delete a Route53 health check. |
585
614
 
586
- Create an IAM CLI user directly:
615
+ Supported record types exposed by the command include:
587
616
 
588
- ```powershell
589
- indraq iam user:create hk
617
+ ```text
618
+ A
619
+ CNAME
620
+ TXT
621
+ MX
590
622
  ```
591
623
 
592
- Delete:
624
+ Supported routing choices include:
593
625
 
594
- ```powershell
595
- indraq iam user:delete hk
626
+ ```text
627
+ SIMPLE
628
+ FAILOVER
629
+ WEIGHTED
630
+ LATENCY
596
631
  ```
597
632
 
598
- Retrieve the current logged-in user's stored unified AWS credential:
633
+ Example:
599
634
 
600
635
  ```powershell
601
- indraq iam credentials hk
636
+ indraq dns create api.example.com --type A --environment production --routing SIMPLE
602
637
  ```
603
638
 
604
- Rotate an access key:
639
+ Failover example:
605
640
 
606
641
  ```powershell
607
- indraq iam access-key rotate
642
+ indraq dns create api.example.com `
643
+ --type A `
644
+ --environment production `
645
+ --secondary-environment production-backup `
646
+ --routing FAILOVER
608
647
  ```
609
648
 
610
- A normal user can rotate only their own IndraQ-managed AWS key. Managers/admins can select managed organization users across the organization. IndraQ creates the replacement key, stores it encrypted, updates the target user's reusable AWS provider credential, and only then deletes the previous managed key. Rotation is audited. If the IAM user already has two keys, IndraQ stops rather than deleting an unknown/unmanaged key.
649
+ Health checks are especially important for failover designs because Route53 needs a reliable signal to decide whether a primary target is healthy.
611
650
 
612
- Important security behavior:
613
-
614
- - the target Cloud user can retrieve their own stored AWS secret
615
- - normal users cannot resolve another user's provider credentials
616
- - retrieval is audited
617
- - provider-resolution responses use `Cache-Control: no-store`
618
- - AWS console login profiles are intentionally not created by these IAM CLI-user flows
651
+ ---
619
652
 
620
- If an AWS key is exposed publicly, rotate/delete it immediately even if IndraQ has an encrypted copy.
653
+ ## J. Nginx Proxy Manager: proxy hosts and users
621
654
 
622
- ---
655
+ ### Proxy hosts
623
656
 
624
- # 11. Create a project with `indraq init`
657
+ | Command | Usage / importance |
658
+ | --- | --- |
659
+ | `indraq proxy list` | List NPM proxy hosts. |
660
+ | `indraq proxy create [domain]` | Create a reverse proxy, with optional certificate/SSL/WebSocket settings. |
661
+ | `indraq proxy update [domain]` | Update an existing proxy host. |
662
+ | `indraq proxy delete [domain]` | Delete a proxy host after confirmation. |
625
663
 
626
- The recommended project entry point is:
664
+ Common proxy options include:
627
665
 
628
- ```powershell
629
- indraq init
666
+ ```text
667
+ --forward-host <host>
668
+ --environment <name>
669
+ --forward-port <port>
670
+ --scheme http|https
671
+ --certificate-id <id>
672
+ --request-ssl
673
+ --email <email>
674
+ --force-ssl
675
+ --http2
676
+ --websocket / --no-websocket
630
677
  ```
631
678
 
632
- Or initialize another directory:
679
+ Example:
633
680
 
634
681
  ```powershell
635
- indraq init my-app
682
+ indraq proxy create api.example.com --environment production --forward-port 5000 --request-ssl --force-ssl --http2
636
683
  ```
637
684
 
638
- ## Login check
639
-
640
- `init` verifies that the user is connected and authenticated to IndraQ Cloud. If required, it guides the user through Cloud configuration/login.
641
-
642
- ## New project
643
-
644
- The wizard supports:
645
-
646
- - Frontend
647
- - Backend
648
- - Frontend + Backend
649
- - Mobile App
685
+ ### NPM users
650
686
 
651
- Web/frontend options include supported project templates such as Vite/React/Next/vanilla depending on the selected flow.
652
-
653
- Backend scaffolding includes Express and optional integrations selected in the wizard.
687
+ | Command | Usage / importance |
688
+ | --- | --- |
689
+ | `indraq npm-user list` | List Nginx Proxy Manager users. |
690
+ | `indraq npm-user create` | Create an NPM user directly. |
691
+ | `indraq npm-user update [identity]` | Update name, nickname, email, password, role or disabled state. |
692
+ | `indraq npm-user delete [identity]` | Delete an NPM user directly. |
654
693
 
655
- ## Dependency installation
694
+ For organization-wide lifecycle changes, prefer `indraq user create/update/delete` so Cloud, AWS, NPM and Jenkins stay synchronized.
656
695
 
657
- For web projects, IndraQ links the project to Cloud **before** dependency installation.
696
+ ---
658
697
 
659
- This is deliberate. If npm is unavailable, a registry is temporarily unreachable, or installation fails, the Cloud project is not lost.
698
+ ## K. Mobile builds
660
699
 
661
- IndraQ:
700
+ Mobile build shortcuts are grouped under `indraq build`.
662
701
 
663
- 1. creates the project files
664
- 2. creates/links the Cloud project
665
- 3. runs npm installation
666
- 4. retries compatible npm execution paths where appropriate
667
- 5. reports any component where installation is still pending
668
- 6. continues the project/infrastructure workflow
702
+ | Command | Usage / importance |
703
+ | --- | --- |
704
+ | `indraq build mobile:dev` | Build the mobile development environment. |
705
+ | `indraq build mobile:development` | Alias of `mobile:dev`. |
706
+ | `indraq build mobile:staging` | Build the mobile staging environment. |
707
+ | `indraq build mobile:prod` | Build the mobile production environment. |
708
+ | `indraq build mobile:production` | Alias of `mobile:prod`. |
669
709
 
670
- If npm still cannot install dependencies, the CLI prints the exact folders where you should run:
710
+ Useful per-build overrides:
671
711
 
672
- ```powershell
673
- npm install
712
+ ```text
713
+ --output dev-client|debug-apk|apk|aab
714
+ --profile fast|clean|full-reset
715
+ --verbose
716
+ --dry-run
717
+ --yes
674
718
  ```
675
719
 
676
- You can intentionally skip installation:
720
+ Before a real upload/build, validate the plan when useful:
677
721
 
678
722
  ```powershell
679
- indraq init --skip-install
723
+ indraq build mobile:staging --dry-run
680
724
  ```
681
725
 
682
- Generated npm package names are sanitized so display names containing spaces or uppercase characters do not create invalid package names.
726
+ Use `indraq configure` **Mobile App settings** for the persistent mobile configuration.
683
727
 
684
- ## Full setup vs project only
728
+ ---
685
729
 
686
- After project creation, choose:
730
+ ## L. Audit logs
687
731
 
688
- ```text
689
- Full setup now GHCR + Jenkins + Route53 + NPM
690
- ```
732
+ | Command | Usage / importance |
733
+ | --- | --- |
734
+ | `indraq logs` | **Manager/admin:** view IndraQ audit activity. Supports search/limit/all filtering. |
691
735
 
692
- or:
736
+ Example:
693
737
 
694
- ```text
695
- Project only I will run prebuild later
738
+ ```powershell
739
+ indraq logs --search user.role --all
696
740
  ```
697
741
 
698
- Choosing project-only still leaves a valid Cloud-linked project.
742
+ Audit logs are important when diagnosing who changed user roles, project access or infrastructure and why.
699
743
 
700
- Run infrastructure setup later with:
744
+ ---
701
745
 
702
- ```powershell
703
- indraq prebuild
704
- ```
746
+ # Common real-world flows
705
747
 
706
- ## Existing IndraQ project
748
+ | Goal | Recommended commands |
749
+ | --- | --- |
750
+ | Add a developer | `user create` → `project add user` → `access add user` |
751
+ | Promote/demote a person | `user update <name> --role manager|user` |
752
+ | Remove a person permanently | `user delete <name>` |
753
+ | Register an existing app | `project create` → `configure` → `prebuild` |
754
+ | Connect a checked-out repo | `project link` → `project status` |
755
+ | First web deployment | `prebuild --env <name>` → `deploy build --env <name>` |
756
+ | Later web deployment | `deploy build --env <name>` |
757
+ | Run an arbitrary Jenkins job | `jenkins pipelines` → `jenkins run` |
758
+ | Remove only project/resource access | `project delete user` / `access delete user` |
759
+
760
+ Use unified user commands for organization lifecycle changes. Direct AWS/NPM/Jenkins user commands are useful for provider-specific administration, but changing only one provider can intentionally create a state that differs from the IndraQ organization identity.
707
761
 
708
- If `.indraq/project.json` already exists, `init` does not blindly recreate the application.
762
+ ---
709
763
 
710
- It checks the existing Cloud project and offers to reconcile pending:
764
+ # Security model
711
765
 
712
- - GHCR
713
- - Jenkins
714
- - Route53
715
- - NPM
766
+ IndraQ automates privileged systems, so convenience must not come at the cost of uncontrolled credentials.
716
767
 
717
- This means rerunning `indraq init` is useful when a previous setup was intentionally skipped or interrupted.
768
+ | Area | Design |
769
+ | --- | --- |
770
+ | Cloud login | Authenticated session stored for the CLI rather than re-entering passwords for every command |
771
+ | Provider credentials | Stored per IndraQ user in Cloud rather than in each project repository |
772
+ | Encryption | Sensitive reusable provider secrets use the Cloud `MASTER_KEY` for encrypted-at-rest storage |
773
+ | AWS managed keys | Secret access keys created through the managed workflow can be retained encrypted for authorized recovery/rotation |
774
+ | Project access | VIEW/WRITE and resource grants control who can change project infrastructure |
775
+ | Role updates | External linked providers are reconciled before the Cloud role is finalized |
776
+ | User deletion | External cleanup happens before permanent Cloud identity deletion |
777
+ | Auditing | Sensitive manager/admin actions require/record reasons where the API enforces them |
718
778
 
719
- ## Existing non-IndraQ project
779
+ Never commit `.env` files containing real secrets, AWS credentials, Jenkins tokens, NPM passwords or GHCR tokens to Git.
720
780
 
721
- If files already exist but the folder was not initialized by IndraQ, the CLI warns that generated files may be overwritten.
781
+ Keep the Cloud `MASTER_KEY` stable. Changing or losing it after encrypted credentials are stored makes those existing encrypted values unreadable.
722
782
 
723
- It requires two confirmations, including typing:
783
+ ---
724
784
 
725
- ```text
726
- OVERWRITE
727
- ```
785
+ # Troubleshooting
728
786
 
729
- No existing project should be overwritten silently.
787
+ | Symptom | First checks |
788
+ | --- | --- |
789
+ | `indraq` is not found | Run `npm run build`, `npm link` (development), open a new terminal, then `indraq doctor` |
790
+ | Provider credentials are missing | `indraq provider list`, then `indraq provider configure <provider>` |
791
+ | Jenkins crumb/authorization error | Confirm the correct `--stage` and that the stored Jenkins account has enough permission for that operation |
792
+ | Jenkins host port is busy | Choose another validated/suggested free host port before deployment creation |
793
+ | `prebuild` cannot reconcile resources | Check `whoami` → `project status` → `provider list` → `environment list`, then rerun |
794
+ | Unified deletion stops on a provider | Repair the genuine provider failure and retry; Cloud deletion is retained until external cleanup can complete |
795
+
796
+ For command syntax, use `indraq <command> --help` rather than guessing flags.
730
797
 
731
798
  ---
732
799
 
733
- # 12. Project Cloud registration and linking
800
+ # Platform operator: IndraQ Cloud API
734
801
 
735
- ## Register an existing application without running `init`
802
+ Most CLI users can skip this section. The team operating `api.indraq.com` should use `cloud-api/README.md` as the detailed server guide.
736
803
 
737
- If you already have a project and only want IndraQ to manage its Cloud identity/infrastructure, run this from the existing project folder:
804
+ The Cloud API requires Node.js 22+, PostgreSQL, a strong `JWT_SECRET`, a persistent 64-hex-character `MASTER_KEY`, bootstrap-admin credentials for first startup, and SMTP when email password reset is enabled.
738
805
 
739
806
  ```powershell
740
- indraq project create
807
+ cd cloud-api
808
+ npm install
809
+ Copy-Item .env.example .env
810
+ npm run build
811
+ npm start
741
812
  ```
742
813
 
743
- This command is intentionally non-destructive. It:
814
+ Numbered SQL migrations in `cloud-api/sql/` run automatically at API startup. Do not casually replace `MASTER_KEY`; existing encrypted provider secrets depend on it.
744
815
 
745
- - verifies your IndraQ Cloud login
746
- - detects sensible defaults from `package.json` when possible
747
- - asks for project type/framework/port metadata where needed
748
- - creates the Cloud project
749
- - creates only `.indraq/project.json` locally
816
+ More implementation detail:
750
817
 
751
- It does **not** scaffold source code, run `npm install`, generate a Dockerfile, create AWS records, create NPM proxies, create Jenkins jobs, configure GHCR, run prebuild, or deploy anything.
818
+ ```text
819
+ cloud-api/README.md
820
+ docs/ARCHITECTURE.md
821
+ ```
822
+
823
+ ---
752
824
 
753
- Example for an existing Express API:
825
+ # Before publishing a CLI release
826
+
827
+ Run the complete verification sequence:
754
828
 
755
829
  ```powershell
756
- cd cloud-api
757
- indraq project create cloud-api --kind backend --framework express --port 4010 --health /health
830
+ npm install
831
+ npm run build
832
+ npm test
833
+ npm pack --dry-run
758
834
  ```
759
835
 
760
- After that you can run infrastructure commands independently:
836
+ Inspect `npm pack --dry-run` before publishing. The package should contain the files required at runtime and must not contain private `.env` files, tokens, credentials or unrelated development artifacts.
837
+
838
+ Test the actual tarball when making a significant release:
761
839
 
762
840
  ```powershell
763
- indraq dockerfile create
764
- indraq jenkins create-deployment
765
- indraq healthcheck list
766
- indraq healthcheck create
767
- indraq healthcheck delete
768
-
769
- indraq dns create
770
- indraq proxy create
841
+ npm pack
842
+ npm install -g .\indraq_cli-<version>.tgz
843
+ indraq --version
844
+ indraq doctor
845
+ indraq --help
771
846
  ```
772
847
 
773
- Or reconcile everything later:
848
+ Then publish only after the packaged build behaves correctly:
774
849
 
775
850
  ```powershell
776
- indraq prebuild
851
+ npm publish --dry-run
852
+ npm publish
777
853
  ```
778
854
 
779
- If an accessible Cloud project with the same name already exists, IndraQ offers to link the folder to it instead of silently creating a duplicate.
855
+ ---
780
856
 
781
- ## Sync older IndraQ project metadata
857
+ # Where to go next
782
858
 
783
- For folders already initialized by an older IndraQ metadata format, create/update the Cloud project with:
859
+ For day-to-day usage, these four commands cover most questions:
784
860
 
785
861
  ```powershell
786
- indraq project sync
787
- ```
788
-
789
- Check infrastructure associations:
790
-
791
- ```powershell
792
- indraq project status
793
- ```
794
-
795
- The local project file becomes Cloud-oriented and primarily stores the project ID.
796
-
797
- Example:
798
-
799
- ```json
800
- {
801
- "schemaVersion": 3,
802
- "projectId": "..."
803
- }
804
- ```
805
-
806
- Provider passwords/tokens are not supposed to live in that file.
807
-
808
- ## Re-link a folder when `.indraq/project.json` is missing
809
-
810
- If the local project reference is deleted accidentally, do **not** recreate the project. Run:
811
-
812
- ```powershell
813
- indraq project link
814
- ```
815
-
816
- IndraQ lists the Cloud projects the logged-in user is allowed to access. Selecting one recreates only `.indraq/project.json`; application files are not modified.
817
-
818
- Every authenticated organization user can discover and view the project catalog. `indraq project list` shows whether the current account has `VIEW` or `WRITE` access. Managers/admins can manage project membership with audited reasons:
819
-
820
- ```powershell
821
- indraq project add user
822
- indraq project delete user
823
- ```
824
-
825
- VIEW access allows discovery/linking/inspection. WRITE access is required for infrastructure-changing commands such as prebuild. Cloud project update/delete remains manager/admin controlled and audited.
826
-
827
- ## Project resource access
828
-
829
- Project membership and provider-resource access are separate. Managers/admins can grant or revoke access to AWS, NPM, Jenkins, or all supported project resources:
830
-
831
- ```powershell
832
- indraq access add user
833
- indraq access delete user
834
- ```
835
-
836
- For AWS, IndraQ generates record-name/record-type/action conditions for granted Route53 records and exact health-check ARN permissions. AWS cannot safely hide individual records if `ListResourceRecordSets` is granted, so normal-user workflows rely on the IndraQ project inventory rather than broad hosted-zone listing.
837
-
838
- For Jenkins, IndraQ synchronizes Role Strategy item roles for the selected deployment jobs.
839
-
840
- For NPM, normal users retain NPM's creator-owned `visibility=user` model. IndraQ records project/resource grants but does not switch accounts to `visibility=all`, because that would expose proxy hosts created by other users.
841
-
842
- ---
843
-
844
- # 13. Prebuild: reconcile the complete web deployment
845
-
846
- For a Cloud-linked web project, run:
847
-
848
- ```powershell
849
- indraq prebuild
850
- ```
851
-
852
- Prebuild is an infrastructure reconciler. It checks what already exists, creates missing resources, and repairs supported stale associations instead of assuming every run starts from zero.
853
-
854
- Typical order:
855
-
856
- ```text
857
- User provider credentials
858
- |
859
- v
860
- GHCR project image
861
- |
862
- v
863
- Jenkins host-port validation
864
- |
865
- v
866
- Jenkins deployment job
867
- |
868
- v
869
- Route53 record + selected existing health checks
870
- |
871
- v
872
- Verify Route53 prerequisite
873
- |
874
- v
875
- NPM proxy + SSL
876
- ```
877
-
878
- ## Missing provider configuration
879
-
880
- If required reusable credentials are missing, IndraQ warns and offers to configure them instead of immediately failing with an unexplained configuration error.
881
-
882
- ## Shared environment or custom target
883
-
884
- For infrastructure targets, users can select an admin-created shared environment.
885
-
886
- Where supported, a custom IP/hostname option remains available for exceptional cases.
887
-
888
- ---
889
-
890
- # 14. Route53 DNS
891
-
892
- Standalone DNS wizard:
893
-
894
- ```powershell
895
- indraq dns create
896
- ```
897
-
898
- Other useful commands:
899
-
900
- ```powershell
901
- indraq dns zones
902
- indraq dns records
903
- indraq dns update
904
- indraq dns delete
905
- ```
906
-
907
- Supported routing choices for managed A-record flows:
908
-
909
- ```text
910
- SIMPLE
911
- FAILOVER
912
- WEIGHTED
913
- LATENCY
914
- ```
915
-
916
- ## FAILOVER
917
-
918
- For FAILOVER, the user chooses any two environments:
919
-
920
- ```text
921
- PRIMARY target -> production
922
- SECONDARY target -> production-backup
923
- ```
924
-
925
- The environments themselves are not permanently primary/secondary.
926
-
927
- The same environment can play a different role for another DNS record.
928
-
929
- ## Route53 health checks
930
-
931
- DNS creation does **not** create health checks automatically. Users and managers select from health checks that already exist in Route53. Only an IndraQ admin can create or delete health checks:
932
-
933
- ```powershell
934
- indraq healthcheck list
935
- indraq healthcheck create
936
- indraq healthcheck delete
937
- ```
938
-
939
- `healthcheck list` is available for selection/search. `healthcheck create` asks for the real AWS endpoint settings (IP/FQDN, protocol, port, path where applicable, request interval, failure threshold, and latency measurement).
940
-
941
- Routing behavior is enforced:
942
-
943
- - `SIMPLE`: no health check is attached.
944
- - `FAILOVER`: select existing PRIMARY and SECONDARY health checks.
945
- - `WEIGHTED` / `LATENCY`: attaching an existing health check is optional.
946
-
947
- ## WEIGHTED
948
-
949
- IndraQ asks for primary/secondary weights.
950
-
951
- ## LATENCY
952
-
953
- IndraQ asks for the AWS regions associated with the selected targets when required.
954
-
955
- ## SIMPLE
956
-
957
- Only one target is required.
958
-
959
- ---
960
-
961
- # 15. Nginx Proxy Manager proxy and SSL
962
-
963
- Standalone proxy creation:
964
-
965
- ```powershell
966
- indraq proxy create api.example.com
967
- ```
968
-
969
- Update/delete:
970
-
971
- ```powershell
972
- indraq proxy update api.example.com
973
- indraq proxy delete api.example.com
974
- ```
975
-
976
- ## Route53 prerequisite
977
-
978
- IndraQ verifies that the exact Route53 record exists before creating a new NPM proxy host.
979
-
980
- If the DNS record is missing, proxy creation stops before NPM creation. This avoids creating a proxy/certificate flow for a domain that has not been routed yet.
981
-
982
- ## Forward target
983
-
984
- The user can select a shared environment, for example:
985
-
986
- ```text
987
- production — 10.0.0.10
988
- staging — 10.0.1.10
989
- ```
990
-
991
- or choose a custom IP/hostname.
992
-
993
- ## SSL choices
994
-
995
- NPM creation includes explicit SSL selection:
996
-
997
- ```text
998
- Request Let's Encrypt certificate
999
- Use an existing NPM certificate
1000
- No SSL
1001
- ```
1002
-
1003
- For Let's Encrypt, IndraQ asks for the required email and certificate options.
1004
-
1005
- For an existing certificate, IndraQ lists available NPM certificates when possible so users do not have to remember a certificate ID.
1006
-
1007
- ---
1008
-
1009
- # 16. Jenkins deployment and port validation
1010
-
1011
- IndraQ checks the requested host port before final deployment creation.
1012
-
1013
- If the port is busy, the CLI reports it immediately and suggests available alternatives instead of waiting for a pipeline failure.
1014
-
1015
- Conceptually:
1016
-
1017
- ```text
1018
- Requested port: 6200
1019
- |
1020
- +-- free -> continue
1021
- |
1022
- +-- busy -> show suggested free ports -> ask again
1023
- ```
1024
-
1025
- Jenkins remains the final authority and should still validate the port during the pipeline/deployment itself.
1026
-
1027
- ## Create only the Jenkins deployment
1028
-
1029
- If DNS/NPM setup is not wanted yet, trigger only the Jenkins seed job:
1030
-
1031
- ```powershell
1032
- indraq jenkins create-deployment
1033
- ```
1034
-
1035
- This performs the aggressive host-port check, uses the selected user's GHCR owner/image, invokes `CREATE-DEPLOYMENT`, records the Jenkins project resource, and does **not** modify Route53 or NPM.
1036
-
1037
- Create/reconcile deployment infrastructure:
1038
-
1039
- ```powershell
1040
- indraq deployment create
1041
- ```
1042
-
1043
- This is backed by the same prebuild reconciliation flow.
1044
-
1045
- Run an existing configured deployment:
1046
-
1047
- ```powershell
1048
- indraq deployment run --env production
1049
- ```
1050
-
1051
- Build/push/deploy:
1052
-
1053
- ```powershell
1054
- indraq deploy build --env production
1055
- ```
1056
-
1057
- The shared environment name is not restricted to `dev` or `prod`.
1058
-
1059
- ---
1060
-
1061
- # 17. GHCR image naming
1062
-
1063
- The image path is built from the authenticated user's selected registry owner.
1064
-
1065
- Example provider configuration:
1066
-
1067
- ```text
1068
- Registry: ghcr.io
1069
- Owner: acme-platform
1070
- ```
1071
-
1072
- Project:
1073
-
1074
- ```text
1075
- order-service
1076
- ```
1077
-
1078
- Generated repository:
1079
-
1080
- ```text
1081
- ghcr.io/acme-platform/order-service
1082
- ```
1083
-
1084
- For full-stack projects, components can use separate image names, for example:
1085
-
1086
- ```text
1087
- ghcr.io/acme-platform/order-service-frontend
1088
- ghcr.io/acme-platform/order-service-backend
1089
- ```
1090
-
1091
- ---
1092
-
1093
- # 18. NPM user management
1094
-
1095
- Create:
1096
-
1097
- ```powershell
1098
- indraq npm-user create
1099
- ```
1100
-
1101
- Update:
1102
-
1103
- ```powershell
1104
- indraq npm-user update user@example.com
1105
- ```
1106
-
1107
- Delete:
1108
-
1109
- ```powershell
1110
- indraq npm-user delete user@example.com
1111
- ```
1112
-
1113
- These commands use the current logged-in user's reusable NPM provider credential.
1114
-
1115
- ---
1116
-
1117
- # 19. Dockerfile generation
1118
-
1119
- For an existing project:
1120
-
1121
- ```powershell
1122
- indraq dockerfile create
1123
- ```
1124
-
1125
- IndraQ does not try to guess which source/configuration files your application needs. Generated Dockerfiles copy the complete Docker build context with `COPY . .`; `.dockerignore` is the source of truth for files that must stay out of the image.
1126
-
1127
- Generated Alpine runtime images install `curl`, and Docker health checks use `curl -fsS`. This keeps container health validation available for Node and Nginx images without relying on whichever BusyBox utilities happen to be present.
1128
-
1129
- The generated `.dockerignore` excludes local dependencies, Git/IndraQ metadata, logs, coverage, caches, and previous build output. IndraQ intentionally does **not** ignore `.env` or `.env.*` files, so environment files present in the project directory are included in the Docker build context and baked into the resulting image according to the company's deployment policy.
1130
-
1131
- For Node backends and Next.js applications, the runtime stage copies the complete filtered build tree from the build stage, including generated output and production dependencies. For Vite/React static frontends, the build stage receives the complete filtered project context and Nginx serves only the compiled output directory.
1132
-
1133
- Dependency installation also works whether the project has a `package-lock.json` or not: IndraQ uses `npm ci` when a lockfile exists and falls back to `npm install` otherwise.
1134
-
1135
- Optional flags include framework, Node version, port, health endpoint, Compose generation, output directory, and force overwrite.
1136
-
1137
- Use command help for the current options:
1138
-
1139
- ```powershell
1140
- indraq dockerfile create --help
1141
- ```
1142
-
1143
- ---
1144
-
1145
- # 20. Mobile projects
1146
-
1147
- IndraQ also includes mobile project configuration/build commands.
1148
-
1149
- See:
1150
-
1151
- ```powershell
1152
- indraq help mobile
1153
- ```
1154
-
1155
- or:
1156
-
1157
- ```powershell
1158
- indraq build --help
1159
- ```
1160
-
1161
- Web deployment reconciliation through Route53/NPM is intended for web frontend/backend components. Mobile build behavior is separate.
1162
-
1163
- ---
1164
-
1165
- # 21. Audit logs
1166
-
1167
- Managers and admins can view audit logs:
1168
-
1169
- ```powershell
1170
- indraq logs
1171
- ```
1172
-
1173
- Sensitive Cloud/provider actions use audit reasons so administrative changes can be traced.
1174
-
1175
- Examples include:
1176
-
1177
- - user creation/deletion
1178
- - provider credential changes
1179
- - AWS credential storage/resolution
1180
- - environment changes
1181
- - project resource reconciliation
1182
-
1183
- ---
1184
-
1185
- # 22. Doctor
1186
-
1187
- Run:
1188
-
1189
- ```powershell
1190
- indraq doctor
1191
- ```
1192
-
1193
- Doctor checks the local IndraQ/Node environment and useful project/provider conditions.
1194
-
1195
- Use it when setup feels inconsistent before manually editing local configuration files.
1196
-
1197
- ---
1198
-
1199
- # 23. Recommended first-time setup
1200
-
1201
- ## Administrator
1202
-
1203
- 1. Start IndraQ Cloud API.
1204
- 2. Login as bootstrap admin.
1205
- 3. Create shared environments.
1206
- 4. Configure your own provider credentials.
1207
- 5. Configure AWS role-policy mappings if unified AWS user creation will be used.
1208
- 6. Create managers/users as required.
1209
-
1210
- Example:
1211
-
1212
- ```powershell
1213
- indraq login
1214
- indraq environment create
1215
- indraq environment create
1216
- indraq provider configure aws
1217
- indraq provider configure npm
1218
- indraq provider configure jenkins-dev
1219
- indraq provider configure jenkins-prod
1220
- indraq provider configure ghcr
1221
- indraq user create
1222
- ```
1223
-
1224
- ## Developer
1225
-
1226
- 1. Login to IndraQ Cloud.
1227
- 2. Configure the provider credentials that belong to you.
1228
- 3. Run `indraq init`.
1229
- 4. Select full infrastructure setup, or skip it and run `indraq prebuild` later.
1230
- 5. Start coding.
1231
-
1232
- Example:
1233
-
1234
- ```powershell
1235
- indraq login
1236
- indraq configure
1237
- indraq init my-service
1238
- ```
1239
-
1240
- ---
1241
-
1242
- # 24. Recommended daily workflow
1243
-
1244
- Inside an existing project:
1245
-
1246
- ```powershell
1247
- indraq whoami
1248
- indraq project status
1249
- indraq prebuild
1250
- indraq deploy build --env production
1251
- ```
1252
-
1253
- You do not need to re-enter AWS/NPM/Jenkins/GHCR credentials for every project.
1254
-
1255
- ---
1256
-
1257
- # 25. Common troubleshooting
1258
-
1259
- ## `npm install` fails during `indraq init`
1260
-
1261
- IndraQ links the Cloud project before dependency installation and should preserve setup even when installation fails.
1262
-
1263
- Look for the component paths printed by the CLI, then run:
1264
-
1265
- ```powershell
1266
- cd <component-folder>
1267
- npm install
1268
- ```
1269
-
1270
- Also verify:
1271
-
1272
- ```powershell
1273
- node --version
1274
- npm --version
1275
- npm config get registry
1276
- ```
1277
-
1278
- Use Node.js 22 or newer.
1279
-
1280
- ## Jenkins returns `403 No valid crumb was included`
1281
-
1282
- The current Jenkins administration client fetches the Jenkins crumb together with its session cookies and sends them together to `/scriptText`.
1283
-
1284
- If a 403 continues:
1285
-
1286
- - verify the configured Jenkins account can access the required administration endpoint
1287
- - verify reverse proxies are not stripping session cookies/headers
1288
- - verify Jenkins security settings/plugins expected by your setup
1289
- - prefer a Jenkins API token where appropriate
1290
-
1291
- Run the provider configuration again if credentials changed:
1292
-
1293
- ```powershell
1294
- indraq provider configure jenkins-dev
1295
- ```
1296
-
1297
- or:
1298
-
1299
- ```powershell
1300
- indraq provider configure jenkins-prod
1301
- ```
1302
-
1303
- ## Port is already in use
1304
-
1305
- IndraQ should detect the busy Jenkins host port before creating the deployment and offer suggested alternatives.
1306
-
1307
- Choose another suggested port and continue.
1308
-
1309
- ## NPM proxy creation says Route53 is missing
1310
-
1311
- Create/reconcile DNS first:
1312
-
1313
- ```powershell
1314
- indraq dns create
1315
- ```
1316
-
1317
- or run:
1318
-
1319
- ```powershell
1320
- indraq prebuild
1321
- ```
1322
-
1323
- Then retry the proxy.
1324
-
1325
- ## GHCR organization is missing from the selection
1326
-
1327
- The organization list is based on what the GitHub token can see.
1328
-
1329
- Check token access. If the required owner still cannot be enumerated, use the manual-owner fallback in the GHCR provider wizard.
1330
-
1331
- ## AWS secret is not visible in AWS anymore
1332
-
1333
- AWS does not re-display an existing secret access key.
1334
-
1335
- If the AWS user was created through IndraQ's unified user workflow and the encrypted credential was stored successfully, the logged-in target user can run:
1336
-
1337
- ```powershell
1338
- indraq iam credentials <aws-username>
1339
- ```
1340
-
1341
- Otherwise rotate/create a new AWS access key rather than attempting to recover an unavailable secret from AWS.
1342
-
1343
- ## Cloud API refuses to start because of `MASTER_KEY`
1344
-
1345
- `MASTER_KEY` must be exactly 64 hexadecimal characters.
1346
-
1347
- Generate one with:
1348
-
1349
- ```powershell
1350
- node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
1351
- ```
1352
-
1353
- Do not replace an existing production master key if encrypted credentials already exist.
1354
-
1355
- ---
1356
-
1357
- # 26. Security model
1358
-
1359
- ## Passwords
1360
-
1361
- IndraQ Cloud account passwords are hashed with bcrypt.
1362
-
1363
- ## Reusable provider secrets
1364
-
1365
- Provider secrets must be usable again for AWS/Jenkins/NPM/GHCR API calls, so they cannot be stored as one-way password hashes.
1366
-
1367
- They are encrypted at rest using AES-256-GCM with the Cloud API `MASTER_KEY`.
1368
-
1369
- ## Project files
1370
-
1371
- Project folders should not contain reusable provider secrets.
1372
-
1373
- The normal design is:
1374
-
1375
- ```text
1376
- local project -> project ID
1377
- Cloud user -> reusable encrypted provider credentials
1378
- Cloud project -> infrastructure associations
1379
- ```
1380
-
1381
- ## AWS IAM users
1382
-
1383
- IndraQ's IAM-user flow is intended for CLI/API users. AWS console login profiles are intentionally not created.
1384
-
1385
- ## Exposed credentials
1386
-
1387
- If any AWS key, GitHub token, Jenkins token, NPM password, or other credential is pasted into logs/chat/tickets or otherwise exposed, rotate it immediately. Encryption in IndraQ Cloud does not make a publicly exposed credential safe.
1388
-
1389
- ---
1390
-
1391
- # 27. Main command reference
1392
-
1393
- Use `--help` on any command for the authoritative current flags.
1394
-
1395
- ```text
862
+ indraq --help
1396
863
  indraq configure
1397
- indraq doctor
1398
-
1399
- indraq login
1400
- indraq logout
1401
- indraq whoami
1402
-
1403
- indraq environment create
1404
- indraq environment list
1405
- indraq environment update
1406
- indraq environment delete
1407
-
1408
- indraq provider configure
1409
- indraq provider list
1410
-
1411
- indraq user list
1412
- indraq user create
1413
- indraq user update
1414
- indraq user delete
1415
- indraq password reset
1416
-
1417
- indraq iam user:create
1418
- indraq iam user:delete
1419
- indraq iam credentials
1420
-
1421
- indraq dns zones
1422
- indraq dns records
1423
- indraq dns create
1424
- indraq dns update
1425
- indraq dns delete
1426
-
1427
- indraq proxy create
1428
- indraq proxy update
1429
- indraq proxy delete
1430
-
1431
- indraq npm-user create
1432
- indraq npm-user update
1433
- indraq npm-user delete
1434
-
1435
- indraq init
1436
- indraq project create
1437
- indraq project link
1438
- indraq project sync
1439
864
  indraq project status
1440
865
  indraq prebuild
1441
-
1442
- indraq deployment create
1443
- indraq deployment run
1444
- indraq deploy build
1445
-
1446
- indraq dockerfile create
1447
- indraq logs
1448
- ```
1449
-
1450
- For the complete live command reference:
1451
-
1452
- ```powershell
1453
- indraq --help
1454
866
  ```
1455
867
 
1456
- ---
1457
-
1458
- # 28. Legacy compatibility commands
1459
-
1460
- Provider credentials now live directly in IndraQ Cloud.
1461
-
1462
- The old-style credential commands remain only for compatibility:
868
+ For deployments:
1463
869
 
1464
870
  ```powershell
1465
- indraq credentials sync
1466
- indraq credentials restore
871
+ indraq deploy build --env <environment>
1467
872
  ```
1468
873
 
1469
- They do not represent the recommended local-file-to-Cloud workflow.
1470
-
1471
- Use instead:
874
+ For Jenkins automation:
1472
875
 
1473
876
  ```powershell
1474
- indraq provider configure <provider>
1475
- indraq provider list
877
+ indraq jenkins pipelines
878
+ indraq jenkins run
1476
879
  ```
1477
880
 
1478
- ---
1479
-
1480
- # 29. Release verification
1481
-
1482
- Before deploying or distributing the CLI, run:
881
+ For exact flags on anything:
1483
882
 
1484
883
  ```powershell
1485
- npm install
1486
- npm run build
1487
- npm test
1488
- ```
1489
-
1490
- Cloud API:
1491
-
1492
- ```powershell
1493
- cd cloud-api
1494
- npm install
1495
- npm run build
884
+ indraq <command> --help
1496
885
  ```
1497
886
 
1498
- Then perform a real integration test in your own environment because mocked regression tests cannot verify private AWS, Jenkins, NPM, GHCR, DNS, firewall, or server configuration.
1499
-
1500
- A useful end-to-end test is:
1501
-
1502
- 1. login
1503
- 2. create/list environments
1504
- 3. configure provider credentials
1505
- 4. create a disposable project with `indraq init`
1506
- 5. choose full setup
1507
- 6. verify Jenkins port validation
1508
- 7. verify Route53 routing and AWS health checks
1509
- 8. verify NPM SSL/proxy
1510
- 9. verify GHCR image owner/path
1511
- 10. rerun `indraq prebuild` and confirm resources are reconciled rather than duplicated
1512
-
1513
887
  ---
1514
888
 
1515
889
  # License
1516
890
 
1517
- MIT. See `LICENSE`.
891
+ MIT © IndraQ Innovations