@apimatic/cli 1.1.0-alpha.9 → 1.1.0-beta.10

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 (341) hide show
  1. package/README.md +443 -374
  2. package/bin/run.js +5 -0
  3. package/lib/actions/action-result.d.ts +19 -0
  4. package/lib/actions/action-result.js +70 -0
  5. package/lib/actions/action-result.js.map +1 -0
  6. package/lib/actions/api/transform.d.ts +15 -0
  7. package/lib/actions/api/transform.js +48 -0
  8. package/lib/actions/api/transform.js.map +1 -0
  9. package/lib/actions/api/validate.d.ts +14 -0
  10. package/lib/actions/api/validate.js +52 -0
  11. package/lib/actions/api/validate.js.map +1 -0
  12. package/lib/actions/auth/login.d.ts +13 -0
  13. package/lib/actions/auth/login.js +55 -0
  14. package/lib/actions/auth/login.js.map +1 -0
  15. package/lib/actions/auth/logout.d.ts +8 -0
  16. package/lib/actions/auth/logout.js +15 -0
  17. package/lib/actions/auth/logout.js.map +1 -0
  18. package/lib/actions/auth/status.d.ts +11 -0
  19. package/lib/actions/auth/status.js +26 -0
  20. package/lib/actions/auth/status.js.map +1 -0
  21. package/lib/actions/portal/copilot.d.ts +16 -0
  22. package/lib/actions/portal/copilot.js +89 -0
  23. package/lib/actions/portal/copilot.js.map +1 -0
  24. package/lib/actions/portal/generate.d.ts +11 -5
  25. package/lib/actions/portal/generate.js +60 -55
  26. package/lib/actions/portal/generate.js.map +1 -0
  27. package/lib/actions/portal/quickstart.d.ts +17 -0
  28. package/lib/actions/portal/quickstart.js +169 -0
  29. package/lib/actions/portal/quickstart.js.map +1 -0
  30. package/lib/actions/portal/recipe/new-recipe.d.ts +15 -0
  31. package/lib/actions/portal/recipe/new-recipe.js +177 -0
  32. package/lib/actions/portal/recipe/new-recipe.js.map +1 -0
  33. package/lib/actions/portal/serve.d.ts +15 -0
  34. package/lib/actions/portal/serve.js +104 -0
  35. package/lib/actions/portal/serve.js.map +1 -0
  36. package/lib/actions/portal/toc/new-toc.d.ts +17 -13
  37. package/lib/actions/portal/toc/new-toc.js +85 -123
  38. package/lib/actions/portal/toc/new-toc.js.map +1 -0
  39. package/lib/actions/quickstart.d.ts +10 -0
  40. package/lib/actions/quickstart.js +30 -0
  41. package/lib/actions/quickstart.js.map +1 -0
  42. package/lib/actions/sdk/generate.d.ts +13 -0
  43. package/lib/actions/sdk/generate.js +77 -0
  44. package/lib/actions/sdk/generate.js.map +1 -0
  45. package/lib/actions/sdk/quickstart.d.ts +17 -0
  46. package/lib/actions/sdk/quickstart.js +171 -0
  47. package/lib/actions/sdk/quickstart.js.map +1 -0
  48. package/lib/application/portal/recipe/portal-recipe.d.ts +8 -0
  49. package/lib/application/portal/recipe/portal-recipe.js +33 -0
  50. package/lib/application/portal/recipe/portal-recipe.js.map +1 -0
  51. package/lib/application/portal/recipe/recipe-generator.d.ts +21 -0
  52. package/lib/application/portal/recipe/recipe-generator.js +145 -0
  53. package/lib/application/portal/recipe/recipe-generator.js.map +1 -0
  54. package/lib/application/portal/toc/toc-content-parser.d.ts +1 -1
  55. package/lib/application/portal/toc/toc-content-parser.js +9 -11
  56. package/lib/application/portal/toc/toc-content-parser.js.map +1 -0
  57. package/lib/application/portal/toc/toc-structure-generator.d.ts +23 -2
  58. package/lib/application/portal/toc/toc-structure-generator.js +133 -66
  59. package/lib/application/portal/toc/toc-structure-generator.js.map +1 -0
  60. package/lib/client-utils/auth-manager.d.ts +7 -2
  61. package/lib/client-utils/auth-manager.js +26 -14
  62. package/lib/client-utils/auth-manager.js.map +1 -0
  63. package/lib/commands/api/transform.d.ts +10 -7
  64. package/lib/commands/api/transform.js +51 -111
  65. package/lib/commands/api/transform.js.map +1 -0
  66. package/lib/commands/api/validate.d.ts +7 -4
  67. package/lib/commands/api/validate.js +31 -74
  68. package/lib/commands/api/validate.js.map +1 -0
  69. package/lib/commands/auth/login.d.ts +3 -1
  70. package/lib/commands/auth/login.js +26 -68
  71. package/lib/commands/auth/login.js.map +1 -0
  72. package/lib/commands/auth/logout.d.ts +3 -1
  73. package/lib/commands/auth/logout.js +14 -21
  74. package/lib/commands/auth/logout.js.map +1 -0
  75. package/lib/commands/auth/status.d.ts +1 -0
  76. package/lib/commands/auth/status.js +18 -21
  77. package/lib/commands/auth/status.js.map +1 -0
  78. package/lib/commands/portal/copilot.d.ts +13 -0
  79. package/lib/commands/portal/copilot.js +34 -0
  80. package/lib/commands/portal/copilot.js.map +1 -0
  81. package/lib/commands/portal/generate.d.ts +7 -11
  82. package/lib/commands/portal/generate.js +26 -89
  83. package/lib/commands/portal/generate.js.map +1 -0
  84. package/lib/commands/portal/recipe/new.d.ts +12 -0
  85. package/lib/commands/portal/recipe/new.js +45 -0
  86. package/lib/commands/portal/recipe/new.js.map +1 -0
  87. package/lib/commands/portal/serve.d.ts +8 -8
  88. package/lib/commands/portal/serve.js +41 -125
  89. package/lib/commands/portal/serve.js.map +1 -0
  90. package/lib/commands/portal/toc/new.d.ts +8 -7
  91. package/lib/commands/portal/toc/new.js +52 -49
  92. package/lib/commands/portal/toc/new.js.map +1 -0
  93. package/lib/commands/quickstart.d.ts +9 -0
  94. package/lib/commands/quickstart.js +37 -0
  95. package/lib/commands/quickstart.js.map +1 -0
  96. package/lib/commands/sdk/generate.d.ts +10 -8
  97. package/lib/commands/sdk/generate.js +46 -131
  98. package/lib/commands/sdk/generate.js.map +1 -0
  99. package/lib/config/axios-config.js +4 -6
  100. package/lib/config/axios-config.js.map +1 -0
  101. package/lib/hooks/not-found.d.ts +3 -0
  102. package/lib/hooks/not-found.js +52 -0
  103. package/lib/hooks/not-found.js.map +1 -0
  104. package/lib/hooks/utils.d.ts +5 -0
  105. package/lib/hooks/utils.js +51 -0
  106. package/lib/hooks/utils.js.map +1 -0
  107. package/lib/index.js +2 -5
  108. package/lib/index.js.map +1 -0
  109. package/lib/infrastructure/debounce-service.d.ts +10 -0
  110. package/lib/infrastructure/debounce-service.js +55 -0
  111. package/lib/infrastructure/debounce-service.js.map +1 -0
  112. package/lib/infrastructure/env-info.d.ts +12 -0
  113. package/lib/infrastructure/env-info.js +58 -0
  114. package/lib/infrastructure/env-info.js.map +1 -0
  115. package/lib/infrastructure/file-service.d.ts +25 -0
  116. package/lib/infrastructure/file-service.js +131 -0
  117. package/lib/infrastructure/file-service.js.map +1 -0
  118. package/lib/infrastructure/launcher-service.d.ts +9 -0
  119. package/lib/infrastructure/launcher-service.js +72 -0
  120. package/lib/infrastructure/launcher-service.js.map +1 -0
  121. package/lib/infrastructure/network-service.d.ts +3 -0
  122. package/lib/infrastructure/network-service.js +7 -0
  123. package/lib/infrastructure/network-service.js.map +1 -0
  124. package/lib/infrastructure/service-error.d.ts +16 -0
  125. package/lib/infrastructure/service-error.js +49 -0
  126. package/lib/infrastructure/service-error.js.map +1 -0
  127. package/lib/infrastructure/services/api-client-factory.d.ts +6 -0
  128. package/lib/infrastructure/services/api-client-factory.js +20 -0
  129. package/lib/infrastructure/services/api-client-factory.js.map +1 -0
  130. package/lib/infrastructure/services/api-service.d.ts +13 -0
  131. package/lib/infrastructure/services/api-service.js +103 -0
  132. package/lib/infrastructure/services/api-service.js.map +1 -0
  133. package/lib/infrastructure/services/auth-service.d.ts +11 -0
  134. package/lib/infrastructure/services/auth-service.js +37 -0
  135. package/lib/infrastructure/services/auth-service.js.map +1 -0
  136. package/lib/infrastructure/services/file-download-service.d.ts +15 -0
  137. package/lib/infrastructure/services/file-download-service.js +104 -0
  138. package/lib/infrastructure/services/file-download-service.js.map +1 -0
  139. package/lib/infrastructure/services/portal-service.d.ts +15 -12
  140. package/lib/infrastructure/services/portal-service.js +152 -99
  141. package/lib/infrastructure/services/portal-service.js.map +1 -0
  142. package/lib/infrastructure/services/telemetry-service.d.ts +9 -0
  143. package/lib/infrastructure/services/telemetry-service.js +38 -0
  144. package/lib/infrastructure/services/telemetry-service.js.map +1 -0
  145. package/lib/infrastructure/services/transformation-service.d.ts +23 -0
  146. package/lib/infrastructure/services/transformation-service.js +56 -0
  147. package/lib/infrastructure/services/transformation-service.js.map +1 -0
  148. package/lib/infrastructure/services/validation-service.d.ts +43 -0
  149. package/lib/infrastructure/services/validation-service.js +142 -0
  150. package/lib/infrastructure/services/validation-service.js.map +1 -0
  151. package/lib/infrastructure/tmp-extensions.d.ts +2 -0
  152. package/lib/infrastructure/tmp-extensions.js +6 -0
  153. package/lib/infrastructure/tmp-extensions.js.map +1 -0
  154. package/lib/infrastructure/zip-service.d.ts +6 -0
  155. package/lib/infrastructure/zip-service.js +39 -0
  156. package/lib/infrastructure/zip-service.js.map +1 -0
  157. package/lib/prompts/api/transform.d.ts +11 -0
  158. package/lib/prompts/api/transform.js +29 -0
  159. package/lib/prompts/api/transform.js.map +1 -0
  160. package/lib/prompts/api/validate.d.ts +15 -0
  161. package/lib/prompts/api/validate.js +76 -0
  162. package/lib/prompts/api/validate.js.map +1 -0
  163. package/lib/prompts/auth/login.d.ts +10 -0
  164. package/lib/prompts/auth/login.js +22 -0
  165. package/lib/prompts/auth/login.js.map +1 -0
  166. package/lib/prompts/auth/logout.d.ts +3 -0
  167. package/lib/prompts/auth/logout.js +7 -0
  168. package/lib/prompts/auth/logout.js.map +1 -0
  169. package/lib/prompts/auth/status.d.ts +8 -0
  170. package/lib/prompts/auth/status.js +22 -0
  171. package/lib/prompts/auth/status.js.map +1 -0
  172. package/lib/prompts/format.d.ts +31 -0
  173. package/lib/prompts/format.js +89 -0
  174. package/lib/prompts/format.js.map +1 -0
  175. package/lib/prompts/portal/copilot.d.ts +18 -0
  176. package/lib/prompts/portal/copilot.js +82 -0
  177. package/lib/prompts/portal/copilot.js.map +1 -0
  178. package/lib/prompts/portal/generate.d.ts +13 -8
  179. package/lib/prompts/portal/generate.js +36 -53
  180. package/lib/prompts/portal/generate.js.map +1 -0
  181. package/lib/prompts/portal/quickstart.d.ts +31 -29
  182. package/lib/prompts/portal/quickstart.js +139 -185
  183. package/lib/prompts/portal/quickstart.js.map +1 -0
  184. package/lib/prompts/portal/recipe/new-recipe.d.ts +29 -0
  185. package/lib/prompts/portal/recipe/new-recipe.js +165 -0
  186. package/lib/prompts/portal/recipe/new-recipe.js.map +1 -0
  187. package/lib/prompts/portal/serve.d.ts +9 -5
  188. package/lib/prompts/portal/serve.js +29 -19
  189. package/lib/prompts/portal/serve.js.map +1 -0
  190. package/lib/prompts/portal/toc/new-toc.d.ts +13 -8
  191. package/lib/prompts/portal/toc/new-toc.js +36 -36
  192. package/lib/prompts/portal/toc/new-toc.js.map +1 -0
  193. package/lib/prompts/prompt.d.ts +3 -0
  194. package/lib/prompts/prompt.js +37 -0
  195. package/lib/prompts/prompt.js.map +1 -0
  196. package/lib/prompts/quickstart.d.ts +6 -0
  197. package/lib/prompts/quickstart.js +25 -0
  198. package/lib/prompts/quickstart.js.map +1 -0
  199. package/lib/prompts/sdk/generate.d.ts +16 -0
  200. package/lib/prompts/sdk/generate.js +57 -0
  201. package/lib/prompts/sdk/generate.js.map +1 -0
  202. package/lib/prompts/sdk/quickstart.d.ts +35 -0
  203. package/lib/prompts/sdk/quickstart.js +177 -0
  204. package/lib/prompts/sdk/quickstart.js.map +1 -0
  205. package/lib/types/api/account.d.ts +10 -0
  206. package/lib/types/api/account.js +2 -0
  207. package/lib/types/api/account.js.map +1 -0
  208. package/lib/types/api/transform.d.ts +14 -25
  209. package/lib/types/api/transform.js +20 -23
  210. package/lib/types/api/transform.js.map +1 -0
  211. package/lib/types/build/build.d.ts +22 -0
  212. package/lib/types/build/build.js +7 -0
  213. package/lib/types/build/build.js.map +1 -0
  214. package/lib/types/build-context.d.ts +13 -0
  215. package/lib/types/build-context.js +33 -0
  216. package/lib/types/build-context.js.map +1 -0
  217. package/lib/types/common/command-metadata.d.ts +4 -0
  218. package/lib/types/common/command-metadata.js +2 -0
  219. package/lib/types/common/command-metadata.js.map +1 -0
  220. package/lib/types/events/domain-event.d.ts +8 -0
  221. package/lib/types/events/domain-event.js +11 -0
  222. package/lib/types/events/domain-event.js.map +1 -0
  223. package/lib/types/events/quickstart-completed.d.ts +7 -0
  224. package/lib/types/events/quickstart-completed.js +10 -0
  225. package/lib/types/events/quickstart-completed.js.map +1 -0
  226. package/lib/types/events/quickstart-initiated.d.ts +7 -0
  227. package/lib/types/events/quickstart-initiated.js +10 -0
  228. package/lib/types/events/quickstart-initiated.js.map +1 -0
  229. package/lib/types/events/recipe-creation-failed.d.ts +5 -0
  230. package/lib/types/events/recipe-creation-failed.js +8 -0
  231. package/lib/types/events/recipe-creation-failed.js.map +1 -0
  232. package/lib/types/events/toc-creation-failed.d.ts +5 -0
  233. package/lib/types/events/toc-creation-failed.js +8 -0
  234. package/lib/types/events/toc-creation-failed.js.map +1 -0
  235. package/lib/types/file/directory.d.ts +17 -0
  236. package/lib/types/file/directory.js +87 -0
  237. package/lib/types/file/directory.js.map +1 -0
  238. package/lib/types/file/directoryPath.d.ts +10 -0
  239. package/lib/types/file/directoryPath.js +26 -0
  240. package/lib/types/file/directoryPath.js.map +1 -0
  241. package/lib/types/file/fileName.d.ts +7 -0
  242. package/lib/types/file/fileName.js +21 -0
  243. package/lib/types/file/fileName.js.map +1 -0
  244. package/lib/types/file/filePath.d.ts +10 -0
  245. package/lib/types/file/filePath.js +32 -0
  246. package/lib/types/file/filePath.js.map +1 -0
  247. package/lib/types/file/resource-input.d.ts +5 -0
  248. package/lib/types/file/resource-input.js +42 -0
  249. package/lib/types/file/resource-input.js.map +1 -0
  250. package/lib/types/file/urlPath.d.ts +6 -0
  251. package/lib/types/file/urlPath.js +22 -0
  252. package/lib/types/file/urlPath.js.map +1 -0
  253. package/lib/types/flags-provider.d.ts +15 -0
  254. package/lib/types/flags-provider.js +34 -0
  255. package/lib/types/flags-provider.js.map +1 -0
  256. package/lib/types/portal-context.d.ts +13 -0
  257. package/lib/types/portal-context.js +38 -0
  258. package/lib/types/portal-context.js.map +1 -0
  259. package/lib/types/recipe/recipe.d.ts +22 -0
  260. package/lib/types/recipe/recipe.js +6 -0
  261. package/lib/types/recipe/recipe.js.map +1 -0
  262. package/lib/types/recipe-context.d.ts +9 -0
  263. package/lib/types/recipe-context.js +26 -0
  264. package/lib/types/recipe-context.js.map +1 -0
  265. package/lib/types/resource-context.d.ts +12 -0
  266. package/lib/types/resource-context.js +30 -0
  267. package/lib/types/resource-context.js.map +1 -0
  268. package/lib/types/sdk/generate.d.ts +9 -22
  269. package/lib/types/sdk/generate.js +25 -14
  270. package/lib/types/sdk/generate.js.map +1 -0
  271. package/lib/types/sdk-context.d.ts +14 -0
  272. package/lib/types/sdk-context.js +32 -0
  273. package/lib/types/sdk-context.js.map +1 -0
  274. package/lib/types/sdl/sdl.d.ts +27 -0
  275. package/lib/types/sdl/sdl.js +145 -3
  276. package/lib/types/sdl/sdl.js.map +1 -0
  277. package/lib/types/spec-context.d.ts +12 -0
  278. package/lib/types/spec-context.js +29 -0
  279. package/lib/types/spec-context.js.map +1 -0
  280. package/lib/types/temp-context.d.ts +11 -0
  281. package/lib/types/temp-context.js +27 -0
  282. package/lib/types/temp-context.js.map +1 -0
  283. package/lib/types/toc/toc.d.ts +31 -6
  284. package/lib/types/toc/toc.js +2 -10
  285. package/lib/types/toc/toc.js.map +1 -0
  286. package/lib/types/toc-context.d.ts +12 -0
  287. package/lib/types/toc-context.js +26 -0
  288. package/lib/types/toc-context.js.map +1 -0
  289. package/lib/types/transform-context.d.ts +13 -0
  290. package/lib/types/transform-context.js +30 -0
  291. package/lib/types/transform-context.js.map +1 -0
  292. package/lib/types/utils.d.ts +0 -9
  293. package/lib/types/utils.js +2 -3
  294. package/lib/types/utils.js.map +1 -0
  295. package/lib/types/versioned-build-context.d.ts +15 -0
  296. package/lib/types/versioned-build-context.js +28 -0
  297. package/lib/types/versioned-build-context.js.map +1 -0
  298. package/lib/utils/string-utils.d.ts +3 -0
  299. package/lib/utils/string-utils.js +79 -0
  300. package/lib/utils/string-utils.js.map +1 -0
  301. package/lib/utils/utils.d.ts +2 -44
  302. package/lib/utils/utils.js +14 -366
  303. package/lib/utils/utils.js.map +1 -0
  304. package/package.json +50 -31
  305. package/bin/run +0 -9
  306. package/lib/application/portal/toc/sdl-parser.d.ts +0 -13
  307. package/lib/application/portal/toc/sdl-parser.js +0 -53
  308. package/lib/client-utils/sdk-client.d.ts +0 -23
  309. package/lib/client-utils/sdk-client.js +0 -124
  310. package/lib/commands/portal/quickstart.d.ts +0 -10
  311. package/lib/commands/portal/quickstart.js +0 -79
  312. package/lib/config/env.d.ts +0 -27
  313. package/lib/config/env.js +0 -31
  314. package/lib/controllers/api/transform.d.ts +0 -5
  315. package/lib/controllers/api/transform.js +0 -56
  316. package/lib/controllers/api/validate.d.ts +0 -3
  317. package/lib/controllers/api/validate.js +0 -33
  318. package/lib/controllers/portal/generate.d.ts +0 -3
  319. package/lib/controllers/portal/generate.js +0 -110
  320. package/lib/controllers/portal/quickstart.d.ts +0 -14
  321. package/lib/controllers/portal/quickstart.js +0 -258
  322. package/lib/controllers/portal/serve.d.ts +0 -3
  323. package/lib/controllers/portal/serve.js +0 -138
  324. package/lib/controllers/sdk/generate.d.ts +0 -4
  325. package/lib/controllers/sdk/generate.js +0 -66
  326. package/lib/services/portal/server.d.ts +0 -14
  327. package/lib/services/portal/server.js +0 -101
  328. package/lib/types/api/validate.d.ts +0 -12
  329. package/lib/types/api/validate.js +0 -3
  330. package/lib/types/common/result.d.ts +0 -17
  331. package/lib/types/common/result.js +0 -36
  332. package/lib/types/portal/generate.d.ts +0 -26
  333. package/lib/types/portal/generate.js +0 -4
  334. package/lib/types/portal/quickstart.d.ts +0 -17
  335. package/lib/types/portal/quickstart.js +0 -3
  336. package/lib/validators/common/directoryValidator.d.ts +0 -9
  337. package/lib/validators/common/directoryValidator.js +0 -53
  338. package/lib/validators/common/portValidator.d.ts +0 -5
  339. package/lib/validators/common/portValidator.js +0 -20
  340. package/lib/validators/portal/serveValidator.d.ts +0 -6
  341. package/lib/validators/portal/serveValidator.js +0 -21
