@mx-space/cli 0.15.1 → 0.15.2

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 (611) hide show
  1. package/dist/{Lexical.dev-BSvx45_E.mjs → Lexical.dev-Df5TNMgP.mjs} +2 -2
  2. package/dist/{Lexical.node-kAh5GM2n.mjs → Lexical.node-B064E4Hy.mjs} +1 -1
  3. package/dist/{Lexical.prod-Bqwgb3ez.mjs → Lexical.prod-DRFSwoE7.mjs} +2 -2
  4. package/dist/{LexicalClipboard.dev-BWU3KXIa.mjs → LexicalClipboard.dev-ClOWeg5v.mjs} +5 -5
  5. package/dist/{LexicalClipboard.node-BygAdNdF.mjs → LexicalClipboard.node-BJBLWpEi.mjs} +1 -1
  6. package/dist/{LexicalClipboard.prod-BtMuKNyT.mjs → LexicalClipboard.prod-Ytt65eQo.mjs} +5 -5
  7. package/dist/{LexicalCodeCore.dev-CD2xgvDs.mjs → LexicalCodeCore.dev-CzEPINOT.mjs} +4 -4
  8. package/dist/{LexicalCodeCore.prod-Bl6FFMc7.mjs → LexicalCodeCore.prod-DOVk7lL_.mjs} +4 -4
  9. package/dist/{LexicalDragon.dev-BwdYhm4K.mjs → LexicalDragon.dev-DxePN9fP.mjs} +2 -2
  10. package/dist/{LexicalDragon.node-CpJhkCVV.mjs → LexicalDragon.node-DBwaqStp.mjs} +1 -1
  11. package/dist/{LexicalDragon.prod-CvXmWwo1.mjs → LexicalDragon.prod-Bji84-Hq.mjs} +2 -2
  12. package/dist/{LexicalExtension.dev-LcRLXI5Z.mjs → LexicalExtension.dev-DtSRyjbf.mjs} +2 -2
  13. package/dist/{LexicalExtension.node-BwJt2LXV.mjs → LexicalExtension.node-3nsS5NjU.mjs} +1 -1
  14. package/dist/{LexicalExtension.prod-lg8_33-H.mjs → LexicalExtension.prod-Ddk0ja_6.mjs} +2 -2
  15. package/dist/{LexicalHeadless.dev-BeUbKBes.mjs → LexicalHeadless.dev-DdWJsPoH.mjs} +1 -1
  16. package/dist/{LexicalHeadless.prod-4gbIA8HM.mjs → LexicalHeadless.prod-CH74ZDMt.mjs} +1 -1
  17. package/dist/{LexicalHtml.dev-BLdZWTCJ.mjs → LexicalHtml.dev-DN7QIb_7.mjs} +4 -4
  18. package/dist/{LexicalHtml.node-BeuJMvvt.mjs → LexicalHtml.node-DAwuaPeI.mjs} +1 -1
  19. package/dist/{LexicalHtml.prod-CHUyCocN.mjs → LexicalHtml.prod-X4eTHEfI.mjs} +4 -4
  20. package/dist/{LexicalLink.dev-DgsFRqw0.mjs → LexicalLink.dev-owitIl6I.mjs} +4 -4
  21. package/dist/{LexicalLink.prod-CkXkeKY2.mjs → LexicalLink.prod-BZ7ZZkVD.mjs} +4 -4
  22. package/dist/{LexicalList.dev-OOms3kQi.mjs → LexicalList.dev-CUbi09Yo.mjs} +4 -4
  23. package/dist/{LexicalList.prod-DzMBeqHn.mjs → LexicalList.prod-pUsUZa0r.mjs} +4 -4
  24. package/dist/{LexicalMarkdown.dev-DJLKbZtD.mjs → LexicalMarkdown.dev-S2yWckH9.mjs} +3 -3
  25. package/dist/{LexicalMarkdown.prod-Cp21kDCU.mjs → LexicalMarkdown.prod-TRkMWfmC.mjs} +3 -3
  26. package/dist/{LexicalRichText.dev-0rkAGjUf.mjs → LexicalRichText.dev-Y3ybFF2S.mjs} +7 -7
  27. package/dist/{LexicalRichText.node-Cd-BySPE.mjs → LexicalRichText.node-wNAi2Z4i.mjs} +4 -4
  28. package/dist/{LexicalRichText.prod-DTQiEr8C.mjs → LexicalRichText.prod-HLxqZ6hQ.mjs} +7 -7
  29. package/dist/{LexicalSelection.dev-Bi0VlUEv.mjs → LexicalSelection.dev-CyhKOKbs.mjs} +1 -1
  30. package/dist/{LexicalSelection.node-t2U46EF_.mjs → LexicalSelection.node-BCuHMbzl.mjs} +1 -1
  31. package/dist/{LexicalSelection.prod-CrFG111g.mjs → LexicalSelection.prod-RebDJliC.mjs} +1 -1
  32. package/dist/{LexicalTable.dev-D-sFhO-o.mjs → LexicalTable.dev-DN3ezVey.mjs} +5 -5
  33. package/dist/{LexicalTable.prod-DwYaa_dN.mjs → LexicalTable.prod-B0MioVyq.mjs} +5 -5
  34. package/dist/{LexicalUtils.dev-Q2q3-UDM.mjs → LexicalUtils.dev-Bw6LFRlt.mjs} +2 -2
  35. package/dist/{LexicalUtils.node-Dl7OvqJV.mjs → LexicalUtils.node-BPKMFN80.mjs} +1 -1
  36. package/dist/{LexicalUtils.prod-CBnq_iEV.mjs → LexicalUtils.prod-CJYQVQJO.mjs} +2 -2
  37. package/dist/bin/mxs.mjs +1 -1
  38. package/dist/{esm-ZXjJmLEC.mjs → esm-7vSMGlFz.mjs} +171 -245
  39. package/dist/esm-ZrfYH2y2.mjs +2 -0
  40. package/dist/index.mjs +1 -1
  41. package/dist/{mxs-DC9zR3f2.mjs → mxs-DKv-4ZTg.mjs} +362 -297
  42. package/dist/vendor/litexml/cli.mjs +94 -38
  43. package/dist/vendor/litexml/litexml-html-preview-client.css +329 -836
  44. package/dist/vendor/litexml/litexml-html-preview-client.js +6048 -5832
  45. package/dist/vendor/litexml/style.css +5 -1
  46. package/package.json +10 -10
  47. package/dist/esm-CNZ7kdTg.mjs +0 -2
  48. package/dist/src/bin/mxs.d.ts +0 -2
  49. package/dist/src/bin/mxs.js +0 -310
  50. package/dist/src/cli/ai/_poll.d.ts +0 -12
  51. package/dist/src/cli/ai/_poll.js +0 -38
  52. package/dist/src/cli/ai/_resolve.d.ts +0 -8
  53. package/dist/src/cli/ai/_resolve.js +0 -27
  54. package/dist/src/cli/ai/index.d.ts +0 -127
  55. package/dist/src/cli/ai/index.js +0 -46
  56. package/dist/src/cli/ai/insights/by-article.d.ts +0 -10
  57. package/dist/src/cli/ai/insights/by-article.js +0 -21
  58. package/dist/src/cli/ai/insights/delete.d.ts +0 -7
  59. package/dist/src/cli/ai/insights/delete.js +0 -18
  60. package/dist/src/cli/ai/insights/edit.d.ts +0 -8
  61. package/dist/src/cli/ai/insights/edit.js +0 -54
  62. package/dist/src/cli/ai/insights/get.d.ts +0 -6
  63. package/dist/src/cli/ai/insights/get.js +0 -11
  64. package/dist/src/cli/ai/insights/index.d.ts +0 -30
  65. package/dist/src/cli/ai/insights/index.js +0 -17
  66. package/dist/src/cli/ai/insights/list.d.ts +0 -10
  67. package/dist/src/cli/ai/insights/list.js +0 -20
  68. package/dist/src/cli/ai/insights/refresh.d.ts +0 -10
  69. package/dist/src/cli/ai/insights/refresh.js +0 -25
  70. package/dist/src/cli/ai/insights/translate.d.ts +0 -10
  71. package/dist/src/cli/ai/insights/translate.js +0 -25
  72. package/dist/src/cli/ai/overview/by-article.d.ts +0 -7
  73. package/dist/src/cli/ai/overview/by-article.js +0 -15
  74. package/dist/src/cli/ai/overview/index.d.ts +0 -11
  75. package/dist/src/cli/ai/overview/index.js +0 -4
  76. package/dist/src/cli/ai/overview/list.d.ts +0 -10
  77. package/dist/src/cli/ai/overview/list.js +0 -20
  78. package/dist/src/cli/ai/summary/by-article.d.ts +0 -10
  79. package/dist/src/cli/ai/summary/by-article.js +0 -21
  80. package/dist/src/cli/ai/summary/delete.d.ts +0 -7
  81. package/dist/src/cli/ai/summary/delete.js +0 -18
  82. package/dist/src/cli/ai/summary/edit.d.ts +0 -8
  83. package/dist/src/cli/ai/summary/edit.js +0 -54
  84. package/dist/src/cli/ai/summary/get.d.ts +0 -6
  85. package/dist/src/cli/ai/summary/get.js +0 -11
  86. package/dist/src/cli/ai/summary/index.d.ts +0 -30
  87. package/dist/src/cli/ai/summary/index.js +0 -9
  88. package/dist/src/cli/ai/summary/list.d.ts +0 -10
  89. package/dist/src/cli/ai/summary/list.js +0 -20
  90. package/dist/src/cli/ai/summary/regen.d.ts +0 -10
  91. package/dist/src/cli/ai/summary/regen.js +0 -25
  92. package/dist/src/cli/ai/summary/translate.d.ts +0 -10
  93. package/dist/src/cli/ai/summary/translate.js +0 -25
  94. package/dist/src/cli/ai/translate/by-article.d.ts +0 -9
  95. package/dist/src/cli/ai/translate/by-article.js +0 -19
  96. package/dist/src/cli/ai/translate/delete.d.ts +0 -7
  97. package/dist/src/cli/ai/translate/delete.js +0 -18
  98. package/dist/src/cli/ai/translate/edit.d.ts +0 -8
  99. package/dist/src/cli/ai/translate/edit.js +0 -97
  100. package/dist/src/cli/ai/translate/entries/delete.d.ts +0 -7
  101. package/dist/src/cli/ai/translate/entries/delete.js +0 -18
  102. package/dist/src/cli/ai/translate/entries/edit.d.ts +0 -8
  103. package/dist/src/cli/ai/translate/entries/edit.js +0 -73
  104. package/dist/src/cli/ai/translate/entries/generate.d.ts +0 -7
  105. package/dist/src/cli/ai/translate/entries/generate.js +0 -15
  106. package/dist/src/cli/ai/translate/entries/index.d.ts +0 -17
  107. package/dist/src/cli/ai/translate/entries/index.js +0 -6
  108. package/dist/src/cli/ai/translate/entries/list.d.ts +0 -10
  109. package/dist/src/cli/ai/translate/entries/list.js +0 -20
  110. package/dist/src/cli/ai/translate/get.d.ts +0 -6
  111. package/dist/src/cli/ai/translate/get.js +0 -11
  112. package/dist/src/cli/ai/translate/index.d.ts +0 -40
  113. package/dist/src/cli/ai/translate/index.js +0 -19
  114. package/dist/src/cli/ai/translate/languages.d.ts +0 -7
  115. package/dist/src/cli/ai/translate/languages.js +0 -15
  116. package/dist/src/cli/ai/translate/list.d.ts +0 -9
  117. package/dist/src/cli/ai/translate/list.js +0 -19
  118. package/dist/src/cli/ai/translate/run.d.ts +0 -10
  119. package/dist/src/cli/ai/translate/run.js +0 -31
  120. package/dist/src/cli/ai/tts/by-article.d.ts +0 -7
  121. package/dist/src/cli/ai/tts/by-article.js +0 -15
  122. package/dist/src/cli/ai/tts/delete.d.ts +0 -7
  123. package/dist/src/cli/ai/tts/delete.js +0 -18
  124. package/dist/src/cli/ai/tts/index.d.ts +0 -22
  125. package/dist/src/cli/ai/tts/index.js +0 -7
  126. package/dist/src/cli/ai/tts/list.d.ts +0 -10
  127. package/dist/src/cli/ai/tts/list.js +0 -20
  128. package/dist/src/cli/ai/tts/run.d.ts +0 -10
  129. package/dist/src/cli/ai/tts/run.js +0 -25
  130. package/dist/src/cli/ai/tts/voices.d.ts +0 -7
  131. package/dist/src/cli/ai/tts/voices.js +0 -12
  132. package/dist/src/cli/ai/views.d.ts +0 -3
  133. package/dist/src/cli/ai/views.js +0 -45
  134. package/dist/src/cli/auth/index.d.ts +0 -6
  135. package/dist/src/cli/auth/index.js +0 -22
  136. package/dist/src/cli/auth/login.d.ts +0 -11
  137. package/dist/src/cli/auth/login.js +0 -168
  138. package/dist/src/cli/auth/logout.d.ts +0 -6
  139. package/dist/src/cli/auth/logout.js +0 -21
  140. package/dist/src/cli/auth/status.d.ts +0 -4
  141. package/dist/src/cli/auth/status.js +0 -31
  142. package/dist/src/cli/auth/view.d.ts +0 -25
  143. package/dist/src/cli/auth/view.js +0 -46
  144. package/dist/src/cli/auth/whoami.d.ts +0 -7
  145. package/dist/src/cli/auth/whoami.js +0 -44
  146. package/dist/src/cli/category/create.d.ts +0 -10
  147. package/dist/src/cli/category/create.js +0 -24
  148. package/dist/src/cli/category/delete.d.ts +0 -8
  149. package/dist/src/cli/category/delete.js +0 -21
  150. package/dist/src/cli/category/get.d.ts +0 -6
  151. package/dist/src/cli/category/get.js +0 -11
  152. package/dist/src/cli/category/index.d.ts +0 -20
  153. package/dist/src/cli/category/index.js +0 -41
  154. package/dist/src/cli/category/list.d.ts +0 -4
  155. package/dist/src/cli/category/list.js +0 -10
  156. package/dist/src/cli/category/update.d.ts +0 -12
  157. package/dist/src/cli/category/update.js +0 -34
  158. package/dist/src/cli/comment/_flags.d.ts +0 -28
  159. package/dist/src/cli/comment/_flags.js +0 -48
  160. package/dist/src/cli/comment/approve.d.ts +0 -9
  161. package/dist/src/cli/comment/approve.js +0 -23
  162. package/dist/src/cli/comment/delete.d.ts +0 -9
  163. package/dist/src/cli/comment/delete.js +0 -24
  164. package/dist/src/cli/comment/get.d.ts +0 -6
  165. package/dist/src/cli/comment/get.js +0 -12
  166. package/dist/src/cli/comment/index.d.ts +0 -34
  167. package/dist/src/cli/comment/index.js +0 -53
  168. package/dist/src/cli/comment/list.d.ts +0 -9
  169. package/dist/src/cli/comment/list.js +0 -20
  170. package/dist/src/cli/comment/reject.d.ts +0 -9
  171. package/dist/src/cli/comment/reject.js +0 -23
  172. package/dist/src/cli/comment/reply.d.ts +0 -9
  173. package/dist/src/cli/comment/reply.js +0 -31
  174. package/dist/src/cli/comment/unread.d.ts +0 -7
  175. package/dist/src/cli/comment/unread.js +0 -21
  176. package/dist/src/cli/comment/view.d.ts +0 -3
  177. package/dist/src/cli/comment/view.js +0 -197
  178. package/dist/src/cli/config/edit.d.ts +0 -5
  179. package/dist/src/cli/config/edit.js +0 -36
  180. package/dist/src/cli/config/get.d.ts +0 -6
  181. package/dist/src/cli/config/get.js +0 -11
  182. package/dist/src/cli/config/index.d.ts +0 -10
  183. package/dist/src/cli/config/index.js +0 -22
  184. package/dist/src/cli/config/list.d.ts +0 -4
  185. package/dist/src/cli/config/list.js +0 -10
  186. package/dist/src/cli/config/set.d.ts +0 -9
  187. package/dist/src/cli/config/set.js +0 -48
  188. package/dist/src/cli/draft/_shared.d.ts +0 -27
  189. package/dist/src/cli/draft/_shared.js +0 -85
  190. package/dist/src/cli/draft/create.d.ts +0 -21
  191. package/dist/src/cli/draft/create.js +0 -34
  192. package/dist/src/cli/draft/delete.d.ts +0 -7
  193. package/dist/src/cli/draft/delete.js +0 -20
  194. package/dist/src/cli/draft/get.d.ts +0 -6
  195. package/dist/src/cli/draft/get.js +0 -11
  196. package/dist/src/cli/draft/index.d.ts +0 -54
  197. package/dist/src/cli/draft/index.js +0 -42
  198. package/dist/src/cli/draft/list.d.ts +0 -11
  199. package/dist/src/cli/draft/list.js +0 -23
  200. package/dist/src/cli/draft/publish.d.ts +0 -8
  201. package/dist/src/cli/draft/publish.js +0 -64
  202. package/dist/src/cli/draft/update.d.ts +0 -22
  203. package/dist/src/cli/draft/update.js +0 -29
  204. package/dist/src/cli/file/_shared.d.ts +0 -6
  205. package/dist/src/cli/file/_shared.js +0 -5
  206. package/dist/src/cli/file/delete.d.ts +0 -8
  207. package/dist/src/cli/file/delete.js +0 -21
  208. package/dist/src/cli/file/index.d.ts +0 -19
  209. package/dist/src/cli/file/index.js +0 -33
  210. package/dist/src/cli/file/list.d.ts +0 -6
  211. package/dist/src/cli/file/list.js +0 -11
  212. package/dist/src/cli/file/rename.d.ts +0 -8
  213. package/dist/src/cli/file/rename.js +0 -16
  214. package/dist/src/cli/file/upload.d.ts +0 -9
  215. package/dist/src/cli/file/upload.js +0 -32
  216. package/dist/src/cli/help/index.d.ts +0 -62
  217. package/dist/src/cli/help/index.js +0 -276
  218. package/dist/src/cli/help/registry.d.ts +0 -28
  219. package/dist/src/cli/help/registry.js +0 -29
  220. package/dist/src/cli/note/_flags.d.ts +0 -66
  221. package/dist/src/cli/note/_flags.js +0 -73
  222. package/dist/src/cli/note/create.d.ts +0 -23
  223. package/dist/src/cli/note/create.js +0 -25
  224. package/dist/src/cli/note/delete.d.ts +0 -8
  225. package/dist/src/cli/note/delete.js +0 -21
  226. package/dist/src/cli/note/edit.d.ts +0 -28
  227. package/dist/src/cli/note/edit.js +0 -114
  228. package/dist/src/cli/note/get.d.ts +0 -6
  229. package/dist/src/cli/note/get.js +0 -29
  230. package/dist/src/cli/note/index.d.ts +0 -77
  231. package/dist/src/cli/note/index.js +0 -63
  232. package/dist/src/cli/note/list.d.ts +0 -10
  233. package/dist/src/cli/note/list.js +0 -22
  234. package/dist/src/cli/note/publish.d.ts +0 -7
  235. package/dist/src/cli/note/publish.js +0 -17
  236. package/dist/src/cli/note/unpublish.d.ts +0 -7
  237. package/dist/src/cli/note/unpublish.js +0 -17
  238. package/dist/src/cli/note/update.d.ts +0 -25
  239. package/dist/src/cli/note/update.js +0 -36
  240. package/dist/src/cli/note/view.d.ts +0 -3
  241. package/dist/src/cli/note/view.js +0 -162
  242. package/dist/src/cli/page/create.d.ts +0 -41
  243. package/dist/src/cli/page/create.js +0 -56
  244. package/dist/src/cli/page/delete.d.ts +0 -7
  245. package/dist/src/cli/page/delete.js +0 -37
  246. package/dist/src/cli/page/edit.d.ts +0 -19
  247. package/dist/src/cli/page/edit.js +0 -117
  248. package/dist/src/cli/page/get.d.ts +0 -6
  249. package/dist/src/cli/page/get.js +0 -16
  250. package/dist/src/cli/page/index.d.ts +0 -44
  251. package/dist/src/cli/page/index.js +0 -38
  252. package/dist/src/cli/page/list.d.ts +0 -4
  253. package/dist/src/cli/page/list.js +0 -10
  254. package/dist/src/cli/page/update.d.ts +0 -16
  255. package/dist/src/cli/page/update.js +0 -48
  256. package/dist/src/cli/page/view.d.ts +0 -2
  257. package/dist/src/cli/page/view.js +0 -79
  258. package/dist/src/cli/post/_flags.d.ts +0 -66
  259. package/dist/src/cli/post/_flags.js +0 -96
  260. package/dist/src/cli/post/apply.d.ts +0 -7
  261. package/dist/src/cli/post/apply.js +0 -70
  262. package/dist/src/cli/post/create.d.ts +0 -21
  263. package/dist/src/cli/post/create.js +0 -24
  264. package/dist/src/cli/post/delete.d.ts +0 -8
  265. package/dist/src/cli/post/delete.js +0 -21
  266. package/dist/src/cli/post/edit.d.ts +0 -26
  267. package/dist/src/cli/post/edit.js +0 -115
  268. package/dist/src/cli/post/get.d.ts +0 -7
  269. package/dist/src/cli/post/get.js +0 -15
  270. package/dist/src/cli/post/index.d.ts +0 -91
  271. package/dist/src/cli/post/index.js +0 -73
  272. package/dist/src/cli/post/list.d.ts +0 -10
  273. package/dist/src/cli/post/list.js +0 -23
  274. package/dist/src/cli/post/publish.d.ts +0 -7
  275. package/dist/src/cli/post/publish.js +0 -17
  276. package/dist/src/cli/post/stage.d.ts +0 -23
  277. package/dist/src/cli/post/stage.js +0 -55
  278. package/dist/src/cli/post/unpublish.d.ts +0 -7
  279. package/dist/src/cli/post/unpublish.js +0 -17
  280. package/dist/src/cli/post/update.d.ts +0 -23
  281. package/dist/src/cli/post/update.js +0 -38
  282. package/dist/src/cli/post/view.d.ts +0 -3
  283. package/dist/src/cli/post/view.js +0 -150
  284. package/dist/src/cli/preview/index.d.ts +0 -13
  285. package/dist/src/cli/preview/index.js +0 -226
  286. package/dist/src/cli/profile/index.d.ts +0 -14
  287. package/dist/src/cli/profile/index.js +0 -36
  288. package/dist/src/cli/profile/ls.d.ts +0 -5
  289. package/dist/src/cli/profile/ls.js +0 -26
  290. package/dist/src/cli/profile/mark.d.ts +0 -9
  291. package/dist/src/cli/profile/mark.js +0 -23
  292. package/dist/src/cli/profile/rm.d.ts +0 -12
  293. package/dist/src/cli/profile/rm.js +0 -50
  294. package/dist/src/cli/profile/show.d.ts +0 -9
  295. package/dist/src/cli/profile/show.js +0 -40
  296. package/dist/src/cli/profile/use.d.ts +0 -6
  297. package/dist/src/cli/profile/use.js +0 -11
  298. package/dist/src/cli/profile/view.d.ts +0 -8
  299. package/dist/src/cli/profile/view.js +0 -21
  300. package/dist/src/cli/project/_flags.d.ts +0 -56
  301. package/dist/src/cli/project/_flags.js +0 -130
  302. package/dist/src/cli/project/create.d.ts +0 -17
  303. package/dist/src/cli/project/create.js +0 -25
  304. package/dist/src/cli/project/delete.d.ts +0 -8
  305. package/dist/src/cli/project/delete.js +0 -22
  306. package/dist/src/cli/project/edit.d.ts +0 -11
  307. package/dist/src/cli/project/edit.js +0 -61
  308. package/dist/src/cli/project/get.d.ts +0 -7
  309. package/dist/src/cli/project/get.js +0 -14
  310. package/dist/src/cli/project/index.d.ts +0 -43
  311. package/dist/src/cli/project/index.js +0 -52
  312. package/dist/src/cli/project/list.d.ts +0 -8
  313. package/dist/src/cli/project/list.js +0 -19
  314. package/dist/src/cli/project/update.d.ts +0 -18
  315. package/dist/src/cli/project/update.js +0 -24
  316. package/dist/src/cli/project/view-cmd.d.ts +0 -7
  317. package/dist/src/cli/project/view-cmd.js +0 -15
  318. package/dist/src/cli/project/view.d.ts +0 -3
  319. package/dist/src/cli/project/view.js +0 -102
  320. package/dist/src/cli/render/codehighlight.d.ts +0 -8
  321. package/dist/src/cli/render/codehighlight.js +0 -264
  322. package/dist/src/cli/render/envelope.d.ts +0 -7
  323. package/dist/src/cli/render/envelope.js +0 -23
  324. package/dist/src/cli/render/frontmatter.d.ts +0 -8
  325. package/dist/src/cli/render/frontmatter.js +0 -50
  326. package/dist/src/cli/render/helpers.d.ts +0 -2
  327. package/dist/src/cli/render/helpers.js +0 -11
  328. package/dist/src/cli/render/index.d.ts +0 -7
  329. package/dist/src/cli/render/index.js +0 -10
  330. package/dist/src/cli/render/lexical/blocks.d.ts +0 -19
  331. package/dist/src/cli/render/lexical/blocks.js +0 -208
  332. package/dist/src/cli/render/lexical/code.d.ts +0 -2
  333. package/dist/src/cli/render/lexical/code.js +0 -22
  334. package/dist/src/cli/render/lexical/embeds.d.ts +0 -6
  335. package/dist/src/cli/render/lexical/embeds.js +0 -51
  336. package/dist/src/cli/render/lexical/index.d.ts +0 -9
  337. package/dist/src/cli/render/lexical/index.js +0 -25
  338. package/dist/src/cli/render/lexical/inlines.d.ts +0 -17
  339. package/dist/src/cli/render/lexical/inlines.js +0 -76
  340. package/dist/src/cli/render/lexical/parser.d.ts +0 -10
  341. package/dist/src/cli/render/lexical/parser.js +0 -64
  342. package/dist/src/cli/render/lexical/walker.d.ts +0 -21
  343. package/dist/src/cli/render/lexical/walker.js +0 -51
  344. package/dist/src/cli/render/markdown.d.ts +0 -18
  345. package/dist/src/cli/render/markdown.js +0 -196
  346. package/dist/src/cli/render/metadata-block.d.ts +0 -14
  347. package/dist/src/cli/render/metadata-block.js +0 -50
  348. package/dist/src/cli/skill/all.d.ts +0 -4
  349. package/dist/src/cli/skill/all.js +0 -11
  350. package/dist/src/cli/skill/get.d.ts +0 -6
  351. package/dist/src/cli/skill/get.js +0 -12
  352. package/dist/src/cli/skill/index.d.ts +0 -10
  353. package/dist/src/cli/skill/index.js +0 -34
  354. package/dist/src/cli/skill/list.d.ts +0 -4
  355. package/dist/src/cli/skill/list.js +0 -11
  356. package/dist/src/cli/skill/search.d.ts +0 -6
  357. package/dist/src/cli/skill/search.js +0 -12
  358. package/dist/src/cli/skill/views.d.ts +0 -6
  359. package/dist/src/cli/skill/views.js +0 -90
  360. package/dist/src/cli/snippet/_flags.d.ts +0 -57
  361. package/dist/src/cli/snippet/_flags.js +0 -123
  362. package/dist/src/cli/snippet/_resolve.d.ts +0 -4
  363. package/dist/src/cli/snippet/_resolve.js +0 -32
  364. package/dist/src/cli/snippet/_sync.d.ts +0 -5
  365. package/dist/src/cli/snippet/_sync.js +0 -54
  366. package/dist/src/cli/snippet/create.d.ts +0 -19
  367. package/dist/src/cli/snippet/create.js +0 -35
  368. package/dist/src/cli/snippet/delete.d.ts +0 -8
  369. package/dist/src/cli/snippet/delete.js +0 -28
  370. package/dist/src/cli/snippet/edit.d.ts +0 -7
  371. package/dist/src/cli/snippet/edit.js +0 -29
  372. package/dist/src/cli/snippet/get.d.ts +0 -6
  373. package/dist/src/cli/snippet/get.js +0 -12
  374. package/dist/src/cli/snippet/index.d.ts +0 -43
  375. package/dist/src/cli/snippet/index.js +0 -58
  376. package/dist/src/cli/snippet/list.d.ts +0 -9
  377. package/dist/src/cli/snippet/list.js +0 -20
  378. package/dist/src/cli/snippet/pull.d.ts +0 -8
  379. package/dist/src/cli/snippet/pull.js +0 -33
  380. package/dist/src/cli/snippet/push.d.ts +0 -10
  381. package/dist/src/cli/snippet/push.js +0 -31
  382. package/dist/src/cli/snippet/update.d.ts +0 -8
  383. package/dist/src/cli/snippet/update.js +0 -16
  384. package/dist/src/cli/topic/create.d.ts +0 -10
  385. package/dist/src/cli/topic/create.js +0 -24
  386. package/dist/src/cli/topic/delete.d.ts +0 -7
  387. package/dist/src/cli/topic/delete.js +0 -37
  388. package/dist/src/cli/topic/get.d.ts +0 -6
  389. package/dist/src/cli/topic/get.js +0 -15
  390. package/dist/src/cli/topic/index.d.ts +0 -20
  391. package/dist/src/cli/topic/index.js +0 -32
  392. package/dist/src/cli/topic/list.d.ts +0 -4
  393. package/dist/src/cli/topic/list.js +0 -10
  394. package/dist/src/cli/topic/update.d.ts +0 -11
  395. package/dist/src/cli/topic/update.js +0 -51
  396. package/dist/src/cli/ui/index.d.ts +0 -24
  397. package/dist/src/cli/ui/index.js +0 -83
  398. package/dist/src/cli/update/index.d.ts +0 -10
  399. package/dist/src/cli/update/index.js +0 -142
  400. package/dist/src/domain/admin-link.d.ts +0 -12
  401. package/dist/src/domain/admin-link.js +0 -45
  402. package/dist/src/domain/content-spec.d.ts +0 -20
  403. package/dist/src/domain/content-spec.js +0 -78
  404. package/dist/src/domain/envelope-compat.d.ts +0 -68
  405. package/dist/src/domain/envelope-compat.js +0 -121
  406. package/dist/src/domain/envelope.d.ts +0 -34
  407. package/dist/src/domain/envelope.js +0 -355
  408. package/dist/src/domain/errors.d.ts +0 -336
  409. package/dist/src/domain/errors.js +0 -239
  410. package/dist/src/domain/gate.d.ts +0 -14
  411. package/dist/src/domain/gate.js +0 -18
  412. package/dist/src/domain/payload.d.ts +0 -64
  413. package/dist/src/domain/payload.js +0 -237
  414. package/dist/src/domain/preflight-guards.d.ts +0 -54
  415. package/dist/src/domain/preflight-guards.js +0 -130
  416. package/dist/src/domain/runtime-flags.d.ts +0 -33
  417. package/dist/src/domain/runtime-flags.js +0 -166
  418. package/dist/src/domain/schema/api-envelope.d.ts +0 -67
  419. package/dist/src/domain/schema/api-envelope.js +0 -65
  420. package/dist/src/domain/schema/category.d.ts +0 -23
  421. package/dist/src/domain/schema/category.js +0 -19
  422. package/dist/src/domain/schema/config.d.ts +0 -13
  423. package/dist/src/domain/schema/config.js +0 -18
  424. package/dist/src/domain/schema/note.d.ts +0 -76
  425. package/dist/src/domain/schema/note.js +0 -35
  426. package/dist/src/domain/schema/page.d.ts +0 -40
  427. package/dist/src/domain/schema/page.js +0 -22
  428. package/dist/src/domain/schema/post.d.ts +0 -68
  429. package/dist/src/domain/schema/post.js +0 -35
  430. package/dist/src/domain/schema/profile.d.ts +0 -14
  431. package/dist/src/domain/schema/profile.js +0 -22
  432. package/dist/src/domain/schema/topic.d.ts +0 -24
  433. package/dist/src/domain/schema/topic.js +0 -16
  434. package/dist/src/domain/version.d.ts +0 -15
  435. package/dist/src/domain/version.js +0 -43
  436. package/dist/src/index.d.ts +0 -4
  437. package/dist/src/index.js +0 -8
  438. package/dist/src/layers/App.d.ts +0 -30
  439. package/dist/src/layers/App.js +0 -39
  440. package/dist/src/services/Ai/index.d.ts +0 -13
  441. package/dist/src/services/Ai/index.js +0 -127
  442. package/dist/src/services/Ai/overview.d.ts +0 -7
  443. package/dist/src/services/Ai/overview.js +0 -11
  444. package/dist/src/services/Ai/resources.d.ts +0 -7
  445. package/dist/src/services/Ai/resources.js +0 -59
  446. package/dist/src/services/Ai/shared.d.ts +0 -2
  447. package/dist/src/services/Ai/shared.js +0 -11
  448. package/dist/src/services/Ai/tasks.d.ts +0 -8
  449. package/dist/src/services/Ai/tasks.js +0 -144
  450. package/dist/src/services/Ai/types.d.ts +0 -130
  451. package/dist/src/services/Ai/types.js +0 -1
  452. package/dist/src/services/Api.d.ts +0 -67
  453. package/dist/src/services/Api.js +0 -348
  454. package/dist/src/services/Auth.d.ts +0 -101
  455. package/dist/src/services/Auth.js +0 -402
  456. package/dist/src/services/Backup.d.ts +0 -8
  457. package/dist/src/services/Backup.js +0 -4
  458. package/dist/src/services/Cache.d.ts +0 -8
  459. package/dist/src/services/Cache.js +0 -4
  460. package/dist/src/services/Comment.d.ts +0 -48
  461. package/dist/src/services/Comment.js +0 -102
  462. package/dist/src/services/Config.d.ts +0 -95
  463. package/dist/src/services/Config.js +0 -359
  464. package/dist/src/services/Editor.d.ts +0 -28
  465. package/dist/src/services/Editor.js +0 -95
  466. package/dist/src/services/Lexical.d.ts +0 -27
  467. package/dist/src/services/Lexical.js +0 -56
  468. package/dist/src/services/Migration.d.ts +0 -31
  469. package/dist/src/services/Migration.js +0 -177
  470. package/dist/src/services/Profile.d.ts +0 -29
  471. package/dist/src/services/Profile.js +0 -115
  472. package/dist/src/services/Renderer/content.d.ts +0 -16
  473. package/dist/src/services/Renderer/content.js +0 -110
  474. package/dist/src/services/Renderer/datetime.d.ts +0 -38
  475. package/dist/src/services/Renderer/datetime.js +0 -147
  476. package/dist/src/services/Renderer/errors.d.ts +0 -3
  477. package/dist/src/services/Renderer/errors.js +0 -59
  478. package/dist/src/services/Renderer/index.d.ts +0 -13
  479. package/dist/src/services/Renderer/index.js +0 -11
  480. package/dist/src/services/Renderer/lists.d.ts +0 -1
  481. package/dist/src/services/Renderer/lists.js +0 -101
  482. package/dist/src/services/Renderer/options.d.ts +0 -10
  483. package/dist/src/services/Renderer/options.js +0 -13
  484. package/dist/src/services/Renderer/primitives.d.ts +0 -4
  485. package/dist/src/services/Renderer/primitives.js +0 -12
  486. package/dist/src/services/Renderer/service.d.ts +0 -35
  487. package/dist/src/services/Renderer/service.js +0 -123
  488. package/dist/src/services/Renderer/view.d.ts +0 -16
  489. package/dist/src/services/Renderer/view.js +0 -1
  490. package/dist/src/services/Resolver.d.ts +0 -47
  491. package/dist/src/services/Resolver.js +0 -269
  492. package/dist/src/services/Skill.d.ts +0 -29
  493. package/dist/src/services/Skill.js +0 -421
  494. package/dist/src/services/UpdateNotifier.d.ts +0 -162
  495. package/dist/src/services/UpdateNotifier.js +0 -572
  496. package/dist/test/cli/ai/ai.test.d.ts +0 -1
  497. package/dist/test/cli/ai/ai.test.js +0 -507
  498. package/dist/test/cli/ai/verbs.test.d.ts +0 -1
  499. package/dist/test/cli/ai/verbs.test.js +0 -235
  500. package/dist/test/cli/auth/login.test.d.ts +0 -1
  501. package/dist/test/cli/auth/login.test.js +0 -236
  502. package/dist/test/cli/auth/logout-whoami.test.d.ts +0 -1
  503. package/dist/test/cli/auth/logout-whoami.test.js +0 -124
  504. package/dist/test/cli/auth/status.test.d.ts +0 -1
  505. package/dist/test/cli/auth/status.test.js +0 -90
  506. package/dist/test/cli/category/category.test.d.ts +0 -1
  507. package/dist/test/cli/category/category.test.js +0 -175
  508. package/dist/test/cli/comment/comment.test.d.ts +0 -1
  509. package/dist/test/cli/comment/comment.test.js +0 -445
  510. package/dist/test/cli/config/config.test.d.ts +0 -1
  511. package/dist/test/cli/config/config.test.js +0 -281
  512. package/dist/test/cli/edit-roundtrip.test.d.ts +0 -1
  513. package/dist/test/cli/edit-roundtrip.test.js +0 -259
  514. package/dist/test/cli/file/file.test.d.ts +0 -1
  515. package/dist/test/cli/file/file.test.js +0 -185
  516. package/dist/test/cli/help.test.d.ts +0 -1
  517. package/dist/test/cli/help.test.js +0 -289
  518. package/dist/test/cli/note/create.test.d.ts +0 -1
  519. package/dist/test/cli/note/create.test.js +0 -155
  520. package/dist/test/cli/note/list.test.d.ts +0 -1
  521. package/dist/test/cli/note/list.test.js +0 -115
  522. package/dist/test/cli/note/publish.test.d.ts +0 -1
  523. package/dist/test/cli/note/publish.test.js +0 -123
  524. package/dist/test/cli/page/page.test.d.ts +0 -1
  525. package/dist/test/cli/page/page.test.js +0 -185
  526. package/dist/test/cli/post/create.test.d.ts +0 -1
  527. package/dist/test/cli/post/create.test.js +0 -172
  528. package/dist/test/cli/post/list.test.d.ts +0 -1
  529. package/dist/test/cli/post/list.test.js +0 -133
  530. package/dist/test/cli/post/publish.test.d.ts +0 -1
  531. package/dist/test/cli/post/publish.test.js +0 -139
  532. package/dist/test/cli/post/stage-apply.test.d.ts +0 -1
  533. package/dist/test/cli/post/stage-apply.test.js +0 -215
  534. package/dist/test/cli/post/update.test.d.ts +0 -1
  535. package/dist/test/cli/post/update.test.js +0 -160
  536. package/dist/test/cli/post-note-crud.test.d.ts +0 -1
  537. package/dist/test/cli/post-note-crud.test.js +0 -362
  538. package/dist/test/cli/profile/ls.test.d.ts +0 -1
  539. package/dist/test/cli/profile/ls.test.js +0 -93
  540. package/dist/test/cli/profile/mark-use.test.d.ts +0 -1
  541. package/dist/test/cli/profile/mark-use.test.js +0 -216
  542. package/dist/test/cli/project-crud.test.d.ts +0 -1
  543. package/dist/test/cli/project-crud.test.js +0 -315
  544. package/dist/test/cli/render/lexical.test.d.ts +0 -1
  545. package/dist/test/cli/render/lexical.test.js +0 -216
  546. package/dist/test/cli/render/markdown.test.d.ts +0 -1
  547. package/dist/test/cli/render/markdown.test.js +0 -39
  548. package/dist/test/cli/snippet-crud.test.d.ts +0 -1
  549. package/dist/test/cli/snippet-crud.test.js +0 -293
  550. package/dist/test/cli/topic/topic.test.d.ts +0 -1
  551. package/dist/test/cli/topic/topic.test.js +0 -181
  552. package/dist/test/cli/update.test.d.ts +0 -1
  553. package/dist/test/cli/update.test.js +0 -395
  554. package/dist/test/domain/content-spec.test.d.ts +0 -1
  555. package/dist/test/domain/content-spec.test.js +0 -126
  556. package/dist/test/domain/envelope-compat.test.d.ts +0 -1
  557. package/dist/test/domain/envelope-compat.test.js +0 -126
  558. package/dist/test/domain/envelope.test.d.ts +0 -1
  559. package/dist/test/domain/envelope.test.js +0 -149
  560. package/dist/test/domain/errors.test.d.ts +0 -1
  561. package/dist/test/domain/errors.test.js +0 -127
  562. package/dist/test/domain/gate.test.d.ts +0 -1
  563. package/dist/test/domain/gate.test.js +0 -128
  564. package/dist/test/domain/payload.test.d.ts +0 -1
  565. package/dist/test/domain/payload.test.js +0 -259
  566. package/dist/test/helper/test-fs.d.ts +0 -24
  567. package/dist/test/helper/test-fs.js +0 -161
  568. package/dist/test/helper/test-http.d.ts +0 -31
  569. package/dist/test/helper/test-http.js +0 -66
  570. package/dist/test/integration/_helpers.d.ts +0 -5
  571. package/dist/test/integration/_helpers.js +0 -24
  572. package/dist/test/integration/cli-error-envelope.test.d.ts +0 -1
  573. package/dist/test/integration/cli-error-envelope.test.js +0 -137
  574. package/dist/test/integration/cli-help-render.test.d.ts +0 -1
  575. package/dist/test/integration/cli-help-render.test.js +0 -149
  576. package/dist/test/integration/cli-help.test.d.ts +0 -1
  577. package/dist/test/integration/cli-help.test.js +0 -67
  578. package/dist/test/integration/cli-post-list.test.d.ts +0 -1
  579. package/dist/test/integration/cli-post-list.test.js +0 -140
  580. package/dist/test/integration/cli-skill.test.d.ts +0 -1
  581. package/dist/test/integration/cli-skill.test.js +0 -74
  582. package/dist/test/integration/cli-version.test.d.ts +0 -1
  583. package/dist/test/integration/cli-version.test.js +0 -37
  584. package/dist/test/services/Api.test.d.ts +0 -1
  585. package/dist/test/services/Api.test.js +0 -553
  586. package/dist/test/services/Auth.test.d.ts +0 -1
  587. package/dist/test/services/Auth.test.js +0 -650
  588. package/dist/test/services/Config.test.d.ts +0 -1
  589. package/dist/test/services/Config.test.js +0 -510
  590. package/dist/test/services/Datetime.test.d.ts +0 -1
  591. package/dist/test/services/Datetime.test.js +0 -113
  592. package/dist/test/services/Editor.test.d.ts +0 -1
  593. package/dist/test/services/Editor.test.js +0 -205
  594. package/dist/test/services/Lexical.errors.test.d.ts +0 -1
  595. package/dist/test/services/Lexical.errors.test.js +0 -60
  596. package/dist/test/services/Lexical.test.d.ts +0 -1
  597. package/dist/test/services/Lexical.test.js +0 -68
  598. package/dist/test/services/Migration.test.d.ts +0 -1
  599. package/dist/test/services/Migration.test.js +0 -376
  600. package/dist/test/services/Profile.test.d.ts +0 -1
  601. package/dist/test/services/Profile.test.js +0 -277
  602. package/dist/test/services/Renderer.test.d.ts +0 -1
  603. package/dist/test/services/Renderer.test.js +0 -538
  604. package/dist/test/services/Resolver.test.d.ts +0 -1
  605. package/dist/test/services/Resolver.test.js +0 -320
  606. package/dist/test/services/Skill.test.d.ts +0 -1
  607. package/dist/test/services/Skill.test.js +0 -261
  608. package/dist/test/services/UpdateNotifier.spawn.test.d.ts +0 -1
  609. package/dist/test/services/UpdateNotifier.spawn.test.js +0 -73
  610. package/dist/test/services/UpdateNotifier.test.d.ts +0 -1
  611. package/dist/test/services/UpdateNotifier.test.js +0 -912
