opendevbrowser 0.0.28 → 0.0.30

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 (325) hide show
  1. package/README.md +2 -2
  2. package/dist/accessibility-snapshot-CQ4ZKWKC.js +39 -0
  3. package/dist/accessibility-snapshot-CQ4ZKWKC.js.map +1 -0
  4. package/dist/active-window-TD5HYJ72.js +37 -0
  5. package/dist/active-window-TD5HYJ72.js.map +1 -0
  6. package/dist/annotate-VTLFS2XV.js +205 -0
  7. package/dist/annotate-VTLFS2XV.js.map +1 -0
  8. package/dist/artifacts-KJ6RNDO2.js +120 -0
  9. package/dist/artifacts-KJ6RNDO2.js.map +1 -0
  10. package/dist/attr-BCI5KYCW.js +84 -0
  11. package/dist/attr-BCI5KYCW.js.map +1 -0
  12. package/dist/browser/ops-client.d.ts +1 -0
  13. package/dist/browser/ops-client.d.ts.map +1 -1
  14. package/dist/canvas-5DFEEOKM.js +309 -0
  15. package/dist/canvas-5DFEEOKM.js.map +1 -0
  16. package/dist/capture-desktop-HFTTWY4Z.js +38 -0
  17. package/dist/capture-desktop-HFTTWY4Z.js.map +1 -0
  18. package/dist/capture-window-X63XPIFF.js +40 -0
  19. package/dist/capture-window-X63XPIFF.js.map +1 -0
  20. package/dist/check-LWAUY7GC.js +71 -0
  21. package/dist/check-LWAUY7GC.js.map +1 -0
  22. package/dist/checked-ZSOUKVYT.js +71 -0
  23. package/dist/checked-ZSOUKVYT.js.map +1 -0
  24. package/dist/chunk-2SIMIPLY.js +67 -0
  25. package/dist/chunk-2SIMIPLY.js.map +1 -0
  26. package/dist/chunk-37VSRUW4.js +141 -0
  27. package/dist/chunk-37VSRUW4.js.map +1 -0
  28. package/dist/{chunk-T3VVHJTK.js → chunk-4BEJVZRK.js} +1078 -1458
  29. package/dist/chunk-4BEJVZRK.js.map +1 -0
  30. package/dist/chunk-5SWZDVOW.js +144 -0
  31. package/dist/chunk-5SWZDVOW.js.map +1 -0
  32. package/dist/chunk-6PVZ2ABC.js +429 -0
  33. package/dist/chunk-6PVZ2ABC.js.map +1 -0
  34. package/dist/chunk-7GVOUZMQ.js +64 -0
  35. package/dist/chunk-7GVOUZMQ.js.map +1 -0
  36. package/dist/chunk-7THCPS52.js +84 -0
  37. package/dist/chunk-7THCPS52.js.map +1 -0
  38. package/dist/chunk-AHEWXOKY.js +64 -0
  39. package/dist/chunk-AHEWXOKY.js.map +1 -0
  40. package/dist/chunk-ASMHEEKY.js +10 -0
  41. package/dist/chunk-ASMHEEKY.js.map +1 -0
  42. package/dist/chunk-COAOWH3G.js +3651 -0
  43. package/dist/chunk-COAOWH3G.js.map +1 -0
  44. package/dist/chunk-DBF5OKH3.js +111 -0
  45. package/dist/chunk-DBF5OKH3.js.map +1 -0
  46. package/dist/chunk-DW4TX7MU.js +54 -0
  47. package/dist/chunk-DW4TX7MU.js.map +1 -0
  48. package/dist/chunk-GQJ5S3BL.js +20 -0
  49. package/dist/chunk-GQJ5S3BL.js.map +1 -0
  50. package/dist/chunk-IPE7TF2P.js +54 -0
  51. package/dist/chunk-IPE7TF2P.js.map +1 -0
  52. package/dist/chunk-IQTJHXZJ.js +126 -0
  53. package/dist/chunk-IQTJHXZJ.js.map +1 -0
  54. package/dist/chunk-J47N77VG.js +2969 -0
  55. package/dist/chunk-J47N77VG.js.map +1 -0
  56. package/dist/chunk-JZXD6FWR.js +25 -0
  57. package/dist/chunk-JZXD6FWR.js.map +1 -0
  58. package/dist/{chunk-QVWOPIZJ.js → chunk-KDSNXS6N.js} +75 -149
  59. package/dist/chunk-KDSNXS6N.js.map +1 -0
  60. package/dist/chunk-KZ2IXVQT.js +219 -0
  61. package/dist/chunk-KZ2IXVQT.js.map +1 -0
  62. package/dist/chunk-MD655IPO.js +838 -0
  63. package/dist/chunk-MD655IPO.js.map +1 -0
  64. package/dist/chunk-MX3NFLCE.js +940 -0
  65. package/dist/chunk-MX3NFLCE.js.map +1 -0
  66. package/dist/chunk-OW5HMYMI.js +19 -0
  67. package/dist/chunk-OW5HMYMI.js.map +1 -0
  68. package/dist/chunk-PPUWQKIC.js +26 -0
  69. package/dist/chunk-PPUWQKIC.js.map +1 -0
  70. package/dist/{chunk-I5ZCOZZV.js → chunk-QOMWCRE3.js} +1202 -9561
  71. package/dist/chunk-QOMWCRE3.js.map +1 -0
  72. package/dist/chunk-RCZZGGJS.js +226 -0
  73. package/dist/chunk-RCZZGGJS.js.map +1 -0
  74. package/dist/chunk-RJNI3BHT.js +1 -0
  75. package/dist/chunk-RPXWUCQQ.js +112 -0
  76. package/dist/chunk-RPXWUCQQ.js.map +1 -0
  77. package/dist/chunk-S5KZQJJI.js +107 -0
  78. package/dist/chunk-S5KZQJJI.js.map +1 -0
  79. package/dist/chunk-T4GMCW6Z.js +46 -0
  80. package/dist/chunk-T4GMCW6Z.js.map +1 -0
  81. package/dist/chunk-WHQZBUNY.js +982 -0
  82. package/dist/chunk-WHQZBUNY.js.map +1 -0
  83. package/dist/chunk-WOXBLP7V.js +610 -0
  84. package/dist/chunk-WOXBLP7V.js.map +1 -0
  85. package/dist/cli/commands/inspiredesign.d.ts.map +1 -1
  86. package/dist/cli/commands/macro-resolve.d.ts +4 -1
  87. package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
  88. package/dist/cli/commands/product-video.d.ts.map +1 -1
  89. package/dist/cli/commands/research.d.ts.map +1 -1
  90. package/dist/cli/commands/serve.d.ts.map +1 -1
  91. package/dist/cli/commands/shopping.d.ts.map +1 -1
  92. package/dist/cli/commands/workflow-output.d.ts +2 -0
  93. package/dist/cli/commands/workflow-output.d.ts.map +1 -0
  94. package/dist/cli/daemon-commands.d.ts.map +1 -1
  95. package/dist/cli/daemon.d.ts.map +1 -1
  96. package/dist/cli/index.js +204 -8123
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/cli/installers/postinstall-skill-sync.js +2 -1
  99. package/dist/cli/installers/postinstall-skill-sync.js.map +1 -1
  100. package/dist/cli/remote-relay.d.ts.map +1 -1
  101. package/dist/click-2AILSEIZ.js +81 -0
  102. package/dist/click-2AILSEIZ.js.map +1 -0
  103. package/dist/clone-component-TPJS3PEG.js +82 -0
  104. package/dist/clone-component-TPJS3PEG.js.map +1 -0
  105. package/dist/clone-page-LE74CIFC.js +69 -0
  106. package/dist/clone-page-LE74CIFC.js.map +1 -0
  107. package/dist/close-HN4YI47K.js +63 -0
  108. package/dist/close-HN4YI47K.js.map +1 -0
  109. package/dist/close-WFERRHX6.js +63 -0
  110. package/dist/close-WFERRHX6.js.map +1 -0
  111. package/dist/connect-RWBV2UCQ.js +107 -0
  112. package/dist/connect-RWBV2UCQ.js.map +1 -0
  113. package/dist/console-poll-PP4YYPDF.js +76 -0
  114. package/dist/console-poll-PP4YYPDF.js.map +1 -0
  115. package/dist/cookie-import-6IP776FC.js +177 -0
  116. package/dist/cookie-import-6IP776FC.js.map +1 -0
  117. package/dist/cookie-list-O2KG6DPU.js +117 -0
  118. package/dist/cookie-list-O2KG6DPU.js.map +1 -0
  119. package/dist/daemon-2BSAZXLT.js +194 -0
  120. package/dist/daemon-2BSAZXLT.js.map +1 -0
  121. package/dist/daemon-fingerprint.json +1 -1
  122. package/dist/debug-trace-snapshot-F3BDVZXS.js +136 -0
  123. package/dist/debug-trace-snapshot-F3BDVZXS.js.map +1 -0
  124. package/dist/dialog-6JQYUWMQ.js +75 -0
  125. package/dist/dialog-6JQYUWMQ.js.map +1 -0
  126. package/dist/disconnect-763TP7GH.js +58 -0
  127. package/dist/disconnect-763TP7GH.js.map +1 -0
  128. package/dist/enabled-DLYQFNIP.js +71 -0
  129. package/dist/enabled-DLYQFNIP.js.map +1 -0
  130. package/dist/extension-extractor-GKWSFHPN.js +11 -0
  131. package/dist/extension-extractor-GKWSFHPN.js.map +1 -0
  132. package/dist/global-D6WLWBXA.js +56 -0
  133. package/dist/global-D6WLWBXA.js.map +1 -0
  134. package/dist/goto-S346TJJH.js +98 -0
  135. package/dist/goto-S346TJJH.js.map +1 -0
  136. package/dist/help-EKKKEDL5.js +491 -0
  137. package/dist/help-EKKKEDL5.js.map +1 -0
  138. package/dist/hover-6JVJFGO7.js +71 -0
  139. package/dist/hover-6JVJFGO7.js.map +1 -0
  140. package/dist/html-EVOSPBIT.js +84 -0
  141. package/dist/html-EVOSPBIT.js.map +1 -0
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +87 -38
  144. package/dist/index.js.map +1 -1
  145. package/dist/inspector-H57BVUJP.js +62 -0
  146. package/dist/inspector-H57BVUJP.js.map +1 -0
  147. package/dist/inspector-audit-NQBAJWC7.js +84 -0
  148. package/dist/inspector-audit-NQBAJWC7.js.map +1 -0
  149. package/dist/inspector-plan-ZDIQVND3.js +69 -0
  150. package/dist/inspector-plan-ZDIQVND3.js.map +1 -0
  151. package/dist/inspiredesign-IEUL4PX3.js +234 -0
  152. package/dist/inspiredesign-IEUL4PX3.js.map +1 -0
  153. package/dist/install-autostart-output-5DOMKCQL.js +41 -0
  154. package/dist/install-autostart-output-5DOMKCQL.js.map +1 -0
  155. package/dist/install-autostart-reconciliation-NHKOFYTD.js +73 -0
  156. package/dist/install-autostart-reconciliation-NHKOFYTD.js.map +1 -0
  157. package/dist/launch-EK66VQPF.js +225 -0
  158. package/dist/launch-EK66VQPF.js.map +1 -0
  159. package/dist/list-ADZAQ2IU.js +51 -0
  160. package/dist/list-ADZAQ2IU.js.map +1 -0
  161. package/dist/list-KKUKN467.js +54 -0
  162. package/dist/list-KKUKN467.js.map +1 -0
  163. package/dist/local-HXJLUUNT.js +54 -0
  164. package/dist/local-HXJLUUNT.js.map +1 -0
  165. package/dist/macro-resolve-6DOQJ7CA.js +253 -0
  166. package/dist/macro-resolve-6DOQJ7CA.js.map +1 -0
  167. package/dist/macros/execute-runtime.d.ts +3 -1
  168. package/dist/macros/execute-runtime.d.ts.map +1 -1
  169. package/dist/macros/execute.d.ts +2 -0
  170. package/dist/macros/execute.d.ts.map +1 -1
  171. package/dist/native-UPLVQ2SG.js +22 -0
  172. package/dist/native-UPLVQ2SG.js.map +1 -0
  173. package/dist/network-poll-NUL4PDPY.js +76 -0
  174. package/dist/network-poll-NUL4PDPY.js.map +1 -0
  175. package/dist/new-5NKYPEFT.js +69 -0
  176. package/dist/new-5NKYPEFT.js.map +1 -0
  177. package/dist/onboarding-metadata-7E3KLYSZ.js +27 -0
  178. package/dist/onboarding-metadata-7E3KLYSZ.js.map +1 -0
  179. package/dist/open-NR3BPLXV.js +81 -0
  180. package/dist/open-NR3BPLXV.js.map +1 -0
  181. package/dist/opendevbrowser.d.ts.map +1 -1
  182. package/dist/opendevbrowser.js +87 -38
  183. package/dist/opendevbrowser.js.map +1 -1
  184. package/dist/perf-HJ36ZI6H.js +58 -0
  185. package/dist/perf-HJ36ZI6H.js.map +1 -0
  186. package/dist/pointer-down-IYTTQWXZ.js +55 -0
  187. package/dist/pointer-down-IYTTQWXZ.js.map +1 -0
  188. package/dist/pointer-drag-A2YC5PWI.js +54 -0
  189. package/dist/pointer-drag-A2YC5PWI.js.map +1 -0
  190. package/dist/pointer-move-W5K5FUI4.js +52 -0
  191. package/dist/pointer-move-W5K5FUI4.js.map +1 -0
  192. package/dist/pointer-up-6GWVO64Y.js +55 -0
  193. package/dist/pointer-up-6GWVO64Y.js.map +1 -0
  194. package/dist/press-A3V5WB3S.js +83 -0
  195. package/dist/press-A3V5WB3S.js.map +1 -0
  196. package/dist/product-video-52REKWF3.js +235 -0
  197. package/dist/product-video-52REKWF3.js.map +1 -0
  198. package/dist/providers/artifacts.d.ts +0 -2
  199. package/dist/providers/artifacts.d.ts.map +1 -1
  200. package/dist/providers/blocker.d.ts.map +1 -1
  201. package/dist/providers/bounded-map.d.ts +2 -0
  202. package/dist/providers/bounded-map.d.ts.map +1 -0
  203. package/dist/providers/community/index.d.ts.map +1 -1
  204. package/dist/providers/constraint.d.ts.map +1 -1
  205. package/dist/providers/index.d.ts +1 -0
  206. package/dist/providers/index.d.ts.map +1 -1
  207. package/dist/providers/renderer.d.ts.map +1 -1
  208. package/dist/providers/research-compiler.d.ts +1 -1
  209. package/dist/providers/research-compiler.d.ts.map +1 -1
  210. package/dist/providers/research-executor.d.ts.map +1 -1
  211. package/dist/providers/runtime-factory.d.ts.map +1 -1
  212. package/dist/providers/shared/traversal-url.d.ts +3 -0
  213. package/dist/providers/shared/traversal-url.d.ts.map +1 -1
  214. package/dist/providers/shopping/index.d.ts.map +1 -1
  215. package/dist/providers/social/search-quality.d.ts.map +1 -1
  216. package/dist/providers/workflow-handoff.d.ts +4 -0
  217. package/dist/providers/workflow-handoff.d.ts.map +1 -1
  218. package/dist/providers/workflow-output-root.d.ts +6 -0
  219. package/dist/providers/workflow-output-root.d.ts.map +1 -0
  220. package/dist/providers/workflows.d.ts.map +1 -1
  221. package/dist/{providers-QF2RFB4J.js → providers-IMFYMMHQ.js} +19 -14
  222. package/dist/providers-IMFYMMHQ.js.map +1 -0
  223. package/dist/public-surface/generated-manifest.d.ts +2 -2
  224. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  225. package/dist/public-surface/source.d.ts +2 -2
  226. package/dist/public-surface/source.d.ts.map +1 -1
  227. package/dist/relay/protocol.d.ts +3 -1
  228. package/dist/relay/protocol.d.ts.map +1 -1
  229. package/dist/relay/relay-server.d.ts +6 -0
  230. package/dist/relay/relay-server.d.ts.map +1 -1
  231. package/dist/research-WB6BBCDD.js +295 -0
  232. package/dist/research-WB6BBCDD.js.map +1 -0
  233. package/dist/review-BGWVY4RA.js +48 -0
  234. package/dist/review-BGWVY4RA.js.map +1 -0
  235. package/dist/review-desktop-LEORC5VS.js +54 -0
  236. package/dist/review-desktop-LEORC5VS.js.map +1 -0
  237. package/dist/rpc-4TSKSFGC.js +159 -0
  238. package/dist/rpc-4TSKSFGC.js.map +1 -0
  239. package/dist/run-3NBLVWXD.js +180 -0
  240. package/dist/run-3NBLVWXD.js.map +1 -0
  241. package/dist/screencast-start-UZVIT3IN.js +67 -0
  242. package/dist/screencast-start-UZVIT3IN.js.map +1 -0
  243. package/dist/screencast-stop-NOSJSIUO.js +59 -0
  244. package/dist/screencast-stop-NOSJSIUO.js.map +1 -0
  245. package/dist/screenshot-LARG4JQG.js +68 -0
  246. package/dist/screenshot-LARG4JQG.js.map +1 -0
  247. package/dist/scroll-VNFMV6TW.js +84 -0
  248. package/dist/scroll-VNFMV6TW.js.map +1 -0
  249. package/dist/scroll-into-view-VYRT3JPT.js +71 -0
  250. package/dist/scroll-into-view-VYRT3JPT.js.map +1 -0
  251. package/dist/select-KJTUZDVO.js +86 -0
  252. package/dist/select-KJTUZDVO.js.map +1 -0
  253. package/dist/serve-EV7K4HKR.js +498 -0
  254. package/dist/serve-EV7K4HKR.js.map +1 -0
  255. package/dist/shopping-DTXHVQ2X.js +273 -0
  256. package/dist/shopping-DTXHVQ2X.js.map +1 -0
  257. package/dist/skill-lifecycle-5UAZGKSN.js +89 -0
  258. package/dist/skill-lifecycle-5UAZGKSN.js.map +1 -0
  259. package/dist/skills-NSXDX6YM.js +26 -0
  260. package/dist/skills-NSXDX6YM.js.map +1 -0
  261. package/dist/snapshot-3XQMCMRJ.js +113 -0
  262. package/dist/snapshot-3XQMCMRJ.js.map +1 -0
  263. package/dist/status-OXSYA5XD.js +35 -0
  264. package/dist/status-OXSYA5XD.js.map +1 -0
  265. package/dist/status-YUMDP5KY.js +132 -0
  266. package/dist/status-YUMDP5KY.js.map +1 -0
  267. package/dist/status-capabilities-P4KDSE2Y.js +57 -0
  268. package/dist/status-capabilities-P4KDSE2Y.js.map +1 -0
  269. package/dist/text-V3B7UVIH.js +84 -0
  270. package/dist/text-V3B7UVIH.js.map +1 -0
  271. package/dist/tools/deps.d.ts +1 -0
  272. package/dist/tools/deps.d.ts.map +1 -1
  273. package/dist/tools/inspiredesign_run.d.ts.map +1 -1
  274. package/dist/tools/macro_resolve.d.ts.map +1 -1
  275. package/dist/tools/product_video_run.d.ts.map +1 -1
  276. package/dist/tools/research_run.d.ts.map +1 -1
  277. package/dist/tools/shopping_run.d.ts.map +1 -1
  278. package/dist/tools/workflow-output.d.ts +3 -0
  279. package/dist/tools/workflow-output.d.ts.map +1 -0
  280. package/dist/type-IYBN3ZLR.js +94 -0
  281. package/dist/type-IYBN3ZLR.js.map +1 -0
  282. package/dist/uncheck-SG737EGI.js +71 -0
  283. package/dist/uncheck-SG737EGI.js.map +1 -0
  284. package/dist/uninstall-KYKGJAX7.js +91 -0
  285. package/dist/uninstall-KYKGJAX7.js.map +1 -0
  286. package/dist/update-SMXPYGXS.js +305 -0
  287. package/dist/update-SMXPYGXS.js.map +1 -0
  288. package/dist/update-skill-modes-BVX7IVMW.js +38 -0
  289. package/dist/update-skill-modes-BVX7IVMW.js.map +1 -0
  290. package/dist/upload-KH6ZABJA.js +56 -0
  291. package/dist/upload-KH6ZABJA.js.map +1 -0
  292. package/dist/use-7YDKO3U4.js +63 -0
  293. package/dist/use-7YDKO3U4.js.map +1 -0
  294. package/dist/value-RZBWSKKM.js +71 -0
  295. package/dist/value-RZBWSKKM.js.map +1 -0
  296. package/dist/visible-BSFTAKXR.js +71 -0
  297. package/dist/visible-BSFTAKXR.js.map +1 -0
  298. package/dist/wait-TMTEAYOP.js +109 -0
  299. package/dist/wait-TMTEAYOP.js.map +1 -0
  300. package/dist/windows-HIZ23OHS.js +37 -0
  301. package/dist/windows-HIZ23OHS.js.map +1 -0
  302. package/extension/dist/background.js +99 -22
  303. package/extension/dist/ops/ops-runtime.js +85 -7
  304. package/extension/dist/ops/ops-session-store.js +3 -0
  305. package/extension/dist/ops/target-session-coordinator.js +3 -0
  306. package/extension/dist/services/CDPRouter.js +9 -0
  307. package/extension/manifest.json +1 -1
  308. package/package.json +1 -1
  309. package/skills/opendevbrowser-best-practices/SKILL.md +8 -6
  310. package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +1 -1
  311. package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +3 -2
  312. package/skills/opendevbrowser-best-practices/scripts/validator-fixture-cli.sh +39 -2
  313. package/skills/opendevbrowser-research/SKILL.md +64 -12
  314. package/skills/opendevbrowser-research/artifacts/research-workflows.md +56 -19
  315. package/skills/opendevbrowser-research/assets/templates/compact.md +31 -5
  316. package/skills/opendevbrowser-research/assets/templates/context.json +52 -1
  317. package/skills/opendevbrowser-research/assets/templates/report.md +57 -4
  318. package/skills/opendevbrowser-research/examples/sample-input.json +1 -1
  319. package/skills/opendevbrowser-research/examples/sample-output.md +27 -2
  320. package/skills/opendevbrowser-research/scripts/run-research.sh +2 -6
  321. package/skills/opendevbrowser-research/scripts/validate-skill-assets.sh +115 -1
  322. package/dist/chunk-I5ZCOZZV.js.map +0 -1
  323. package/dist/chunk-QVWOPIZJ.js.map +0 -1
  324. package/dist/chunk-T3VVHJTK.js.map +0 -1
  325. /package/dist/{providers-QF2RFB4J.js.map → chunk-RJNI3BHT.js.map} +0 -0
