indraq_cli 1.5.8 → 1.9.1

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 (274) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1517 -1686
  3. package/cloud-api/.dockerignore +18 -0
  4. package/cloud-api/.env.example +14 -0
  5. package/cloud-api/Dockerfile +19 -0
  6. package/cloud-api/README.md +141 -0
  7. package/cloud-api/package-lock.json +2250 -0
  8. package/cloud-api/package.json +29 -0
  9. package/cloud-api/sql/001_init.sql +8 -0
  10. package/cloud-api/sql/002_user_providers_and_project_resources.sql +40 -0
  11. package/cloud-api/sql/003_environment_infrastructure.sql +19 -0
  12. package/cloud-api/sql/004_managed_aws_credentials.sql +20 -0
  13. package/cloud-api/sql/005_project_members_and_resource_grants.sql +22 -0
  14. package/cloud-api/sql/006_catalog_identity_password_security.sql +96 -0
  15. package/cloud-api/sql/007_aws_access_key_rotation.sql +16 -0
  16. package/cloud-api/src/index.ts +1254 -0
  17. package/cloud-api/tsconfig.json +18 -0
  18. package/dist/cli/create-program.d.ts.map +1 -1
  19. package/dist/cli/create-program.js +21 -3
  20. package/dist/cli/create-program.js.map +1 -1
  21. package/dist/cli/doctor.command.d.ts +1 -1
  22. package/dist/cli/doctor.command.d.ts.map +1 -1
  23. package/dist/cli/doctor.command.js +70 -12
  24. package/dist/cli/doctor.command.js.map +1 -1
  25. package/dist/cli/help-content.d.ts +1 -1
  26. package/dist/cli/help-content.d.ts.map +1 -1
  27. package/dist/cli/help-content.js +256 -177
  28. package/dist/cli/help-content.js.map +1 -1
  29. package/dist/modules/access/commands/access.command.d.ts +3 -0
  30. package/dist/modules/access/commands/access.command.d.ts.map +1 -0
  31. package/dist/modules/access/commands/access.command.js +226 -0
  32. package/dist/modules/access/commands/access.command.js.map +1 -0
  33. package/dist/modules/access/index.d.ts +3 -0
  34. package/dist/modules/access/index.d.ts.map +1 -0
  35. package/dist/modules/access/index.js +11 -0
  36. package/dist/modules/access/index.js.map +1 -0
  37. package/dist/modules/aws/commands/configure-aws.command.d.ts +2 -0
  38. package/dist/modules/aws/commands/configure-aws.command.d.ts.map +1 -0
  39. package/dist/modules/aws/commands/configure-aws.command.js +7 -0
  40. package/dist/modules/aws/commands/configure-aws.command.js.map +1 -0
  41. package/dist/modules/aws/commands/dns.command.d.ts +22 -0
  42. package/dist/modules/aws/commands/dns.command.d.ts.map +1 -0
  43. package/dist/modules/aws/commands/dns.command.js +229 -0
  44. package/dist/modules/aws/commands/dns.command.js.map +1 -0
  45. package/dist/modules/aws/commands/healthcheck.command.d.ts +22 -0
  46. package/dist/modules/aws/commands/healthcheck.command.d.ts.map +1 -0
  47. package/dist/modules/aws/commands/healthcheck.command.js +125 -0
  48. package/dist/modules/aws/commands/healthcheck.command.js.map +1 -0
  49. package/dist/modules/aws/commands/iam.command.d.ts +24 -0
  50. package/dist/modules/aws/commands/iam.command.d.ts.map +1 -0
  51. package/dist/modules/aws/commands/iam.command.js +219 -0
  52. package/dist/modules/aws/commands/iam.command.js.map +1 -0
  53. package/dist/modules/aws/config/aws-config.d.ts +23 -0
  54. package/dist/modules/aws/config/aws-config.d.ts.map +1 -0
  55. package/dist/modules/aws/config/aws-config.js +72 -0
  56. package/dist/modules/aws/config/aws-config.js.map +1 -0
  57. package/dist/modules/aws/index.d.ts +3 -0
  58. package/dist/modules/aws/index.d.ts.map +1 -0
  59. package/dist/modules/aws/index.js +54 -0
  60. package/dist/modules/aws/index.js.map +1 -0
  61. package/dist/modules/aws/services/aws-clients.d.ts +9 -0
  62. package/dist/modules/aws/services/aws-clients.d.ts.map +1 -0
  63. package/dist/modules/aws/services/aws-clients.js +43 -0
  64. package/dist/modules/aws/services/aws-clients.js.map +1 -0
  65. package/dist/modules/aws/services/route53-lookup.service.d.ts +9 -0
  66. package/dist/modules/aws/services/route53-lookup.service.d.ts.map +1 -0
  67. package/dist/modules/aws/services/route53-lookup.service.js +57 -0
  68. package/dist/modules/aws/services/route53-lookup.service.js.map +1 -0
  69. package/dist/modules/cloud/commands/cloud.command.d.ts +38 -0
  70. package/dist/modules/cloud/commands/cloud.command.d.ts.map +1 -0
  71. package/dist/modules/cloud/commands/cloud.command.js +443 -0
  72. package/dist/modules/cloud/commands/cloud.command.js.map +1 -0
  73. package/dist/modules/cloud/commands/credentials.command.d.ts +5 -0
  74. package/dist/modules/cloud/commands/credentials.command.d.ts.map +1 -0
  75. package/dist/modules/cloud/commands/credentials.command.js +25 -0
  76. package/dist/modules/cloud/commands/credentials.command.js.map +1 -0
  77. package/dist/modules/cloud/commands/environment.command.d.ts +6 -0
  78. package/dist/modules/cloud/commands/environment.command.d.ts.map +1 -0
  79. package/dist/modules/cloud/commands/environment.command.js +75 -0
  80. package/dist/modules/cloud/commands/environment.command.js.map +1 -0
  81. package/dist/modules/cloud/commands/provider.command.d.ts +3 -0
  82. package/dist/modules/cloud/commands/provider.command.d.ts.map +1 -0
  83. package/dist/modules/cloud/commands/provider.command.js +193 -0
  84. package/dist/modules/cloud/commands/provider.command.js.map +1 -0
  85. package/dist/modules/cloud/config/cloud-config.d.ts +19 -0
  86. package/dist/modules/cloud/config/cloud-config.d.ts.map +1 -0
  87. package/dist/modules/cloud/config/cloud-config.js +53 -0
  88. package/dist/modules/cloud/config/cloud-config.js.map +1 -0
  89. package/dist/modules/cloud/index.d.ts +3 -0
  90. package/dist/modules/cloud/index.d.ts.map +1 -0
  91. package/dist/modules/cloud/index.js +62 -0
  92. package/dist/modules/cloud/index.js.map +1 -0
  93. package/dist/modules/cloud/services/cloud-api.service.d.ts +17 -0
  94. package/dist/modules/cloud/services/cloud-api.service.d.ts.map +1 -0
  95. package/dist/modules/cloud/services/cloud-api.service.js +61 -0
  96. package/dist/modules/cloud/services/cloud-api.service.js.map +1 -0
  97. package/dist/modules/cloud/services/cloud-aws.service.d.ts +23 -0
  98. package/dist/modules/cloud/services/cloud-aws.service.d.ts.map +1 -0
  99. package/dist/modules/cloud/services/cloud-aws.service.js +26 -0
  100. package/dist/modules/cloud/services/cloud-aws.service.js.map +1 -0
  101. package/dist/modules/cloud/services/cloud-ghcr.service.d.ts +12 -0
  102. package/dist/modules/cloud/services/cloud-ghcr.service.d.ts.map +1 -0
  103. package/dist/modules/cloud/services/cloud-ghcr.service.js +31 -0
  104. package/dist/modules/cloud/services/cloud-ghcr.service.js.map +1 -0
  105. package/dist/modules/cloud/services/cloud-jenkins.service.d.ts +29 -0
  106. package/dist/modules/cloud/services/cloud-jenkins.service.d.ts.map +1 -0
  107. package/dist/modules/cloud/services/cloud-jenkins.service.js +236 -0
  108. package/dist/modules/cloud/services/cloud-jenkins.service.js.map +1 -0
  109. package/dist/modules/cloud/services/cloud-npm.service.d.ts +3 -0
  110. package/dist/modules/cloud/services/cloud-npm.service.d.ts.map +1 -0
  111. package/dist/modules/cloud/services/cloud-npm.service.js +13 -0
  112. package/dist/modules/cloud/services/cloud-npm.service.js.map +1 -0
  113. package/dist/modules/cloud/services/environment.service.d.ts +25 -0
  114. package/dist/modules/cloud/services/environment.service.d.ts.map +1 -0
  115. package/dist/modules/cloud/services/environment.service.js +21 -0
  116. package/dist/modules/cloud/services/environment.service.js.map +1 -0
  117. package/dist/modules/cloud/services/managed-aws-credential.service.d.ts +36 -0
  118. package/dist/modules/cloud/services/managed-aws-credential.service.d.ts.map +1 -0
  119. package/dist/modules/cloud/services/managed-aws-credential.service.js +35 -0
  120. package/dist/modules/cloud/services/managed-aws-credential.service.js.map +1 -0
  121. package/dist/modules/cloud/services/project-cloud.service.d.ts +28 -0
  122. package/dist/modules/cloud/services/project-cloud.service.d.ts.map +1 -0
  123. package/dist/modules/cloud/services/project-cloud.service.js +50 -0
  124. package/dist/modules/cloud/services/project-cloud.service.js.map +1 -0
  125. package/dist/modules/cloud/services/user-provider.service.d.ts +17 -0
  126. package/dist/modules/cloud/services/user-provider.service.d.ts.map +1 -0
  127. package/dist/modules/cloud/services/user-provider.service.js +25 -0
  128. package/dist/modules/cloud/services/user-provider.service.js.map +1 -0
  129. package/dist/modules/configure/configure.command.d.ts.map +1 -1
  130. package/dist/modules/configure/configure.command.js +17 -94
  131. package/dist/modules/configure/configure.command.js.map +1 -1
  132. package/dist/modules/deploy/commands/build.command.d.ts +1 -2
  133. package/dist/modules/deploy/commands/build.command.d.ts.map +1 -1
  134. package/dist/modules/deploy/commands/build.command.js +82 -124
  135. package/dist/modules/deploy/commands/build.command.js.map +1 -1
  136. package/dist/modules/deploy/index.d.ts.map +1 -1
  137. package/dist/modules/deploy/index.js +10 -30
  138. package/dist/modules/deploy/index.js.map +1 -1
  139. package/dist/modules/deploy/services/docker.service.d.ts +6 -3
  140. package/dist/modules/deploy/services/docker.service.d.ts.map +1 -1
  141. package/dist/modules/deploy/services/docker.service.js +8 -11
  142. package/dist/modules/deploy/services/docker.service.js.map +1 -1
  143. package/dist/modules/dockerfile/commands/create-dockerfile.command.d.ts +13 -0
  144. package/dist/modules/dockerfile/commands/create-dockerfile.command.d.ts.map +1 -0
  145. package/dist/modules/dockerfile/commands/create-dockerfile.command.js +39 -0
  146. package/dist/modules/dockerfile/commands/create-dockerfile.command.js.map +1 -0
  147. package/dist/modules/dockerfile/index.d.ts +3 -0
  148. package/dist/modules/dockerfile/index.d.ts.map +1 -0
  149. package/dist/modules/dockerfile/index.js +7 -0
  150. package/dist/modules/dockerfile/index.js.map +1 -0
  151. package/dist/modules/jenkins/commands/admin.command.d.ts +22 -0
  152. package/dist/modules/jenkins/commands/admin.command.d.ts.map +1 -0
  153. package/dist/modules/jenkins/commands/admin.command.js +128 -0
  154. package/dist/modules/jenkins/commands/admin.command.js.map +1 -0
  155. package/dist/modules/jenkins/commands/create-deployment.command.d.ts +13 -0
  156. package/dist/modules/jenkins/commands/create-deployment.command.d.ts.map +1 -0
  157. package/dist/modules/jenkins/commands/create-deployment.command.js +115 -0
  158. package/dist/modules/jenkins/commands/create-deployment.command.js.map +1 -0
  159. package/dist/modules/jenkins/index.d.ts +3 -0
  160. package/dist/modules/jenkins/index.d.ts.map +1 -0
  161. package/dist/modules/jenkins/index.js +28 -0
  162. package/dist/modules/jenkins/index.js.map +1 -0
  163. package/dist/modules/mobile/commands/build-mobile.command.d.ts.map +1 -1
  164. package/dist/modules/mobile/commands/build-mobile.command.js +4 -22
  165. package/dist/modules/mobile/commands/build-mobile.command.js.map +1 -1
  166. package/dist/modules/mobile/commands/configure-mobile.command.d.ts +1 -1
  167. package/dist/modules/mobile/commands/configure-mobile.command.d.ts.map +1 -1
  168. package/dist/modules/mobile/commands/configure-mobile.command.js +11 -9
  169. package/dist/modules/mobile/commands/configure-mobile.command.js.map +1 -1
  170. package/dist/modules/mobile/services/jenkins-mobile.service.d.ts +2 -2
  171. package/dist/modules/mobile/services/jenkins-mobile.service.d.ts.map +1 -1
  172. package/dist/modules/mobile/services/jenkins-mobile.service.js +1 -2
  173. package/dist/modules/mobile/services/jenkins-mobile.service.js.map +1 -1
  174. package/dist/modules/mobile/services/project.service.d.ts +2 -2
  175. package/dist/modules/mobile/services/project.service.d.ts.map +1 -1
  176. package/dist/modules/prebuild/commands/prebuild.command.d.ts +13 -0
  177. package/dist/modules/prebuild/commands/prebuild.command.d.ts.map +1 -0
  178. package/dist/modules/prebuild/commands/prebuild.command.js +507 -0
  179. package/dist/modules/prebuild/commands/prebuild.command.js.map +1 -0
  180. package/dist/modules/prebuild/index.d.ts +3 -0
  181. package/dist/modules/prebuild/index.d.ts.map +1 -0
  182. package/dist/modules/prebuild/index.js +19 -0
  183. package/dist/modules/prebuild/index.js.map +1 -0
  184. package/dist/modules/proxy/commands/configure-proxy.command.d.ts +2 -0
  185. package/dist/modules/proxy/commands/configure-proxy.command.d.ts.map +1 -0
  186. package/dist/modules/proxy/commands/configure-proxy.command.js +7 -0
  187. package/dist/modules/proxy/commands/configure-proxy.command.js.map +1 -0
  188. package/dist/modules/proxy/commands/npm-user.command.d.ts +28 -0
  189. package/dist/modules/proxy/commands/npm-user.command.d.ts.map +1 -0
  190. package/dist/modules/proxy/commands/npm-user.command.js +77 -0
  191. package/dist/modules/proxy/commands/npm-user.command.js.map +1 -0
  192. package/dist/modules/proxy/commands/proxy.command.d.ts +22 -0
  193. package/dist/modules/proxy/commands/proxy.command.d.ts.map +1 -0
  194. package/dist/modules/proxy/commands/proxy.command.js +173 -0
  195. package/dist/modules/proxy/commands/proxy.command.js.map +1 -0
  196. package/dist/modules/proxy/config/npm-config.d.ts +17 -0
  197. package/dist/modules/proxy/config/npm-config.d.ts.map +1 -0
  198. package/dist/modules/proxy/config/npm-config.js +50 -0
  199. package/dist/modules/proxy/config/npm-config.js.map +1 -0
  200. package/dist/modules/proxy/index.d.ts +3 -0
  201. package/dist/modules/proxy/index.d.ts.map +1 -0
  202. package/dist/modules/proxy/index.js +21 -0
  203. package/dist/modules/proxy/index.js.map +1 -0
  204. package/dist/modules/proxy/services/npm-api.service.d.ts +76 -0
  205. package/dist/modules/proxy/services/npm-api.service.d.ts.map +1 -0
  206. package/dist/modules/proxy/services/npm-api.service.js +82 -0
  207. package/dist/modules/proxy/services/npm-api.service.js.map +1 -0
  208. package/dist/modules/scaffold/commands/init.command.d.ts +6 -0
  209. package/dist/modules/scaffold/commands/init.command.d.ts.map +1 -0
  210. package/dist/modules/scaffold/commands/init.command.js +193 -0
  211. package/dist/modules/scaffold/commands/init.command.js.map +1 -0
  212. package/dist/modules/scaffold/config/project-metadata.d.ts +9 -0
  213. package/dist/modules/scaffold/config/project-metadata.d.ts.map +1 -0
  214. package/dist/modules/scaffold/config/project-metadata.js +75 -0
  215. package/dist/modules/scaffold/config/project-metadata.js.map +1 -0
  216. package/dist/modules/scaffold/index.d.ts +3 -0
  217. package/dist/modules/scaffold/index.d.ts.map +1 -0
  218. package/dist/modules/scaffold/index.js +7 -0
  219. package/dist/modules/scaffold/index.js.map +1 -0
  220. package/dist/modules/scaffold/services/docker-template.service.d.ts +3 -0
  221. package/dist/modules/scaffold/services/docker-template.service.d.ts.map +1 -0
  222. package/dist/modules/scaffold/services/docker-template.service.js +131 -0
  223. package/dist/modules/scaffold/services/docker-template.service.js.map +1 -0
  224. package/dist/modules/scaffold/services/filesystem.service.d.ts +7 -0
  225. package/dist/modules/scaffold/services/filesystem.service.d.ts.map +1 -0
  226. package/dist/modules/scaffold/services/filesystem.service.js +97 -0
  227. package/dist/modules/scaffold/services/filesystem.service.js.map +1 -0
  228. package/dist/modules/scaffold/services/project-template.service.d.ts +4 -0
  229. package/dist/modules/scaffold/services/project-template.service.d.ts.map +1 -0
  230. package/dist/modules/scaffold/services/project-template.service.js +82 -0
  231. package/dist/modules/scaffold/services/project-template.service.js.map +1 -0
  232. package/dist/modules/scaffold/types.d.ts +65 -0
  233. package/dist/modules/scaffold/types.d.ts.map +1 -0
  234. package/dist/modules/scaffold/types.js +3 -0
  235. package/dist/modules/scaffold/types.js.map +1 -0
  236. package/dist/modules/users/commands/user.command.d.ts +22 -0
  237. package/dist/modules/users/commands/user.command.d.ts.map +1 -0
  238. package/dist/modules/users/commands/user.command.js +350 -0
  239. package/dist/modules/users/commands/user.command.js.map +1 -0
  240. package/dist/modules/users/index.d.ts +3 -0
  241. package/dist/modules/users/index.d.ts.map +1 -0
  242. package/dist/modules/users/index.js +34 -0
  243. package/dist/modules/users/index.js.map +1 -0
  244. package/dist/modules/users/providers/aws-user.provider.d.ts +11 -0
  245. package/dist/modules/users/providers/aws-user.provider.d.ts.map +1 -0
  246. package/dist/modules/users/providers/aws-user.provider.js +129 -0
  247. package/dist/modules/users/providers/aws-user.provider.js.map +1 -0
  248. package/dist/modules/users/providers/jenkins-user.provider.d.ts +6 -0
  249. package/dist/modules/users/providers/jenkins-user.provider.d.ts.map +1 -0
  250. package/dist/modules/users/providers/jenkins-user.provider.js +97 -0
  251. package/dist/modules/users/providers/jenkins-user.provider.js.map +1 -0
  252. package/dist/modules/users/providers/npm-user.provider.d.ts +4 -0
  253. package/dist/modules/users/providers/npm-user.provider.d.ts.map +1 -0
  254. package/dist/modules/users/providers/npm-user.provider.js +47 -0
  255. package/dist/modules/users/providers/npm-user.provider.js.map +1 -0
  256. package/dist/shared/config/config-files.d.ts.map +1 -1
  257. package/dist/shared/config/config-files.js +14 -10
  258. package/dist/shared/config/config-files.js.map +1 -1
  259. package/dist/shared/github/github-api.service.d.ts.map +1 -1
  260. package/dist/shared/github/github-api.service.js +25 -37
  261. package/dist/shared/github/github-api.service.js.map +1 -1
  262. package/dist/shared/jenkins/jenkins.service.d.ts +2 -0
  263. package/dist/shared/jenkins/jenkins.service.d.ts.map +1 -1
  264. package/dist/shared/jenkins/jenkins.service.js +30 -1
  265. package/dist/shared/jenkins/jenkins.service.js.map +1 -1
  266. package/dist/shared/listing.d.ts +9 -0
  267. package/dist/shared/listing.d.ts.map +1 -0
  268. package/dist/shared/listing.js +29 -0
  269. package/dist/shared/listing.js.map +1 -0
  270. package/docs/ARCHITECTURE.md +29 -0
  271. package/docs/CREATE-DEPLOYMENT-reference.groovy +1105 -0
  272. package/package.json +76 -59
  273. package/templates/jenkins/CREATE-DEPLOYMENT.groovy +1105 -0
  274. package/templates/jenkins/Jenkinsfile-Mobile-App +759 -759
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthcheck.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/aws/commands/healthcheck.command.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,WAAW;IAAG,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CAAE;AAChF,MAAM,WAAW,iBAAiB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE;AAa5H,eAAO,MAAM,eAAe,GAAU,UAAS,WAAgB,KAAG,OAAO,CAAC,iBAAiB,EAAE,CAuB5F,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAIzE,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,SAAS,MAAM,EAAE,mBAAiB,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAO9G,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAgCtD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,OAAO,MAAM,GAAG,SAAS,EAAE,SAAS;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAiB5H,CAAC"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deleteHealthCheck = exports.createHealthCheck = exports.selectExistingHealthCheck = exports.listHealthChecks = exports.getHealthChecks = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const node_net_1 = require("node:net");
10
+ const client_route_53_1 = require("@aws-sdk/client-route-53");
11
+ const cloud_api_service_1 = require("../../cloud/services/cloud-api.service");
12
+ const cloud_aws_service_1 = require("../../cloud/services/cloud-aws.service");
13
+ const requireAdmin = async () => {
14
+ const me = await new cloud_api_service_1.CloudApiService().request('/auth/me');
15
+ if (me.role !== 'admin')
16
+ throw new Error('Only IndraQ admins can create or delete Route53 health checks. Users/managers can list and select existing health checks.');
17
+ };
18
+ const limitResults = (items, options) => {
19
+ if (options.all)
20
+ return items;
21
+ const n = Number(options.limit || 10);
22
+ return items.slice(0, Number.isInteger(n) && n > 0 ? n : 10);
23
+ };
24
+ const getHealthChecks = async (options = {}) => {
25
+ const { route53 } = await (0, cloud_aws_service_1.createCloudAwsClients)('List Route53 health checks');
26
+ const rows = [];
27
+ let marker;
28
+ do {
29
+ const output = await route53.send(new client_route_53_1.ListHealthChecksCommand(marker ? { Marker: marker } : {}));
30
+ rows.push(...(output.HealthChecks || []));
31
+ marker = output.IsTruncated ? output.NextMarker : undefined;
32
+ } while (marker);
33
+ const mapped = [];
34
+ for (const item of rows) {
35
+ if (!item.Id || !item.HealthCheckConfig)
36
+ continue;
37
+ let name = item.Id;
38
+ try {
39
+ const tags = await route53.send(new client_route_53_1.ListTagsForResourceCommand({ ResourceType: 'healthcheck', ResourceId: item.Id }));
40
+ name = tags.ResourceTagSet?.Tags?.find((tag) => tag.Key === 'Name')?.Value || name;
41
+ }
42
+ catch { /* name tag is optional */ }
43
+ const cfg = item.HealthCheckConfig;
44
+ const target = cfg.FullyQualifiedDomainName || cfg.IPAddress || 'calculated/CloudWatch';
45
+ mapped.push({ id: item.Id, name, type: String(cfg.Type || ''), target, ...(cfg.Port ? { port: cfg.Port } : {}), ...(cfg.ResourcePath ? { path: cfg.ResourcePath } : {}) });
46
+ }
47
+ const q = (options.search || '').trim().toLowerCase();
48
+ return limitResults(q ? mapped.filter((item) => `${item.name} ${item.id} ${item.target} ${item.type}`.toLowerCase().includes(q)) : mapped, options);
49
+ };
50
+ exports.getHealthChecks = getHealthChecks;
51
+ const listHealthChecks = async (options) => {
52
+ const rows = await (0, exports.getHealthChecks)(options);
53
+ if (!rows.length) {
54
+ console.log(chalk_1.default.yellow('⚠ No matching Route53 health checks found.'));
55
+ return;
56
+ }
57
+ console.table(rows.map((row) => ({ name: row.name, id: row.id, type: row.type, target: row.target, port: row.port || '', path: row.path || '' })));
58
+ };
59
+ exports.listHealthChecks = listHealthChecks;
60
+ const selectExistingHealthCheck = async (message, allowNone = false) => {
61
+ const rows = await (0, exports.getHealthChecks)({ all: true });
62
+ if (!rows.length)
63
+ throw new Error('No Route53 health checks exist. Ask an IndraQ admin to create one with `indraq healthcheck create`.');
64
+ const choices = rows.map((row) => ({ name: `${row.name} — ${row.type} ${row.target}${row.port ? `:${row.port}` : ''}${row.path || ''}`, value: row.id }));
65
+ if (allowNone)
66
+ choices.unshift({ name: 'No health check', value: '' });
67
+ const id = (await inquirer_1.default.prompt([{ type: 'list', name: 'id', message, choices }])).id;
68
+ return id || undefined;
69
+ };
70
+ exports.selectExistingHealthCheck = selectExistingHealthCheck;
71
+ const createHealthCheck = async () => {
72
+ await requireAdmin();
73
+ const answer = await inquirer_1.default.prompt([
74
+ { type: 'input', name: 'name', message: 'Health check name:', validate: (v) => v.trim().length >= 2 || 'Name is required.' },
75
+ { type: 'list', name: 'endpointMode', message: 'Endpoint:', choices: [{ name: 'IPv4 address', value: 'ip' }, { name: 'Domain / FQDN', value: 'hostname' }] },
76
+ { type: 'input', name: 'endpoint', message: 'Server IP / FQDN:', validate: (v, a) => a.endpointMode === 'ip' ? ((0, node_net_1.isIP)(v.trim()) === 4 || 'Enter a valid IPv4 address.') : (!!v.trim() || 'Domain is required.') },
77
+ { type: 'list', name: 'protocol', message: 'Protocol:', choices: ['HTTP', 'HTTPS', 'TCP'], default: 'HTTPS' },
78
+ { type: 'number', name: 'port', message: 'Port:', default: 443, validate: (v) => Number.isInteger(v) && v > 0 && v <= 65535 || 'Use 1-65535.' },
79
+ { type: 'input', name: 'path', message: 'Path:', default: '/health', when: (a) => a.protocol !== 'TCP', validate: (v) => v.trim().startsWith('/') || 'Path must start with /.' },
80
+ { type: 'list', name: 'requestInterval', message: 'Request interval:', choices: [{ name: '30 seconds', value: 30 }, { name: '10 seconds', value: 10 }], default: 30 },
81
+ { type: 'number', name: 'failureThreshold', message: 'Failure threshold:', default: 3, validate: (v) => Number.isInteger(v) && v >= 1 && v <= 10 || 'Use 1-10.' },
82
+ { type: 'confirm', name: 'measureLatency', message: 'Measure latency?', default: false }
83
+ ]);
84
+ const { route53 } = await (0, cloud_aws_service_1.createCloudAwsClients)('Create Route53 health check');
85
+ const output = await route53.send(new client_route_53_1.CreateHealthCheckCommand({
86
+ CallerReference: `indraq-${Date.now()}-${Math.random()}`,
87
+ HealthCheckConfig: {
88
+ ...(answer.endpointMode === 'ip' ? { IPAddress: answer.endpoint.trim() } : { FullyQualifiedDomainName: answer.endpoint.trim() }),
89
+ Port: answer.port,
90
+ Type: answer.protocol,
91
+ ...(answer.protocol === 'TCP' ? {} : { ResourcePath: answer.path.trim() || '/' }),
92
+ RequestInterval: answer.requestInterval,
93
+ FailureThreshold: answer.failureThreshold,
94
+ MeasureLatency: answer.measureLatency
95
+ }
96
+ }));
97
+ const id = output.HealthCheck?.Id;
98
+ if (!id)
99
+ throw new Error('AWS did not return a health-check ID.');
100
+ await route53.send(new client_route_53_1.ChangeTagsForResourceCommand({ ResourceType: 'healthcheck', ResourceId: id, AddTags: [{ Key: 'Name', Value: answer.name.trim().slice(0, 128) }] }));
101
+ console.log(chalk_1.default.green(`✓ Health check created: ${answer.name.trim()} (${id}).`));
102
+ };
103
+ exports.createHealthCheck = createHealthCheck;
104
+ const deleteHealthCheck = async (idArg, options) => {
105
+ await requireAdmin();
106
+ let id = idArg;
107
+ let selected;
108
+ if (!id) {
109
+ const rows = await (0, exports.getHealthChecks)({ all: true, ...(options.search ? { search: options.search } : {}) });
110
+ if (!rows.length)
111
+ throw new Error('No Route53 health checks found.');
112
+ id = (await inquirer_1.default.prompt([{ type: 'list', name: 'id', message: 'Health check to delete:', choices: rows.map((row) => ({ name: `${row.name} — ${row.type} ${row.target}`, value: row.id })) }])).id;
113
+ selected = rows.find((row) => row.id === id);
114
+ }
115
+ if (!options.yes) {
116
+ const ok = (await inquirer_1.default.prompt([{ type: 'confirm', name: 'ok', message: `Delete health check ${selected?.name || id}?`, default: false }])).ok;
117
+ if (!ok)
118
+ return;
119
+ }
120
+ const { route53 } = await (0, cloud_aws_service_1.createCloudAwsClients)('Delete Route53 health check');
121
+ await route53.send(new client_route_53_1.DeleteHealthCheckCommand({ HealthCheckId: id }));
122
+ console.log(chalk_1.default.green(`✓ Health check ${selected?.name || id} deleted.`));
123
+ };
124
+ exports.deleteHealthCheck = deleteHealthCheck;
125
+ //# sourceMappingURL=healthcheck.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthcheck.command.js","sourceRoot":"","sources":["../../../../src/modules/aws/commands/healthcheck.command.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,wDAAgC;AAChC,uCAAgC;AAChC,8DAOkC;AAClC,8EAAyE;AACzE,8EAA+E;AAK/E,MAAM,YAAY,GAAG,KAAK,IAAmB,EAAE;IAC7C,MAAM,EAAE,GAAG,MAAM,IAAI,mCAAe,EAAE,CAAC,OAAO,CAAmB,UAAU,CAAC,CAAC;IAC7E,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,2HAA2H,CAAC,CAAC;AACxK,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAI,KAAU,EAAE,OAAoB,EAAO,EAAE;IAChE,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEK,MAAM,eAAe,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAgC,EAAE;IAC/F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,yCAAqB,EAAC,4BAA4B,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,IAAI,MAA0B,CAAC;IAC/B,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,yCAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,CAAC,QAAQ,MAAM,EAAE;IACjB,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,SAAS;QAClD,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,4CAA0B,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtH,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,SAAS,IAAI,uBAAuB,CAAC;QACxF,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7K,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtJ,CAAC,CAAC;AAvBW,QAAA,eAAe,mBAuB1B;AAEK,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAoB,EAAiB,EAAE;IAC5E,MAAM,IAAI,GAAG,MAAM,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACtG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACrJ,CAAC,CAAC;AAJW,QAAA,gBAAgB,oBAI3B;AAEK,MAAM,yBAAyB,GAAG,KAAK,EAAE,OAAe,EAAE,SAAS,GAAG,KAAK,EAA+B,EAAE;IACjH,MAAM,IAAI,GAAG,MAAM,IAAA,uBAAe,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;IACzI,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1J,IAAI,SAAS;QAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,CAAC,MAAM,kBAAQ,CAAC,MAAM,CAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,OAAO,EAAE,IAAI,SAAS,CAAC;AACzB,CAAC,CAAC;AAPW,QAAA,yBAAyB,6BAOpC;AAEK,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;IACzD,MAAM,YAAY,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAEjC;QACD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,mBAAmB,EAAE;QACpI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;QAC5J,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,CAA4B,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,eAAI,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,qBAAqB,CAAC,EAAE;QACnP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,MAAM,EAAC,OAAO,EAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;QAC3G,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,cAAc,EAAE;QACvJ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAwB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,yBAAyB,EAAE;QAC/M,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACrK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE;QACzK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;KACzF,CAAC,CAAC;IACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,yCAAqB,EAAC,6BAA6B,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,0CAAwB,CAAC;QAC7D,eAAe,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;QACxD,iBAAiB,EAAE;YACjB,GAAG,CAAC,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAChI,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;YACjF,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC;KACF,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAClE,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,8CAA4B,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3K,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACrF,CAAC,CAAC;AAhCW,QAAA,iBAAiB,qBAgC5B;AAEK,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAyB,EAAE,OAA2C,EAAiB,EAAE;IAC/H,MAAM,YAAY,EAAE,CAAC;IACrB,IAAI,EAAE,GAAG,KAAK,CAAC;IACf,IAAI,QAAuC,CAAC;IAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,IAAA,uBAAe,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrE,EAAE,GAAG,CAAC,MAAM,kBAAQ,CAAC,MAAM,CAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtN,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,MAAM,kBAAQ,CAAC,MAAM,CAAkB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAuB,QAAQ,EAAE,IAAI,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnK,IAAI,CAAC,EAAE;YAAE,OAAO;IAClB,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,yCAAqB,EAAC,6BAA6B,CAAC,CAAC;IAC/E,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,0CAAwB,CAAC,EAAE,aAAa,EAAE,EAAG,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,QAAQ,EAAE,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B"}
@@ -0,0 +1,24 @@
1
+ import { IAMClient } from '@aws-sdk/client-iam';
2
+ import { type ListCliOptions } from '../../../shared/listing';
3
+ export interface CreateIamUserOptions {
4
+ policies?: string;
5
+ createAccessKey?: boolean;
6
+ consoleAccess?: boolean;
7
+ password?: string;
8
+ requirePasswordReset?: boolean;
9
+ }
10
+ export interface IamListOptions extends ListCliOptions {
11
+ policies?: string;
12
+ }
13
+ export declare const listIamUsers: (options: ListCliOptions) => Promise<void>;
14
+ export declare const updateIamUser: (usernameArg: string | undefined, options: IamListOptions) => Promise<void>;
15
+ export declare const createIamUser: (usernameArg: string | undefined, options: CreateIamUserOptions) => Promise<void>;
16
+ export declare const purgeIamUserDependencies: (iam: IAMClient, username: string) => Promise<void>;
17
+ export declare const deleteIamUser: (usernameArg: string | undefined, yes?: boolean, options?: ListCliOptions) => Promise<void>;
18
+ export declare const showStoredIamCredentials: (usernameArg?: string) => Promise<void>;
19
+ interface RotateAwsAccessKeyOptions extends ListCliOptions {
20
+ reason?: string;
21
+ }
22
+ export declare const rotateStoredIamAccessKey: (usernameArg: string | undefined, options?: RotateAwsAccessKeyOptions) => Promise<void>;
23
+ export {};
24
+ //# sourceMappingURL=iam.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iam.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/aws/commands/iam.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,SAAS,EAEV,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAK3F,MAAM,WAAW,oBAAoB;IAAG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAAE;AACnK,MAAM,WAAW,cAAe,SAAQ,cAAc;IAAG,QAAQ,CAAC,EAAE,MAAM,CAAC;CAAE;AAqB7E,eAAO,MAAM,YAAY,GAAU,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CAGxE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CAY1G,CAAC;AAGF,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,SAAS,oBAAoB,KAAG,OAAO,CAAC,IAAI,CAkBhH,CAAC;AAKF,eAAO,MAAM,wBAAwB,GAAU,KAAK,SAAS,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAU7F,CAAC;AACF,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,aAAW,EAAE,UAAS,cAAmB,KAAG,OAAO,CAAC,IAAI,CAM5H,CAAC;AAGF,eAAO,MAAM,wBAAwB,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,IAAI,CAajF,CAAC;AAGF,UAAU,yBAA0B,SAAQ,cAAc;IAAG,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE;AAG/E,eAAO,MAAM,wBAAwB,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,UAAS,yBAA8B,KAAG,OAAO,CAAC,IAAI,CA0DrI,CAAC"}
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.rotateStoredIamAccessKey = exports.showStoredIamCredentials = exports.deleteIamUser = exports.purgeIamUserDependencies = exports.createIamUser = exports.updateIamUser = exports.listIamUsers = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const client_iam_1 = require("@aws-sdk/client-iam");
10
+ const aws_clients_1 = require("../services/aws-clients");
11
+ const cloud_aws_service_1 = require("../../cloud/services/cloud-aws.service");
12
+ const managed_aws_credential_service_1 = require("../../cloud/services/managed-aws-credential.service");
13
+ const listing_1 = require("../../../shared/listing");
14
+ const cloud_api_service_1 = require("../../cloud/services/cloud-api.service");
15
+ const splitPolicyArns = (value) => (value || '').split(',').map((item) => item.trim()).filter(Boolean);
16
+ const isMissing = (error) => ['NoSuchEntity', 'NoSuchEntityException'].includes(error.name || '');
17
+ const allIamUsers = async () => {
18
+ const { iam } = await (0, cloud_aws_service_1.createCloudAwsClients)('List AWS IAM users from CLI');
19
+ const users = [];
20
+ let Marker;
21
+ do {
22
+ const page = await iam.send(new client_iam_1.ListUsersCommand({ ...(Marker ? { Marker } : {}) }));
23
+ users.push(...(page.Users || []));
24
+ Marker = page.IsTruncated ? page.Marker : undefined;
25
+ } while (Marker);
26
+ return users;
27
+ };
28
+ const selectIamUser = async (username, options = {}) => {
29
+ if (username?.trim())
30
+ return username.trim();
31
+ const users = (0, listing_1.filterAndLimit)(await allIamUsers(), options, (u) => `${u.UserName || ''} ${u.Arn || ''}`);
32
+ if (!users.length)
33
+ throw new Error('No matching AWS IAM users were found.');
34
+ return (await inquirer_1.default.prompt([{ type: 'list', name: 'username', message: 'AWS IAM user:', pageSize: 15, choices: users.filter((u) => u.UserName).map((u) => ({ name: `${u.UserName}${u.CreateDate ? ` — ${u.CreateDate.toISOString()}` : ''}`, value: u.UserName })) }])).username;
35
+ };
36
+ const listIamUsers = async (options) => {
37
+ const users = (0, listing_1.filterAndLimit)(await allIamUsers(), options, (u) => `${u.UserName || ''} ${u.Arn || ''}`);
38
+ console.table(users.map((u) => ({ username: u.UserName || '', arn: u.Arn || '', created: u.CreateDate?.toISOString() || '' })));
39
+ };
40
+ exports.listIamUsers = listIamUsers;
41
+ const updateIamUser = async (usernameArg, options) => {
42
+ const username = await selectIamUser(usernameArg, options);
43
+ let policies = splitPolicyArns(options.policies);
44
+ if (!policies.length) {
45
+ const answer = await inquirer_1.default.prompt([{ type: 'input', name: 'policies', message: 'Managed policy ARNs to attach (comma-separated):', validate: (v) => splitPolicyArns(v).length > 0 || 'Enter at least one policy ARN.' }]);
46
+ policies = splitPolicyArns(answer.policies);
47
+ }
48
+ const { iam } = await (0, cloud_aws_service_1.createCloudAwsClients)('Update AWS IAM user from CLI');
49
+ try {
50
+ for (const PolicyArn of policies)
51
+ await iam.send(new client_iam_1.AttachUserPolicyCommand({ UserName: username, PolicyArn }));
52
+ console.log(chalk_1.default.green(`✓ IAM user ${username} updated. Attached ${policies.length} managed policy/policies.`));
53
+ }
54
+ catch (error) {
55
+ throw new Error((0, aws_clients_1.describeAwsError)(error), { cause: error });
56
+ }
57
+ };
58
+ exports.updateIamUser = updateIamUser;
59
+ const createIamUser = async (usernameArg, options) => {
60
+ const username = usernameArg || (await inquirer_1.default.prompt([{ type: 'input', name: 'username', message: 'IAM username:', validate: (v) => !!v.trim() || 'Required' }])).username.trim();
61
+ if (options.consoleAccess)
62
+ throw new Error('IndraQ creates CLI-only AWS users. Console login profiles are intentionally disabled.');
63
+ const { iam } = await (0, cloud_aws_service_1.createCloudAwsClients)('Manage IAM user from CLI');
64
+ try {
65
+ await iam.send(new client_iam_1.CreateUserCommand({ UserName: username }));
66
+ for (const PolicyArn of splitPolicyArns(options.policies))
67
+ await iam.send(new client_iam_1.AttachUserPolicyCommand({ UserName: username, PolicyArn }));
68
+ const shouldCreateKey = options.createAccessKey !== false;
69
+ if (shouldCreateKey) {
70
+ const output = await iam.send(new client_iam_1.CreateAccessKeyCommand({ UserName: username }));
71
+ const key = output.AccessKey;
72
+ if (!key?.AccessKeyId || !key.SecretAccessKey)
73
+ throw new Error('AWS created the IAM user but did not return a complete access key.');
74
+ console.log(chalk_1.default.green(`✓ IAM CLI user ${username} created.`));
75
+ console.log(chalk_1.default.yellow('Save this secret now; AWS will not show it again.'));
76
+ console.log(`AWS_ACCESS_KEY_ID=${key.AccessKeyId}`);
77
+ console.log(`AWS_SECRET_ACCESS_KEY=${key.SecretAccessKey}`);
78
+ }
79
+ else
80
+ console.log(chalk_1.default.green(`✓ IAM CLI user ${username} created without an access key.`));
81
+ }
82
+ catch (error) {
83
+ throw new Error((0, aws_clients_1.describeAwsError)(error), { cause: error });
84
+ }
85
+ };
86
+ exports.createIamUser = createIamUser;
87
+ const deleteLoginProfileIfPresent = async (iam, username) => {
88
+ try {
89
+ await iam.send(new client_iam_1.DeleteLoginProfileCommand({ UserName: username }));
90
+ }
91
+ catch (error) {
92
+ if (!isMissing(error))
93
+ throw error;
94
+ }
95
+ };
96
+ const purgeIamUserDependencies = async (iam, username) => {
97
+ await deleteLoginProfileIfPresent(iam, username);
98
+ const attached = await iam.send(new client_iam_1.ListAttachedUserPoliciesCommand({ UserName: username }));
99
+ for (const item of attached.AttachedPolicies || [])
100
+ if (item.PolicyArn)
101
+ await iam.send(new client_iam_1.DetachUserPolicyCommand({ UserName: username, PolicyArn: item.PolicyArn }));
102
+ const inline = await iam.send(new client_iam_1.ListUserPoliciesCommand({ UserName: username }));
103
+ for (const PolicyName of inline.PolicyNames || [])
104
+ await iam.send(new client_iam_1.DeleteUserPolicyCommand({ UserName: username, PolicyName }));
105
+ const groups = await iam.send(new client_iam_1.ListGroupsForUserCommand({ UserName: username }));
106
+ for (const group of groups.Groups || [])
107
+ if (group.GroupName)
108
+ await iam.send(new client_iam_1.RemoveUserFromGroupCommand({ UserName: username, GroupName: group.GroupName }));
109
+ const keys = await iam.send(new client_iam_1.ListAccessKeysCommand({ UserName: username }));
110
+ for (const key of keys.AccessKeyMetadata || [])
111
+ if (key.AccessKeyId)
112
+ await iam.send(new client_iam_1.DeleteAccessKeyCommand({ UserName: username, AccessKeyId: key.AccessKeyId }));
113
+ };
114
+ exports.purgeIamUserDependencies = purgeIamUserDependencies;
115
+ const deleteIamUser = async (usernameArg, yes = false, options = {}) => {
116
+ const username = await selectIamUser(usernameArg, options);
117
+ if (!yes) {
118
+ const answer = await inquirer_1.default.prompt([{ type: 'confirm', name: 'confirmed', message: `Permanently delete IAM user ${username}?`, default: false }]);
119
+ if (!answer.confirmed) {
120
+ console.log(chalk_1.default.yellow('IAM user deletion cancelled.'));
121
+ return;
122
+ }
123
+ }
124
+ const { iam } = await (0, cloud_aws_service_1.createCloudAwsClients)('Manage IAM user from CLI');
125
+ try {
126
+ await (0, exports.purgeIamUserDependencies)(iam, username);
127
+ await iam.send(new client_iam_1.DeleteUserCommand({ UserName: username }));
128
+ console.log(chalk_1.default.green(`✓ IAM user ${username} deleted.`));
129
+ }
130
+ catch (error) {
131
+ throw new Error((0, aws_clients_1.describeAwsError)(error), { cause: error });
132
+ }
133
+ };
134
+ exports.deleteIamUser = deleteIamUser;
135
+ const showStoredIamCredentials = async (usernameArg) => {
136
+ const stored = await (0, managed_aws_credential_service_1.listMyManagedAwsCredentials)();
137
+ if (!stored.length)
138
+ throw new Error('No AWS IAM credentials are stored for your IndraQ Cloud account. Ask an admin/manager to create your unified user with AWS enabled.');
139
+ let username = usernameArg?.trim();
140
+ if (username) {
141
+ if (!stored.some((item) => item.aws_username === username))
142
+ throw new Error(`No stored AWS credentials were found for ${username}.`);
143
+ }
144
+ else if (stored.length === 1)
145
+ username = stored[0].aws_username;
146
+ else
147
+ username = (await inquirer_1.default.prompt([{ type: 'list', name: 'username', message: 'AWS IAM user:', choices: stored.map((item) => ({ name: `${item.aws_username} (${item.access_key_id})`, value: item.aws_username })) }])).username;
148
+ const reason = (await inquirer_1.default.prompt([{ type: 'input', name: 'reason', message: 'Reason for revealing the stored AWS secret:', default: 'Use my AWS CLI credentials', validate: (v) => v.trim().length >= 3 || 'Reason is required.' }])).reason.trim();
149
+ const credential = await (0, managed_aws_credential_service_1.resolveMyManagedAwsCredential)(username, reason);
150
+ console.log(chalk_1.default.yellow('Sensitive credential output. Do not paste this into chat, tickets, or source control.'));
151
+ console.log(`AWS_ACCESS_KEY_ID=${credential.accessKeyId}`);
152
+ console.log(`AWS_SECRET_ACCESS_KEY=${credential.secretAccessKey}`);
153
+ };
154
+ exports.showStoredIamCredentials = showStoredIamCredentials;
155
+ const rotateStoredIamAccessKey = async (usernameArg, options = {}) => {
156
+ const api = new cloud_api_service_1.CloudApiService();
157
+ const me = await api.request('/auth/me');
158
+ let awsUsername = usernameArg?.trim();
159
+ let targetCloudUserId;
160
+ if (me.role === 'user') {
161
+ const rows = (0, listing_1.filterAndLimit)(await (0, managed_aws_credential_service_1.listMyManagedAwsCredentials)(), options, (item) => `${item.aws_username} ${item.access_key_id}`);
162
+ if (awsUsername) {
163
+ const match = rows.find((item) => item.aws_username.toLowerCase() === awsUsername.toLowerCase());
164
+ if (!match)
165
+ throw new Error(`You do not have a stored AWS credential for ${awsUsername}.`);
166
+ awsUsername = match.aws_username;
167
+ }
168
+ else {
169
+ if (!rows.length)
170
+ throw new Error('No managed AWS credentials are available for your IndraQ account.');
171
+ awsUsername = rows.length === 1 ? rows[0].aws_username : (await inquirer_1.default.prompt([{
172
+ type: 'list', name: 'username', message: 'AWS IAM access key to rotate:', pageSize: 15,
173
+ choices: rows.map((item) => ({ name: `${item.aws_username} (${item.access_key_id})`, value: item.aws_username }))
174
+ }])).username;
175
+ }
176
+ }
177
+ else {
178
+ const queryOptions = awsUsername ? { search: awsUsername, all: true } : options;
179
+ const rows = await (0, managed_aws_credential_service_1.listManagedAwsCredentialsForManagement)((0, listing_1.queryString)(queryOptions));
180
+ const matching = awsUsername
181
+ ? rows.filter((item) => item.aws_username.toLowerCase() === awsUsername.toLowerCase() || item.email.toLowerCase() === awsUsername.toLowerCase() || item.name.toLowerCase() === awsUsername.toLowerCase())
182
+ : rows;
183
+ if (!matching.length)
184
+ throw new Error(awsUsername ? `No managed AWS credential was found for ${awsUsername}.` : 'No managed AWS credentials are available to manage.');
185
+ const chosen = matching.length === 1 ? matching[0] : (() => undefined)();
186
+ const selected = chosen || await (async () => {
187
+ const id = (await inquirer_1.default.prompt([{
188
+ type: 'list', name: 'id', message: 'User / AWS IAM key to rotate:', pageSize: 15,
189
+ choices: matching.map((item) => ({ name: `${item.email} — ${item.aws_username} (${item.user_role}) — ${item.access_key_id}`, value: item.id }))
190
+ }])).id;
191
+ return matching.find((item) => item.id === id);
192
+ })();
193
+ awsUsername = selected.aws_username;
194
+ targetCloudUserId = selected.cloud_user_id;
195
+ }
196
+ const reason = options.reason?.trim() || (await inquirer_1.default.prompt([{
197
+ type: 'input', name: 'reason', message: 'Reason for rotating this AWS access key:', default: me.role === 'user' ? 'Rotate my AWS access key' : 'Rotate managed AWS access key',
198
+ validate: (value) => value.trim().length >= 3 || 'Reason is required.'
199
+ }])).reason.trim();
200
+ const confirm = await inquirer_1.default.prompt([{
201
+ type: 'confirm', name: 'ok', default: false,
202
+ message: `Create a replacement access key for ${awsUsername} and delete the previous IndraQ-managed key?`
203
+ }]);
204
+ if (!confirm.ok) {
205
+ console.log(chalk_1.default.yellow('AWS access-key rotation cancelled.'));
206
+ return;
207
+ }
208
+ const rotated = me.role === 'user'
209
+ ? await (0, managed_aws_credential_service_1.rotateMyManagedAwsCredential)(awsUsername, reason)
210
+ : await (0, managed_aws_credential_service_1.rotateManagedAwsCredentialForUser)(targetCloudUserId, awsUsername, reason);
211
+ console.log(chalk_1.default.green(`✓ AWS access key rotated for ${rotated.awsUsername}.`));
212
+ if (rotated.previousAccessKeyId)
213
+ console.log(chalk_1.default.gray(` Previous key removed: ${rotated.previousAccessKeyId}`));
214
+ console.log(chalk_1.default.yellow('Sensitive credential output. IndraQ also stored this replacement key encrypted for later recovery.'));
215
+ console.log(`AWS_ACCESS_KEY_ID=${rotated.accessKeyId}`);
216
+ console.log(`AWS_SECRET_ACCESS_KEY=${rotated.secretAccessKey}`);
217
+ };
218
+ exports.rotateStoredIamAccessKey = rotateStoredIamAccessKey;
219
+ //# sourceMappingURL=iam.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iam.command.js","sourceRoot":"","sources":["../../../../src/modules/aws/commands/iam.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface AwsProjectConfig {
2
+ schemaVersion: 1;
3
+ region: string;
4
+ hostedZoneId?: string;
5
+ }
6
+ export interface AwsLocalConfig {
7
+ schemaVersion: 1;
8
+ accessKeyId: string;
9
+ secretAccessKey: string;
10
+ sessionToken?: string;
11
+ }
12
+ export declare const getAwsProjectConfig: () => AwsProjectConfig | null;
13
+ export declare const getAwsLocalConfig: () => AwsLocalConfig | null;
14
+ export declare const saveAwsConfig: (project: AwsProjectConfig, local: AwsLocalConfig) => void;
15
+ export declare const requireAwsConfig: () => {
16
+ project: AwsProjectConfig;
17
+ local: AwsLocalConfig;
18
+ };
19
+ export declare const getAwsConfigPaths: () => {
20
+ shared: string;
21
+ local: string;
22
+ };
23
+ //# sourceMappingURL=aws-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-config.d.ts","sourceRoot":"","sources":["../../../../src/modules/aws/config/aws-config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,eAAO,MAAM,mBAAmB,QAAO,gBAAgB,GAAG,IAWzD,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,cAAc,GAAG,IAerD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAS,gBAAgB,EAAE,OAAO,cAAc,KAAG,IAOhF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAKrF,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAGlE,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAwsConfigPaths = exports.requireAwsConfig = exports.saveAwsConfig = exports.getAwsLocalConfig = exports.getAwsProjectConfig = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const config_files_1 = require("../../../shared/config/config-files");
6
+ const SHARED_FILENAME = 'aws.json';
7
+ const LOCAL_FILENAME = 'aws.local.json';
8
+ const readJson = (filename) => {
9
+ const file = (0, config_files_1.getIndraqConfigPath)(filename);
10
+ try {
11
+ return JSON.parse((0, node_fs_1.readFileSync)(file, 'utf8'));
12
+ }
13
+ catch (error) {
14
+ const message = error instanceof Error ? error.message : 'unknown error';
15
+ throw new Error(`Unable to read ${file}: ${message}`);
16
+ }
17
+ };
18
+ const getAwsProjectConfig = () => {
19
+ if (!(0, node_fs_1.existsSync)((0, config_files_1.getIndraqConfigPath)(SHARED_FILENAME)))
20
+ return null;
21
+ const value = readJson(SHARED_FILENAME);
22
+ if (value.schemaVersion !== 1 || typeof value.region !== 'string' || !value.region.trim()) {
23
+ throw new Error(`Invalid AWS project configuration in ${(0, config_files_1.getIndraqConfigPath)(SHARED_FILENAME)}.`);
24
+ }
25
+ const config = { schemaVersion: 1, region: value.region.trim() };
26
+ if (typeof value.hostedZoneId === 'string' && value.hostedZoneId.trim()) {
27
+ config.hostedZoneId = value.hostedZoneId.trim();
28
+ }
29
+ return config;
30
+ };
31
+ exports.getAwsProjectConfig = getAwsProjectConfig;
32
+ const getAwsLocalConfig = () => {
33
+ if (!(0, node_fs_1.existsSync)((0, config_files_1.getIndraqConfigPath)(LOCAL_FILENAME)))
34
+ return null;
35
+ const value = readJson(LOCAL_FILENAME);
36
+ if (value.schemaVersion !== 1 ||
37
+ typeof value.accessKeyId !== 'string' || !value.accessKeyId.trim() ||
38
+ typeof value.secretAccessKey !== 'string' || !value.secretAccessKey)
39
+ throw new Error(`Invalid local AWS credentials in ${(0, config_files_1.getIndraqConfigPath)(LOCAL_FILENAME)}.`);
40
+ const config = {
41
+ schemaVersion: 1,
42
+ accessKeyId: value.accessKeyId.trim(),
43
+ secretAccessKey: value.secretAccessKey
44
+ };
45
+ if (typeof value.sessionToken === 'string' && value.sessionToken)
46
+ config.sessionToken = value.sessionToken;
47
+ return config;
48
+ };
49
+ exports.getAwsLocalConfig = getAwsLocalConfig;
50
+ const saveAwsConfig = (project, local) => {
51
+ (0, config_files_1.ensureIndraqConfigDirectory)();
52
+ (0, node_fs_1.writeFileSync)((0, config_files_1.getIndraqConfigPath)(SHARED_FILENAME), `${JSON.stringify(project, null, 2)}\n`, 'utf8');
53
+ (0, node_fs_1.writeFileSync)((0, config_files_1.getIndraqConfigPath)(LOCAL_FILENAME), `${JSON.stringify(local, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
54
+ if ((0, config_files_1.isIndraqConfigIgnoredByGit)(SHARED_FILENAME)) {
55
+ process.stderr.write('⚠ .indraq/aws.json is ignored by Git. Remove that ignore rule to share the AWS region/zone.\n');
56
+ }
57
+ };
58
+ exports.saveAwsConfig = saveAwsConfig;
59
+ const requireAwsConfig = () => {
60
+ const project = (0, exports.getAwsProjectConfig)();
61
+ const local = (0, exports.getAwsLocalConfig)();
62
+ if (!project || !local)
63
+ throw new Error('AWS is not configured. Run `indraq configure` and select AWS.');
64
+ return { project, local };
65
+ };
66
+ exports.requireAwsConfig = requireAwsConfig;
67
+ const getAwsConfigPaths = () => ({
68
+ shared: (0, config_files_1.getIndraqConfigPath)(SHARED_FILENAME),
69
+ local: (0, config_files_1.getIndraqConfigPath)(LOCAL_FILENAME)
70
+ });
71
+ exports.getAwsConfigPaths = getAwsConfigPaths;
72
+ //# sourceMappingURL=aws-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-config.js","sourceRoot":"","sources":["../../../../src/modules/aws/config/aws-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const registerAwsModule: (program: Command) => void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/aws/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,iBAAiB,GAAI,SAAS,OAAO,KAAG,IA+CpD,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAwsModule = void 0;
4
+ const iam_command_1 = require("./commands/iam.command");
5
+ const dns_command_1 = require("./commands/dns.command");
6
+ const healthcheck_command_1 = require("./commands/healthcheck.command");
7
+ const listOptions = (c) => c.option('--search <text>').option('--limit <number>', 'Number of rows', '10').option('--all');
8
+ const registerAwsModule = (program) => {
9
+ const iam = program.command('iam').description('Manage AWS IAM CLI users. Console login is intentionally disabled.');
10
+ listOptions(iam.command('users').description('List AWS IAM users.')).action(iam_command_1.listIamUsers);
11
+ iam.command('user:create [username]')
12
+ .description('Create an AWS IAM CLI user and access key.')
13
+ .option('--policies <arns>', 'Comma-separated managed policy ARNs')
14
+ .option('--no-create-access-key', 'Create the IAM user without an access key')
15
+ .action(iam_command_1.createIamUser);
16
+ listOptions(iam.command('user:update [username]'))
17
+ .description('Select/update an AWS IAM user by attaching managed policies.')
18
+ .option('--policies <arns>', 'Comma-separated managed policy ARNs')
19
+ .action(iam_command_1.updateIamUser);
20
+ listOptions(iam.command('user:delete [username]'))
21
+ .description('Select/delete an AWS IAM user and removable dependencies after confirmation.')
22
+ .option('-y, --yes', 'Skip confirmation')
23
+ .action((username, options) => (0, iam_command_1.deleteIamUser)(username, !!options.yes, options));
24
+ iam.command('credentials [username]')
25
+ .description('Reveal your own AWS IAM access key and encrypted-at-rest secret stored in IndraQ Cloud.')
26
+ .action(iam_command_1.showStoredIamCredentials);
27
+ const accessKey = iam.command('access-key').description('Rotate IndraQ-managed AWS IAM access keys.');
28
+ listOptions(accessKey.command('rotate [username]'))
29
+ .description('Rotate your own key, or for manager/admin select a managed organization user. Creates the replacement key, stores it encrypted, then deletes the previous managed key.')
30
+ .option('--reason <reason>', 'Audit reason')
31
+ .action(iam_command_1.rotateStoredIamAccessKey);
32
+ const health = program.command('healthcheck').description('List/select Route53 health checks. Creation/deletion is IndraQ admin-only.');
33
+ health.command('list').option('--search <text>').option('--limit <number>', 'Number of rows', '10').option('--all').action(healthcheck_command_1.listHealthChecks);
34
+ health.command('create').description('Create a Route53 health check (IndraQ admin only).').action(healthcheck_command_1.createHealthCheck);
35
+ health.command('delete [id]').option('--search <text>').option('-y, --yes').description('Delete a Route53 health check (IndraQ admin only).').action(healthcheck_command_1.deleteHealthCheck);
36
+ const dns = program.command('dns').description('Manage Route53 records with shared environment or custom target selection.');
37
+ dns.command('zones').description('List hosted zones.').action(dns_command_1.listZones);
38
+ listOptions(dns.command('records').description('List records in a hosted zone.')).option('--zone <id>', 'Hosted zone ID').action((o) => (0, dns_command_1.listRecords)(o.zone, o));
39
+ const addRecordOptions = (command) => listOptions(command
40
+ .option('--value <value>', 'Record value / custom IPv4')
41
+ .option('--type <type>', 'A, CNAME, TXT, or MX')
42
+ .option('--routing <policy>', 'FAILOVER, SIMPLE, WEIGHTED, or LATENCY')
43
+ .option('--environment <name>', 'Primary/shared environment name, or custom')
44
+ .option('--secondary-environment <name>', 'Secondary environment for FAILOVER, or custom')
45
+ .option('--zone <id>', 'Hosted zone ID')
46
+ .option('--ttl <seconds>', 'TTL in seconds').option('--reason <reason>', 'Audit reason'));
47
+ addRecordOptions(dns.command('create [record]').description('Create a Route53 record interactively.')).action(dns_command_1.createARecord);
48
+ addRecordOptions(dns.command('update [record]').description('Select/create/update a Route53 record with UPSERT.')).action(dns_command_1.updateARecord);
49
+ addRecordOptions(dns.command('delete [record]').description('Select/delete Route53 record set(s).'))
50
+ .option('-y, --yes', 'Skip confirmation')
51
+ .action(dns_command_1.deleteARecord);
52
+ };
53
+ exports.registerAwsModule = registerAwsModule;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/aws/index.ts"],"names":[],"mappings":";;;AACA,wDAAuJ;AACvJ,wDAA6G;AAC7G,wEAAwG;AAExG,MAAM,WAAW,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAErI,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAAQ,EAAE;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,oEAAoE,CAAC,CAAC;IACrH,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,0BAAY,CAAC,CAAC;IAC1F,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC;SAClC,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,CAAC;SAClE,MAAM,CAAC,wBAAwB,EAAE,2CAA2C,CAAC;SAC7E,MAAM,CAAC,2BAAa,CAAC,CAAC;IACzB,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;SAC/C,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,CAAC;SAClE,MAAM,CAAC,2BAAa,CAAC,CAAC;IACzB,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;SAC/C,WAAW,CAAC,8EAA8E,CAAC;SAC3F,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC;SACxC,MAAM,CAAC,CAAC,QAA4B,EAAE,OAA0E,EAAE,EAAE,CAAC,IAAA,2BAAa,EAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACzK,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC;SAClC,WAAW,CAAC,yFAAyF,CAAC;SACtG,MAAM,CAAC,sCAAwB,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC;IACtG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;SAChD,WAAW,CAAC,wKAAwK,CAAC;SACrL,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;SAC3C,MAAM,CAAC,sCAAwB,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,4EAA4E,CAAC,CAAC;IACxI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,sCAAgB,CAAC,CAAC;IAC7I,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC,MAAM,CAAC,uCAAiB,CAAC,CAAC;IACrH,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC,MAAM,CAAC,uCAAiB,CAAC,CAAC;IAExK,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4EAA4E,CAAC,CAAC;IAC7H,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,uBAAS,CAAC,CAAC;IACzE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAoE,EAAE,EAAE,CAAC,IAAA,yBAAW,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnO,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAAW,EAAE,CAAC,WAAW,CAAC,OAAO;SACxE,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;SAC/C,MAAM,CAAC,oBAAoB,EAAE,wCAAwC,CAAC;SACtE,MAAM,CAAC,sBAAsB,EAAE,4CAA4C,CAAC;SAC5E,MAAM,CAAC,gCAAgC,EAAE,+CAA+C,CAAC;SACzF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5F,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC,CAAC,MAAM,CAAC,2BAAa,CAAC,CAAC;IAC7H,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC,CAAC,MAAM,CAAC,2BAAa,CAAC,CAAC;IACzI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;SACjG,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC;SACxC,MAAM,CAAC,2BAAa,CAAC,CAAC;AAC3B,CAAC,CAAC;AA/CW,QAAA,iBAAiB,qBA+C5B"}
@@ -0,0 +1,9 @@
1
+ import { IAMClient } from '@aws-sdk/client-iam';
2
+ import { Route53Client } from '@aws-sdk/client-route-53';
3
+ export declare const createAwsClients: () => {
4
+ iam: IAMClient;
5
+ route53: Route53Client;
6
+ hostedZoneId?: string;
7
+ };
8
+ export declare const describeAwsError: (error: unknown) => string;
9
+ //# sourceMappingURL=aws-clients.d.ts.map