@quadnix/octo 0.0.30 → 0.2.0

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 (383) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +117 -8
  3. package/dist/app.type.d.ts +277 -19
  4. package/dist/app.type.js +80 -9
  5. package/dist/app.type.js.map +1 -1
  6. package/dist/decorators/action.decorator.d.ts +10 -6
  7. package/dist/decorators/action.decorator.js +19 -6
  8. package/dist/decorators/action.decorator.js.map +1 -1
  9. package/dist/decorators/anchor.decorator.d.ts +12 -5
  10. package/dist/decorators/anchor.decorator.js +12 -5
  11. package/dist/decorators/anchor.decorator.js.map +1 -1
  12. package/dist/decorators/enable-hook.decorator.d.ts +1 -1
  13. package/dist/decorators/enable-hook.decorator.js +1 -1
  14. package/dist/decorators/factory.decorator.d.ts +18 -34
  15. package/dist/decorators/factory.decorator.js +18 -34
  16. package/dist/decorators/factory.decorator.js.map +1 -1
  17. package/dist/decorators/model.decorator.d.ts +4 -6
  18. package/dist/decorators/model.decorator.js +2 -7
  19. package/dist/decorators/model.decorator.js.map +1 -1
  20. package/dist/decorators/module.decorator.d.ts +16 -10
  21. package/dist/decorators/module.decorator.js +16 -10
  22. package/dist/decorators/module.decorator.js.map +1 -1
  23. package/dist/decorators/on-event.decorator.d.ts +7 -2
  24. package/dist/decorators/on-event.decorator.js +5 -0
  25. package/dist/decorators/on-event.decorator.js.map +1 -1
  26. package/dist/decorators/resource.decorator.d.ts +50 -1
  27. package/dist/decorators/resource.decorator.js +38 -1
  28. package/dist/decorators/resource.decorator.js.map +1 -1
  29. package/dist/decorators/validate.decorator.d.ts +15 -1
  30. package/dist/decorators/validate.decorator.js +15 -1
  31. package/dist/decorators/validate.decorator.js.map +1 -1
  32. package/dist/errors/container.error.d.ts +18 -0
  33. package/dist/errors/container.error.js +18 -0
  34. package/dist/errors/container.error.js.map +1 -1
  35. package/dist/errors/index.d.ts +1 -0
  36. package/dist/errors/index.js +1 -0
  37. package/dist/errors/index.js.map +1 -1
  38. package/dist/errors/module.error.d.ts +6 -0
  39. package/dist/errors/module.error.js +6 -0
  40. package/dist/errors/module.error.js.map +1 -1
  41. package/dist/errors/node.error.d.ts +56 -0
  42. package/dist/errors/node.error.js +56 -0
  43. package/dist/errors/node.error.js.map +1 -1
  44. package/dist/errors/schema.error.d.ts +14 -1
  45. package/dist/errors/schema.error.js +11 -1
  46. package/dist/errors/schema.error.js.map +1 -1
  47. package/dist/errors/terraform.error.d.ts +20 -0
  48. package/dist/errors/terraform.error.js +24 -0
  49. package/dist/errors/terraform.error.js.map +1 -0
  50. package/dist/errors/transaction.error.d.ts +93 -2
  51. package/dist/errors/transaction.error.js +83 -0
  52. package/dist/errors/transaction.error.js.map +1 -1
  53. package/dist/events/action.event.d.ts +8 -4
  54. package/dist/events/action.event.js +2 -4
  55. package/dist/events/action.event.js.map +1 -1
  56. package/dist/events/command.event.d.ts +43 -0
  57. package/dist/events/command.event.js +33 -0
  58. package/dist/events/command.event.js.map +1 -0
  59. package/dist/events/event.model.d.ts +26 -8
  60. package/dist/events/event.model.js +15 -7
  61. package/dist/events/event.model.js.map +1 -1
  62. package/dist/events/hook/commit.hook.event.d.ts +1 -7
  63. package/dist/events/hook/commit.hook.event.js +0 -6
  64. package/dist/events/hook/commit.hook.event.js.map +1 -1
  65. package/dist/events/hook/hook.event.d.ts +1 -3
  66. package/dist/events/hook/hook.event.js +0 -2
  67. package/dist/events/hook/hook.event.js.map +1 -1
  68. package/dist/events/hook/model.hook.event.d.ts +1 -7
  69. package/dist/events/hook/model.hook.event.js +0 -6
  70. package/dist/events/hook/model.hook.event.js.map +1 -1
  71. package/dist/events/hook/resource.hook.event.d.ts +1 -7
  72. package/dist/events/hook/resource.hook.event.js +0 -6
  73. package/dist/events/hook/resource.hook.event.js.map +1 -1
  74. package/dist/events/index.d.ts +5 -0
  75. package/dist/events/index.js +5 -0
  76. package/dist/events/index.js.map +1 -1
  77. package/dist/events/mode-result.event.d.ts +57 -0
  78. package/dist/events/mode-result.event.js +24 -0
  79. package/dist/events/mode-result.event.js.map +1 -0
  80. package/dist/events/mode.event.d.ts +61 -0
  81. package/dist/events/mode.event.js +32 -0
  82. package/dist/events/mode.event.js.map +1 -0
  83. package/dist/events/module.event.d.ts +7 -5
  84. package/dist/events/module.event.js +3 -4
  85. package/dist/events/module.event.js.map +1 -1
  86. package/dist/events/registration.event.d.ts +19 -15
  87. package/dist/events/registration.event.js +18 -14
  88. package/dist/events/registration.event.js.map +1 -1
  89. package/dist/events/serialization.event.d.ts +16 -13
  90. package/dist/events/serialization.event.js +15 -12
  91. package/dist/events/serialization.event.js.map +1 -1
  92. package/dist/events/state.event.d.ts +102 -0
  93. package/dist/events/state.event.js +69 -0
  94. package/dist/events/state.event.js.map +1 -0
  95. package/dist/events/terraform.event.d.ts +78 -0
  96. package/dist/events/terraform.event.js +55 -0
  97. package/dist/events/terraform.event.js.map +1 -0
  98. package/dist/events/transaction.event.d.ts +3 -40
  99. package/dist/events/transaction.event.js +1 -29
  100. package/dist/events/transaction.event.js.map +1 -1
  101. package/dist/functions/container/container.d.ts +54 -13
  102. package/dist/functions/container/container.js +64 -19
  103. package/dist/functions/container/container.js.map +1 -1
  104. package/dist/functions/container/test-container.d.ts +43 -29
  105. package/dist/functions/container/test-container.js +71 -43
  106. package/dist/functions/container/test-container.js.map +1 -1
  107. package/dist/functions/dependency/dependency.d.ts +84 -23
  108. package/dist/functions/dependency/dependency.js +84 -14
  109. package/dist/functions/dependency/dependency.js.map +1 -1
  110. package/dist/functions/diff/aggregate-resource-actions.d.ts +19 -0
  111. package/dist/functions/diff/aggregate-resource-actions.js +41 -0
  112. package/dist/functions/diff/aggregate-resource-actions.js.map +1 -0
  113. package/dist/functions/diff/diff-metadata.d.ts +21 -3
  114. package/dist/functions/diff/diff-metadata.js +18 -0
  115. package/dist/functions/diff/diff-metadata.js.map +1 -1
  116. package/dist/functions/diff/diff.d.ts +68 -7
  117. package/dist/functions/diff/diff.js +44 -3
  118. package/dist/functions/diff/diff.js.map +1 -1
  119. package/dist/functions/hook/commit.hook.d.ts +16 -1
  120. package/dist/functions/hook/commit.hook.js +21 -6
  121. package/dist/functions/hook/commit.hook.js.map +1 -1
  122. package/dist/functions/hook/model-action.hook.d.ts +16 -1
  123. package/dist/functions/hook/model-action.hook.js +21 -6
  124. package/dist/functions/hook/model-action.hook.js.map +1 -1
  125. package/dist/functions/hook/resource-action.hook.d.ts +16 -1
  126. package/dist/functions/hook/resource-action.hook.js +21 -6
  127. package/dist/functions/hook/resource-action.hook.js.map +1 -1
  128. package/dist/functions/node/node-action.abstract.d.ts +23 -2
  129. package/dist/functions/node/node-action.abstract.js +22 -8
  130. package/dist/functions/node/node-action.abstract.js.map +1 -1
  131. package/dist/functions/node/node.abstract.d.ts +56 -5
  132. package/dist/functions/node/node.abstract.js +106 -22
  133. package/dist/functions/node/node.abstract.js.map +1 -1
  134. package/dist/functions/node/node.interface.d.ts +3 -1
  135. package/dist/functions/schema/schema.d.ts +7 -0
  136. package/dist/functions/schema/schema.js +10 -1
  137. package/dist/functions/schema/schema.js.map +1 -1
  138. package/dist/index.d.ts +12 -6
  139. package/dist/index.js +9 -4
  140. package/dist/index.js.map +1 -1
  141. package/dist/index.type.d.ts +5 -0
  142. package/dist/index.type.js +2 -0
  143. package/dist/index.type.js.map +1 -0
  144. package/dist/main.d.ts +245 -14
  145. package/dist/main.js +377 -72
  146. package/dist/main.js.map +1 -1
  147. package/dist/models/account/account.model.d.ts +43 -7
  148. package/dist/models/account/account.model.js +56 -8
  149. package/dist/models/account/account.model.js.map +1 -1
  150. package/dist/models/account/account.schema.d.ts +13 -1
  151. package/dist/models/account/account.schema.js +12 -0
  152. package/dist/models/account/account.schema.js.map +1 -1
  153. package/dist/models/app/app.model.d.ts +13 -8
  154. package/dist/models/app/app.model.js +17 -32
  155. package/dist/models/app/app.model.js.map +1 -1
  156. package/dist/models/app/app.schema.d.ts +6 -0
  157. package/dist/models/app/app.schema.js +6 -0
  158. package/dist/models/app/app.schema.js.map +1 -1
  159. package/dist/models/deployment/deployment.model.d.ts +13 -1
  160. package/dist/models/deployment/deployment.model.js +16 -4
  161. package/dist/models/deployment/deployment.model.js.map +1 -1
  162. package/dist/models/deployment/deployment.schema.d.ts +6 -0
  163. package/dist/models/deployment/deployment.schema.js +6 -0
  164. package/dist/models/deployment/deployment.schema.js.map +1 -1
  165. package/dist/models/environment/environment.model.d.ts +15 -3
  166. package/dist/models/environment/environment.model.js +22 -10
  167. package/dist/models/environment/environment.model.js.map +1 -1
  168. package/dist/models/environment/environment.schema.d.ts +2 -0
  169. package/dist/models/environment/environment.schema.js +2 -0
  170. package/dist/models/environment/environment.schema.js.map +1 -1
  171. package/dist/models/execution/execution.model.d.ts +21 -3
  172. package/dist/models/execution/execution.model.js +47 -29
  173. package/dist/models/execution/execution.model.js.map +1 -1
  174. package/dist/models/execution/execution.schema.d.ts +11 -0
  175. package/dist/models/execution/execution.schema.js +11 -0
  176. package/dist/models/execution/execution.schema.js.map +1 -1
  177. package/dist/models/filesystem/filesystem.model.d.ts +27 -1
  178. package/dist/models/filesystem/filesystem.model.js +30 -4
  179. package/dist/models/filesystem/filesystem.model.js.map +1 -1
  180. package/dist/models/filesystem/filesystem.schema.d.ts +5 -0
  181. package/dist/models/filesystem/filesystem.schema.js +5 -0
  182. package/dist/models/filesystem/filesystem.schema.js.map +1 -1
  183. package/dist/models/image/image.model.d.ts +19 -5
  184. package/dist/models/image/image.model.js +25 -11
  185. package/dist/models/image/image.model.js.map +1 -1
  186. package/dist/models/image/image.schema.d.ts +8 -0
  187. package/dist/models/image/image.schema.js +8 -0
  188. package/dist/models/image/image.schema.js.map +1 -1
  189. package/dist/models/model-action.interface.d.ts +17 -4
  190. package/dist/models/model.abstract.d.ts +96 -1
  191. package/dist/models/model.abstract.js +107 -8
  192. package/dist/models/model.abstract.js.map +1 -1
  193. package/dist/models/model.interface.d.ts +3 -0
  194. package/dist/models/pipeline/pipeline.model.d.ts +14 -2
  195. package/dist/models/pipeline/pipeline.model.js +19 -7
  196. package/dist/models/pipeline/pipeline.model.js.map +1 -1
  197. package/dist/models/pipeline/pipeline.schema.d.ts +8 -0
  198. package/dist/models/pipeline/pipeline.schema.js +8 -0
  199. package/dist/models/pipeline/pipeline.schema.js.map +1 -1
  200. package/dist/models/region/region.model.d.ts +16 -1
  201. package/dist/models/region/region.model.js +19 -4
  202. package/dist/models/region/region.model.js.map +1 -1
  203. package/dist/models/region/region.schema.d.ts +6 -0
  204. package/dist/models/region/region.schema.js +6 -0
  205. package/dist/models/region/region.schema.js.map +1 -1
  206. package/dist/models/server/server.model.d.ts +15 -3
  207. package/dist/models/server/server.model.js +18 -6
  208. package/dist/models/server/server.model.js.map +1 -1
  209. package/dist/models/server/server.schema.d.ts +3 -1
  210. package/dist/models/server/server.schema.js +3 -1
  211. package/dist/models/server/server.schema.js.map +1 -1
  212. package/dist/models/service/service.model.d.ts +37 -6
  213. package/dist/models/service/service.model.js +65 -11
  214. package/dist/models/service/service.model.js.map +1 -1
  215. package/dist/models/service/service.schema.d.ts +48 -1
  216. package/dist/models/service/service.schema.js +56 -1
  217. package/dist/models/service/service.schema.js.map +1 -1
  218. package/dist/models/subnet/subnet.model.d.ts +27 -3
  219. package/dist/models/subnet/subnet.model.js +40 -16
  220. package/dist/models/subnet/subnet.model.js.map +1 -1
  221. package/dist/models/subnet/subnet.schema.d.ts +9 -0
  222. package/dist/models/subnet/subnet.schema.js +9 -0
  223. package/dist/models/subnet/subnet.schema.js.map +1 -1
  224. package/dist/modes/apply-transaction.d.ts +23 -0
  225. package/dist/modes/apply-transaction.js +25 -0
  226. package/dist/modes/apply-transaction.js.map +1 -0
  227. package/dist/modes/commit.mode.d.ts +54 -0
  228. package/dist/modes/commit.mode.js +235 -0
  229. package/dist/modes/commit.mode.js.map +1 -0
  230. package/dist/modes/generate.mode.d.ts +30 -0
  231. package/dist/modes/generate.mode.js +50 -0
  232. package/dist/modes/generate.mode.js.map +1 -0
  233. package/dist/modes/run-action.mode.d.ts +30 -0
  234. package/dist/modes/run-action.mode.js +140 -0
  235. package/dist/modes/run-action.mode.js.map +1 -0
  236. package/dist/modes/validate.mode.d.ts +186 -0
  237. package/dist/modes/validate.mode.js +558 -0
  238. package/dist/modes/validate.mode.js.map +1 -0
  239. package/dist/modules/module.abstract.d.ts +51 -0
  240. package/dist/modules/module.abstract.js +36 -0
  241. package/dist/modules/module.abstract.js.map +1 -1
  242. package/dist/modules/module.container.d.ts +43 -1
  243. package/dist/modules/module.container.js +77 -5
  244. package/dist/modules/module.container.js.map +1 -1
  245. package/dist/modules/test-module.container.d.ts +139 -25
  246. package/dist/modules/test-module.container.js +383 -199
  247. package/dist/modules/test-module.container.js.map +1 -1
  248. package/dist/overlays/anchor.abstract.d.ts +32 -1
  249. package/dist/overlays/anchor.abstract.js +42 -11
  250. package/dist/overlays/anchor.abstract.js.map +1 -1
  251. package/dist/overlays/anchor.schema.d.ts +21 -0
  252. package/dist/overlays/anchor.schema.js +21 -0
  253. package/dist/overlays/anchor.schema.js.map +1 -1
  254. package/dist/overlays/overlay-data.repository.d.ts +18 -0
  255. package/dist/overlays/overlay-data.repository.js +18 -0
  256. package/dist/overlays/overlay-data.repository.js.map +1 -1
  257. package/dist/overlays/overlay.abstract.d.ts +56 -1
  258. package/dist/overlays/overlay.abstract.js +79 -20
  259. package/dist/overlays/overlay.abstract.js.map +1 -1
  260. package/dist/overlays/overlay.schema.d.ts +20 -0
  261. package/dist/overlays/overlay.schema.js +20 -0
  262. package/dist/overlays/overlay.schema.js.map +1 -1
  263. package/dist/resources/resource-action.interface.d.ts +29 -3
  264. package/dist/resources/resource-data.repository.d.ts +63 -1
  265. package/dist/resources/resource-data.repository.js +94 -4
  266. package/dist/resources/resource-data.repository.js.map +1 -1
  267. package/dist/resources/resource.abstract.d.ts +163 -6
  268. package/dist/resources/resource.abstract.js +223 -59
  269. package/dist/resources/resource.abstract.js.map +1 -1
  270. package/dist/resources/resource.interface.d.ts +0 -2
  271. package/dist/resources/resource.schema.d.ts +39 -1
  272. package/dist/resources/resource.schema.js +38 -0
  273. package/dist/resources/resource.schema.js.map +1 -1
  274. package/dist/resources/terraform-resource.abstract.d.ts +44 -0
  275. package/dist/resources/terraform-resource.abstract.js +45 -0
  276. package/dist/resources/terraform-resource.abstract.js.map +1 -0
  277. package/dist/services/event/event.service.d.ts +32 -5
  278. package/dist/services/event/event.service.js +58 -16
  279. package/dist/services/event/event.service.js.map +1 -1
  280. package/dist/services/input/input.service.d.ts +82 -5
  281. package/dist/services/input/input.service.js +143 -12
  282. package/dist/services/input/input.service.js.map +1 -1
  283. package/dist/services/schema-translation/schema-translation.service.d.ts +9 -0
  284. package/dist/services/schema-translation/schema-translation.service.js +9 -0
  285. package/dist/services/schema-translation/schema-translation.service.js.map +1 -1
  286. package/dist/services/serialization/model/model-serialization.service.d.ts +25 -3
  287. package/dist/services/serialization/model/model-serialization.service.js +113 -62
  288. package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
  289. package/dist/services/serialization/resource/resource-serialization.service.d.ts +36 -6
  290. package/dist/services/serialization/resource/resource-serialization.service.js +77 -28
  291. package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
  292. package/dist/services/state-management/local.state-provider.d.ts +67 -4
  293. package/dist/services/state-management/local.state-provider.js +168 -41
  294. package/dist/services/state-management/local.state-provider.js.map +1 -1
  295. package/dist/services/state-management/remote.state-provider.d.ts +216 -0
  296. package/dist/services/state-management/remote.state-provider.js +645 -0
  297. package/dist/services/state-management/remote.state-provider.js.map +1 -0
  298. package/dist/services/state-management/state-management.service.d.ts +195 -17
  299. package/dist/services/state-management/state-management.service.js +259 -10
  300. package/dist/services/state-management/state-management.service.js.map +1 -1
  301. package/dist/services/state-management/state-provider.interface.d.ts +98 -3
  302. package/dist/services/state-management/state-provider.interface.js +14 -1
  303. package/dist/services/state-management/state-provider.interface.js.map +1 -1
  304. package/dist/services/state-management/terraform-state.service.d.ts +99 -0
  305. package/dist/services/state-management/terraform-state.service.js +197 -0
  306. package/dist/services/state-management/terraform-state.service.js.map +1 -0
  307. package/dist/services/state-management/test.state-provider.d.ts +42 -4
  308. package/dist/services/state-management/test.state-provider.js +77 -25
  309. package/dist/services/state-management/test.state-provider.js.map +1 -1
  310. package/dist/services/terraform/terraform.service.d.ts +480 -0
  311. package/dist/services/terraform/terraform.service.js +1082 -0
  312. package/dist/services/terraform/terraform.service.js.map +1 -0
  313. package/dist/services/terraform/terraform.type.d.ts +387 -0
  314. package/dist/services/terraform/terraform.type.js +579 -0
  315. package/dist/services/terraform/terraform.type.js.map +1 -0
  316. package/dist/services/transaction/transaction.service.d.ts +110 -10
  317. package/dist/services/transaction/transaction.service.js +570 -251
  318. package/dist/services/transaction/transaction.service.js.map +1 -1
  319. package/dist/services/validation/validation.service.d.ts +15 -3
  320. package/dist/services/validation/validation.service.js +12 -0
  321. package/dist/services/validation/validation.service.js.map +1 -1
  322. package/dist/utilities/array/array.utility.d.ts +3 -0
  323. package/dist/utilities/array/array.utility.js +3 -0
  324. package/dist/utilities/array/array.utility.js.map +1 -1
  325. package/dist/{functions → utilities}/diff/diff.utility.d.ts +19 -3
  326. package/dist/{functions → utilities}/diff/diff.utility.js +57 -41
  327. package/dist/utilities/diff/diff.utility.js.map +1 -0
  328. package/dist/utilities/file/file.utility.d.ts +16 -2
  329. package/dist/utilities/file/file.utility.js +23 -61
  330. package/dist/utilities/file/file.utility.js.map +1 -1
  331. package/dist/utilities/hcl/hcl.utility.d.ts +128 -0
  332. package/dist/utilities/hcl/hcl.utility.js +402 -0
  333. package/dist/utilities/hcl/hcl.utility.js.map +1 -0
  334. package/dist/utilities/http/http.utility.d.ts +57 -0
  335. package/dist/utilities/http/http.utility.js +98 -0
  336. package/dist/utilities/http/http.utility.js.map +1 -0
  337. package/dist/utilities/node/node.utility.d.ts +3 -0
  338. package/dist/utilities/node/node.utility.js +3 -0
  339. package/dist/utilities/node/node.utility.js.map +1 -1
  340. package/dist/utilities/object/object.utility.d.ts +12 -0
  341. package/dist/utilities/object/object.utility.js +12 -0
  342. package/dist/utilities/object/object.utility.js.map +1 -1
  343. package/dist/utilities/project/project.utility.d.ts +28 -0
  344. package/dist/utilities/project/project.utility.js +35 -0
  345. package/dist/utilities/project/project.utility.js.map +1 -0
  346. package/dist/utilities/string/string.utility.d.ts +41 -0
  347. package/dist/utilities/string/string.utility.js +65 -0
  348. package/dist/utilities/string/string.utility.js.map +1 -0
  349. package/dist/utilities/terraform/terraform.utility.d.ts +276 -0
  350. package/dist/utilities/terraform/terraform.utility.js +623 -0
  351. package/dist/utilities/terraform/terraform.utility.js.map +1 -0
  352. package/dist/utilities/test-helpers/test-classes.d.ts +36 -30
  353. package/dist/utilities/test-helpers/test-classes.js +38 -39
  354. package/dist/utilities/test-helpers/test-classes.js.map +1 -1
  355. package/dist/utilities/test-helpers/test-models.d.ts +8 -1
  356. package/dist/utilities/test-helpers/test-models.js +37 -12
  357. package/dist/utilities/test-helpers/test-models.js.map +1 -1
  358. package/dist/utilities/test-helpers/test-modes.d.ts +315 -0
  359. package/dist/utilities/test-helpers/test-modes.js +486 -0
  360. package/dist/utilities/test-helpers/test-modes.js.map +1 -0
  361. package/dist/utilities/test-helpers/test-modules.d.ts +47 -0
  362. package/dist/utilities/test-helpers/test-modules.js +85 -0
  363. package/dist/utilities/test-helpers/test-modules.js.map +1 -0
  364. package/dist/utilities/test-helpers/test-overlays.d.ts +20 -2
  365. package/dist/utilities/test-helpers/test-overlays.js +56 -6
  366. package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
  367. package/dist/utilities/test-helpers/test-resources.d.ts +23 -3
  368. package/dist/utilities/test-helpers/test-resources.js +83 -23
  369. package/dist/utilities/test-helpers/test-resources.js.map +1 -1
  370. package/dist/utilities/validation/validation.utility.d.ts +24 -0
  371. package/dist/utilities/validation/validation.utility.js +24 -0
  372. package/dist/utilities/validation/validation.utility.js.map +1 -1
  373. package/package.json +12 -6
  374. package/dist/functions/diff/diff.utility.js.map +0 -1
  375. package/dist/services/capture/capture.service.d.ts +0 -19
  376. package/dist/services/capture/capture.service.js +0 -43
  377. package/dist/services/capture/capture.service.js.map +0 -1
  378. package/dist/services/state-management/local-encryption.state-provider.d.ts +0 -20
  379. package/dist/services/state-management/local-encryption.state-provider.js +0 -90
  380. package/dist/services/state-management/local-encryption.state-provider.js.map +0 -1
  381. package/dist/utilities/cidr/cidr.utility.d.ts +0 -10
  382. package/dist/utilities/cidr/cidr.utility.js +0 -51
  383. package/dist/utilities/cidr/cidr.utility.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import type { TerraformService } from '../../services/terraform/terraform.service.js';