@@ -0,0 +1,64 @@
1
+ // src/cli/output.ts
2
+ var normalizeExitCode = (code) => {
3
+ return Number.isInteger(code) ? Number(code) : 0;
4
+ };
5
+ var flushStream = (stream) => {
6
+ return new Promise((resolve) => {
7
+ if (!stream || typeof stream.write !== "function") {
8
+ resolve();
9
+ return;
10
+ }
11
+ try {
12
+ stream.write("", () => resolve());
13
+ } catch {
14
+ resolve();
15
+ }
16
+ });
17
+ };
18
+ async function flushOutputAndExit(code, proc = process, timeoutMs = 250) {
19
+ const finalCode = normalizeExitCode(code);
20
+ proc.exitCode = finalCode;
21
+ await new Promise((resolve) => {
22
+ let settled = false;
23
+ const finish = () => {
24
+ if (settled) return;
25
+ settled = true;
26
+ resolve();
27
+ };
28
+ const timer = setTimeout(finish, Math.max(0, timeoutMs));
29
+ timer.unref?.();
30
+ void Promise.allSettled([flushStream(proc.stdout), flushStream(proc.stderr)]).finally(() => {
31
+ clearTimeout(timer);
32
+ finish();
33
+ });
34
+ });
35
+ proc.exit(finalCode);
36
+ }
37
+ function writeOutput(payload, options) {
38
+ if (options.quiet) {
39
+ return;
40
+ }
41
+ if (options.format === "text") {
42
+ if (typeof payload === "string") {
43
+ console.log(payload);
44
+ } else {
45
+ console.log(JSON.stringify(payload, null, 2));
46
+ }
47
+ return;
48
+ }
49
+ if (options.format === "stream-json") {
50
+ if (Array.isArray(payload)) {
51
+ for (const entry of payload) {
52
+ console.log(JSON.stringify(entry));
53
+ }
54
+ return;
55
+ }
56
+ }
57
+ console.log(JSON.stringify(payload));
58
+ }
59
+
60
+ export {
61
+ flushOutputAndExit,
62
+ writeOutput
63
+ };
64
+ //# sourceMappingURL=chunk-7GVOUZMQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/output.ts"],"sourcesContent":["import type { OutputFormat } from \"./args\";\n\nexport type OutputOptions = {\n format: OutputFormat;\n quiet?: boolean;\n};\n\ntype ExitProcessLike = Pick<typeof process, \"exit\" | \"exitCode\" | \"stdout\" | \"stderr\">;\n\nconst normalizeExitCode = (code: number | null | undefined): number => {\n return Number.isInteger(code) ? Number(code) : 0;\n};\n\nconst flushStream = (\n stream: ExitProcessLike[\"stdout\"] | ExitProcessLike[\"stderr\"] | undefined | null\n): Promise<void> => {\n return new Promise((resolve) => {\n if (!stream || typeof stream.write !== \"function\") {\n resolve();\n return;\n }\n try {\n stream.write(\"\", () => resolve());\n } catch {\n resolve();\n }\n });\n};\n\nexport async function flushOutputAndExit(\n code: number | null | undefined,\n proc: ExitProcessLike = process,\n timeoutMs = 250\n): Promise<void> {\n const finalCode = normalizeExitCode(code);\n proc.exitCode = finalCode;\n\n await new Promise<void>((resolve) => {\n let settled = false;\n const finish = () => {\n if (settled) return;\n settled = true;\n resolve();\n };\n const timer = setTimeout(finish, Math.max(0, timeoutMs));\n timer.unref?.();\n void Promise.allSettled([flushStream(proc.stdout), flushStream(proc.stderr)]).finally(() => {\n clearTimeout(timer);\n finish();\n });\n });\n\n proc.exit(finalCode);\n}\n\nexport function writeOutput(payload: unknown, options: OutputOptions): void {\n if (options.quiet) {\n return;\n }\n\n if (options.format === \"text\") {\n if (typeof payload === \"string\") {\n console.log(payload);\n } else {\n console.log(JSON.stringify(payload, null, 2));\n }\n return;\n }\n\n if (options.format === \"stream-json\") {\n if (Array.isArray(payload)) {\n for (const entry of payload) {\n console.log(JSON.stringify(entry));\n }\n return;\n }\n }\n\n console.log(JSON.stringify(payload));\n}\n"],"mappings":";AASA,IAAM,oBAAoB,CAAC,SAA4C;AACrE,SAAO,OAAO,UAAU,IAAI,IAAI,OAAO,IAAI,IAAI;AACjD;AAEA,IAAM,cAAc,CAClB,WACkB;AAClB,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,CAAC,UAAU,OAAO,OAAO,UAAU,YAAY;AACjD,cAAQ;AACR;AAAA,IACF;AACA,QAAI;AACF,aAAO,MAAM,IAAI,MAAM,QAAQ,CAAC;AAAA,IAClC,QAAQ;AACN,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,mBACpB,MACA,OAAwB,SACxB,YAAY,KACG;AACf,QAAM,YAAY,kBAAkB,IAAI;AACxC,OAAK,WAAW;AAEhB,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,QAAI,UAAU;AACd,UAAM,SAAS,MAAM;AACnB,UAAI,QAAS;AACb,gBAAU;AACV,cAAQ;AAAA,IACV;AACA,UAAM,QAAQ,WAAW,QAAQ,KAAK,IAAI,GAAG,SAAS,CAAC;AACvD,UAAM,QAAQ;AACd,SAAK,QAAQ,WAAW,CAAC,YAAY,KAAK,MAAM,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ,MAAM;AAC1F,mBAAa,KAAK;AAClB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,CAAC;AAED,OAAK,KAAK,SAAS;AACrB;AAEO,SAAS,YAAY,SAAkB,SAA8B;AAC1E,MAAI,QAAQ,OAAO;AACjB;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,QAAQ;AAC7B,QAAI,OAAO,YAAY,UAAU;AAC/B,cAAQ,IAAI,OAAO;AAAA,IACrB,OAAO;AACL,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,IAC9C;AACA;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,eAAe;AACpC,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,iBAAW,SAAS,SAAS;AAC3B,gBAAQ,IAAI,KAAK,UAAU,KAAK,CAAC;AAAA,MACnC;AACA;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,IAAI,KAAK,UAAU,OAAO,CAAC;AACrC;","names":[]}
@@ -0,0 +1,84 @@
1
+ // src/cli/utils/config.ts
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import * as os from "os";
5
+ import { parse as parseJsonc, modify, applyEdits } from "jsonc-parser";
6
+ var PLUGIN_NAME = "opendevbrowser";
7
+ var SCHEMA_URL = "https://opencode.ai/config.json";
8
+ function getGlobalConfigPath() {
9
+ const configDir = process.env.OPENCODE_CONFIG_DIR || path.join(os.homedir(), ".config", "opencode");
10
+ return path.join(configDir, "opencode.json");
11
+ }
12
+ function getLocalConfigPath() {
13
+ return path.join(process.cwd(), "opencode.json");
14
+ }
15
+ function ensureDir(dirPath) {
16
+ if (!fs.existsSync(dirPath)) {
17
+ fs.mkdirSync(dirPath, { recursive: true });
18
+ }
19
+ }
20
+ function readConfig(configPath) {
21
+ if (!fs.existsSync(configPath)) {
22
+ return { content: "", config: {} };
23
+ }
24
+ const content = fs.readFileSync(configPath, "utf-8");
25
+ const errors = [];
26
+ const parsed = parseJsonc(content, errors, { allowTrailingComma: true });
27
+ if (errors.length > 0) {
28
+ const firstError = errors[0];
29
+ throw new Error(`Invalid JSONC at ${configPath}: parse error at offset ${firstError?.offset ?? 0}`);
30
+ }
31
+ return { content, config: parsed ?? {} };
32
+ }
33
+ function hasPlugin(config, pluginName = PLUGIN_NAME) {
34
+ return config.plugin?.includes(pluginName) ?? false;
35
+ }
36
+ function createConfigWithPlugin(pluginName = PLUGIN_NAME) {
37
+ return {
38
+ $schema: SCHEMA_URL,
39
+ plugin: [pluginName]
40
+ };
41
+ }
42
+ function updateConfigContent(content, pluginName = PLUGIN_NAME) {
43
+ if (!content.trim()) {
44
+ return JSON.stringify(createConfigWithPlugin(pluginName), null, 2) + "\n";
45
+ }
46
+ const parsed = parseJsonc(content, [], { allowTrailingComma: true }) ?? {};
47
+ if (parsed.plugin?.includes(pluginName)) {
48
+ return content;
49
+ }
50
+ let result = content;
51
+ if (!parsed.$schema) {
52
+ const edits2 = modify(result, ["$schema"], SCHEMA_URL, { formattingOptions: { tabSize: 2, insertSpaces: true } });
53
+ result = applyEdits(result, edits2);
54
+ }
55
+ const newPlugins = parsed.plugin ? [...parsed.plugin, pluginName] : [pluginName];
56
+ const edits = modify(result, ["plugin"], newPlugins, { formattingOptions: { tabSize: 2, insertSpaces: true } });
57
+ result = applyEdits(result, edits);
58
+ return result;
59
+ }
60
+ function removePluginFromContent(content, pluginName = PLUGIN_NAME) {
61
+ if (!content.trim()) {
62
+ return content;
63
+ }
64
+ const parsed = parseJsonc(content, [], { allowTrailingComma: true }) ?? {};
65
+ if (!parsed.plugin?.includes(pluginName)) {
66
+ return content;
67
+ }
68
+ const newPlugins = parsed.plugin.filter((p) => p !== pluginName);
69
+ const edits = modify(content, ["plugin"], newPlugins.length > 0 ? newPlugins : void 0, {
70
+ formattingOptions: { tabSize: 2, insertSpaces: true }
71
+ });
72
+ return applyEdits(content, edits);
73
+ }
74
+
75
+ export {
76
+ getGlobalConfigPath,
77
+ getLocalConfigPath,
78
+ ensureDir,
79
+ readConfig,
80
+ hasPlugin,
81
+ updateConfigContent,
82
+ removePluginFromContent
83
+ };
84
+ //# sourceMappingURL=chunk-7THCPS52.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/utils/config.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport { parse as parseJsonc, modify, applyEdits } from \"jsonc-parser\";\nimport { writeFileAtomic } from \"../../utils/fs\";\n\nconst PLUGIN_NAME = \"opendevbrowser\";\nconst SCHEMA_URL = \"https://opencode.ai/config.json\";\n\nexport interface OpenCodeConfig {\n $schema?: string;\n plugin?: string[];\n [key: string]: unknown;\n}\n\nexport function getGlobalConfigPath(): string {\n const configDir = process.env.OPENCODE_CONFIG_DIR\n || path.join(os.homedir(), \".config\", \"opencode\");\n return path.join(configDir, \"opencode.json\");\n}\n\nexport function getLocalConfigPath(): string {\n return path.join(process.cwd(), \"opencode.json\");\n}\n\nexport function ensureDir(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\nexport function readConfig(configPath: string): { content: string; config: OpenCodeConfig } {\n if (!fs.existsSync(configPath)) {\n return { content: \"\", config: {} };\n }\n\n const content = fs.readFileSync(configPath, \"utf-8\");\n const errors: Array<{ error: number; offset: number; length: number }> = [];\n const parsed = parseJsonc(content, errors, { allowTrailingComma: true });\n\n if (errors.length > 0) {\n const firstError = errors[0];\n throw new Error(`Invalid JSONC at ${configPath}: parse error at offset ${firstError?.offset ?? 0}`);\n }\n\n return { content, config: (parsed ?? {}) as OpenCodeConfig };\n}\n\nexport function writeConfig(configPath: string, config: OpenCodeConfig): void {\n ensureDir(path.dirname(configPath));\n const content = JSON.stringify(config, null, 2) + \"\\n\";\n writeFileAtomic(configPath, content);\n}\n\nexport function addPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (!result.$schema) {\n result.$schema = SCHEMA_URL;\n }\n\n if (!result.plugin) {\n result.plugin = [pluginName];\n } else if (!result.plugin.includes(pluginName)) {\n result.plugin = [...result.plugin, pluginName];\n }\n\n return result;\n}\n\nexport function removePlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n const result = { ...config };\n\n if (result.plugin) {\n result.plugin = result.plugin.filter((p) => p !== pluginName);\n if (result.plugin.length === 0) {\n delete result.plugin;\n }\n }\n\n return result;\n}\n\nexport function hasPlugin(config: OpenCodeConfig, pluginName: string = PLUGIN_NAME): boolean {\n return config.plugin?.includes(pluginName) ?? false;\n}\n\nexport function createConfigWithPlugin(pluginName: string = PLUGIN_NAME): OpenCodeConfig {\n return {\n $schema: SCHEMA_URL,\n plugin: [pluginName]\n };\n}\n\nexport function updateConfigContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return JSON.stringify(createConfigWithPlugin(pluginName), null, 2) + \"\\n\";\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n let result = content;\n\n if (!parsed.$schema) {\n const edits = modify(result, [\"$schema\"], SCHEMA_URL, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n }\n\n const newPlugins = parsed.plugin ? [...parsed.plugin, pluginName] : [pluginName];\n const edits = modify(result, [\"plugin\"], newPlugins, { formattingOptions: { tabSize: 2, insertSpaces: true } });\n result = applyEdits(result, edits);\n\n return result;\n}\n\nexport function removePluginFromContent(content: string, pluginName: string = PLUGIN_NAME): string {\n if (!content.trim()) {\n return content;\n }\n\n const parsed = parseJsonc(content, [], { allowTrailingComma: true }) as OpenCodeConfig ?? {};\n\n if (!parsed.plugin?.includes(pluginName)) {\n return content;\n }\n\n const newPlugins = parsed.plugin.filter((p) => p !== pluginName);\n const edits = modify(content, [\"plugin\"], newPlugins.length > 0 ? newPlugins : undefined, {\n formattingOptions: { tabSize: 2, insertSpaces: true }\n });\n\n return applyEdits(content, edits);\n}\n"],"mappings":";AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,SAAS,SAAS,YAAY,QAAQ,kBAAkB;AAGxD,IAAM,cAAc;AACpB,IAAM,aAAa;AAQZ,SAAS,sBAA8B;AAC5C,QAAM,YAAY,QAAQ,IAAI,uBACpB,UAAQ,WAAQ,GAAG,WAAW,UAAU;AAClD,SAAY,UAAK,WAAW,eAAe;AAC7C;AAEO,SAAS,qBAA6B;AAC3C,SAAY,UAAK,QAAQ,IAAI,GAAG,eAAe;AACjD;AAEO,SAAS,UAAU,SAAuB;AAC/C,MAAI,CAAI,cAAW,OAAO,GAAG;AAC3B,IAAG,aAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,EAC3C;AACF;AAEO,SAAS,WAAW,YAAiE;AAC1F,MAAI,CAAI,cAAW,UAAU,GAAG;AAC9B,WAAO,EAAE,SAAS,IAAI,QAAQ,CAAC,EAAE;AAAA,EACnC;AAEA,QAAM,UAAa,gBAAa,YAAY,OAAO;AACnD,QAAM,SAAmE,CAAC;AAC1E,QAAM,SAAS,WAAW,SAAS,QAAQ,EAAE,oBAAoB,KAAK,CAAC;AAEvE,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,aAAa,OAAO,CAAC;AAC3B,UAAM,IAAI,MAAM,oBAAoB,UAAU,2BAA2B,YAAY,UAAU,CAAC,EAAE;AAAA,EACpG;AAEA,SAAO,EAAE,SAAS,QAAS,UAAU,CAAC,EAAqB;AAC7D;AAqCO,SAAS,UAAU,QAAwB,aAAqB,aAAsB;AAC3F,SAAO,OAAO,QAAQ,SAAS,UAAU,KAAK;AAChD;AAEO,SAAS,uBAAuB,aAAqB,aAA6B;AACvF,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ,CAAC,UAAU;AAAA,EACrB;AACF;AAEO,SAAS,oBAAoB,SAAiB,aAAqB,aAAqB;AAC7F,MAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,WAAO,KAAK,UAAU,uBAAuB,UAAU,GAAG,MAAM,CAAC,IAAI;AAAA,EACvE;AAEA,QAAM,SAAS,WAAW,SAAS,CAAC,GAAG,EAAE,oBAAoB,KAAK,CAAC,KAAuB,CAAC;AAE3F,MAAI,OAAO,QAAQ,SAAS,UAAU,GAAG;AACvC,WAAO;AAAA,EACT;AAEA,MAAI,SAAS;AAEb,MAAI,CAAC,OAAO,SAAS;AACnB,UAAMA,SAAQ,OAAO,QAAQ,CAAC,SAAS,GAAG,YAAY,EAAE,mBAAmB,EAAE,SAAS,GAAG,cAAc,KAAK,EAAE,CAAC;AAC/G,aAAS,WAAW,QAAQA,MAAK;AAAA,EACnC;AAEA,QAAM,aAAa,OAAO,SAAS,CAAC,GAAG,OAAO,QAAQ,UAAU,IAAI,CAAC,UAAU;AAC/E,QAAM,QAAQ,OAAO,QAAQ,CAAC,QAAQ,GAAG,YAAY,EAAE,mBAAmB,EAAE,SAAS,GAAG,cAAc,KAAK,EAAE,CAAC;AAC9G,WAAS,WAAW,QAAQ,KAAK;AAEjC,SAAO;AACT;AAEO,SAAS,wBAAwB,SAAiB,aAAqB,aAAqB;AACjG,MAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,WAAW,SAAS,CAAC,GAAG,EAAE,oBAAoB,KAAK,CAAC,KAAuB,CAAC;AAE3F,MAAI,CAAC,OAAO,QAAQ,SAAS,UAAU,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,OAAO,OAAO,OAAO,CAAC,MAAM,MAAM,UAAU;AAC/D,QAAM,QAAQ,OAAO,SAAS,CAAC,QAAQ,GAAG,WAAW,SAAS,IAAI,aAAa,QAAW;AAAA,IACxF,mBAAmB,EAAE,SAAS,GAAG,cAAc,KAAK;AAAA,EACtD,CAAC;AAED,SAAO,WAAW,SAAS,KAAK;AAClC;","names":["edits"]}
@@ -0,0 +1,64 @@
1
+ import {
2
+ parseNumberFlag,
3
+ parseOptionalStringFlag
4
+ } from "./chunk-RPXWUCQQ.js";
5
+ import {
6
+ DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS
7
+ } from "./chunk-OW5HMYMI.js";
8
+ import {
9
+ callDaemon
10
+ } from "./chunk-MD655IPO.js";
11
+ import {
12
+ createUsageError
13
+ } from "./chunk-IPE7TF2P.js";
14
+
15
+ // src/cli/commands/desktop/shared.ts
16
+ function parseDesktopTimeoutArgs(rawArgs) {
17
+ const timeoutValue = parseOptionalStringFlag(rawArgs, "--timeout-ms");
18
+ return {
19
+ timeoutMs: typeof timeoutValue === "string" ? parseNumberFlag(timeoutValue, "--timeout-ms", { min: 1 }) : void 0
20
+ };
21
+ }
22
+ function parseDesktopReasonArgs(rawArgs) {
23
+ return {
24
+ ...parseDesktopTimeoutArgs(rawArgs),
25
+ reason: parseOptionalStringFlag(rawArgs, "--reason")
26
+ };
27
+ }
28
+ function parseDesktopWindowReasonArgs(rawArgs) {
29
+ return {
30
+ ...parseDesktopReasonArgs(rawArgs),
31
+ windowId: parseOptionalStringFlag(rawArgs, "--window-id")
32
+ };
33
+ }
34
+ function requireDesktopReason(reason) {
35
+ if (!reason) {
36
+ throw createUsageError("Missing --reason");
37
+ }
38
+ return reason;
39
+ }
40
+ function requireDesktopWindowId(windowId) {
41
+ if (!windowId) {
42
+ throw createUsageError("Missing --window-id");
43
+ }
44
+ return windowId;
45
+ }
46
+ async function callDesktopCommand(name, params, timeoutMs) {
47
+ return callDaemon(name, params, {
48
+ timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS
49
+ });
50
+ }
51
+ function desktopCommandResult(message, data) {
52
+ return { success: true, message, data };
53
+ }
54
+
55
+ export {
56
+ parseDesktopTimeoutArgs,
57
+ parseDesktopReasonArgs,
58
+ parseDesktopWindowReasonArgs,
59
+ requireDesktopReason,
60
+ requireDesktopWindowId,
61
+ callDesktopCommand,
62
+ desktopCommandResult
63
+ };
64
+ //# sourceMappingURL=chunk-AHEWXOKY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/desktop/shared.ts"],"sourcesContent":["import { callDaemon } from \"../../client\";\nimport { createUsageError } from \"../../errors\";\nimport { DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS } from \"../../transport-timeouts\";\nimport { parseNumberFlag, parseOptionalStringFlag } from \"../../utils/parse\";\nimport type { CommandResult } from \"../types\";\n\ntype DesktopTimeoutArgs = {\n timeoutMs?: number;\n};\n\nexport type DesktopReasonArgs = DesktopTimeoutArgs & {\n reason?: string;\n};\n\nexport type DesktopWindowReasonArgs = DesktopReasonArgs & {\n windowId?: string;\n};\n\nexport function parseDesktopTimeoutArgs(rawArgs: string[]): DesktopTimeoutArgs {\n const timeoutValue = parseOptionalStringFlag(rawArgs, \"--timeout-ms\");\n return {\n timeoutMs: typeof timeoutValue === \"string\"\n ? parseNumberFlag(timeoutValue, \"--timeout-ms\", { min: 1 })\n : undefined\n };\n}\n\nexport function parseDesktopReasonArgs(rawArgs: string[]): DesktopReasonArgs {\n return {\n ...parseDesktopTimeoutArgs(rawArgs),\n reason: parseOptionalStringFlag(rawArgs, \"--reason\")\n };\n}\n\nexport function parseDesktopWindowReasonArgs(rawArgs: string[]): DesktopWindowReasonArgs {\n return {\n ...parseDesktopReasonArgs(rawArgs),\n windowId: parseOptionalStringFlag(rawArgs, \"--window-id\")\n };\n}\n\nexport function requireDesktopReason(reason?: string): string {\n if (!reason) {\n throw createUsageError(\"Missing --reason\");\n }\n return reason;\n}\n\nexport function requireDesktopWindowId(windowId?: string): string {\n if (!windowId) {\n throw createUsageError(\"Missing --window-id\");\n }\n return windowId;\n}\n\nexport async function callDesktopCommand(\n name: string,\n params: Record<string, unknown>,\n timeoutMs?: number\n): Promise<unknown> {\n return callDaemon(name, params, {\n timeoutMs: timeoutMs ?? DEFAULT_SCREENSHOT_TRANSPORT_TIMEOUT_MS\n });\n}\n\nexport function desktopCommandResult(message: string, data: unknown): CommandResult {\n return { success: true, message, data };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBO,SAAS,wBAAwB,SAAuC;AAC7E,QAAM,eAAe,wBAAwB,SAAS,cAAc;AACpE,SAAO;AAAA,IACL,WAAW,OAAO,iBAAiB,WAC/B,gBAAgB,cAAc,gBAAgB,EAAE,KAAK,EAAE,CAAC,IACxD;AAAA,EACN;AACF;AAEO,SAAS,uBAAuB,SAAsC;AAC3E,SAAO;AAAA,IACL,GAAG,wBAAwB,OAAO;AAAA,IAClC,QAAQ,wBAAwB,SAAS,UAAU;AAAA,EACrD;AACF;AAEO,SAAS,6BAA6B,SAA4C;AACvF,SAAO;AAAA,IACL,GAAG,uBAAuB,OAAO;AAAA,IACjC,UAAU,wBAAwB,SAAS,aAAa;AAAA,EAC1D;AACF;AAEO,SAAS,qBAAqB,QAAyB;AAC5D,MAAI,CAAC,QAAQ;AACX,UAAM,iBAAiB,kBAAkB;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,SAAS,uBAAuB,UAA2B;AAChE,MAAI,CAAC,UAAU;AACb,UAAM,iBAAiB,qBAAqB;AAAA,EAC9C;AACA,SAAO;AACT;AAEA,eAAsB,mBACpB,MACA,QACA,WACkB;AAClB,SAAO,WAAW,MAAM,QAAQ;AAAA,IAC9B,WAAW,aAAa;AAAA,EAC1B,CAAC;AACH;AAEO,SAAS,qBAAqB,SAAiB,MAA8B;AAClF,SAAO,EAAE,SAAS,MAAM,SAAS,KAAK;AACxC;","names":[]}
@@ -0,0 +1,10 @@
1
+ // src/utils/crypto.ts
2
+ import { randomBytes } from "crypto";
3
+ function generateSecureToken() {
4
+ return randomBytes(32).toString("hex");
5
+ }
6
+
7
+ export {
8
+ generateSecureToken
9
+ };
10
+ //# sourceMappingURL=chunk-ASMHEEKY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/crypto.ts"],"sourcesContent":["import { randomBytes } from \"crypto\";\n\nexport function generateSecureToken(): string {\n return randomBytes(32).toString(\"hex\");\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAErB,SAAS,sBAA8B;AAC5C,SAAO,YAAY,EAAE,EAAE,SAAS,KAAK;AACvC;","names":[]}