@@ -0,0 +1,104 @@
1
+ import axios from "axios";
2
+ import { err, ok } from "neverthrow";
3
+ import { handleServiceError, ServiceError } from "../service-error.js";
4
+ import { FileName } from "../../types/file/fileName.js";
5
+ export class FileDownloadService {
6
+ async downloadFile(url) {
7
+ try {
8
+ const response = await axios.get(url.toString(), {
9
+ responseType: "stream"
10
+ });
11
+ const contentDisposition = response.headers["content-disposition"];
12
+ let filename;
13
+ // Try to parse filename from Content-Disposition (supports filename* as per RFC 5987 and plain filename)
14
+ if (contentDisposition) {
15
+ const parsed = this.parseFilenameFromContentDisposition(contentDisposition);
16
+ if (parsed) {
17
+ filename = new FileName(parsed);
18
+ }
19
+ }
20
+ // ... existing code ...
21
+ // If no filename derived from headers, fallback to URL
22
+ if (!filename) {
23
+ const fromUrl = this.getFilenameFromUrl(url.toString());
24
+ if (fromUrl) {
25
+ filename = new FileName(fromUrl);
26
+ }
27
+ else {
28
+ filename = new FileName("file");
29
+ }
30
+ }
31
+ // Basic guard — responseType: "stream" should always yield a stream
32
+ const data = response.data;
33
+ const isReadableStream = data && typeof data.pipe === "function";
34
+ if (!isReadableStream) {
35
+ return err(ServiceError.InvalidResponse);
36
+ }
37
+ return ok({
38
+ stream: response.data,
39
+ filename
40
+ });
41
+ }
42
+ catch (error) {
43
+ return err(handleServiceError(error));
44
+ }
45
+ }
46
+ parseFilenameFromContentDisposition(headerValue) {
47
+ // Try RFC 5987: filename*=UTF-8''encoded%20name.ext
48
+ const filenameStarMatch = headerValue.match(/filename\*\s*=\s*([^']*)''([^;]+)/i); // NOSONAR - safe regex for CLI use
49
+ if (filenameStarMatch) {
50
+ const encoded = filenameStarMatch[2].trim();
51
+ try {
52
+ const decoded = decodeURIComponent(encoded);
53
+ return this.sanitizeFilename(decoded);
54
+ }
55
+ catch (_a) {
56
+ // fall through to other strategies
57
+ }
58
+ }
59
+ // Try plain: filename="name.ext" or filename=name.ext
60
+ const filenameMatch = headerValue.match(/filename\s*=\s*"?([^";]+)"?/i);
61
+ if (filenameMatch) {
62
+ return this.sanitizeFilename(filenameMatch[1]);
63
+ }
64
+ return null;
65
+ }
66
+ getFilenameFromUrl(rawUrl) {
67
+ try {
68
+ const u = new URL(rawUrl);
69
+ const last = u.pathname.split("/").filter(Boolean).pop();
70
+ if (!last)
71
+ return null;
72
+ // Remove any spurious trailing spaces and decode
73
+ const decoded = this.safeDecodeURIComponent(last.trim());
74
+ return this.sanitizeFilename(decoded);
75
+ }
76
+ catch (_a) {
77
+ // Fallback for non-URL-safe strings
78
+ const parts = rawUrl.split("/").filter(Boolean);
79
+ const last = parts.pop();
80
+ if (!last)
81
+ return null;
82
+ return this.sanitizeFilename(this.safeDecodeURIComponent(last));
83
+ }
84
+ }
85
+ safeDecodeURIComponent(value) {
86
+ try {
87
+ return decodeURIComponent(value);
88
+ }
89
+ catch (_a) {
90
+ return value;
91
+ }
92
+ }
93
+ sanitizeFilename(name) {
94
+ // Replace characters not allowed in common filesystems and trim dots/spaces
95
+ const sanitized = name
96
+ .replace('/[<>:"/\\|?*\x00-\x1F]/g', "_")
97
+ .replace(/\s+/g, " ")
98
+ .trim();
99
+ // Avoid names that are empty or only dots/spaces
100
+ const safe = sanitized.replace(/^[. ]+|[. ]+$/g, ""); // NOSONAR - safe regex for CLI use
101
+ return safe.length > 0 ? safe : "file";
102
+ }
103
+ }
104
+ //# sourceMappingURL=file-download-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-download-service.js","sourceRoot":"","sources":["../../../src/infrastructure/services/file-download-service.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,19 @@
1
- import { GeneratePortalParams } from "../../types/portal/generate";
2
- import { Result } from "../../types/common/result";
3
- import { Sdl } from "../../types/sdl/sdl";
1
+ import { ReadStream } from "fs";
2
+ import { Sdl } from "../../types/sdl/sdl.js";
3
+ import { FilePath } from "../../types/file/filePath.js";
4
+ import { DirectoryPath } from "../../types/file/directoryPath.js";
5
+ import { CommandMetadata } from "../../types/common/command-metadata.js";
6
+ import { Result } from "neverthrow";
7
+ import { Language } from "../../types/sdk/generate.js";
8
+ import { ServiceError } from "../service-error.js";
4
9
  export declare class PortalService {
5
10
  private readonly CONTENT_TYPE;
6
- private readonly TIMEOUT;
7
- generateOnPremPortal(params: GeneratePortalParams, configDir: string): Promise<Result<NodeJS.ReadableStream, string>>;
8
- generateSdl(specPath: string, configDir: string): Promise<Result<Sdl, string>>;
9
- private createGenericErrorResult;
11
+ private readonly fileService;
12
+ private readonly apiService;
13
+ generatePortal(buildPath: FilePath, configDir: DirectoryPath, commandMetadata: CommandMetadata, authKey: string | null): Promise<Result<NodeJS.ReadableStream, ServiceError | NodeJS.ReadableStream>>;
14
+ generateSdk(buildPath: FilePath, language: Language, configDir: DirectoryPath, commandMetadata: CommandMetadata, authKey: string | null): Promise<Result<NodeJS.ReadableStream, ServiceError>>;
15
+ generateSdl(specFileStream: ReadStream, configDir: DirectoryPath, commandMetadata: CommandMetadata): Promise<Result<Sdl, ServiceError>>;
10
16
  private createAuthorizationHeader;
11
- private createApiClient;
12
- private generatePortalFromSyncEndpoint;
13
- private handlePortalGenerationErrors;
14
- private parseErrorResponse;
15
- private saveAndExtractErrorZipFile;
17
+ private createOriginQueryParameter;
18
+ private readonly languageSdk;
16
19
  }
@@ -1,133 +1,186 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PortalService = void 0;
4
- const fsExtra = require("fs-extra");
5
- const fs = require("fs");
6
- const path = require("path");
7
- const sdk_1 = require("@apimatic/sdk");
8
- const auth_manager_1 = require("../../client-utils/auth-manager");
9
- const result_1 = require("../../types/common/result");
10
- const utils_1 = require("../../utils/utils");
11
- class PortalService {
1
+ import { ApiError, SdkGenerationAsyncController, ContentType, DocsPortalGenerationAsyncController, ProblemDetailsError, FileWrapper, TransformationController, ExportFormats, SdkLanguages, Status, } from "@apimatic/sdk";
2
+ import { getAuthInfo } from "../../client-utils/auth-manager.js";
3
+ import { parseStreamBodyToJson } from "../../utils/utils.js";
4
+ import { FileService } from "../file-service.js";
5
+ import { apiClientFactory } from "./api-client-factory.js";
6
+ import { err, ok } from "neverthrow";
7
+ import { Language } from "../../types/sdk/generate.js";
8
+ import { handleServiceError, ServiceError } from "../service-error.js";
9
+ import { ApiService } from "./api-service.js";
10
+ export class PortalService {
12
11
  constructor() {
13
- this.CONTENT_TYPE = sdk_1.ContentType.EnumMultipartformdata;
14
- this.TIMEOUT = 0;
12
+ this.CONTENT_TYPE = ContentType.EnumMultipartformdata;
13
+ this.fileService = new FileService();
14
+ this.apiService = new ApiService();
15
15
  this.createAuthorizationHeader = (authInfo, overrideAuthKey) => {
16
16
  const key = overrideAuthKey || (authInfo === null || authInfo === void 0 ? void 0 : authInfo.authKey);
17
17
  return `X-Auth-Key ${key !== null && key !== void 0 ? key : ""}`;
18
18
  };
19
- this.createApiClient = (authorizationHeader) => {
20
- return new sdk_1.Client({
21
- customHeaderAuthenticationCredentials: {
22
- Authorization: authorizationHeader
23
- },
24
- timeout: this.TIMEOUT
25
- });
19
+ this.createOriginQueryParameter = (commandName) => {
20
+ return {
21
+ origin: `APIMATIC CLI ${commandName}`
22
+ };
26
23
  };
27
- this.generatePortalFromSyncEndpoint = async (docsPortalManagementController, zippedBuildFilePath) => {
28
- const file = new sdk_1.FileWrapper(fs.createReadStream(zippedBuildFilePath));
29
- const response = await docsPortalManagementController.generateOnPremPortalViaBuildInput(this.CONTENT_TYPE, file);
30
- return response.result;
24
+ this.languageSdk = {
25
+ [Language.CSHARP]: SdkLanguages.Csharp,
26
+ [Language.JAVA]: SdkLanguages.Java,
27
+ [Language.PHP]: SdkLanguages.Php,
28
+ [Language.PYTHON]: SdkLanguages.Python,
29
+ [Language.RUBY]: SdkLanguages.Ruby,
30
+ [Language.TYPESCRIPT]: SdkLanguages.Typescript,
31
+ [Language.GO]: SdkLanguages.Go
31
32
  };
32
- this.handlePortalGenerationErrors = async (error, params) => {
33
- var _a;
34
- if (error instanceof sdk_1.UnauthorizedResponseError) {
35
- //401
36
- const body = await this.parseErrorResponse(error);
37
- return (0, utils_1.getMessageInRedColor)((_a = body.message) !== null && _a !== void 0 ? _a : "Unauthorized access.");
33
+ }
34
+ // TODO: Pass stream as parameter instead of file path.
35
+ async generatePortal(buildPath, configDir, commandMetadata, authKey) {
36
+ var _a, _b, _c, _d, _e, _f;
37
+ const buildFileStream = await this.fileService.getStream(buildPath);
38
+ const file = new FileWrapper(buildFileStream);
39
+ const authInfo = await getAuthInfo(configDir.toString());
40
+ const authorizationHeader = this.createAuthorizationHeader(authInfo, authKey);
41
+ const client = apiClientFactory.createApiClient(authorizationHeader, commandMetadata.shell);
42
+ const docsPortalAsyncController = new DocsPortalGenerationAsyncController(client);
43
+ let generationId;
44
+ try {
45
+ const portalInstance = await docsPortalAsyncController.generateOnPremPortalViaBuildInputAsync(this.CONTENT_TYPE, file);
46
+ generationId = portalInstance.result.id;
47
+ }
48
+ catch (error) {
49
+ if (error instanceof ProblemDetailsError) {
50
+ // TODO: This only picks the first error message, improve it to show all errors.
51
+ const message = (_b = (_a = Object.values(error.result.errors)[0]) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;
52
+ const errorMessage = error.result.title + "\n- " + message;
53
+ if (error.statusCode === 400) {
54
+ return err(ServiceError.badRequest(errorMessage));
55
+ }
56
+ if (error.statusCode === 403) {
57
+ return err(ServiceError.forbidden(errorMessage));
58
+ }
38
59
  }
39
- else if (error instanceof sdk_1.ProblemDetailsError) {
40
- //400 & 403
41
- const body = await this.parseErrorResponse(error);
42
- const message = body.errors[Object.keys(body.errors)[0]][0];
43
- return (0, utils_1.getMessageInRedColor)(body.title + "\n- " + message);
60
+ const serviceError = handleServiceError(error);
61
+ return err(serviceError);
62
+ }
63
+ finally {
64
+ buildFileStream.close();
65
+ }
66
+ let statusResult;
67
+ do {
68
+ await new Promise((resolve) => setTimeout(resolve, 3000));
69
+ statusResult = await this.apiService.getPortalGenerationStatus(generationId, configDir, commandMetadata.shell, authKey);
70
+ if (statusResult.isErr()) {
71
+ return err(statusResult.error);
44
72
  }
45
- else if (error instanceof sdk_1.ApiError && error.statusCode === 422) {
46
- //422
47
- return await this.saveAndExtractErrorZipFile(error, params);
73
+ if (statusResult.value.status === Status.Failed) {
74
+ return err(ServiceError.ServerError);
48
75
  }
49
- else if (error instanceof sdk_1.InternalServerErrorResponseError) {
50
- //500
51
- const body = await this.parseErrorResponse(error);
52
- return (0, utils_1.getMessageInRedColor)(`${body.message} Please try again or reach out to our team at support@apimatic.io for help if your problem persists.`);
76
+ if (statusResult.value.errors && statusResult.value.status === Status.ValidationError) {
77
+ // TODO: This only picks the first error message, improve it to show all errors.
78
+ const message = (_d = (_c = Object.values(statusResult.value.errors)[0]) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : null;
79
+ const errorMessage = "One or more validation errors occurred." + "\n- " + message;
80
+ return err(ServiceError.badRequest(errorMessage));
53
81
  }
54
- else {
55
- return (0, utils_1.getMessageInRedColor)(error instanceof Error ? error.message : String(error));
82
+ if (statusResult.value.errors && statusResult.value.status === Status.SubscriptionError) {
83
+ // TODO: This only picks the first error message, improve it to show all errors.
84
+ const message = (_f = (_e = Object.values(statusResult.value.errors)[0]) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : null;
85
+ const errorMessage = "Access denied to resource." + "\n- " + message;
86
+ return err(ServiceError.forbidden(errorMessage));
56
87
  }
57
- };
58
- this.parseErrorResponse = async (error) => {
59
- if (error instanceof Error && "body" in error) {
60
- const stream = error.body;
61
- return await (0, utils_1.parseStreamBodyToJson)(stream);
88
+ } while (statusResult.value.status !== Status.Completed);
89
+ try {
90
+ const portalDownloadResponse = await docsPortalAsyncController.downloadGeneratedPortal(generationId);
91
+ return ok(portalDownloadResponse.result);
92
+ }
93
+ catch (error) {
94
+ if (error instanceof ApiError && error.statusCode === 422) {
95
+ return err(error.body);
62
96
  }
63
- throw error;
64
- };
65
- this.saveAndExtractErrorZipFile = async (error, params) => {
66
- const data = error.body;
67
- const writeStream = fs.createWriteStream(params.generatedPortalArtifactsZipFilePath);
68
- //TODO: Extract zip to temp folder and only copy the the debug report.
69
- return await new Promise((resolve, reject) => {
70
- data
71
- .pipe(writeStream)
72
- .on("finish", async () => {
73
- await (0, utils_1.extractZipFile)(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath);
74
- await (0, utils_1.deleteFile)(params.generatedPortalArtifactsZipFilePath);
75
- await (0, utils_1.deleteFile)(path.join(params.generatedPortalArtifactsFolderPath, "static"));
76
- resolve((0, utils_1.getMessageInRedColor)("An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path: " +
77
- path.join(params.generatedPortalArtifactsFolderPath, "apimatic-debug")));
78
- })
79
- .on("error", async () => {
80
- reject((0, utils_1.getMessageInRedColor)("An error occurred during portal generation due to an issue with the input. The error report could not be generated. Please try again later."));
81
- });
82
- });
83
- };
97
+ return err(handleServiceError(error));
98
+ }
84
99
  }
85
- async generateOnPremPortal(params, configDir) {
86
- if (!(await fsExtra.pathExists(params.sourceBuildInputZipFilePath))) {
87
- return result_1.Result.failure("Build file doesn't exist");
100
+ // TODO: Pass stream as parameter instead of file path.
101
+ async generateSdk(buildPath, language, configDir, commandMetadata, authKey) {
102
+ var _a, _b, _c, _d;
103
+ const buildFileStream = await this.fileService.getStream(buildPath);
104
+ const file = new FileWrapper(buildFileStream);
105
+ const authInfo = await getAuthInfo(configDir.toString());
106
+ const authorizationHeader = this.createAuthorizationHeader(authInfo, authKey);
107
+ const client = apiClientFactory.createApiClient(authorizationHeader, commandMetadata.shell);
108
+ const sdkGenerationController = new SdkGenerationAsyncController(client);
109
+ let generationId;
110
+ try {
111
+ const response = await sdkGenerationController.generateSdkViaBuildInputAsync(this.CONTENT_TYPE, file, this.languageSdk[language]);
112
+ generationId = response.result.id;
88
113
  }
89
- const authInfo = await (0, auth_manager_1.getAuthInfo)(configDir);
90
- const authorizationHeader = this.createAuthorizationHeader(authInfo, params.overrideAuthKey);
91
- const client = this.createApiClient(authorizationHeader);
92
- const docsPortalManagementController = new sdk_1.DocsPortalManagementController(client);
114
+ catch (error) {
115
+ if (error instanceof ProblemDetailsError) {
116
+ // TODO: This only picks the first error message, improve it to show all errors.
117
+ const message = (_b = (_a = Object.values(error.result.errors)[0]) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;
118
+ const errorMessage = error.result.title + "\n- " + message;
119
+ if (error.statusCode === 400) {
120
+ return err(ServiceError.badRequest(errorMessage));
121
+ }
122
+ if (error.statusCode === 403) {
123
+ return err(ServiceError.forbidden(errorMessage));
124
+ }
125
+ }
126
+ const serviceError = handleServiceError(error);
127
+ return err(serviceError);
128
+ }
129
+ finally {
130
+ buildFileStream.close();
131
+ }
132
+ let statusResult;
133
+ do {
134
+ await new Promise((resolve) => setTimeout(resolve, 3000));
135
+ statusResult = await this.apiService.getSdkGenerationStatus(generationId, configDir, commandMetadata.shell, authKey);
136
+ if (statusResult.isErr()) {
137
+ return err(statusResult.error);
138
+ }
139
+ if (statusResult.value.status === Status.Failed) {
140
+ return err(ServiceError.ServerError);
141
+ }
142
+ if (statusResult.value.errors && statusResult.value.status === Status.ValidationError) {
143
+ const message = (_c = Object.values(statusResult.value.errors).flat()[0]) !== null && _c !== void 0 ? _c : null;
144
+ const errorMessage = "One or more validation errors occurred." + "\n- " + message;
145
+ return err(ServiceError.badRequest(errorMessage));
146
+ }
147
+ if (statusResult.value.errors && statusResult.value.status === Status.SubscriptionError) {
148
+ const message = (_d = Object.values(statusResult.value.errors).flat()[0]) !== null && _d !== void 0 ? _d : null;
149
+ const errorMessage = "Access denied to resource." + "\n- " + message;
150
+ return err(ServiceError.forbidden(errorMessage));
151
+ }
152
+ } while (statusResult.value.status !== Status.Completed);
93
153
  try {
94
- const stream = await this.generatePortalFromSyncEndpoint(docsPortalManagementController, params.sourceBuildInputZipFilePath);
95
- return result_1.Result.success(stream);
154
+ const sdkResponse = await sdkGenerationController.downloadGeneratedSdk(generationId);
155
+ return ok(sdkResponse.result);
96
156
  }
97
157
  catch (error) {
98
- return result_1.Result.failure(await this.handlePortalGenerationErrors(error, params));
158
+ return err(handleServiceError(error));
99
159
  }
100
160
  }
101
- async generateSdl(specPath, configDir) {
102
- if (!(await fsExtra.pathExists(specPath))) {
103
- return result_1.Result.failure("Spec file doesn't exist");
104
- }
105
- const authInfo = await (0, auth_manager_1.getAuthInfo)(configDir);
161
+ async generateSdl(specFileStream, configDir, commandMetadata) {
162
+ const file = new FileWrapper(specFileStream);
163
+ const authInfo = await getAuthInfo(configDir.toString());
106
164
  const authorizationHeader = this.createAuthorizationHeader(authInfo, null);
107
- const client = this.createApiClient(authorizationHeader);
108
- const transformationController = new sdk_1.TransformationController(client);
165
+ const client = apiClientFactory.createApiClient(authorizationHeader, commandMetadata.shell);
166
+ const transformationController = new TransformationController(client);
109
167
  try {
110
- const file = new sdk_1.FileWrapper(fs.createReadStream(specPath));
111
- const generation = await transformationController.transformViaFile(sdk_1.ContentType.EnumMultipartformdata, file, sdk_1.ExportFormats.Apimatic);
168
+ const generation = await transformationController.transformViaFile(ContentType.EnumMultipartformdata, file, ExportFormats.Apimatic, this.createOriginQueryParameter(commandMetadata.commandName));
112
169
  if (!generation.result.success) {
113
- return this.createGenericErrorResult();
170
+ return err(ServiceError.InvalidResponse);
114
171
  }
115
172
  const transformationId = generation.result.id;
116
173
  const { result } = await transformationController.downloadTransformedFile(transformationId);
117
174
  if (result.readable) {
118
- return result_1.Result.success((await (0, utils_1.parseStreamBodyToJson)(result)));
175
+ return ok((await parseStreamBodyToJson(result)));
119
176
  }
120
177
  else {
121
- return this.createGenericErrorResult();
178
+ return err(ServiceError.InvalidResponse);
122
179
  }
123
180
  }
124
- catch (_a) {
125
- return this.createGenericErrorResult();
181
+ catch (error) {
182
+ return err(handleServiceError(error));
126
183
  }
127
184
  }
128
- createGenericErrorResult() {
129
- return result_1.Result.failure("An unexpected error occurred");
130
- }
131
185
  }
132
- exports.PortalService = PortalService;
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5mcmFzdHJ1Y3R1cmUvc2VydmljZXMvcG9ydGFsLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0NBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsdUNBYXVCO0FBQ3ZCLGtFQUF3RTtBQUV4RSxzREFBbUQ7QUFDbkQsNkNBQTRHO0FBSTVHLE1BQWEsYUFBYTtJQUExQjtRQUNtQixpQkFBWSxHQUFHLGlCQUFXLENBQUMscUJBQXFCLENBQUM7UUFDakQsWUFBTyxHQUFHLENBQUMsQ0FBQztRQWdFckIsOEJBQXlCLEdBQUcsQ0FBQyxRQUF5QixFQUFFLGVBQThCLEVBQVUsRUFBRTtZQUN4RyxNQUFNLEdBQUcsR0FBRyxlQUFlLEtBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE9BQU8sQ0FBQSxDQUFDO1lBQ2pELE9BQU8sY0FBYyxHQUFHLGFBQUgsR0FBRyxjQUFILEdBQUcsR0FBSSxFQUFFLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFFTSxvQkFBZSxHQUFHLENBQUMsbUJBQTJCLEVBQVUsRUFBRTtZQUNoRSxPQUFPLElBQUksWUFBTSxDQUFDO2dCQUNoQixxQ0FBcUMsRUFBRTtvQkFDckMsYUFBYSxFQUFFLG1CQUFtQjtpQkFDbkM7Z0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVNLG1DQUE4QixHQUFHLEtBQUssRUFDNUMsOEJBQThELEVBQzlELG1CQUEyQixFQUNLLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxpQkFBVyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxRQUFRLEdBQ1osTUFBTSw4QkFBOEIsQ0FBQyxpQ0FBaUMsQ0FBQyxJ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
186
+ //# sourceMappingURL=portal-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-service.js","sourceRoot":"","sources":["../../../src/infrastructure/services/portal-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { DomainEvent } from "../../types/events/domain-event.js";
2
+ import { DirectoryPath } from "../../types/file/directoryPath.js";
3
+ export declare class TelemetryService {
4
+ private readonly configDirectory;
5
+ private readonly apiService;
6
+ constructor(configDirectory: DirectoryPath);
7
+ trackEvent<T extends DomainEvent>(event: T, shell: string): Promise<void>;
8
+ private getAuthInfo;
9
+ }
@@ -0,0 +1,38 @@
1
+ import process from "process";
2
+ import os from "os";
3
+ import fs from "fs-extra";
4
+ import { envInfo } from "../env-info.js";
5
+ import path from "path";
6
+ import { ApiService } from "./api-service.js";
7
+ export class TelemetryService {
8
+ constructor(configDirectory) {
9
+ this.configDirectory = configDirectory;
10
+ this.apiService = new ApiService();
11
+ }
12
+ async trackEvent(event, shell) {
13
+ const authInfo = await this.getAuthInfo(this.configDirectory.toString());
14
+ const telemetryOptedOut = process.env.APIMATIC_CLI_TELEMETRY_OPTOUT === "1";
15
+ const authKey = authInfo === null || authInfo === void 0 ? void 0 : authInfo.authKey;
16
+ if (telemetryOptedOut || (authInfo === null || authInfo === void 0 ? void 0 : authInfo.APIMATIC_CLI_TELEMETRY_OPTOUT) === "1" || !authKey) {
17
+ return;
18
+ }
19
+ const payload = {
20
+ payload: event,
21
+ timestamp: new Date().toISOString(),
22
+ cliVersion: envInfo.getCLIVersion(),
23
+ platform: os.platform(),
24
+ releaseVersion: os.release(),
25
+ nodeVersion: process.version
26
+ };
27
+ await this.apiService.sendTelemetry(JSON.stringify(payload), authKey, shell);
28
+ }
29
+ async getAuthInfo(configDirectory) {
30
+ try {
31
+ return JSON.parse(await fs.readFile(path.join(configDirectory, "config.json"), "utf8"));
32
+ }
33
+ catch (_a) {
34
+ return null;
35
+ }
36
+ }
37
+ }
38
+ //# sourceMappingURL=telemetry-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-service.js","sourceRoot":"","sources":["../../../src/infrastructure/services/telemetry-service.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,UAAU,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAY9C,MAAM,OAAO,gBAAgB;IAG3B,YAA6B,eAA8B;QAA9B,oBAAe,GAAf,eAAe,CAAe;QAF1C,eAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEe,CAAC;IAExD,KAAK,CAAC,UAAU,CAAwB,KAAQ,EAAE,KAAa;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,GAAG,CAAC;QAC5E,MAAM,OAAO,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAAC;QAElC,IAAI,iBAAiB,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,6BAA6B,MAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACrF,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAqB;YAChC,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE;YACnC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;YACvB,cAAc,EAAE,EAAE,CAAC,OAAO,EAAE;YAC5B,WAAW,EAAE,OAAO,CAAC,OAAO;SAC7B,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/E,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,eAAuB;QAC/C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1F,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { ExportFormats, ApiValidationSummary } from "@apimatic/sdk";
2
+ import { DirectoryPath } from "../../types/file/directoryPath.js";
3
+ import { FilePath } from "../../types/file/filePath.js";
4
+ import { CommandMetadata } from "../../types/common/command-metadata.js";
5
+ import { Result } from "neverthrow";
6
+ export interface TransformViaFileParams {
7
+ file: FilePath;
8
+ format: ExportFormats;
9
+ configDir: DirectoryPath;
10
+ commandMetadata: CommandMetadata;
11
+ authKey?: string | null;
12
+ }
13
+ export interface TransformationResultData {
14
+ stream: NodeJS.ReadableStream;
15
+ apiValidationSummary: ApiValidationSummary;
16
+ }
17
+ export declare class TransformationService {
18
+ private readonly CONTENT_TYPE;
19
+ transformViaFile({ file, format, configDir, commandMetadata, authKey }: TransformViaFileParams): Promise<Result<TransformationResultData, string>>;
20
+ private createAuthorizationHeader;
21
+ private readonly createOriginQueryParameter;
22
+ private readonly handleTransformationErrors;
23
+ }
@@ -0,0 +1,56 @@
1
+ import fsExtra from "fs-extra";
2
+ import { ContentType, FileWrapper, TransformationController, ApiError } from "@apimatic/sdk";
3
+ import { getAuthInfo } from "../../client-utils/auth-manager.js";
4
+ import { apiClientFactory } from "./api-client-factory.js";
5
+ import { err, ok } from "neverthrow";
6
+ export class TransformationService {
7
+ constructor() {
8
+ this.CONTENT_TYPE = ContentType.EnumMultipartformdata;
9
+ this.createOriginQueryParameter = (commandName) => {
10
+ return {
11
+ origin: `APIMATIC CLI ${commandName}`
12
+ };
13
+ };
14
+ this.handleTransformationErrors = async (error) => {
15
+ if (error instanceof ApiError) {
16
+ const apiError = error;
17
+ if (apiError.statusCode === 400) {
18
+ return "Your API Definition is invalid. Please use the APIMatic VS Code Extension to fix the errors and try again.";
19
+ }
20
+ else if (apiError.statusCode === 401) {
21
+ const message = JSON.parse(apiError.body).message;
22
+ return `${message} You are not authorized to perform this action. Please run 'auth:login' or provide a valid auth key.`;
23
+ }
24
+ return `Error ${apiError.statusCode}: An error occurred during the transformation. Please try again or contact support@apimatic.io for assistance.`;
25
+ }
26
+ else {
27
+ return "An unexpected error occurred while validating your API Definition. Please try again later. If the problem persists, please reach out to our team at support@apimatic.io";
28
+ }
29
+ };
30
+ }
31
+ async transformViaFile({ file, format, configDir, commandMetadata, authKey }) {
32
+ const authInfo = await getAuthInfo(configDir.toString());
33
+ const authorizationHeader = this.createAuthorizationHeader(authInfo, authKey !== null && authKey !== void 0 ? authKey : null);
34
+ const client = apiClientFactory.createApiClient(authorizationHeader, commandMetadata.shell);
35
+ const transformationController = new TransformationController(client);
36
+ try {
37
+ const fileStream = fsExtra.createReadStream(file.toString());
38
+ const fileWrapper = new FileWrapper(fileStream);
39
+ const generation = await transformationController.transformViaFile(this.CONTENT_TYPE, fileWrapper, format, this.createOriginQueryParameter(commandMetadata.commandName));
40
+ const { id, apiValidationSummary } = generation.result;
41
+ const { result } = await transformationController.downloadTransformedFile(id);
42
+ return ok({
43
+ stream: result,
44
+ apiValidationSummary
45
+ });
46
+ }
47
+ catch (error) {
48
+ return err(await this.handleTransformationErrors(error));
49
+ }
50
+ }
51
+ createAuthorizationHeader(authInfo, overrideAuthKey) {
52
+ const key = overrideAuthKey || (authInfo === null || authInfo === void 0 ? void 0 : authInfo.authKey);
53
+ return `X-Auth-Key ${key !== null && key !== void 0 ? key : ""}`;
54
+ }
55
+ }
56
+ //# sourceMappingURL=transformation-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformation-service.js","sourceRoot":"","sources":["../../../src/infrastructure/services/transformation-service.ts"],"names":[],"mappings":"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"}