opkg 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/README.md +82 -21
  2. package/dist/commands/add.js +11 -276
  3. package/dist/commands/add.js.map +1 -1
  4. package/dist/commands/duplicate.js +5 -2
  5. package/dist/commands/duplicate.js.map +1 -1
  6. package/dist/commands/init.js +76 -145
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/install.js +30 -671
  9. package/dist/commands/install.js.map +1 -1
  10. package/dist/commands/list.js +9 -3
  11. package/dist/commands/list.js.map +1 -1
  12. package/dist/commands/login.js +58 -0
  13. package/dist/commands/login.js.map +1 -0
  14. package/dist/commands/logout.js +28 -0
  15. package/dist/commands/logout.js.map +1 -0
  16. package/dist/commands/pack.js +10 -137
  17. package/dist/commands/pack.js.map +1 -1
  18. package/dist/commands/pull.js +5 -299
  19. package/dist/commands/pull.js.map +1 -1
  20. package/dist/commands/push.js +5 -239
  21. package/dist/commands/push.js.map +1 -1
  22. package/dist/commands/save.js +29 -168
  23. package/dist/commands/save.js.map +1 -1
  24. package/dist/commands/show.js +18 -5
  25. package/dist/commands/show.js.map +1 -1
  26. package/dist/commands/status.js +21 -8
  27. package/dist/commands/status.js.map +1 -1
  28. package/dist/commands/tui.js +61 -0
  29. package/dist/commands/tui.js.map +1 -0
  30. package/dist/commands/uninstall.js +5 -5
  31. package/dist/commands/uninstall.js.map +1 -1
  32. package/dist/constants/index.js +19 -45
  33. package/dist/constants/index.js.map +1 -1
  34. package/dist/constants/workspace.js +9 -0
  35. package/dist/constants/workspace.js.map +1 -0
  36. package/dist/core/add/add-conflict-handler.js +68 -0
  37. package/dist/core/add/add-conflict-handler.js.map +1 -0
  38. package/dist/core/add/add-pipeline.js +137 -0
  39. package/dist/core/add/add-pipeline.js.map +1 -0
  40. package/dist/core/add/package-index-updater.js +66 -36
  41. package/dist/core/add/package-index-updater.js.map +1 -1
  42. package/dist/core/add/platform-path-transformer.js +47 -0
  43. package/dist/core/add/platform-path-transformer.js.map +1 -0
  44. package/dist/core/add/source-collector.js +57 -0
  45. package/dist/core/add/source-collector.js.map +1 -0
  46. package/dist/core/api-keys.js +6 -2
  47. package/dist/core/api-keys.js.map +1 -1
  48. package/dist/core/auth.js +25 -40
  49. package/dist/core/auth.js.map +1 -1
  50. package/dist/core/config.js +11 -3
  51. package/dist/core/config.js.map +1 -1
  52. package/dist/core/dependency-resolver.js +24 -11
  53. package/dist/core/dependency-resolver.js.map +1 -1
  54. package/dist/core/device-auth.js +81 -0
  55. package/dist/core/device-auth.js.map +1 -0
  56. package/dist/core/directory.js +15 -9
  57. package/dist/core/directory.js.map +1 -1
  58. package/dist/core/discovery/file-discovery.js +55 -54
  59. package/dist/core/discovery/file-discovery.js.map +1 -1
  60. package/dist/core/discovery/platform-files-discovery.js +32 -17
  61. package/dist/core/discovery/platform-files-discovery.js.map +1 -1
  62. package/dist/core/install/bulk-install-pipeline.js +200 -0
  63. package/dist/core/install/bulk-install-pipeline.js.map +1 -0
  64. package/dist/core/install/canonical-plan.js +129 -0
  65. package/dist/core/install/canonical-plan.js.map +1 -0
  66. package/dist/core/install/download-keys.js +2 -2
  67. package/dist/core/install/download-keys.js.map +1 -1
  68. package/dist/core/install/dry-run.js +2 -2
  69. package/dist/core/install/dry-run.js.map +1 -1
  70. package/dist/core/install/index.js +3 -0
  71. package/dist/core/install/index.js.map +1 -0
  72. package/dist/core/install/install-errors.js +41 -0
  73. package/dist/core/install/install-errors.js.map +1 -0
  74. package/dist/core/install/install-flow.js +8 -9
  75. package/dist/core/install/install-flow.js.map +1 -1
  76. package/dist/core/install/install-pipeline.js +296 -0
  77. package/dist/core/install/install-pipeline.js.map +1 -0
  78. package/dist/core/install/install-reporting.js +99 -0
  79. package/dist/core/install/install-reporting.js.map +1 -0
  80. package/dist/core/install/platform-resolution.js +6 -6
  81. package/dist/core/install/platform-resolution.js.map +1 -1
  82. package/dist/core/install/remote-flow.js +84 -7
  83. package/dist/core/install/remote-flow.js.map +1 -1
  84. package/dist/core/install/version-selection.js +25 -8
  85. package/dist/core/install/version-selection.js.map +1 -1
  86. package/dist/core/openpackage.js +22 -14
  87. package/dist/core/openpackage.js.map +1 -1
  88. package/dist/core/package-context.js +246 -0
  89. package/dist/core/package-context.js.map +1 -0
  90. package/dist/core/package.js +73 -9
  91. package/dist/core/package.js.map +1 -1
  92. package/dist/core/platforms.js +126 -217
  93. package/dist/core/platforms.js.map +1 -1
  94. package/dist/core/profiles.js +60 -3
  95. package/dist/core/profiles.js.map +1 -1
  96. package/dist/core/pull/pull-errors.js +62 -0
  97. package/dist/core/pull/pull-errors.js.map +1 -0
  98. package/dist/core/pull/pull-options.js +2 -0
  99. package/dist/core/pull/pull-options.js.map +1 -0
  100. package/dist/core/pull/pull-output.js +50 -0
  101. package/dist/core/pull/pull-output.js.map +1 -0
  102. package/dist/core/pull/pull-pipeline.js +141 -0
  103. package/dist/core/pull/pull-pipeline.js.map +1 -0
  104. package/dist/core/pull/pull-strategies.js +103 -0
  105. package/dist/core/pull/pull-strategies.js.map +1 -0
  106. package/dist/core/pull/pull-types.js +2 -0
  107. package/dist/core/pull/pull-types.js.map +1 -0
  108. package/dist/core/push/push-context.js +95 -0
  109. package/dist/core/push/push-context.js.map +1 -0
  110. package/dist/core/push/push-errors.js +133 -0
  111. package/dist/core/push/push-errors.js.map +1 -0
  112. package/dist/core/push/push-output.js +44 -0
  113. package/dist/core/push/push-output.js.map +1 -0
  114. package/dist/core/push/push-pipeline.js +74 -0
  115. package/dist/core/push/push-pipeline.js.map +1 -0
  116. package/dist/core/push/push-single-file.js +56 -0
  117. package/dist/core/push/push-single-file.js.map +1 -0
  118. package/dist/core/push/push-types.js +2 -0
  119. package/dist/core/push/push-types.js.map +1 -0
  120. package/dist/core/push/push-upload.js +68 -0
  121. package/dist/core/push/push-upload.js.map +1 -0
  122. package/dist/core/registry/registry-rename.js +2 -1
  123. package/dist/core/registry/registry-rename.js.map +1 -1
  124. package/dist/core/registry.js +14 -5
  125. package/dist/core/registry.js.map +1 -1
  126. package/dist/core/remote-pull.js +165 -36
  127. package/dist/core/remote-pull.js.map +1 -1
  128. package/dist/core/save/constants.js +4 -0
  129. package/dist/core/save/constants.js.map +1 -1
  130. package/dist/core/save/name-resolution.js +31 -0
  131. package/dist/core/save/name-resolution.js.map +1 -0
  132. package/dist/core/save/package-detection.js +147 -0
  133. package/dist/core/save/package-detection.js.map +1 -0
  134. package/dist/core/save/package-saver.js +82 -43
  135. package/dist/core/save/package-saver.js.map +1 -1
  136. package/dist/core/save/package-yml-generator.js +51 -71
  137. package/dist/core/save/package-yml-generator.js.map +1 -1
  138. package/dist/core/save/root-save-candidates.js.map +1 -1
  139. package/dist/core/save/save-candidate-loader.js +89 -0
  140. package/dist/core/save/save-candidate-loader.js.map +1 -0
  141. package/dist/core/save/save-conflict-resolution.js +72 -410
  142. package/dist/core/save/save-conflict-resolution.js.map +1 -1
  143. package/dist/core/save/save-conflict-resolver.js +277 -0
  144. package/dist/core/save/save-conflict-resolver.js.map +1 -0
  145. package/dist/core/save/save-pipeline.js +162 -0
  146. package/dist/core/save/save-pipeline.js.map +1 -0
  147. package/dist/core/save/save-single-file.js +124 -0
  148. package/dist/core/save/save-single-file.js.map +1 -0
  149. package/dist/core/save/save-types.js +2 -0
  150. package/dist/core/save/save-types.js.map +1 -0
  151. package/dist/core/save/save-yml-resolution.js +77 -39
  152. package/dist/core/save/save-yml-resolution.js.map +1 -1
  153. package/dist/core/save/workspace-rename.js +6 -6
  154. package/dist/core/save/workspace-rename.js.map +1 -1
  155. package/dist/core/scoping/package-scoping.js +14 -2
  156. package/dist/core/scoping/package-scoping.js.map +1 -1
  157. package/dist/core/status/status-file-discovery.js +12 -30
  158. package/dist/core/status/status-file-discovery.js.map +1 -1
  159. package/dist/core/sync/platform-sync.js +7 -4
  160. package/dist/core/sync/platform-sync.js.map +1 -1
  161. package/dist/core/sync/root-files-sync.js +59 -1
  162. package/dist/core/sync/root-files-sync.js.map +1 -1
  163. package/dist/core/token-store.js +73 -0
  164. package/dist/core/token-store.js.map +1 -0
  165. package/dist/core/uninstall/uninstall-file-discovery.js +1 -2
  166. package/dist/core/uninstall/uninstall-file-discovery.js.map +1 -1
  167. package/dist/index.js +4 -0
  168. package/dist/index.js.map +1 -1
  169. package/dist/tui/app.js +95 -0
  170. package/dist/tui/app.js.map +1 -0
  171. package/dist/tui/components/package-list.js +73 -0
  172. package/dist/tui/components/package-list.js.map +1 -0
  173. package/dist/tui/controller.js +365 -0
  174. package/dist/tui/controller.js.map +1 -0
  175. package/dist/tui/index.js +12 -0
  176. package/dist/tui/index.js.map +1 -0
  177. package/dist/tui/services/file-index.js +64 -0
  178. package/dist/tui/services/file-index.js.map +1 -0
  179. package/dist/tui/services/packages.js +18 -0
  180. package/dist/tui/services/packages.js.map +1 -0
  181. package/dist/tui/services/save.js +21 -0
  182. package/dist/tui/services/save.js.map +1 -0
  183. package/dist/tui/state/app-state.js +15 -0
  184. package/dist/tui/state/app-state.js.map +1 -0
  185. package/dist/tui/state.js +17 -0
  186. package/dist/tui/state.js.map +1 -0
  187. package/dist/tui/types.js +2 -0
  188. package/dist/tui/types.js.map +1 -0
  189. package/dist/tui/views/add-file-modal.js +129 -0
  190. package/dist/tui/views/add-file-modal.js.map +1 -0
  191. package/dist/tui/views/file-preview.js +44 -0
  192. package/dist/tui/views/file-preview.js.map +1 -0
  193. package/dist/tui/views/list-packages.js +73 -0
  194. package/dist/tui/views/list-packages.js.map +1 -0
  195. package/dist/tui/views/main-menu.js +29 -0
  196. package/dist/tui/views/main-menu.js.map +1 -0
  197. package/dist/tui/views/manage-view.js +81 -0
  198. package/dist/tui/views/manage-view.js.map +1 -0
  199. package/dist/tui/views/package-hub.js +120 -0
  200. package/dist/tui/views/package-hub.js.map +1 -0
  201. package/dist/tui/views/placeholder.js +24 -0
  202. package/dist/tui/views/placeholder.js.map +1 -0
  203. package/dist/types/index.js.map +1 -1
  204. package/dist/utils/bun-bootstrap.js +72 -0
  205. package/dist/utils/bun-bootstrap.js.map +1 -0
  206. package/dist/utils/file-processing.js +5 -58
  207. package/dist/utils/file-processing.js.map +1 -1
  208. package/dist/utils/formatters.js +3 -1
  209. package/dist/utils/formatters.js.map +1 -1
  210. package/dist/utils/http-client.js +27 -5
  211. package/dist/utils/http-client.js.map +1 -1
  212. package/dist/utils/index-based-installer.js +40 -35
  213. package/dist/utils/index-based-installer.js.map +1 -1
  214. package/dist/utils/install-file-discovery.js +18 -24
  215. package/dist/utils/install-file-discovery.js.map +1 -1
  216. package/dist/utils/install-orchestrator.js +21 -21
  217. package/dist/utils/install-orchestrator.js.map +1 -1
  218. package/dist/utils/jsonc.js +44 -0
  219. package/dist/utils/jsonc.js.map +1 -0
  220. package/dist/utils/manifest-paths.js +27 -0
  221. package/dist/utils/manifest-paths.js.map +1 -0
  222. package/dist/utils/package-copy.js +199 -0
  223. package/dist/utils/package-copy.js.map +1 -0
  224. package/dist/utils/package-filters.js +125 -0
  225. package/dist/utils/package-filters.js.map +1 -0
  226. package/dist/utils/package-index-yml.js +15 -10
  227. package/dist/utils/package-index-yml.js.map +1 -1
  228. package/dist/utils/package-installation.js +4 -113
  229. package/dist/utils/package-installation.js.map +1 -1
  230. package/dist/utils/package-local-files.js +2 -35
  231. package/dist/utils/package-local-files.js.map +1 -1
  232. package/dist/utils/package-management.js +191 -75
  233. package/dist/utils/package-management.js.map +1 -1
  234. package/dist/utils/package-merge.js +48 -0
  235. package/dist/utils/package-merge.js.map +1 -0
  236. package/dist/utils/package-name.js +29 -0
  237. package/dist/utils/package-name.js.map +1 -1
  238. package/dist/utils/package-versioning.js +16 -4
  239. package/dist/utils/package-versioning.js.map +1 -1
  240. package/dist/utils/package-yml.js +41 -12
  241. package/dist/utils/package-yml.js.map +1 -1
  242. package/dist/utils/path-normalization.js +8 -53
  243. package/dist/utils/path-normalization.js.map +1 -1
  244. package/dist/utils/paths.js +17 -9
  245. package/dist/utils/paths.js.map +1 -1
  246. package/dist/utils/platform-file.js +16 -59
  247. package/dist/utils/platform-file.js.map +1 -1
  248. package/dist/utils/platform-mapper.js +29 -41
  249. package/dist/utils/platform-mapper.js.map +1 -1
  250. package/dist/utils/platform-specific-paths.js.map +1 -1
  251. package/dist/utils/platform-utils.js +28 -139
  252. package/dist/utils/platform-utils.js.map +1 -1
  253. package/dist/utils/platform-yaml-merge.js +13 -6
  254. package/dist/utils/platform-yaml-merge.js.map +1 -1
  255. package/dist/utils/prompts.js +0 -31
  256. package/dist/utils/prompts.js.map +1 -1
  257. package/dist/utils/registry-entry-filter.js +38 -24
  258. package/dist/utils/registry-entry-filter.js.map +1 -1
  259. package/dist/utils/registry-paths.js +48 -0
  260. package/dist/utils/registry-paths.js.map +1 -0
  261. package/dist/utils/root-file-installer.js +19 -0
  262. package/dist/utils/root-file-installer.js.map +1 -1
  263. package/dist/utils/root-file-registry.js.map +1 -1
  264. package/dist/utils/tarball.js +6 -2
  265. package/dist/utils/tarball.js.map +1 -1
  266. package/dist/utils/version-ranges.js +11 -8
  267. package/dist/utils/version-ranges.js.map +1 -1
  268. package/package.json +3 -2
  269. package/platforms.jsonc +178 -0
  270. package/specs/auth/auth-device-flow.md +70 -0
  271. package/specs/install/install-behavior.md +30 -0
  272. package/specs/install/package-yml-canonical.md +21 -1
  273. package/specs/install/version-resolution.md +9 -7
  274. package/specs/login/login-device-flow.md +70 -0
  275. package/specs/package/README.md +60 -0
  276. package/specs/package/nested-packages-and-parent-packages.md +79 -0
  277. package/specs/package/package-index-yml.md +171 -0
  278. package/specs/package/package-root-layout.md +78 -0
  279. package/specs/package/registry-payload-and-copy.md +77 -0
  280. package/specs/package/universal-content.md +144 -0
  281. package/specs/platforms.md +193 -0
  282. package/specs/push/push-behavior.md +38 -10
  283. package/specs/push/push-errors-and-hints.md +19 -6
  284. package/specs/push/push-remote-upload.md +3 -0
  285. package/specs/push/push-scoping.md +14 -22
  286. package/specs/push/push-version-selection.md +18 -16
  287. package/specs/save/README.md +40 -0
  288. package/specs/save/save-conflict-resolution.md +146 -0
  289. package/specs/save/save-file-discovery.md +101 -0
  290. package/specs/save/save-frontmatter-overrides.md +81 -0
  291. package/specs/save/save-modes-inputs.md +55 -0
  292. package/specs/save/save-naming-scoping.md +93 -0
  293. package/specs/save/save-package-detection.md +60 -0
  294. package/specs/save/save-registry-sync.md +126 -0
  295. package/specs/save-pack.md +1 -0
  296. package/dist/commands/release.js +0 -33
  297. package/dist/commands/release.js.map +0 -1
  298. package/dist/commands/tag.js +0 -311
  299. package/dist/commands/tag.js.map +0 -1
  300. package/dist/commands/update.js +0 -30
  301. package/dist/commands/update.js.map +0 -1
  302. package/dist/core/add/formula-index-updater.js +0 -290
  303. package/dist/core/add/formula-index-updater.js.map +0 -1
  304. package/dist/core/discovery/ai-files-discovery.js +0 -2
  305. package/dist/core/discovery/ai-files-discovery.js.map +0 -1
  306. package/dist/core/discovery/formula-files-discovery.js +0 -14
  307. package/dist/core/discovery/formula-files-discovery.js.map +0 -1
  308. package/dist/core/discovery/index-files-discovery.js +0 -91
  309. package/dist/core/discovery/index-files-discovery.js.map +0 -1
  310. package/dist/core/discovery/md-files-discovery.js +0 -82
  311. package/dist/core/discovery/md-files-discovery.js.map +0 -1
  312. package/dist/core/discovery/package-files-discovery.js +0 -14
  313. package/dist/core/discovery/package-files-discovery.js.map +0 -1
  314. package/dist/core/discovery/platform-discovery.js +0 -84
  315. package/dist/core/discovery/platform-discovery.js.map +0 -1
  316. package/dist/core/discovery/root-files-discovery.js +0 -2
  317. package/dist/core/discovery/root-files-discovery.js.map +0 -1
  318. package/dist/core/formula.js +0 -170
  319. package/dist/core/formula.js.map +0 -1
  320. package/dist/core/git-registry.js +0 -46
  321. package/dist/core/git-registry.js.map +0 -1
  322. package/dist/core/groundzero.js +0 -277
  323. package/dist/core/groundzero.js.map +0 -1
  324. package/dist/core/install/scenario.js +0 -11
  325. package/dist/core/install/scenario.js.map +0 -1
  326. package/dist/core/package-sync.js +0 -219
  327. package/dist/core/package-sync.js.map +0 -1
  328. package/dist/core/save/formula-file-generator.js +0 -167
  329. package/dist/core/save/formula-file-generator.js.map +0 -1
  330. package/dist/core/save/formula-saver.js +0 -52
  331. package/dist/core/save/formula-saver.js.map +0 -1
  332. package/dist/core/save/formula-yml-generator.js +0 -89
  333. package/dist/core/save/formula-yml-generator.js.map +0 -1
  334. package/dist/core/save/formula-yml-versioning.js +0 -108
  335. package/dist/core/save/formula-yml-versioning.js.map +0 -1
  336. package/dist/core/save/generic-file-sync.js +0 -38
  337. package/dist/core/save/generic-file-sync.js.map +0 -1
  338. package/dist/core/save/md-files-sync.js +0 -33
  339. package/dist/core/save/md-files-sync.js.map +0 -1
  340. package/dist/core/save/package-yml-versioning.js +0 -108
  341. package/dist/core/save/package-yml-versioning.js.map +0 -1
  342. package/dist/core/save/platform-sync.js +0 -95
  343. package/dist/core/save/platform-sync.js.map +0 -1
  344. package/dist/core/save/root-files-sync.js +0 -140
  345. package/dist/core/save/root-files-sync.js.map +0 -1
  346. package/dist/core/save/save-candidate-types.js +0 -2
  347. package/dist/core/save/save-candidate-types.js.map +0 -1
  348. package/dist/core/save/save-conflict-types.js +0 -2
  349. package/dist/core/save/save-conflict-types.js.map +0 -1
  350. package/dist/core/save/save-file-discovery.js +0 -5
  351. package/dist/core/save/save-file-discovery.js.map +0 -1
  352. package/dist/core/status-file-discovery.js +0 -175
  353. package/dist/core/status-file-discovery.js.map +0 -1
  354. package/dist/utils/discovery/file-processing.js +0 -156
  355. package/dist/utils/discovery/file-processing.js.map +0 -1
  356. package/dist/utils/discovery/formula-discovery.js +0 -211
  357. package/dist/utils/discovery/formula-discovery.js.map +0 -1
  358. package/dist/utils/discovery/platform-discovery.js +0 -2
  359. package/dist/utils/discovery/platform-discovery.js.map +0 -1
  360. package/dist/utils/formula-discovery.js +0 -102
  361. package/dist/utils/formula-discovery.js.map +0 -1
  362. package/dist/utils/formula-index-yml.js +0 -122
  363. package/dist/utils/formula-index-yml.js.map +0 -1
  364. package/dist/utils/formula-installation.js +0 -110
  365. package/dist/utils/formula-installation.js.map +0 -1
  366. package/dist/utils/formula-local-files.js +0 -38
  367. package/dist/utils/formula-local-files.js.map +0 -1
  368. package/dist/utils/formula-management.js +0 -191
  369. package/dist/utils/formula-management.js.map +0 -1
  370. package/dist/utils/formula-name.js +0 -97
  371. package/dist/utils/formula-name.js.map +0 -1
  372. package/dist/utils/formula-versioning.js +0 -109
  373. package/dist/utils/formula-versioning.js.map +0 -1
  374. package/dist/utils/formula-yml.js +0 -82
  375. package/dist/utils/formula-yml.js.map +0 -1
  376. package/dist/utils/git.js +0 -54
  377. package/dist/utils/git.js.map +0 -1
  378. package/dist/utils/id-based-discovery.js +0 -126
  379. package/dist/utils/id-based-discovery.js.map +0 -1
  380. package/dist/utils/id-based-installer.js +0 -249
  381. package/dist/utils/id-based-installer.js.map +0 -1
  382. package/dist/utils/index-yml-based-installer.js +0 -375
  383. package/dist/utils/index-yml-based-installer.js.map +0 -1
  384. package/dist/utils/index-yml.js +0 -124
  385. package/dist/utils/index-yml.js.map +0 -1
  386. package/dist/utils/md-frontmatter.js +0 -3
  387. package/dist/utils/md-frontmatter.js.map +0 -1
  388. package/dist/utils/package-link-yml.js +0 -92
  389. package/dist/utils/package-link-yml.js.map +0 -1
  390. package/dist/utils/platform-discovery.js +0 -2
  391. package/dist/utils/platform-discovery.js.map +0 -1
  392. package/dist/utils/platform-frontmatter-split.js +0 -15
  393. package/dist/utils/platform-frontmatter-split.js.map +0 -1
  394. package/dist/utils/timestamp-encoder.js +0 -13
  395. package/dist/utils/timestamp-encoder.js.map +0 -1
  396. package/dist/utils/wip-versioning.js +0 -24
  397. package/dist/utils/wip-versioning.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ export function handleMetadataFailure(failure, packageName, requestedVersion) {
2
+ switch (failure.reason) {
3
+ case 'not-found':
4
+ console.error(`❌ Package '${packageName}' not found in registry`);
5
+ if (requestedVersion) {
6
+ console.log(`Version '${requestedVersion}' does not exist.`);
7
+ }
8
+ else {
9
+ console.log('Package does not exist in the registry.');
10
+ }
11
+ console.log('');
12
+ console.log('💡 Try one of these options:');
13
+ console.log(' • Check the package name spelling');
14
+ console.log(' • Use opkg search to find available packages');
15
+ console.log(' • Verify you have access to this package if it\'s private');
16
+ return { success: false, error: 'Package not found' };
17
+ case 'access-denied':
18
+ console.error(failure.message);
19
+ console.log('');
20
+ if (failure.statusCode === 403) {
21
+ console.log('💡 This may be a private package. Ensure you have VIEWER permissions.');
22
+ }
23
+ console.log('💡 To configure authentication:');
24
+ console.log(' opkg configure');
25
+ console.log(' opkg configure --profile <name>');
26
+ return { success: false, error: 'Access denied' };
27
+ case 'network':
28
+ console.log('');
29
+ console.log('💡 Try one of these options:');
30
+ console.log(' • Check your internet connection');
31
+ console.log(' • Try again (temporary network issue)');
32
+ console.log(' • Set OPENPACKAGEAPI_TIMEOUT environment variable for longer timeout');
33
+ return { success: false, error: 'Download failed' };
34
+ case 'integrity':
35
+ console.error(`❌ Package integrity verification failed: ${failure.message}`);
36
+ console.log('');
37
+ console.log('💡 The downloaded package may be corrupted. Try pulling again.');
38
+ return { success: false, error: 'Integrity verification failed' };
39
+ default:
40
+ return { success: false, error: failure.message };
41
+ }
42
+ }
43
+ export function handleUnexpectedError(error, packageName, requestedVersion) {
44
+ if (error && typeof error === 'object' && 'success' in error) {
45
+ return handleMetadataFailure(error, packageName, requestedVersion);
46
+ }
47
+ if (error instanceof Error) {
48
+ return handleMetadataFailure({
49
+ success: false,
50
+ reason: 'unknown',
51
+ message: error.message,
52
+ error
53
+ }, packageName, requestedVersion);
54
+ }
55
+ return handleMetadataFailure({
56
+ success: false,
57
+ reason: 'unknown',
58
+ message: 'Unknown error occurred',
59
+ error
60
+ }, packageName, requestedVersion);
61
+ }
62
+ //# sourceMappingURL=pull-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-errors.js","sourceRoot":"","sources":["../../../src/core/pull/pull-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { parsePathsOption, buildRequestedPaths } from '../../utils/registry-paths.js';
2
+ //# sourceMappingURL=pull-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-options.js","sourceRoot":"","sources":["../../../src/core/pull/pull-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { formatFileSize } from '../../utils/formatters.js';
2
+ import { formatVersionLabel } from '../../utils/package-versioning.js';
3
+ const UNVERSIONED_LABEL = 'unversioned';
4
+ function hasDefinedManifestVersion(response) {
5
+ const manifestVersion = response.version.version;
6
+ return manifestVersion !== undefined && manifestVersion !== null;
7
+ }
8
+ function getResolvedVersionLabel(response, versionToPull) {
9
+ if (!hasDefinedManifestVersion(response)) {
10
+ return UNVERSIONED_LABEL;
11
+ }
12
+ return versionToPull;
13
+ }
14
+ export function displayPackageInfo(response, parsedVersion, versionToPull, profile) {
15
+ const inaccessibleDownloads = (response.downloads ?? []).filter((download) => !download.downloadUrl);
16
+ if (inaccessibleDownloads.length > 0) {
17
+ console.log(`⚠️ Skipping ${inaccessibleDownloads.length} downloads:`);
18
+ inaccessibleDownloads.forEach((download) => {
19
+ console.log(` • ${download.name}: not found or insufficient permissions`);
20
+ });
21
+ console.log('');
22
+ }
23
+ console.log('✓ Package found in registry');
24
+ const resolvedVersionLabel = getResolvedVersionLabel(response, versionToPull);
25
+ console.log(`✓ Version: ${parsedVersion ?? 'latest'} (resolved: ${resolvedVersionLabel})`);
26
+ console.log(`✓ Profile: ${profile}`);
27
+ console.log('');
28
+ }
29
+ export function displayPullResults(result, response) {
30
+ console.log('✓ Pull successful');
31
+ console.log('');
32
+ console.log('✓ Package Details:');
33
+ console.log(` • Name: ${result.packageName}`);
34
+ const manifestVersion = response.version.version;
35
+ if (hasDefinedManifestVersion(response) && manifestVersion) {
36
+ console.log(` • Version: ${formatVersionLabel(manifestVersion)}`);
37
+ }
38
+ console.log(` • Description: ${response.package.description || '(no description)'}`);
39
+ console.log(` • Size: ${formatFileSize(result.size)}`);
40
+ const keywords = Array.isArray(response.package.keywords) ? response.package.keywords : [];
41
+ if (keywords.length > 0) {
42
+ console.log(` • Keywords: ${keywords.join(', ')}`);
43
+ }
44
+ console.log(` • Private: ${result.isPrivate ? 'Yes' : 'No'}`);
45
+ console.log(` • Files: ${result.files}`);
46
+ if (result.checksum) {
47
+ console.log(` • Checksum: ${result.checksum.substring(0, 16)}...`);
48
+ }
49
+ }
50
+ //# sourceMappingURL=pull-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-output.js","sourceRoot":"","sources":["../../../src/core/pull/pull-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { packageManager } from '../package.js';
2
+ import { hasPackageVersion } from '../directory.js';
3
+ import { logger } from '../../utils/logger.js';
4
+ import { UserCancellationError } from '../../utils/errors.js';
5
+ import { parsePackageInstallSpec } from '../../utils/package-name.js';
6
+ import { promptOverwriteConfirmation } from '../../utils/prompts.js';
7
+ import { Spinner } from '../../utils/spinner.js';
8
+ import { formatVersionLabel } from '../../utils/package-versioning.js';
9
+ import { fetchRemotePackageMetadata } from '../remote-pull.js';
10
+ import { buildRequestedPaths } from './pull-options.js';
11
+ import { displayPackageInfo, displayPullResults } from './pull-output.js';
12
+ import { handleMetadataFailure, handleUnexpectedError } from './pull-errors.js';
13
+ import { pullRecursive, pullSingle } from './pull-strategies.js';
14
+ export async function runPullPipeline(packageInput, options) {
15
+ const parsedSpec = parsePackageInstallSpec(packageInput);
16
+ const parsedName = parsedSpec.name;
17
+ const parsedVersion = parsedSpec.version;
18
+ const specPath = parsedSpec.registryPath;
19
+ const requestedPaths = buildRequestedPaths(options.paths, specPath);
20
+ logger.info(`Pulling package '${parsedName}' from remote registry`, { options });
21
+ try {
22
+ const pullOptions = {
23
+ profile: options.profile,
24
+ apiKey: options.apiKey,
25
+ recursive: !!options.recursive,
26
+ paths: requestedPaths
27
+ };
28
+ console.log(`✓ Pulling package '${parsedName}' from remote registry...`);
29
+ console.log(`✓ Version: ${parsedVersion ?? 'latest'}`);
30
+ console.log('');
31
+ const metadataResult = await fetchMetadataWithSpinner(parsedName, parsedVersion, pullOptions);
32
+ if (!metadataResult.success) {
33
+ return handleMetadataFailure(metadataResult, parsedName, parsedVersion);
34
+ }
35
+ const { response, context } = metadataResult;
36
+ const registryUrl = context.registryUrl;
37
+ const profile = context.profile;
38
+ const versionToPull = formatVersionLabel(response.version.version);
39
+ displayPackageInfo(response, parsedVersion, versionToPull, profile);
40
+ if (requestedPaths.length > 0) {
41
+ logPartialPullRequest(requestedPaths, options.recursive);
42
+ }
43
+ const partialConfig = await resolvePartialConfig(requestedPaths, parsedName, versionToPull);
44
+ if (partialConfig === 'skip') {
45
+ return {
46
+ success: true,
47
+ data: {
48
+ packageName: parsedName,
49
+ version: versionToPull,
50
+ files: 0,
51
+ size: response.version.tarballSize,
52
+ checksum: '',
53
+ registry: registryUrl,
54
+ profile,
55
+ isPrivate: response.package.isPrivate,
56
+ downloadUrl: '',
57
+ message: 'Local full version already present; partial pull skipped'
58
+ }
59
+ };
60
+ }
61
+ if (!options.recursive && versionToPull && requestedPaths.length === 0) {
62
+ await handleVersionChecks(parsedName, versionToPull);
63
+ }
64
+ const result = options.recursive
65
+ ? await pullRecursive({ parsedName, versionToPull, response, context, registryUrl, profile })
66
+ : await pullSingle({
67
+ parsedName,
68
+ parsedVersion,
69
+ response,
70
+ context,
71
+ pullOptions,
72
+ registryUrl,
73
+ profile,
74
+ partialConfig: partialConfig ?? undefined
75
+ });
76
+ displayPullResults(result, response);
77
+ return {
78
+ success: true,
79
+ data: result
80
+ };
81
+ }
82
+ catch (error) {
83
+ logger.debug('Pull pipeline failed', { error, packageName: parsedName });
84
+ return handleUnexpectedError(error, parsedName, parsedVersion);
85
+ }
86
+ }
87
+ async function fetchMetadataWithSpinner(parsedName, parsedVersion, pullOptions) {
88
+ const metadataSpinner = new Spinner('Querying registry for package...');
89
+ metadataSpinner.start();
90
+ try {
91
+ const result = await fetchRemotePackageMetadata(parsedName, parsedVersion, pullOptions);
92
+ metadataSpinner.stop();
93
+ return result;
94
+ }
95
+ catch (error) {
96
+ metadataSpinner.stop();
97
+ throw error;
98
+ }
99
+ }
100
+ async function handleVersionChecks(parsedName, versionToPull) {
101
+ const localVersionExists = await hasPackageVersion(parsedName, versionToPull);
102
+ if (localVersionExists) {
103
+ console.log(`⚠️ Version '${versionToPull}' of package '${parsedName}' already exists locally`);
104
+ console.log('');
105
+ const shouldProceed = await promptOverwriteConfirmation(parsedName, versionToPull);
106
+ if (!shouldProceed) {
107
+ throw new UserCancellationError('User declined to overwrite existing package version');
108
+ }
109
+ console.log('');
110
+ }
111
+ const localExists = await packageManager.packageExists(parsedName);
112
+ if (localExists && !localVersionExists) {
113
+ console.log(`✓ Package '${parsedName}' has other versions locally`);
114
+ console.log('Pulling will add a new version.');
115
+ console.log('');
116
+ }
117
+ }
118
+ function logPartialPullRequest(requestedPaths, isRecursive) {
119
+ console.log(`✓ Partial pull requested for paths: ${requestedPaths.join(', ')}`);
120
+ if (isRecursive) {
121
+ console.log('✓ Dependencies will be pulled fully; paths apply only to the primary package.');
122
+ }
123
+ }
124
+ async function resolvePartialConfig(requestedPaths, parsedName, versionToPull) {
125
+ if (requestedPaths.length === 0) {
126
+ return undefined;
127
+ }
128
+ const localState = await packageManager.getPackageVersionState(parsedName, versionToPull);
129
+ if (localState.exists && !localState.isPartial) {
130
+ console.log(`⚠️ ${parsedName}@${versionToPull} already exists locally (full). Skipping partial pull.`);
131
+ return 'skip';
132
+ }
133
+ if (localState.isPartial) {
134
+ console.log('✓ Existing partial version found locally; merging with remote content.');
135
+ }
136
+ return {
137
+ requestPaths: requestedPaths,
138
+ localState
139
+ };
140
+ }
141
+ //# sourceMappingURL=pull-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-pipeline.js","sourceRoot":"","sources":["../../../src/core/pull/pull-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { planRemoteDownloadsForPackage } from '../install/remote-flow.js';
2
+ import { recordBatchOutcome } from '../install/remote-reporting.js';
3
+ import { formatVersionLabel } from '../../utils/package-versioning.js';
4
+ import { Spinner } from '../../utils/spinner.js';
5
+ import { pullDownloadsBatchFromRemote, pullPackageFromRemote } from '../remote-pull.js';
6
+ export async function pullSingle({ parsedName, parsedVersion, response, context, pullOptions, registryUrl, profile, partialConfig }) {
7
+ const downloadSpinner = new Spinner('Downloading package tarball...');
8
+ downloadSpinner.start();
9
+ try {
10
+ const pullResult = await pullPackageFromRemote(parsedName, parsedVersion, {
11
+ ...pullOptions,
12
+ preFetchedResponse: response,
13
+ httpClient: context.httpClient,
14
+ paths: partialConfig?.requestPaths
15
+ });
16
+ downloadSpinner.stop();
17
+ if (!pullResult.success) {
18
+ throw pullResult;
19
+ }
20
+ const extracted = pullResult.extracted;
21
+ const resolvedVersion = formatVersionLabel(pullResult.response.version.version);
22
+ return {
23
+ packageName: pullResult.response.package.name,
24
+ version: resolvedVersion,
25
+ files: extracted.files.length,
26
+ size: pullResult.response.version.tarballSize,
27
+ checksum: extracted.checksum,
28
+ registry: registryUrl,
29
+ profile,
30
+ isPrivate: pullResult.response.package.isPrivate,
31
+ downloadUrl: pullResult.downloadUrl,
32
+ message: 'Package pulled and installed successfully'
33
+ };
34
+ }
35
+ catch (error) {
36
+ downloadSpinner.stop();
37
+ throw error;
38
+ }
39
+ }
40
+ export async function pullRecursive({ parsedName, versionToPull, response, context, registryUrl, profile }) {
41
+ const { downloadKeys, warnings: planWarnings } = await planRemoteDownloadsForPackage({ success: true, context, response }, {});
42
+ if (planWarnings.length > 0) {
43
+ planWarnings.forEach(warning => console.log(`⚠️ ${warning}`));
44
+ console.log('');
45
+ }
46
+ if (downloadKeys.size === 0) {
47
+ console.log('✓ All packages already exist locally, nothing to pull');
48
+ console.log('');
49
+ return {
50
+ packageName: parsedName,
51
+ version: versionToPull,
52
+ files: 0,
53
+ size: response.version.tarballSize,
54
+ checksum: '',
55
+ registry: registryUrl,
56
+ profile,
57
+ isPrivate: response.package.isPrivate,
58
+ downloadUrl: '',
59
+ message: 'All packages already exist locally'
60
+ };
61
+ }
62
+ const downloadSpinner = new Spinner(`Downloading ${downloadKeys.size} package(s) from remote registry...`);
63
+ downloadSpinner.start();
64
+ try {
65
+ const batchResult = await pullDownloadsBatchFromRemote(response, {
66
+ httpClient: context.httpClient,
67
+ profile: context.profile,
68
+ dryRun: false,
69
+ filter: (dependencyName, dependencyVersion) => {
70
+ const downloadKey = `${dependencyName}@${dependencyVersion}`;
71
+ return downloadKeys.has(downloadKey);
72
+ },
73
+ skipIfFull: true
74
+ });
75
+ downloadSpinner.stop();
76
+ recordBatchOutcome('Pulled packages', batchResult, [], false);
77
+ if (!batchResult.success) {
78
+ throw {
79
+ success: false,
80
+ reason: 'network',
81
+ message: `Failed to pull ${batchResult.failed.length} package(s)`
82
+ };
83
+ }
84
+ const mainPackageResult = batchResult.pulled.find(item => item.name === parsedName && item.version === versionToPull);
85
+ return {
86
+ packageName: parsedName,
87
+ version: versionToPull,
88
+ files: mainPackageResult ? 0 : 0,
89
+ size: response.version.tarballSize,
90
+ checksum: '',
91
+ registry: registryUrl,
92
+ profile,
93
+ isPrivate: response.package.isPrivate,
94
+ downloadUrl: mainPackageResult?.downloadUrl || '',
95
+ message: `Successfully pulled ${batchResult.pulled.length} package(s) (${batchResult.failed.length} failed)`
96
+ };
97
+ }
98
+ catch (error) {
99
+ downloadSpinner.stop();
100
+ throw error;
101
+ }
102
+ }
103
+ //# sourceMappingURL=pull-strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-strategies.js","sourceRoot":"","sources":["../../../src/core/pull/pull-strategies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pull-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-types.js","sourceRoot":"","sources":["../../../src/core/pull/pull-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import * as semver from 'semver';
2
+ import { UNVERSIONED } from '../../constants/index.js';
3
+ import { getCurrentUsername } from '../api-keys.js';
4
+ import { listPackageVersions } from '../directory.js';
5
+ import { packageManager } from '../package.js';
6
+ import { resolveScopedNameForPushWithUserScope, isScopedName } from '../scoping/package-scoping.js';
7
+ import { parsePackagePushSpec } from '../../utils/package-name.js';
8
+ import { getLatestStableVersion } from '../../utils/package-versioning.js';
9
+ import { promptConfirmation } from '../../utils/prompts.js';
10
+ import { logger } from '../../utils/logger.js';
11
+ import { PushError } from './push-errors.js';
12
+ import { buildRequestedPaths } from '../../utils/registry-paths.js';
13
+ import { UserCancellationError } from '../../utils/errors.js';
14
+ export function resolvePushRequestContext(packageInput, optionPaths) {
15
+ const parsedSpec = parsePackagePushSpec(packageInput);
16
+ const requestedPaths = buildRequestedPaths(optionPaths, parsedSpec.registryPath);
17
+ const mode = requestedPaths.length > 0 ? 'partial' : 'full';
18
+ return {
19
+ parsedName: parsedSpec.name,
20
+ parsedVersion: parsedSpec.version,
21
+ requestedPaths,
22
+ mode
23
+ };
24
+ }
25
+ export async function resolveUploadNameForPush(packageName, authOptions) {
26
+ if (isScopedName(packageName)) {
27
+ return packageName;
28
+ }
29
+ const username = await getCurrentUsername(authOptions);
30
+ return await resolveScopedNameForPushWithUserScope(packageName, username, authOptions.profile);
31
+ }
32
+ export async function resolvePushResolution(packageName, parsedVersion) {
33
+ if (parsedVersion) {
34
+ return resolveExplicitPush(packageName, parsedVersion);
35
+ }
36
+ return resolveImplicitPush(packageName, async (latest) => {
37
+ const proceed = await promptConfirmation(`Push latest stable version '${latest}'?`, true);
38
+ if (!proceed) {
39
+ throw new UserCancellationError('User declined pushing the stable version');
40
+ }
41
+ });
42
+ }
43
+ export function validateUploadVersion(uploadVersion) {
44
+ if (!uploadVersion) {
45
+ return;
46
+ }
47
+ assertStableSemver(uploadVersion);
48
+ }
49
+ function assertStableSemver(version) {
50
+ if (!semver.valid(version)) {
51
+ throw new PushError(`Invalid version: ${version}. Provide a valid semver version.`, 'INVALID_VERSION');
52
+ }
53
+ if (semver.prerelease(version)) {
54
+ throw new PushError(`Prerelease versions cannot be pushed: ${version}`, 'PRERELEASE_DISALLOWED');
55
+ }
56
+ }
57
+ async function resolveExplicitPush(packageName, parsedVersion) {
58
+ assertStableSemver(parsedVersion);
59
+ const pkg = await packageManager.loadPackage(packageName, parsedVersion);
60
+ logVersionMismatch(packageName, parsedVersion, pkg.metadata.version);
61
+ const effectiveVersion = pkg.metadata.version ?? parsedVersion;
62
+ return { pkg, versionToPush: effectiveVersion, source: 'explicit' };
63
+ }
64
+ async function resolveImplicitPush(packageName, onConfirmLatest) {
65
+ const allVersions = await listPackageVersions(packageName);
66
+ const stableVersions = allVersions.filter((version) => version !== UNVERSIONED);
67
+ const latestStable = getLatestStableVersion(stableVersions);
68
+ if (latestStable) {
69
+ await onConfirmLatest(latestStable);
70
+ const pkg = await packageManager.loadPackage(packageName, latestStable);
71
+ const effectiveVersion = pkg.metadata.version ?? latestStable;
72
+ return { pkg, versionToPush: effectiveVersion, source: 'latest-stable' };
73
+ }
74
+ if (allVersions.includes(UNVERSIONED)) {
75
+ const pkg = await packageManager.loadPackage(packageName, UNVERSIONED);
76
+ const manifestVersion = pkg.metadata.version;
77
+ if (manifestVersion === undefined || manifestVersion === null) {
78
+ return { pkg, versionToPush: undefined, source: 'unversioned' };
79
+ }
80
+ assertStableSemver(manifestVersion);
81
+ await onConfirmLatest(manifestVersion);
82
+ return { pkg, versionToPush: manifestVersion, source: 'latest-stable' };
83
+ }
84
+ throw new PushError(`No versions found for package '${packageName}'. Create a package with "opkg pack <package>" or ensure package.yml exists.`, 'NO_VERSIONS');
85
+ }
86
+ function logVersionMismatch(packageName, requested, manifestVersion) {
87
+ if (manifestVersion && manifestVersion !== requested) {
88
+ logger.warn('Version mismatch between manifest and requested push', {
89
+ packageName,
90
+ manifestVersion,
91
+ requested
92
+ });
93
+ }
94
+ }
95
+ //# sourceMappingURL=push-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-context.js","sourceRoot":"","sources":["../../../src/core/push/push-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { logger } from '../../utils/logger.js';
2
+ import { showApiKeySignupMessage } from '../../utils/messages.js';
3
+ import { PackageNotFoundError, UserCancellationError } from '../../utils/errors.js';
4
+ export class PushError extends Error {
5
+ constructor(message, code) {
6
+ super(message);
7
+ this.code = code;
8
+ this.name = 'PushError';
9
+ }
10
+ }
11
+ export function handlePushError(error, packageName, attemptedVersion, requestedVersion) {
12
+ logger.debug('Push pipeline failed', { error, packageName });
13
+ if (error instanceof UserCancellationError) {
14
+ throw error;
15
+ }
16
+ if (error instanceof PackageNotFoundError) {
17
+ const versionLabel = requestedVersion ?? attemptedVersion ?? 'requested version';
18
+ console.error(`❌ Version ${versionLabel} not found for package '${packageName}'`);
19
+ console.log('💡 Create this stable version using "opkg pack <package>" and push again.');
20
+ return { success: false, error: 'Version not found' };
21
+ }
22
+ if (error instanceof PushError) {
23
+ if (error.code === 'INVALID_VERSION') {
24
+ console.error(`❌ ${error.message}`);
25
+ return { success: false, error: 'Invalid version' };
26
+ }
27
+ if (error.code === 'PRERELEASE_DISALLOWED') {
28
+ console.error(`❌ ${error.message}`);
29
+ console.log('Only stable versions (x.y.z) can be pushed to the remote registry.');
30
+ console.log('💡 Create a stable version using "opkg pack <package>".');
31
+ return { success: false, error: 'Only stable versions can be pushed' };
32
+ }
33
+ if (error.code === 'NO_VERSIONS') {
34
+ console.error(`❌ ${error.message}`);
35
+ return { success: false, error: 'Version not found' };
36
+ }
37
+ console.error(`❌ ${error.message}`);
38
+ return { success: false, error: error.message };
39
+ }
40
+ if (error instanceof Error) {
41
+ const apiError = error.apiError;
42
+ if (apiError?.statusCode === 409) {
43
+ console.error(`❌ Version ${attemptedVersion || 'latest'} already exists for package '${packageName}'`);
44
+ console.log('💡 Try one of these options:');
45
+ console.log(' • Increment version with command "opkg pack <package>"');
46
+ console.log(' • Update version with command "opkg pack <package>@<version>"');
47
+ console.log(' • Specify a version explicitly using <package>@<version>');
48
+ return { success: false, error: 'Version already exists' };
49
+ }
50
+ if (apiError?.statusCode === 401) {
51
+ console.error(`❌ Authentication failed: ${error.message}`);
52
+ showApiKeySignupMessage();
53
+ console.log('💡 To configure authentication:');
54
+ console.log(' opkg configure');
55
+ console.log(' opkg configure --profile <name>');
56
+ return { success: false, error: 'Authentication failed' };
57
+ }
58
+ if (apiError?.statusCode === 403) {
59
+ console.error(`❌ Access denied: ${error.message}`);
60
+ showApiKeySignupMessage();
61
+ console.log('💡 To configure authentication:');
62
+ console.log(' opkg configure');
63
+ console.log(' opkg configure --profile <name>');
64
+ return { success: false, error: 'Access denied' };
65
+ }
66
+ if (apiError?.statusCode === 422) {
67
+ const apiMessage = apiError.message || error.message || 'Validation failed';
68
+ console.error(`❌ Package validation failed: ${apiMessage}`);
69
+ if (apiError.details) {
70
+ const detailsArray = Array.isArray(apiError.details) ? apiError.details : [apiError.details];
71
+ console.log('Validation errors:');
72
+ detailsArray.forEach((detail) => {
73
+ if (typeof detail === 'string') {
74
+ console.log(` • ${detail}`);
75
+ return;
76
+ }
77
+ if (detail?.message) {
78
+ console.log(` • ${detail.message}`);
79
+ return;
80
+ }
81
+ if (detail?.constraints && typeof detail.constraints === 'object') {
82
+ console.log(` • ${Object.values(detail.constraints).join(', ')}`);
83
+ return;
84
+ }
85
+ console.log(` • ${JSON.stringify(detail)}`);
86
+ });
87
+ }
88
+ else if (apiError) {
89
+ console.log('Validation error detail (raw):');
90
+ console.log(` • ${JSON.stringify(apiError)}`);
91
+ }
92
+ return { success: false, error: apiMessage };
93
+ }
94
+ if (apiError) {
95
+ const apiMessage = apiError.message || error.message || 'Request failed';
96
+ console.error(`❌ Request failed (${apiError.statusCode ?? 'unknown status'}): ${apiMessage}`);
97
+ if (apiError.error) {
98
+ console.log(` • code: ${apiError.error}`);
99
+ }
100
+ if (apiError.details) {
101
+ const detailsArray = Array.isArray(apiError.details) ? apiError.details : [apiError.details];
102
+ detailsArray.forEach((detail) => {
103
+ if (typeof detail === 'string') {
104
+ console.log(` • ${detail}`);
105
+ return;
106
+ }
107
+ if (detail?.message) {
108
+ console.log(` • ${detail.message}`);
109
+ return;
110
+ }
111
+ if (detail?.constraints && typeof detail.constraints === 'object') {
112
+ console.log(` • ${Object.values(detail.constraints).join(', ')}`);
113
+ return;
114
+ }
115
+ console.log(` • ${JSON.stringify(detail)}`);
116
+ });
117
+ }
118
+ else {
119
+ console.log(` • raw: ${JSON.stringify(apiError)}`);
120
+ }
121
+ return { success: false, error: apiMessage };
122
+ }
123
+ if (error.message.includes('timeout')) {
124
+ console.log('💡 The upload may have timed out. You can:');
125
+ console.log(' • Try again (the upload may have succeeded)');
126
+ console.log(' • Check your internet connection');
127
+ console.log(' • Set OPENPACKAGEAPI_TIMEOUT environment variable for longer timeout');
128
+ }
129
+ return { success: false, error: error.message };
130
+ }
131
+ return { success: false, error: 'Unknown error occurred' };
132
+ }
133
+ //# sourceMappingURL=push-errors.js.map