@fredlackey/devutils 0.0.1 → 0.0.3

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 (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. package/src/utils/windows/winget.js +89 -27
@@ -0,0 +1,390 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * @fileoverview Install apt-transport-https - HTTPS transport for APT package manager.
5
+ *
6
+ * apt-transport-https is a package that historically enabled the APT package manager
7
+ * on Debian-based Linux distributions to download packages over HTTPS connections.
8
+ *
9
+ * IMPORTANT: As of APT version 1.5 (included in Ubuntu 18.04+ and Debian 10+), HTTPS
10
+ * support is built directly into APT. The apt-transport-https package now exists only
11
+ * as a "dummy transitional package" for backward compatibility with older scripts.
12
+ *
13
+ * This installer:
14
+ * - On modern systems (APT 1.5+): Reports that HTTPS is already supported
15
+ * - On legacy systems (APT < 1.5): Installs the apt-transport-https package
16
+ * - On non-APT platforms: Gracefully reports the package is not applicable
17
+ *
18
+ * @module installs/apt-transport-https
19
+ */
20
+
21
+ const os = require('../utils/common/os');
22
+ const shell = require('../utils/common/shell');
23
+ const apt = require('../utils/ubuntu/apt');
24
+
25
+ // -----------------------------------------------------------------------------
26
+ // Constants
27
+ // -----------------------------------------------------------------------------
28
+
29
+ /**
30
+ * Minimum APT version that has built-in HTTPS support.
31
+ * APT 1.5 introduced native HTTPS transport, making apt-transport-https unnecessary.
32
+ */
33
+ const APT_HTTPS_BUILTIN_VERSION = 1.5;
34
+
35
+ // -----------------------------------------------------------------------------
36
+ // Helper Functions
37
+ // -----------------------------------------------------------------------------
38
+
39
+ /**
40
+ * Gets the installed APT version number.
41
+ *
42
+ * Parses the output of `apt --version` to extract the major.minor version number.
43
+ * Example output: "apt 2.4.8 (amd64)" -> returns 2.4
44
+ *
45
+ * @returns {Promise<number|null>} The APT version as a float (e.g., 2.4), or null if unavailable
46
+ */
47
+ async function getAptVersion() {
48
+ // Execute apt --version to get version information
49
+ const result = await shell.exec('apt --version 2>/dev/null');
50
+
51
+ // If the command failed, APT is not available
52
+ if (result.code !== 0 || !result.stdout) {
53
+ return null;
54
+ }
55
+
56
+ // Parse the version number from output like "apt 2.4.8 (amd64)"
57
+ // We use a regex to capture the major.minor portion of the version
58
+ const versionMatch = result.stdout.match(/apt\s+(\d+\.\d+)/i);
59
+
60
+ if (!versionMatch) {
61
+ return null;
62
+ }
63
+
64
+ // Convert the version string to a float for numeric comparison
65
+ return parseFloat(versionMatch[1]);
66
+ }
67
+
68
+ /**
69
+ * Checks if the installed APT version has built-in HTTPS support.
70
+ *
71
+ * APT version 1.5 and later include native HTTPS transport, meaning the
72
+ * apt-transport-https package is unnecessary on these systems.
73
+ *
74
+ * @returns {Promise<boolean>} True if APT has built-in HTTPS support
75
+ */
76
+ async function hasBuiltInHttpsSupport() {
77
+ const aptVersion = await getAptVersion();
78
+
79
+ // If we cannot determine the APT version, assume we need the package
80
+ // (conservative approach for compatibility)
81
+ if (aptVersion === null) {
82
+ return false;
83
+ }
84
+
85
+ // APT 1.5+ has built-in HTTPS support
86
+ return aptVersion >= APT_HTTPS_BUILTIN_VERSION;
87
+ }
88
+
89
+ /**
90
+ * Checks if the HTTPS transport method is available in APT.
91
+ *
92
+ * This function verifies that APT can use HTTPS by checking for the
93
+ * presence of the https method in /usr/lib/apt/methods/.
94
+ *
95
+ * @returns {Promise<boolean>} True if HTTPS transport is available
96
+ */
97
+ async function isHttpsTransportAvailable() {
98
+ // Check if the https method file exists in APT's methods directory
99
+ const result = await shell.exec('ls /usr/lib/apt/methods/https 2>/dev/null');
100
+ return result.code === 0;
101
+ }
102
+
103
+ // -----------------------------------------------------------------------------
104
+ // Platform-Specific Installation Functions
105
+ // -----------------------------------------------------------------------------
106
+
107
+ /**
108
+ * Install apt-transport-https on macOS.
109
+ *
110
+ * This package is not applicable to macOS. macOS uses Homebrew for package
111
+ * management, which natively supports HTTPS repositories without any
112
+ * additional configuration.
113
+ *
114
+ * @returns {Promise<void>}
115
+ */
116
+ async function install_macos() {
117
+ // macOS uses Homebrew, not APT - this package is not applicable
118
+ console.log('apt-transport-https is not available for macOS.');
119
+ return;
120
+ }
121
+
122
+ /**
123
+ * Install apt-transport-https on Ubuntu/Debian using APT.
124
+ *
125
+ * On modern Ubuntu (18.04+) and Debian (10+) systems, HTTPS support is built
126
+ * into APT itself, making this package unnecessary. This function checks the
127
+ * APT version and either:
128
+ * - Reports that HTTPS is already supported (APT 1.5+)
129
+ * - Installs the transitional package (APT < 1.5)
130
+ *
131
+ * @returns {Promise<void>}
132
+ */
133
+ async function install_ubuntu() {
134
+ // First, check if APT is available on this system
135
+ if (!apt.isInstalled()) {
136
+ console.log('APT is not available on this system.');
137
+ return;
138
+ }
139
+
140
+ // Check if this system has built-in HTTPS support (APT 1.5+)
141
+ const hasBuiltIn = await hasBuiltInHttpsSupport();
142
+
143
+ if (hasBuiltIn) {
144
+ // Modern system - HTTPS is built into APT
145
+ console.log('HTTPS transport is already built into APT on this system.');
146
+ console.log('The apt-transport-https package is not required.');
147
+
148
+ // Verify HTTPS transport is actually working
149
+ const httpsAvailable = await isHttpsTransportAvailable();
150
+ if (httpsAvailable) {
151
+ console.log('Verified: HTTPS transport is available and working.');
152
+ }
153
+ return;
154
+ }
155
+
156
+ // Legacy system - check if apt-transport-https is already installed
157
+ const isInstalled = await apt.isPackageInstalled('apt-transport-https');
158
+ if (isInstalled) {
159
+ console.log('apt-transport-https is already installed, skipping...');
160
+ return;
161
+ }
162
+
163
+ // Update package lists before installing
164
+ console.log('Updating package lists...');
165
+ const updateResult = await shell.exec('sudo DEBIAN_FRONTEND=noninteractive apt-get update -y');
166
+ if (updateResult.code !== 0) {
167
+ console.log('Warning: Failed to update package lists. Continuing with installation...');
168
+ }
169
+
170
+ // Install apt-transport-https on this legacy system
171
+ console.log('Installing apt-transport-https via APT...');
172
+ const installResult = await shell.exec('sudo DEBIAN_FRONTEND=noninteractive apt-get install -y apt-transport-https');
173
+
174
+ if (installResult.code !== 0) {
175
+ console.log('Failed to install apt-transport-https.');
176
+ console.log(installResult.stderr || installResult.stdout);
177
+ return;
178
+ }
179
+
180
+ // Verify the installation succeeded
181
+ const verified = await isHttpsTransportAvailable();
182
+ if (!verified) {
183
+ console.log('Installation may have failed: HTTPS transport not found after install.');
184
+ return;
185
+ }
186
+
187
+ console.log('apt-transport-https installed successfully.');
188
+ }
189
+
190
+ /**
191
+ * Install apt-transport-https on Ubuntu running in WSL.
192
+ *
193
+ * WSL Ubuntu installations follow the same process as native Ubuntu using APT.
194
+ * Modern WSL distributions include APT 1.5+ with built-in HTTPS support.
195
+ *
196
+ * @returns {Promise<void>}
197
+ */
198
+ async function install_ubuntu_wsl() {
199
+ // WSL Ubuntu uses the same APT-based installation as native Ubuntu
200
+ await install_ubuntu();
201
+ }
202
+
203
+ /**
204
+ * Install apt-transport-https on Raspberry Pi OS using APT.
205
+ *
206
+ * Raspberry Pi OS is based on Debian, so the installation follows the same
207
+ * process as Ubuntu/Debian. Modern Raspberry Pi OS (Buster and later) includes
208
+ * APT 1.5+ with built-in HTTPS support.
209
+ *
210
+ * @returns {Promise<void>}
211
+ */
212
+ async function install_raspbian() {
213
+ // Raspberry Pi OS uses the same APT-based installation as Ubuntu/Debian
214
+ await install_ubuntu();
215
+ }
216
+
217
+ /**
218
+ * Install apt-transport-https on Amazon Linux.
219
+ *
220
+ * This package is not applicable to Amazon Linux. Amazon Linux uses DNF
221
+ * (Amazon Linux 2023) or YUM (Amazon Linux 2) as its package manager,
222
+ * not APT. Both DNF and YUM natively support HTTPS repositories.
223
+ *
224
+ * @returns {Promise<void>}
225
+ */
226
+ async function install_amazon_linux() {
227
+ // Amazon Linux uses DNF/YUM, not APT - this package is not applicable
228
+ console.log('apt-transport-https is not available for Amazon Linux.');
229
+ return;
230
+ }
231
+
232
+ /**
233
+ * Install apt-transport-https on Windows.
234
+ *
235
+ * This package is not applicable to Windows. Windows uses Chocolatey or
236
+ * winget for command-line package management, not APT. Both package managers
237
+ * natively support HTTPS for all operations.
238
+ *
239
+ * @returns {Promise<void>}
240
+ */
241
+ async function install_windows() {
242
+ // Windows uses Chocolatey/winget, not APT - this package is not applicable
243
+ console.log('apt-transport-https is not available for Windows.');
244
+ return;
245
+ }
246
+
247
+ /**
248
+ * Install apt-transport-https on Git Bash.
249
+ *
250
+ * This package is not applicable to Git Bash. Git Bash is a terminal emulator
251
+ * for Windows that provides a Unix-like command-line environment but does not
252
+ * include or use APT for package management.
253
+ *
254
+ * @returns {Promise<void>}
255
+ */
256
+ async function install_gitbash() {
257
+ // Git Bash does not use APT - this package is not applicable
258
+ console.log('apt-transport-https is not available for Git Bash.');
259
+ return;
260
+ }
261
+
262
+ // -----------------------------------------------------------------------------
263
+ // Eligibility Check
264
+ // -----------------------------------------------------------------------------
265
+
266
+ /**
267
+ * Check if apt-transport-https (or built-in HTTPS support) is installed.
268
+ *
269
+ * This function checks whether HTTPS transport is available for APT.
270
+ * On modern systems (APT 1.5+), HTTPS is built-in and always returns true.
271
+ * On legacy systems, it checks if the apt-transport-https package is installed.
272
+ *
273
+ * @returns {Promise<boolean>} True if HTTPS transport is available
274
+ */
275
+ async function isInstalled() {
276
+ const platform = os.detect();
277
+
278
+ // Only applicable on Debian-based systems
279
+ if (!['ubuntu', 'debian', 'wsl', 'raspbian'].includes(platform.type)) {
280
+ return false;
281
+ }
282
+
283
+ // Check if APT has built-in HTTPS support (APT 1.5+)
284
+ const hasBuiltIn = await hasBuiltInHttpsSupport();
285
+ if (hasBuiltIn) {
286
+ return true;
287
+ }
288
+
289
+ // On legacy systems, check if the package is installed
290
+ return await apt.isPackageInstalled('apt-transport-https');
291
+ }
292
+
293
+ /**
294
+ * Check if this installer is supported on the current platform.
295
+ *
296
+ * apt-transport-https can be installed on Debian-based systems:
297
+ * - Ubuntu
298
+ * - Debian
299
+ * - Raspberry Pi OS (raspbian)
300
+ * - WSL (Ubuntu)
301
+ *
302
+ * @returns {boolean} True if installation is supported on this platform
303
+ */
304
+ function isEligible() {
305
+ const platform = os.detect();
306
+ return ['ubuntu', 'debian', 'wsl', 'raspbian'].includes(platform.type);
307
+ }
308
+
309
+ // -----------------------------------------------------------------------------
310
+ // Main Installation Entry Point
311
+ // -----------------------------------------------------------------------------
312
+
313
+ /**
314
+ * Main installation entry point - detects platform and runs appropriate installer.
315
+ *
316
+ * This function detects the current operating system and dispatches to the
317
+ * appropriate platform-specific installer function. apt-transport-https is only
318
+ * applicable to Debian-based systems (Ubuntu, Debian, Raspberry Pi OS, WSL).
319
+ *
320
+ * Supported platforms:
321
+ * - Ubuntu/Debian (APT) - installs package on legacy systems, reports built-in on modern
322
+ * - Raspberry Pi OS (APT) - same as Ubuntu
323
+ * - Ubuntu on WSL (APT) - same as Ubuntu
324
+ *
325
+ * Not applicable platforms (returns gracefully):
326
+ * - macOS (uses Homebrew)
327
+ * - Amazon Linux/RHEL (uses DNF/YUM)
328
+ * - Windows (uses Chocolatey/winget)
329
+ * - Git Bash (no package manager)
330
+ *
331
+ * @returns {Promise<void>}
332
+ */
333
+ async function install() {
334
+ const platform = os.detect();
335
+
336
+ // Map platform types to their corresponding installer functions
337
+ // Multiple platform types can map to the same installer (e.g., debian and ubuntu)
338
+ const installers = {
339
+ 'macos': install_macos,
340
+ 'ubuntu': install_ubuntu,
341
+ 'debian': install_ubuntu,
342
+ 'wsl': install_ubuntu_wsl,
343
+ 'raspbian': install_raspbian,
344
+ 'amazon_linux': install_amazon_linux,
345
+ 'fedora': install_amazon_linux,
346
+ 'rhel': install_amazon_linux,
347
+ 'windows': install_windows,
348
+ 'gitbash': install_gitbash,
349
+ };
350
+
351
+ // Look up the installer for the detected platform
352
+ const installer = installers[platform.type];
353
+
354
+ // If no installer exists for this platform, inform the user gracefully
355
+ if (!installer) {
356
+ console.log(`apt-transport-https is not available for ${platform.type}.`);
357
+ return;
358
+ }
359
+
360
+ // Run the platform-specific installer
361
+ await installer();
362
+ }
363
+
364
+ // -----------------------------------------------------------------------------
365
+ // Module Exports
366
+ // -----------------------------------------------------------------------------
367
+
368
+ module.exports = {
369
+ install,
370
+ isInstalled,
371
+ isEligible,
372
+ install_macos,
373
+ install_ubuntu,
374
+ install_ubuntu_wsl,
375
+ install_raspbian,
376
+ install_amazon_linux,
377
+ install_windows,
378
+ install_gitbash,
379
+ };
380
+
381
+ // -----------------------------------------------------------------------------
382
+ // Direct Execution Handler
383
+ // -----------------------------------------------------------------------------
384
+
385
+ if (require.main === module) {
386
+ install().catch(err => {
387
+ console.error(err.message);
388
+ process.exit(1);
389
+ });
390
+ }