@@ -1,402 +0,0 @@
1
- import { HttpClient, HttpClientRequest } from '@effect/platform';
2
- import { Context, Effect, Layer } from 'effect';
3
- import { AuthDenied, AuthExpired, AuthMissing, AuthProbe, Generic, NetworkDns, NetworkRefused, NetworkTimeout, } from '../domain/errors';
4
- import { Config } from './Config';
5
- export const SUPPORTED_API_VERSIONS = [3, 2];
6
- export class Auth extends Context.Tag('Auth')() {
7
- /** Build the Auth Layer; depends on `Config` and `HttpClient`. */
8
- static Default = Layer.effect(Auth, Effect.gen(function* () {
9
- const http = yield* HttpClient.HttpClient;
10
- const config = yield* Config;
11
- return makeAuthService(http, config);
12
- }));
13
- }
14
- // ---------------------------------------------------------------------------
15
- // Implementation
16
- // ---------------------------------------------------------------------------
17
- const TOKEN_EXPIRY_BUFFER_MS = 60_000;
18
- export const isExpiringSoon = (cred, bufferMs = TOKEN_EXPIRY_BUFFER_MS) => cred.expires_at < Date.now() + bufferMs;
19
- export const toCredentials = (resp) => ({
20
- access_token: resp.access_token,
21
- refresh_token: resp.refresh_token,
22
- expires_at: Date.now() + resp.expires_in * 1000,
23
- user: resp.user,
24
- });
25
- function mapTransportError(err, url) {
26
- const cause = err;
27
- const code = cause?.code ?? cause?.cause?.code;
28
- if (cause?.name === 'AbortError' || code === 'ABORT_ERR') {
29
- return new Generic({ message: 'request aborted', details: { url } });
30
- }
31
- if (code === 'ENOTFOUND' || code === 'EAI_AGAIN') {
32
- let host = url;
33
- try {
34
- host = new URL(url).host;
35
- }
36
- catch { }
37
- return new NetworkDns({
38
- host,
39
- message: 'dns lookup failed',
40
- details: { url },
41
- });
42
- }
43
- if (code === 'ECONNREFUSED') {
44
- return new NetworkRefused({ url, message: 'connection refused' });
45
- }
46
- if (code === 'ETIMEDOUT' || code === 'UND_ERR_CONNECT_TIMEOUT') {
47
- return new NetworkTimeout({ url, message: 'network request timed out' });
48
- }
49
- return new Generic({
50
- message: cause?.message ?? `request failed: ${url}`,
51
- details: { url, cause: code },
52
- });
53
- }
54
- function jsonResponseBody(res) {
55
- return res.json.pipe(Effect.catchAll(() => Effect.succeed(null)));
56
- }
57
- function makeAuthService(http, config) {
58
- const sendJson = (url, method, body, headers) => Effect.gen(function* () {
59
- let req = HttpClientRequest.make(method)(url, { headers });
60
- if (body !== undefined && method !== 'GET') {
61
- req = yield* HttpClientRequest.bodyJson(req, body).pipe(Effect.mapError((err) => new Generic({ message: 'failed to encode body', cause: err })));
62
- }
63
- return yield* http.execute(req).pipe(
64
- // ResponseError is just a status filter — we don't apply filterStatusOk,
65
- // so transport-level failures (RequestError) are what we map here.
66
- Effect.catchTag('RequestError', (rerr) => Effect.fail(mapTransportError(rerr.cause ?? rerr, url))), Effect.catchTag('ResponseError', (rerr) => Effect.succeed(rerr.response)));
67
- });
68
- const probe = (apiUrl) => Effect.gen(function* () {
69
- const candidates = [
70
- ...SUPPORTED_API_VERSIONS.map((v) => ({
71
- prefix: `/api/v${v}/auth`,
72
- version: v,
73
- })),
74
- { prefix: '/auth', version: null },
75
- ];
76
- let lastTransport = null;
77
- const attempted = [];
78
- for (const cand of candidates) {
79
- const probeUrl = `${apiUrl}${cand.prefix}/ok`;
80
- const result = yield* sendJson(probeUrl, 'GET', undefined, {
81
- accept: 'application/json',
82
- }).pipe(Effect.either);
83
- if (result._tag === 'Left') {
84
- lastTransport = result.left;
85
- continue;
86
- }
87
- const res = result.right;
88
- attempted.push({ url: probeUrl, status: res.status });
89
- if (res.status >= 200 && res.status < 300) {
90
- const apiVersion = cand.version ?? SUPPORTED_API_VERSIONS[0];
91
- const apiBase = cand.prefix === '/auth' ? apiUrl : `${apiUrl}/api/v${apiVersion}`;
92
- const authBase = `${apiUrl}${cand.prefix}`;
93
- return { apiUrl, apiBase, authBase, apiVersion };
94
- }
95
- }
96
- if (lastTransport && lastTransport._tag !== 'Generic') {
97
- return yield* Effect.fail(lastTransport);
98
- }
99
- const tried = attempted.length > 0
100
- ? attempted.map((a) => `${a.url} → ${a.status}`).join(', ')
101
- : 'no responses';
102
- return yield* Effect.fail(new AuthProbe({
103
- message: 'cannot detect auth endpoint',
104
- hint: `tried: ${tried}. supply the site root (e.g. https://blog.example.com), not the API path. verify the server is reachable and runs a supported API version (${SUPPORTED_API_VERSIONS.join(', ')}).`,
105
- }));
106
- });
107
- const requestDeviceCode = (authBase, clientId, scope = 'openid profile email') => Effect.gen(function* () {
108
- const url = `${authBase}/device/code`;
109
- const res = yield* sendJson(url, 'POST', { client_id: clientId, scope }, { 'content-type': 'application/json', accept: 'application/json' }).pipe(Effect.mapError((err) => {
110
- if (err._tag === 'Generic')
111
- return err;
112
- // transport errors collapse into AuthDenied — matches legacy where
113
- // network failure during device-code request surfaces as auth.denied.
114
- return new AuthDenied({
115
- message: 'device code request failed',
116
- details: err,
117
- });
118
- }));
119
- const body = yield* jsonResponseBody(res);
120
- if (res.status >= 200 && res.status < 300) {
121
- return body;
122
- }
123
- return yield* Effect.fail(new AuthDenied({
124
- message: `device code request failed (${res.status})`,
125
- details: body,
126
- }));
127
- });
128
- const pollDeviceToken = (authBase, clientId, deviceCode, opts) => Effect.tryPromise({
129
- try: async () => {
130
- const url = `${authBase}/device/token`;
131
- const deadline = Date.now() + opts.expiresInSec * 1000;
132
- let intervalMs = Math.max(1, opts.intervalSec) * 1000;
133
- while (Date.now() < deadline) {
134
- if (opts.signal?.aborted) {
135
- throw new AuthDenied({ message: 'aborted by user' });
136
- }
137
- await sleep(intervalMs, opts.signal);
138
- const res = await fetchJson(url, {
139
- method: 'POST',
140
- headers: {
141
- 'content-type': 'application/json',
142
- accept: 'application/json',
143
- },
144
- body: JSON.stringify({
145
- grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
146
- device_code: deviceCode,
147
- client_id: clientId,
148
- }),
149
- signal: opts.signal,
150
- });
151
- const body = res.body;
152
- if (res.ok && body?.access_token) {
153
- return body;
154
- }
155
- const err = body?.error;
156
- if (err === 'authorization_pending') {
157
- opts.onTick?.('pending');
158
- continue;
159
- }
160
- if (err === 'slow_down') {
161
- intervalMs += 5000;
162
- opts.onTick?.('slow_down');
163
- continue;
164
- }
165
- if (err === 'access_denied') {
166
- throw new AuthDenied({
167
- message: 'user denied the authorization request',
168
- });
169
- }
170
- if (err === 'expired_token') {
171
- throw new AuthExpired({
172
- message: 'device code expired before authorization completed',
173
- hint: 'run `mxs auth login` again',
174
- });
175
- }
176
- throw new AuthDenied({
177
- message: `device token request failed (${res.status})`,
178
- details: body,
179
- });
180
- }
181
- throw new AuthExpired({
182
- message: 'device authorization timed out',
183
- hint: 'run `mxs auth login` again',
184
- });
185
- },
186
- catch: (err) => {
187
- if (err instanceof AuthDenied)
188
- return err;
189
- if (err instanceof AuthExpired)
190
- return err;
191
- return new Generic({
192
- message: 'device token polling failed',
193
- cause: err,
194
- });
195
- },
196
- });
197
- const refresh = (authBase, clientId, cred) => Effect.tryPromise({
198
- try: async () => {
199
- if (!cred.refresh_token) {
200
- return refreshSessionToken(authBase, cred);
201
- }
202
- const res = await fetchJson(`${authBase}/token`, {
203
- method: 'POST',
204
- headers: {
205
- 'content-type': 'application/json',
206
- accept: 'application/json',
207
- },
208
- body: JSON.stringify({
209
- grant_type: 'refresh_token',
210
- refresh_token: cred.refresh_token,
211
- client_id: clientId,
212
- }),
213
- });
214
- if (!res.ok)
215
- return null;
216
- const body = res.body;
217
- if (!body?.access_token)
218
- return null;
219
- return {
220
- access_token: body.access_token,
221
- refresh_token: body.refresh_token ?? cred.refresh_token,
222
- expires_at: Date.now() + body.expires_in * 1000,
223
- user: body.user ?? cred.user,
224
- };
225
- },
226
- catch: (err) => new Generic({ message: 'refresh failed', cause: err }),
227
- });
228
- const ensureFresh = (resolved) => Effect.gen(function* () {
229
- if (!resolved.profileName) {
230
- return yield* Effect.fail(new AuthMissing({
231
- message: 'not authenticated',
232
- hint: 'run `mxs auth login`',
233
- }));
234
- }
235
- const cred = yield* config.readProfileCredentials(resolved.profileName);
236
- if (!cred) {
237
- return yield* Effect.fail(new AuthMissing({
238
- message: 'not authenticated',
239
- hint: 'run `mxs auth login`',
240
- }));
241
- }
242
- if (!isExpiringSoon(cred))
243
- return cred;
244
- const refreshed = yield* refresh(resolved.authBase, resolved.clientId, cred);
245
- if (!refreshed)
246
- return cred;
247
- yield* config.writeProfileCredentials(resolved.profileName, refreshed);
248
- return refreshed;
249
- });
250
- const login = () => Effect.fail(new Generic({
251
- message: 'Auth.login is a Wave 2 surface; compose probe + requestDeviceCode + pollDeviceToken explicitly',
252
- }));
253
- const logout = (name) => Effect.gen(function* () {
254
- const target = name ??
255
- (yield* config.resolve().pipe(Effect.map((r) => r.profileName), Effect.catchAll(() => Effect.succeed(null))));
256
- if (!target)
257
- return;
258
- yield* config.deleteProfileCredentials(target);
259
- });
260
- const whoami = Effect.gen(function* () {
261
- const resolved = yield* config.resolve().pipe(Effect.mapError((err) => new Generic({
262
- message: 'failed to resolve config',
263
- cause: err,
264
- })));
265
- const fresh = yield* ensureFresh(resolved);
266
- return {
267
- id: fresh.user?.id,
268
- email: fresh.user?.email,
269
- name: fresh.user?.name,
270
- expiresAt: fresh.expires_at,
271
- };
272
- });
273
- const status = Effect.gen(function* () {
274
- const resolved = yield* config.resolve().pipe(Effect.mapError((err) => new Generic({
275
- message: 'failed to resolve config',
276
- cause: err,
277
- })));
278
- if (!resolved.profileName) {
279
- return {
280
- authenticated: false,
281
- apiUrl: resolved.apiUrl,
282
- profile: null,
283
- };
284
- }
285
- const cred = yield* config.readProfileCredentials(resolved.profileName);
286
- if (!cred) {
287
- return {
288
- authenticated: false,
289
- apiUrl: resolved.apiUrl,
290
- profile: resolved.profileName,
291
- };
292
- }
293
- return {
294
- authenticated: true,
295
- apiUrl: resolved.apiUrl,
296
- profile: resolved.profileName,
297
- expiresAt: cred.expires_at,
298
- user: {
299
- id: cred.user?.id,
300
- email: cred.user?.email,
301
- name: cred.user?.name,
302
- expiresAt: cred.expires_at,
303
- },
304
- };
305
- });
306
- const enrichUser = (profileName, authBase, cred) => Effect.gen(function* () {
307
- if (cred.user?.id || cred.user?.email || cred.user?.name)
308
- return cred;
309
- const fetched = yield* Effect.tryPromise({
310
- try: () => fetchSessionUser(authBase, cred),
311
- catch: () => null,
312
- }).pipe(Effect.catchAll(() => Effect.succeed(null)));
313
- if (!fetched)
314
- return cred;
315
- const updated = { ...cred, user: fetched };
316
- yield* config.writeProfileCredentials(profileName, updated);
317
- return updated;
318
- });
319
- return {
320
- probe,
321
- requestDeviceCode,
322
- pollDeviceToken,
323
- refresh,
324
- login,
325
- logout,
326
- whoami,
327
- status,
328
- ensureFresh,
329
- enrichUser,
330
- };
331
- }
332
- async function fetchJson(url, init) {
333
- const res = await globalThis.fetch(url, init);
334
- let body;
335
- try {
336
- body = await res.json();
337
- }
338
- catch {
339
- body = null;
340
- }
341
- return { ok: res.ok, status: res.status, headers: res.headers, body };
342
- }
343
- function sleep(ms, signal) {
344
- return new Promise((resolve, reject) => {
345
- if (signal?.aborted)
346
- return reject(new Error('aborted'));
347
- const timer = setTimeout(() => {
348
- if (signal)
349
- signal.removeEventListener('abort', onAbort);
350
- resolve();
351
- }, ms);
352
- const onAbort = () => {
353
- clearTimeout(timer);
354
- reject(new Error('aborted'));
355
- };
356
- signal?.addEventListener('abort', onAbort, { once: true });
357
- });
358
- }
359
- async function fetchSessionUser(authBase, cred) {
360
- const res = await globalThis.fetch(`${authBase}/get-session`, {
361
- method: 'GET',
362
- headers: {
363
- accept: 'application/json',
364
- authorization: `Bearer ${cred.access_token}`,
365
- },
366
- });
367
- if (!res.ok)
368
- return null;
369
- const body = (await res.json().catch(() => null));
370
- return body?.user ?? null;
371
- }
372
- async function refreshSessionToken(authBase, cred) {
373
- const res = await globalThis.fetch(`${authBase}/get-session`, {
374
- method: 'GET',
375
- headers: {
376
- accept: 'application/json',
377
- authorization: `Bearer ${cred.access_token}`,
378
- },
379
- });
380
- if (!res.ok)
381
- return null;
382
- const body = (await res.json().catch(() => null));
383
- const expiresAt = normalizeExpiresAt(body?.session?.expiresAt);
384
- if (!expiresAt || expiresAt <= cred.expires_at)
385
- return null;
386
- return {
387
- access_token: res.headers.get('set-auth-token') ?? cred.access_token,
388
- refresh_token: cred.refresh_token,
389
- expires_at: expiresAt,
390
- user: body?.user ?? cred.user,
391
- };
392
- }
393
- function normalizeExpiresAt(value) {
394
- if (value === undefined)
395
- return null;
396
- const time = value instanceof Date
397
- ? value.getTime()
398
- : typeof value === 'number'
399
- ? value
400
- : new Date(value).getTime();
401
- return Number.isFinite(time) ? time : null;
402
- }
@@ -1,8 +0,0 @@
1
- import { Context, Layer } from 'effect';
2
- export interface BackupService {
3
- }
4
- declare const Backup_base: Context.TagClass<Backup, "Backup", BackupService>;
5
- export declare class Backup extends Backup_base {
6
- static Default: Layer.Layer<Backup>;
7
- }
8
- export {};
@@ -1,4 +0,0 @@
1
- import { Context, Effect, Layer } from 'effect';
2
- export class Backup extends Context.Tag('Backup')() {
3
- static Default = Layer.effect(Backup, Effect.die('Backup service is a v2 placeholder'));
4
- }
@@ -1,8 +0,0 @@
1
- import { Context, Layer } from 'effect';
2
- export interface CacheService {
3
- }
4
- declare const Cache_base: Context.TagClass<Cache, "Cache", CacheService>;
5
- export declare class Cache extends Cache_base {
6
- static Default: Layer.Layer<Cache>;
7
- }
8
- export {};
@@ -1,4 +0,0 @@
1
- import { Context, Effect, Layer } from 'effect';
2
- export class Cache extends Context.Tag('Cache')() {
3
- static Default = Layer.effect(Cache, Effect.die('Cache service is a v3 placeholder'));
4
- }
@@ -1,48 +0,0 @@
1
- import { Context, Effect, Layer } from 'effect';
2
- import type { ApiError } from './Api';
3
- import { Api } from './Api';
4
- export type CommentStateName = 'unread' | 'read' | 'junk';
5
- export declare const COMMENT_STATE_NAMES: readonly CommentStateName[];
6
- export declare const stateNameToCode: (s: CommentStateName) => number;
7
- export declare const stateCodeToName: (n: number) => CommentStateName | undefined;
8
- export interface CommentListOptions {
9
- readonly page?: number;
10
- readonly size?: number;
11
- readonly state?: CommentStateName;
12
- readonly all?: boolean;
13
- }
14
- export interface CommentListResponse {
15
- readonly data: ReadonlyArray<unknown>;
16
- readonly pagination?: Record<string, unknown>;
17
- readonly readers?: Record<string, unknown>;
18
- }
19
- export interface CommentBatchFilter {
20
- readonly currentState?: CommentStateName;
21
- }
22
- export interface CommentReplyInput {
23
- readonly text: string;
24
- readonly isWhispers?: boolean;
25
- }
26
- export interface CommentService {
27
- readonly list: (opts: CommentListOptions) => Effect.Effect<CommentListResponse, ApiError>;
28
- readonly get: (id: string) => Effect.Effect<unknown, ApiError>;
29
- /** Reply to a comment as the owner. Routes through `/comments/owner-reply/:id`. */
30
- readonly reply: (parentId: string, body: CommentReplyInput) => Effect.Effect<unknown, ApiError>;
31
- /** Mark one or more comments as read (state=1). Routes through batch endpoint. */
32
- readonly approve: (ids: ReadonlyArray<string>) => Effect.Effect<void, ApiError>;
33
- /** Mark one or more comments as junk (state=2). Routes through batch endpoint. */
34
- readonly reject: (ids: ReadonlyArray<string>) => Effect.Effect<void, ApiError>;
35
- /** Soft-delete one or more comments. Routes through batch endpoint. */
36
- readonly delete: (ids: ReadonlyArray<string>) => Effect.Effect<void, ApiError>;
37
- /** Approve all comments matching `filter` (optional currentState). */
38
- readonly approveAll: (filter: CommentBatchFilter) => Effect.Effect<void, ApiError>;
39
- /** Reject all comments matching `filter` (optional currentState). */
40
- readonly rejectAll: (filter: CommentBatchFilter) => Effect.Effect<void, ApiError>;
41
- /** Soft-delete all comments matching `filter` (optional currentState). */
42
- readonly deleteAll: (filter: CommentBatchFilter) => Effect.Effect<void, ApiError>;
43
- }
44
- declare const Comment_base: Context.TagClass<Comment, "Comment", CommentService>;
45
- export declare class Comment extends Comment_base {
46
- static Default: Layer.Layer<Comment, never, Api>;
47
- }
48
- export {};
@@ -1,102 +0,0 @@
1
- import { Context, Effect, Layer } from 'effect';
2
- import { Api } from './Api';
3
- export const COMMENT_STATE_NAMES = [
4
- 'unread',
5
- 'read',
6
- 'junk',
7
- ];
8
- const stateToCode = {
9
- unread: 0,
10
- read: 1,
11
- junk: 2,
12
- };
13
- const codeToState = {
14
- 0: 'unread',
15
- 1: 'read',
16
- 2: 'junk',
17
- };
18
- export const stateNameToCode = (s) => stateToCode[s];
19
- export const stateCodeToName = (n) => codeToState[n];
20
- // ---------------------------------------------------------------------------
21
- // Implementation
22
- // ---------------------------------------------------------------------------
23
- const mergeListResponses = (responses) => {
24
- const data = [];
25
- const readers = {};
26
- let total = 0;
27
- for (const r of responses) {
28
- if (Array.isArray(r.data))
29
- data.push(...r.data);
30
- if (r.readers)
31
- Object.assign(readers, r.readers);
32
- const t = r.pagination && typeof r.pagination.total === 'number'
33
- ? r.pagination.total
34
- : 0;
35
- total += t;
36
- }
37
- return {
38
- data,
39
- pagination: { total, size: data.length, page: 1, totalPages: 1 },
40
- readers,
41
- };
42
- };
43
- const makeService = (api) => {
44
- const requestList = (state, page, size) => api.request('/comments', {
45
- query: { page, size, state: stateNameToCode(state) },
46
- });
47
- const patchBatchState = (body) => Effect.asVoid(api.request('/comments/batch/state', {
48
- method: 'PATCH',
49
- body,
50
- }));
51
- const deleteBatch = (body) => Effect.asVoid(api.request('/comments/batch', {
52
- method: 'DELETE',
53
- body,
54
- }));
55
- return {
56
- list: (opts) => {
57
- if (opts.all) {
58
- return Effect.all(COMMENT_STATE_NAMES.map((s) => requestList(s, opts.page, opts.size)), { concurrency: 3 }).pipe(Effect.map(mergeListResponses));
59
- }
60
- return requestList(opts.state ?? 'unread', opts.page, opts.size);
61
- },
62
- get: (id) => api.request(`/comments/${id}`),
63
- reply: (parentId, body) => api.request(`/comments/owner-reply/${parentId}`, {
64
- method: 'POST',
65
- body: {
66
- text: body.text,
67
- ...(body.isWhispers !== undefined
68
- ? { isWhispers: body.isWhispers }
69
- : {}),
70
- },
71
- }),
72
- approve: (ids) => patchBatchState({ ids: [...ids], state: stateToCode.read }),
73
- reject: (ids) => patchBatchState({ ids: [...ids], state: stateToCode.junk }),
74
- delete: (ids) => deleteBatch({ ids: [...ids] }),
75
- approveAll: (filter) => patchBatchState({
76
- all: true,
77
- state: stateToCode.read,
78
- currentState: filter.currentState !== undefined
79
- ? stateNameToCode(filter.currentState)
80
- : undefined,
81
- }),
82
- rejectAll: (filter) => patchBatchState({
83
- all: true,
84
- state: stateToCode.junk,
85
- currentState: filter.currentState !== undefined
86
- ? stateNameToCode(filter.currentState)
87
- : undefined,
88
- }),
89
- deleteAll: (filter) => deleteBatch({
90
- all: true,
91
- state: filter.currentState !== undefined
92
- ? stateNameToCode(filter.currentState)
93
- : undefined,
94
- }),
95
- };
96
- };
97
- export class Comment extends Context.Tag('Comment')() {
98
- static Default = Layer.effect(Comment, Effect.gen(function* () {
99
- const api = yield* Api;
100
- return makeService(api);
101
- }));
102
- }
@@ -1,95 +0,0 @@
1
- import { FileSystem, Path } from '@effect/platform';
2
- import { Context, Effect, Layer } from 'effect';
3
- import type { ConfigMigrationFailed } from '../domain/errors';
4
- import { ConfigMissingApiUrl, Generic, ProfileNotFound } from '../domain/errors';
5
- export interface ConfigShape {
6
- readonly api_url?: string;
7
- readonly api_version?: number;
8
- readonly production?: boolean;
9
- }
10
- export interface CredentialsShape {
11
- readonly access_token: string;
12
- readonly refresh_token?: string;
13
- readonly expires_at: number;
14
- readonly user?: {
15
- readonly id?: string;
16
- readonly email?: string;
17
- readonly name?: string;
18
- };
19
- }
20
- export interface ResolvedConfig {
21
- readonly apiUrl: string;
22
- readonly apiBase: string;
23
- readonly authBase: string;
24
- readonly apiVersion: number;
25
- readonly clientId: string;
26
- readonly token?: string;
27
- readonly apiKey?: string;
28
- readonly configPath: string;
29
- readonly credentialsPath: string;
30
- readonly profileName: string | null;
31
- readonly isProduction: boolean;
32
- readonly profileExplicit: boolean;
33
- readonly urlOverridden: boolean;
34
- }
35
- export interface StoreOverrides {
36
- readonly apiUrl?: string;
37
- readonly token?: string;
38
- readonly apiKey?: string;
39
- readonly profile?: string;
40
- }
41
- export declare const DEFAULT_CLIENT_ID = "mxs-cli";
42
- export declare const LEGACY_CONFIG_FIELDS: readonly ["api_base", "auth_base", "client_id"];
43
- export declare const LOCAL_DEV_ENV = "MXS_CLI_LOCAL_DEV";
44
- export declare const LOCAL_DEV_API_URL_ENV = "MXS_CLI_LOCAL_DEV_API_URL";
45
- export declare const LOCAL_DEV_PROFILE_NAME = "local-dev";
46
- export declare const LOCAL_DEV_API_URL_DEFAULT = "http://localhost:2333";
47
- export interface LocalDevProfileInput {
48
- readonly profileOverride?: string;
49
- readonly envProfile?: string;
50
- readonly apiUrlOverride?: string;
51
- readonly envApiUrl?: string;
52
- readonly currentProfile?: string | null;
53
- }
54
- export declare const isLocalDevEnabled: () => boolean;
55
- export declare const getLocalDevApiUrl: () => string;
56
- export declare const shouldUseLocalDev: (input: LocalDevProfileInput) => boolean;
57
- export declare const stripLegacyConfigFields: (cfg: Record<string, unknown>) => ConfigShape;
58
- export interface ParsedApiUrl {
59
- readonly baseUrl: string;
60
- readonly apiVersion?: number;
61
- }
62
- export declare const parseApiUrl: (input: string) => Effect.Effect<ParsedApiUrl, ConfigMissingApiUrl>;
63
- export declare const normalizeApiUrl: (input: string) => Effect.Effect<string, ConfigMissingApiUrl>;
64
- export interface ConfigService {
65
- readonly getConfigDir: Effect.Effect<string>;
66
- readonly getProfilesDir: Effect.Effect<string>;
67
- readonly getProfileDir: (name: string) => Effect.Effect<string>;
68
- readonly getProfileConfigPath: (name: string) => Effect.Effect<string>;
69
- readonly getProfileCredentialsPath: (name: string) => Effect.Effect<string>;
70
- readonly getCurrentPath: Effect.Effect<string>;
71
- readonly getLegacyConfigPath: Effect.Effect<string>;
72
- readonly getLegacyCredentialsPath: Effect.Effect<string>;
73
- readonly readProfileConfig: (name: string) => Effect.Effect<ConfigShape, ProfileNotFound | Generic>;
74
- readonly writeProfileConfig: (name: string, cfg: ConfigShape) => Effect.Effect<void, Generic>;
75
- readonly updateProfileConfig: (name: string, update: (prev: ConfigShape) => ConfigShape) => Effect.Effect<ConfigShape, ProfileNotFound | Generic>;
76
- readonly readProfileCredentials: (name: string) => Effect.Effect<CredentialsShape | null, Generic>;
77
- readonly writeProfileCredentials: (name: string, creds: CredentialsShape) => Effect.Effect<void, Generic>;
78
- readonly deleteProfileCredentials: (name: string) => Effect.Effect<void, Generic>;
79
- readonly readLegacyConfig: Effect.Effect<ConfigShape, Generic>;
80
- readonly readLegacyConfigRaw: Effect.Effect<Record<string, unknown> | null, Generic>;
81
- readonly readLegacyCredentialsRaw: Effect.Effect<Record<string, unknown> | null, Generic>;
82
- readonly deleteLegacyConfig: Effect.Effect<void, Generic>;
83
- readonly deleteLegacyCredentials: Effect.Effect<void, Generic>;
84
- readonly readCurrent: Effect.Effect<string | null, Generic>;
85
- readonly writeCurrent: (name: string) => Effect.Effect<void, Generic>;
86
- readonly listProfileDirs: Effect.Effect<readonly string[], Generic>;
87
- readonly profileExists: (name: string) => Effect.Effect<boolean, Generic>;
88
- readonly removeProfileDir: (name: string) => Effect.Effect<void, Generic>;
89
- readonly resolve: (overrides?: StoreOverrides) => Effect.Effect<ResolvedConfig, ConfigMissingApiUrl | ProfileNotFound | ConfigMigrationFailed | Generic>;
90
- }
91
- declare const Config_base: Context.TagClass<Config, "Config", ConfigService>;
92
- export declare class Config extends Config_base {
93
- static Default: Layer.Layer<Config, never, FileSystem.FileSystem | Path.Path>;
94
- }
95
- export {};