2
+ /**
3
+ * One parsed HCL block: each attribute by name, and each nested block by its type. An attribute holding
4
+ * a quoted string is unquoted; any other value (a number, a list, a reference, a `jsonencode(...)` call)
5
+ * is kept as the HCL text it was rendered as. A nested block repeated in its parent (two `ingress`
6
+ * blocks) is an array.
7
+ *
8
+ * @group Utilities/Hcl
9
+ */
10
+ export type HclBlock = {
11
+ [key: string]: string | HclBlock | HclBlock[];
12
+ };
13
+ /**
14
+ * Reads, serializes and diffs the terraform octo renders.
15
+ *
16
+ * The render format is octo-owned and regular: `# <moduleId>/<file>` section headers, and top-level
17
+ * blocks that start on a line with no indent. So everything here is plain string work, needing no external
18
+ * HCL parser or diff library. {@link parse} reads the blocks a module test asserts on,
19
+ * {@link serialize} flattens a render into one string, {@link unifiedDiff} is the generic line-diff
20
+ * engine, and {@link diffBlocks} layers octo's block structure on top of it.
21
+ *
22
+ * @group Utilities/Hcl
23
+ */
24
+ export declare class HclUtility {
25
+ /**
26
+ * The `# <moduleId>/<file>` line {@link serialize} puts before each file.
27
+ *
28
+ * @internal
29
+ */
30
+ private static readonly SECTION_HEADER;
31
+ /**
32
+ * Diffs two {@link serialize} renders at the block level. A block is identified by its header line,
33
+ * and blocks sharing a header (one `provider "aws"` per alias) by their first body line too, so a
34
+ * body change reads as `~` (a line-level {@link unifiedDiff} of what changed inside the block),
35
+ * not as an unrelated add + remove. An added block shows its full new body, a removed block its full
36
+ * old body — symmetric, with nothing trimmed away. The `+`/`-`/`~` vocabulary mirrors the
37
+ * `digestDiffs` digest, tagged with `moduleId/file`. Returns `'<no changes>'` when nothing moved.
38
+ */
39
+ static diffBlocks(previous: string, current: string): string;
40
+ /**
41
+ * Reads the `resource` and `data` blocks of rendered terraform, keyed by their terraform address:
42
+ * `<type>.<name>` for a resource, `data.<type>.<name>` for a data source. It takes one file's text or
43
+ * a whole {@link serialize} render, such as the `hclRender` a module test gets back, since resource
44
+ * and data addresses are unique across an app.
45
+ *
46
+ * It reads octo's own render format, not arbitrary HCL: one attribute or block per line, and a value
47
+ * spanning lines only inside brackets.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * const { resource } = HclUtility.parse(hclRender);
52
+ * expect(Object.keys(resource)).toContain('aws_vpc.vpc-region-475bfa');
53
+ * expect(resource['aws_vpc.vpc-region-475bfa'].cidr_block).toBe('10.0.0.0/16');
54
+ * ```
55
+ */
56
+ static parse(hcl: string): {
57
+ data: Record<string, HclBlock>;
58
+ resource: Record<string, HclBlock>;
59
+ };
60
+ /**
61
+ * Flattens the rendered terragrunt folders into one snapshot-friendly string: folders sorted by
62
+ * module id, files in a stable order, each prefixed with a `# <moduleId>/<file>` header. An empty
63
+ * file shows a `<empty>` body, so the file is still visible in the snapshot rather than omitted.
64
+ */
65
+ static serialize(moduleFiles: ReturnType<TerraformService['renderAllModules']>): string;
66
+ /**
67
+ * Produces a git-style unified line diff of two multi-line strings, collapsing unchanged regions
68
+ * to at most `contextLines` of surrounding context per change and emitting `@@ -a,c +b,c @@` hunk
69
+ * headers. Changed lines are tagged `- ` (only in `before`) and `+ ` (only in `after`); context
70
+ * lines are tagged with two spaces, so the markers line up. Pure plain text, no ANSI color, so it
71
+ * is safe to embed in a snapshot.
72
+ *
73
+ * Returns an empty string when the two inputs are identical.
74
+ */
75
+ static unifiedDiff(before: string, after: string, { contextLines }?: {
76
+ contextLines?: number;
77
+ }): string;
78
+ /**
79
+ * How many brackets a line opens, less how many it closes, ignoring those inside quoted strings.
80
+ *
81
+ * @internal
82
+ */
83
+ private static bracketDepth;
84
+ /**
85
+ * Builds the shortest edit script between two line arrays via the classic longest-common-subsequence
86
+ * DP. Quadratic in the number of lines, which is fine for the small blocks this serves. A removal is
87
+ * preferred over an addition on ties so a changed line reads as `-old` then `+new`.
88
+ *
89
+ * @internal
90
+ */
91
+ private static diffLines;
92
+ /**
93
+ * Keys blocks by their header line (e.g. `resource "aws_vpc" "vpc-x" {`), adding the first body line
94
+ * for a header in `repeatedHeaders`, and an occurrence number for any key still taken.
95
+ *
96
+ * @internal
97
+ */
98
+ private static keyBlocks;
99
+ /**
100
+ * Splits a {@link serialize} render into its top-level blocks, grouped by `moduleId/file`. Relies on
101
+ * octo's regular render format — `# <moduleId>/<file>` section headers, and a top-level block
102
+ * starting on a line with no indent that is not a closing bracket.
103
+ *
104
+ * @internal
105
+ */
106
+ private static parseBlocks;
107
+ /**
108
+ * Parses the lines inside a block. An attribute whose value opens more brackets than it closes runs
109
+ * on to the line that closes them, and is kept as text; `key = {` on its own is an object, parsed
110
+ * like a nested block.
111
+ *
112
+ * @internal
113
+ */
114
+ private static parseBody;
115
+ /**
116
+ * Returns the header lines that more than one of these blocks starts with.
117
+ *
118
+ * @internal
119
+ */
120
+ private static repeatedHeaders;
121
+ /**
122
+ * Splits lines into top-level blocks, each trimmed. A block starts on a line with no indent that is not a
123
+ * closing bracket, so a blank line inside a block does not end it.
124
+ *
125
+ * @internal
126
+ */
127
+ private static splitTopLevelBlocks;
128
+ }
@@ -0,0 +1,402 @@
1
+ /**
2
+ * Reads, serializes and diffs the terraform octo renders.
3
+ *
4
+ * The render format is octo-owned and regular: `# <moduleId>/<file>` section headers, and top-level
5
+ * blocks that start on a line with no indent. So everything here is plain string work, needing no external
6
+ * HCL parser or diff library. {@link parse} reads the blocks a module test asserts on,
7
+ * {@link serialize} flattens a render into one string, {@link unifiedDiff} is the generic line-diff
8
+ * engine, and {@link diffBlocks} layers octo's block structure on top of it.
9
+ *
10
+ * @group Utilities/Hcl
11
+ */
12
+ export class HclUtility {
13
+ /**
14
+ * The `# <moduleId>/<file>` line {@link serialize} puts before each file.
15
+ *
16
+ * @internal
17
+ */
18
+ static { this.SECTION_HEADER = /^# (.+\/.+\.(?:tf|hcl))$/; }
19
+ /**
20
+ * Diffs two {@link serialize} renders at the block level. A block is identified by its header line,
21
+ * and blocks sharing a header (one `provider "aws"` per alias) by their first body line too, so a
22
+ * body change reads as `~` (a line-level {@link unifiedDiff} of what changed inside the block),
23
+ * not as an unrelated add + remove. An added block shows its full new body, a removed block its full
24
+ * old body — symmetric, with nothing trimmed away. The `+`/`-`/`~` vocabulary mirrors the
25
+ * `digestDiffs` digest, tagged with `moduleId/file`. Returns `'<no changes>'` when nothing moved.
26
+ */
27
+ static diffBlocks(previous, current) {
28
+ const previousSections = HclUtility.parseBlocks(previous);
29
+ const currentSections = HclUtility.parseBlocks(current);
30
+ const entries = [];
31
+ const keys = [...new Set([...previousSections.keys(), ...currentSections.keys()])].sort((a, b) => a.localeCompare(b));
32
+ for (const key of keys) {
33
+ const previousTexts = previousSections.get(key) ?? [];
34
+ const currentTexts = currentSections.get(key) ?? [];
35
+ // A header repeated on either side is keyed with its first body line on both sides.
36
+ const repeatedHeaders = new Set([
37
+ ...HclUtility.repeatedHeaders(previousTexts),
38
+ ...HclUtility.repeatedHeaders(currentTexts),
39
+ ]);
40
+ const previousBlocks = HclUtility.keyBlocks(previousTexts, repeatedHeaders);
41
+ const currentBlocks = HclUtility.keyBlocks(currentTexts, repeatedHeaders);
42
+ const headers = [...new Set([...previousBlocks.keys(), ...currentBlocks.keys()])].sort((a, b) => a.localeCompare(b));
43
+ for (const header of headers) {
44
+ const before = previousBlocks.get(header);
45
+ const after = currentBlocks.get(header);
46
+ if (before === undefined) {
47
+ entries.push(`+ ${key}\n${after}`);
48
+ }
49
+ else if (after === undefined) {
50
+ entries.push(`- ${key}\n${before}`);
51
+ }
52
+ else if (before !== after) {
53
+ entries.push(`~ ${key} ${header}\n${HclUtility.unifiedDiff(before, after, { contextLines: 1 })}`);
54
+ }
55
+ }
56
+ }
57
+ return entries.length > 0 ? entries.join('\n\n') : '<no changes>';
58
+ }
59
+ /**
60
+ * Reads the `resource` and `data` blocks of rendered terraform, keyed by their terraform address:
61
+ * `<type>.<name>` for a resource, `data.<type>.<name>` for a data source. It takes one file's text or
62
+ * a whole {@link serialize} render, such as the `hclRender` a module test gets back, since resource
63
+ * and data addresses are unique across an app.
64
+ *
65
+ * It reads octo's own render format, not arbitrary HCL: one attribute or block per line, and a value
66
+ * spanning lines only inside brackets.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * const { resource } = HclUtility.parse(hclRender);
71
+ * expect(Object.keys(resource)).toContain('aws_vpc.vpc-region-475bfa');
72
+ * expect(resource['aws_vpc.vpc-region-475bfa'].cidr_block).toBe('10.0.0.0/16');
73
+ * ```
74
+ */
75
+ static parse(hcl) {
76
+ const parsed = { data: {}, resource: {} };
77
+ const lines = hcl.split('\n').filter((line) => !HclUtility.SECTION_HEADER.test(line));
78
+ for (const block of HclUtility.splitTopLevelBlocks(lines)) {
79
+ const blockLines = block.split('\n');
80
+ const header = /^(data|resource) "([^"]+)" "([^"]+)" \{$/.exec(blockLines[0]);
81
+ if (!header) {
82
+ continue;
83
+ }
84
+ const [, kind, type, name] = header;
85
+ const body = HclUtility.parseBody(blockLines.slice(1, -1));
86
+ if (kind === 'resource') {
87
+ parsed.resource[`${type}.${name}`] = body;
88
+ }
89
+ else {
90
+ parsed.data[`data.${type}.${name}`] = body;
91
+ }
92
+ }
93
+ return parsed;
94
+ }
95
+ /**
96
+ * Flattens the rendered terragrunt folders into one snapshot-friendly string: folders sorted by
97
+ * module id, files in a stable order, each prefixed with a `# <moduleId>/<file>` header. An empty
98
+ * file shows a `<empty>` body, so the file is still visible in the snapshot rather than omitted.
99
+ */
100
+ static serialize(moduleFiles) {
101
+ const parts = [];
102
+ for (const moduleId of [...moduleFiles.keys()].sort((a, b) => a.localeCompare(b))) {
103
+ const files = moduleFiles.get(moduleId);
104
+ const entries = [
105
+ ['main.tf', files.mainTf],
106
+ ['outputs.tf', files.outputsTf],
107
+ ['terragrunt.hcl', files.terragruntHcl],
108
+ ['variables.tf', files.variablesTf],
109
+ ];
110
+ for (const [name, content] of entries) {
111
+ const trimmed = content.trim();
112
+ parts.push(`# ${moduleId}/${name}\n${trimmed || '<empty>'}`);
113
+ }
114
+ }
115
+ return parts.join('\n\n');
116
+ }
117
+ /**
118
+ * Produces a git-style unified line diff of two multi-line strings, collapsing unchanged regions
119
+ * to at most `contextLines` of surrounding context per change and emitting `@@ -a,c +b,c @@` hunk
120
+ * headers. Changed lines are tagged `- ` (only in `before`) and `+ ` (only in `after`); context
121
+ * lines are tagged with two spaces, so the markers line up. Pure plain text, no ANSI color, so it
122
+ * is safe to embed in a snapshot.
123
+ *
124
+ * Returns an empty string when the two inputs are identical.
125
+ */
126
+ static unifiedDiff(before, after, { contextLines = 3 } = {}) {
127
+ const a = before.length === 0 ? [] : before.split('\n');
128
+ const b = after.length === 0 ? [] : after.split('\n');
129
+ const operations = HclUtility.diffLines(a, b);
130
+ if (operations.every((o) => o.type === 'common')) {
131
+ return '';
132
+ }
133
+ // An op is kept when it is itself a change, or within `contextLines` of one. Consecutive kept ops
134
+ // form a hunk; the runs of dropped ops between them are the collapsed unchanged regions.
135
+ const isKept = operations.map((_, index) => {
136
+ const from = Math.max(0, index - contextLines);
137
+ const to = Math.min(operations.length - 1, index + contextLines);
138
+ for (let k = from; k <= to; k++) {
139
+ if (operations[k].type !== 'common') {
140
+ return true;
141
+ }
142
+ }
143
+ return false;
144
+ });
145
+ const hunks = [];
146
+ let index = 0;
147
+ while (index < operations.length) {
148
+ if (!isKept[index]) {
149
+ index++;
150
+ continue;
151
+ }
152
+ const start = index;
153
+ while (index < operations.length && isKept[index]) {
154
+ index++;
155
+ }
156
+ const end = index; // exclusive.
157
+ let aCount = 0;
158
+ let bCount = 0;
159
+ const lines = [];
160
+ for (let k = start; k < end; k++) {
161
+ const op = operations[k];
162
+ if (op.type === 'common') {
163
+ aCount++;
164
+ bCount++;
165
+ lines.push(` ${op.text}`);
166
+ }
167
+ else if (op.type === 'remove') {
168
+ aCount++;
169
+ lines.push(`- ${op.text}`);
170
+ }
171
+ else {
172
+ bCount++;
173
+ lines.push(`+ ${op.text}`);
174
+ }
175
+ }
176
+ // `aBefore`/`bBefore` count the lines consumed before this hunk, so the hunk starts on the next
177
+ // line. A hunk that adds or removes nothing on a side reports that side at the boundary line
178
+ // with a zero count, matching unified-diff convention.
179
+ const aBefore = operations.slice(0, start).filter((o) => o.type !== 'add').length;
180
+ const bBefore = operations.slice(0, start).filter((o) => o.type !== 'remove').length;
181
+ const aStart = aCount > 0 ? aBefore + 1 : aBefore;
182
+ const bStart = bCount > 0 ? bBefore + 1 : bBefore;
183
+ hunks.push(`@@ -${aStart},${aCount} +${bStart},${bCount} @@\n${lines.join('\n')}`);
184
+ }
185
+ return hunks.join('\n');
186
+ }
187
+ /**
188
+ * How many brackets a line opens, less how many it closes, ignoring those inside quoted strings.
189
+ *
190
+ * @internal
191
+ */
192
+ static bracketDepth(line) {
193
+ let depth = 0;
194
+ let inString = false;
195
+ for (let index = 0; index < line.length; index++) {
196
+ const character = line[index];
197
+ if (inString) {
198
+ if (character === '\\') {
199
+ index++;
200
+ }
201
+ else if (character === '"') {
202
+ inString = false;
203
+ }
204
+ }
205
+ else if (character === '"') {
206
+ inString = true;
207
+ }
208
+ else if ('([{'.includes(character)) {
209
+ depth++;
210
+ }
211
+ else if (')]}'.includes(character)) {
212
+ depth--;
213
+ }
214
+ }
215
+ return depth;
216
+ }
217
+ /**
218
+ * Builds the shortest edit script between two line arrays via the classic longest-common-subsequence
219
+ * DP. Quadratic in the number of lines, which is fine for the small blocks this serves. A removal is
220
+ * preferred over an addition on ties so a changed line reads as `-old` then `+new`.
221
+ *
222
+ * @internal
223
+ */
224
+ static diffLines(a, b) {
225
+ const n = a.length;
226
+ const m = b.length;
227
+ const commonLength = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
228
+ for (let i = n - 1; i >= 0; i--) {
229
+ for (let j = m - 1; j >= 0; j--) {
230
+ commonLength[i][j] =
231
+ a[i] === b[j] ? commonLength[i + 1][j + 1] + 1 : Math.max(commonLength[i + 1][j], commonLength[i][j + 1]);
232
+ }
233
+ }
234
+ const operations = [];
235
+ let i = 0;
236
+ let j = 0;
237
+ while (i < n && j < m) {
238
+ if (a[i] === b[j]) {
239
+ operations.push({ text: a[i], type: 'common' });
240
+ i++;
241
+ j++;
242
+ }
243
+ else if (commonLength[i + 1][j] >= commonLength[i][j + 1]) {
244
+ operations.push({ text: a[i], type: 'remove' });
245
+ i++;
246
+ }
247
+ else {
248
+ operations.push({ text: b[j], type: 'add' });
249
+ j++;
250
+ }
251
+ }
252
+ while (i < n) {
253
+ operations.push({ text: a[i], type: 'remove' });
254
+ i++;
255
+ }
256
+ while (j < m) {
257
+ operations.push({ text: b[j], type: 'add' });
258
+ j++;
259
+ }
260
+ return operations;
261
+ }
262
+ /**
263
+ * Keys blocks by their header line (e.g. `resource "aws_vpc" "vpc-x" {`), adding the first body line
264
+ * for a header in `repeatedHeaders`, and an occurrence number for any key still taken.
265
+ *
266
+ * @internal
267
+ */
268
+ static keyBlocks(texts, repeatedHeaders) {
269
+ const blocks = new Map();
270
+ for (const text of texts) {
271
+ const [header, firstBodyLine = ''] = text.split('\n');
272
+ const baseKey = repeatedHeaders.has(header) ? `${header} ${firstBodyLine.trim()}` : header;
273
+ let key = baseKey;
274
+ for (let occurrence = 2; blocks.has(key); occurrence++) {
275
+ key = `${baseKey} #${occurrence}`;
276
+ }
277
+ blocks.set(key, text);
278
+ }
279
+ return blocks;
280
+ }
281
+ /**
282
+ * Splits a {@link serialize} render into its top-level blocks, grouped by `moduleId/file`. Relies on
283
+ * octo's regular render format — `# <moduleId>/<file>` section headers, and a top-level block
284
+ * starting on a line with no indent that is not a closing bracket.
285
+ *
286
+ * @internal
287
+ */
288
+ static parseBlocks(serialized) {
289
+ const sections = new Map();
290
+ if (!serialized) {
291
+ return sections;
292
+ }
293
+ let currentKey;
294
+ let buffer = [];
295
+ const flush = () => {
296
+ if (currentKey === undefined) {
297
+ return;
298
+ }
299
+ sections.set(currentKey, HclUtility.splitTopLevelBlocks(buffer));
300
+ buffer = [];
301
+ };
302
+ for (const line of serialized.split('\n')) {
303
+ const header = HclUtility.SECTION_HEADER.exec(line);
304
+ if (header) {
305
+ flush();
306
+ currentKey = header[1];
307
+ }
308
+ else {
309
+ buffer.push(line);
310
+ }
311
+ }
312
+ flush();
313
+ return sections;
314
+ }
315
+ /**
316
+ * Parses the lines inside a block. An attribute whose value opens more brackets than it closes runs
317
+ * on to the line that closes them, and is kept as text; `key = {` on its own is an object, parsed
318
+ * like a nested block.
319
+ *
320
+ * @internal
321
+ */
322
+ static parseBody(lines) {
323
+ const body = {};
324
+ // Finds the line closing the block or value opened on line `start`.
325
+ const closingLine = (start) => {
326
+ let depth = 0;
327
+ for (let index = start; index < lines.length; index++) {
328
+ depth += HclUtility.bracketDepth(lines[index]);
329
+ if (depth <= 0) {
330
+ return index;
331
+ }
332
+ }
333
+ return lines.length - 1;
334
+ };
335
+ let index = 0;
336
+ while (index < lines.length) {
337
+ const line = lines[index];
338
+ const attribute = /^\s*([\w-]+)\s*=\s*(.*)$/.exec(line);
339
+ if (attribute) {
340
+ const [, key, value] = attribute;
341
+ const end = closingLine(index);
342
+ if (value === '{') {
343
+ body[key] = HclUtility.parseBody(lines.slice(index + 1, end));
344
+ }
345
+ else {
346
+ const text = [value, ...lines.slice(index + 1, end + 1)].join('\n').trim();
347
+ body[key] = /^"(?:[^"\\]|\\.)*"$/.test(text) ? text.slice(1, -1) : text;
348
+ }
349
+ index = end + 1;
350
+ continue;
351
+ }
352
+ const nestedBlock = /^\s*([\w-]+)(?:\s+"[^"]*")*\s*\{$/.exec(line);
353
+ if (nestedBlock) {
354
+ const [, key] = nestedBlock;
355
+ const end = closingLine(index);
356
+ const nested = HclUtility.parseBody(lines.slice(index + 1, end));
357
+ const existing = body[key];
358
+ if (existing === undefined) {
359
+ body[key] = nested;
360
+ }
361
+ else if (Array.isArray(existing)) {
362
+ existing.push(nested);
363
+ }
364
+ else {
365
+ body[key] = [existing, nested];
366
+ }
367
+ index = end + 1;
368
+ continue;
369
+ }
370
+ index++;
371
+ }
372
+ return body;
373
+ }
374
+ /**
375
+ * Returns the header lines that more than one of these blocks starts with.
376
+ *
377
+ * @internal
378
+ */
379
+ static repeatedHeaders(texts) {
380
+ const headers = texts.map((t) => t.split('\n')[0]);
381
+ return headers.filter((h, index) => headers.indexOf(h) !== index);
382
+ }
383
+ /**
384
+ * Splits lines into top-level blocks, each trimmed. A block starts on a line with no indent that is not a
385
+ * closing bracket, so a blank line inside a block does not end it.
386
+ *
387
+ * @internal
388
+ */
389
+ static splitTopLevelBlocks(lines) {
390
+ const blocks = [];
391
+ for (const line of lines) {
392
+ if (line.trim() && !/^[\s)\]}]/.test(line)) {
393
+ blocks.push([line]);
394
+ }
395
+ else if (blocks.length > 0) {
396
+ blocks[blocks.length - 1].push(line);
397
+ }
398
+ }
399
+ return blocks.map((block) => block.join('\n').trim());
400
+ }
401
+ }
402
+ //# sourceMappingURL=hcl.utility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcl.utility.js","sourceRoot":"","sources":["../../../src/utilities/hcl/hcl.utility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The one place octo speaks HTTP.
3
+ *
4
+ * A response is handed back whatever its status, so the caller decides what a refusal means instead
5
+ * of catching one. Only a request that never reached a server throws.
6
+ *
7
+ * @internal
8
+ */
9
+ export declare class HttpUtility {
10
+ /**
11
+ * Downloads `url` into `filePath`, streaming it so its size is not bounded by memory. False when the
12
+ * server refused it or the download was cut short, which can leave part of the file behind.
13
+ *
14
+ * @internal
15
+ * @throws {@link TransactionError} When the host could not be reached at all.
16
+ */
17
+ static downloadToFile(url: string, filePath: string): Promise<boolean>;
18
+ /**
19
+ * What a refused request said went wrong, as one line. A service that answers a list - a failed
20
+ * validation usually does - is read as a sentence, and a body that is not JSON as its status.
21
+ *
22
+ * @internal
23
+ */
24
+ static readErrorMessage(response: Response): Promise<string>;
25
+ /**
26
+ * A body may be a stream, which is sent as it is read rather than held in memory. A stream's length
27
+ * is unknown to fetch, so a server that needs one is given `Content-Length` in `headers`.
28
+ *
29
+ * @internal
30
+ * @throws {@link TransactionError} When the host could not be reached at all, which is a different
31
+ * thing from being refused by it and is the caller's to report differently.
32
+ */
33
+ static send(url: string, { body, headers, method }?: {
34
+ body?: BodyInit;
35
+ headers?: Record<string, string>;
36
+ method?: string;
37
+ }): Promise<Response>;
38
+ /**
39
+ * {@link HttpUtility.send} with a JSON body, which is every request octo makes that carries one
40
+ * other than an upload.
41
+ *
42
+ * @internal
43
+ */
44
+ static sendJson(url: string, { body, headers, method }?: {
45
+ body?: unknown;
46
+ headers?: Record<string, string>;
47
+ method?: string;
48
+ }): Promise<Response>;
49
+ /**
50
+ * PUTs the file at `filePath` to `url`, streaming it so its size is not bounded by memory, with its
51
+ * `Content-Length`, which a presigned URL is usually signed with.
52
+ *
53
+ * @internal
54
+ * @throws {@link TransactionError} When the host could not be reached at all.
55
+ */
56
+ static uploadFile(url: string, filePath: string, headers?: Record<string, string>): Promise<Response>;
57
+ }