@xano/sdk 1.0.0

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 (336) hide show
  1. package/CHANGELOG.md +788 -0
  2. package/LICENSE +21 -0
  3. package/README.md +541 -0
  4. package/dist/.build-fingerprint +1 -0
  5. package/dist/agent-file-refresh-ZEMK33AX.js +38 -0
  6. package/dist/answer-shape-K67TAAPY.js +33 -0
  7. package/dist/backend-dir-2U53CIAL.js +39 -0
  8. package/dist/backend-slot-7QXW2QYC.js +28 -0
  9. package/dist/bin.d.ts +1 -0
  10. package/dist/bin.js +255 -0
  11. package/dist/branch-NCRNWQBQ.js +61 -0
  12. package/dist/branch-commands-ACIRCEQJ.js +79 -0
  13. package/dist/bundle.d.ts +223 -0
  14. package/dist/bundle.js +153 -0
  15. package/dist/capture-WAXPD7DR.js +41 -0
  16. package/dist/chunk-27GWNP2I.js +23 -0
  17. package/dist/chunk-2CMJZDCL.js +177 -0
  18. package/dist/chunk-2EZ3ZJZZ.js +302 -0
  19. package/dist/chunk-2GNFDZA2.js +390 -0
  20. package/dist/chunk-2MNLRIOX.js +11 -0
  21. package/dist/chunk-2TFRR6JV.js +104 -0
  22. package/dist/chunk-2ZUEE4EK.js +408 -0
  23. package/dist/chunk-36JUQZVQ.js +22 -0
  24. package/dist/chunk-3DRXWLJ5.js +83 -0
  25. package/dist/chunk-3JDU4VRL.js +137 -0
  26. package/dist/chunk-3KZCLN4Z.js +241 -0
  27. package/dist/chunk-3LDULPRE.js +168 -0
  28. package/dist/chunk-3M4LFYNQ.js +111 -0
  29. package/dist/chunk-3XI5CTUE.js +22 -0
  30. package/dist/chunk-3YW23UFH.js +50 -0
  31. package/dist/chunk-45UIT5T2.js +862 -0
  32. package/dist/chunk-4BW2SG2N.js +46 -0
  33. package/dist/chunk-4KHEMC32.js +79 -0
  34. package/dist/chunk-4POWHT2K.js +321 -0
  35. package/dist/chunk-4Q2GN7NW.js +192 -0
  36. package/dist/chunk-5A2PLKZB.js +70 -0
  37. package/dist/chunk-5FBYXK5P.js +159 -0
  38. package/dist/chunk-5HVXPTU4.js +323 -0
  39. package/dist/chunk-5QU2P5CA.js +304 -0
  40. package/dist/chunk-5V5XU32D.js +191 -0
  41. package/dist/chunk-5ZSO4T2G.js +10 -0
  42. package/dist/chunk-622HUCZT.js +10 -0
  43. package/dist/chunk-65HWOMGV.js +177 -0
  44. package/dist/chunk-6ELFRN3P.js +365 -0
  45. package/dist/chunk-6HO3NCSJ.js +1055 -0
  46. package/dist/chunk-6IUMKYWI.js +457 -0
  47. package/dist/chunk-6KEB3C3U.js +65 -0
  48. package/dist/chunk-6MR5TI5V.js +987 -0
  49. package/dist/chunk-6NNTNXN7.js +157 -0
  50. package/dist/chunk-6PBR37LN.js +97 -0
  51. package/dist/chunk-6QXLMMT3.js +155 -0
  52. package/dist/chunk-6ZGJCBZS.js +224 -0
  53. package/dist/chunk-73IVBKMA.js +250 -0
  54. package/dist/chunk-7G3CTU7I.js +286 -0
  55. package/dist/chunk-A3UDOZB6.js +222 -0
  56. package/dist/chunk-A6E77GDW.js +85 -0
  57. package/dist/chunk-AHJWCYQO.js +660 -0
  58. package/dist/chunk-AKNCFVKZ.js +36 -0
  59. package/dist/chunk-AM4FKL4J.js +237 -0
  60. package/dist/chunk-AN6BL47T.js +26 -0
  61. package/dist/chunk-AOSYVMUS.js +147 -0
  62. package/dist/chunk-APWXY5SL.js +182 -0
  63. package/dist/chunk-AWEIIR2U.js +218 -0
  64. package/dist/chunk-AWQ7BQTQ.js +73 -0
  65. package/dist/chunk-BAUZOWGX.js +393 -0
  66. package/dist/chunk-BHACRS6R.js +940 -0
  67. package/dist/chunk-BWPNT55T.js +680 -0
  68. package/dist/chunk-C6RIMRU4.js +187 -0
  69. package/dist/chunk-CGVQZXYG.js +263 -0
  70. package/dist/chunk-CIMQZRRE.js +162 -0
  71. package/dist/chunk-CJHQKJU4.js +113 -0
  72. package/dist/chunk-CTMO46PK.js +1897 -0
  73. package/dist/chunk-D53J55C5.js +106 -0
  74. package/dist/chunk-D7VGG3WS.js +90 -0
  75. package/dist/chunk-DAD3ONIS.js +245 -0
  76. package/dist/chunk-DGWHAVRG.js +162 -0
  77. package/dist/chunk-DX4QR4B2.js +483 -0
  78. package/dist/chunk-EHP3WPEG.js +21 -0
  79. package/dist/chunk-ELP2HMXC.js +432 -0
  80. package/dist/chunk-ERVIASGL.js +21 -0
  81. package/dist/chunk-ET4Y4XCB.js +865 -0
  82. package/dist/chunk-ETO6LGLD.js +4750 -0
  83. package/dist/chunk-EUUUMY7J.js +24 -0
  84. package/dist/chunk-FQJ2TTHP.js +218 -0
  85. package/dist/chunk-FQOF7E2E.js +133 -0
  86. package/dist/chunk-FWD7AL6N.js +21 -0
  87. package/dist/chunk-FXFV3KU6.js +138 -0
  88. package/dist/chunk-FXRQOWTE.js +171 -0
  89. package/dist/chunk-G554NZNI.js +210 -0
  90. package/dist/chunk-GSGDWJB5.js +13 -0
  91. package/dist/chunk-H2V3N23D.js +66 -0
  92. package/dist/chunk-H5C7MBCR.js +159 -0
  93. package/dist/chunk-HHN734BU.js +371 -0
  94. package/dist/chunk-HRVBLCVJ.js +243 -0
  95. package/dist/chunk-HVRUQXGD.js +1264 -0
  96. package/dist/chunk-I4F5TCJH.js +130 -0
  97. package/dist/chunk-IDOTCMDV.js +57 -0
  98. package/dist/chunk-IGOLHKWF.js +427 -0
  99. package/dist/chunk-JGE7CAWB.js +148 -0
  100. package/dist/chunk-JTUKLCXS.js +92 -0
  101. package/dist/chunk-JZGVVJSI.js +66 -0
  102. package/dist/chunk-K4WX6UUU.js +923 -0
  103. package/dist/chunk-K5BBGTYZ.js +217 -0
  104. package/dist/chunk-K6RXBGUB.js +427 -0
  105. package/dist/chunk-KTSDSD36.js +165 -0
  106. package/dist/chunk-L5JYN3NM.js +1038 -0
  107. package/dist/chunk-LIEOKXKD.js +354 -0
  108. package/dist/chunk-LLNZGEFK.js +51 -0
  109. package/dist/chunk-LPECSJ2J.js +55 -0
  110. package/dist/chunk-LQCMKAJ7.js +413 -0
  111. package/dist/chunk-LRN4ZJCQ.js +1145 -0
  112. package/dist/chunk-MJ4ZVHKN.js +17 -0
  113. package/dist/chunk-MXHSQOC4.js +3061 -0
  114. package/dist/chunk-N5GKCWE5.js +367 -0
  115. package/dist/chunk-NA3PXMEF.js +10 -0
  116. package/dist/chunk-NAQDMEHV.js +76 -0
  117. package/dist/chunk-NWKXM5RD.js +109 -0
  118. package/dist/chunk-NZOWWHU5.js +196 -0
  119. package/dist/chunk-OHX6MIUZ.js +184 -0
  120. package/dist/chunk-OOXWYAA4.js +15 -0
  121. package/dist/chunk-OPHB5ORL.js +1990 -0
  122. package/dist/chunk-OXA6PSZT.js +1725 -0
  123. package/dist/chunk-P2HAGF6H.js +73 -0
  124. package/dist/chunk-PTHVMXZI.js +3036 -0
  125. package/dist/chunk-PZ5AY32C.js +10 -0
  126. package/dist/chunk-Q325JKYB.js +189 -0
  127. package/dist/chunk-Q7DGTQ5G.js +255 -0
  128. package/dist/chunk-QCNYHBL7.js +601 -0
  129. package/dist/chunk-QO6BVGS5.js +145 -0
  130. package/dist/chunk-QXTKSOFI.js +76 -0
  131. package/dist/chunk-ROY4YAEQ.js +66 -0
  132. package/dist/chunk-RTJRZFFY.js +447 -0
  133. package/dist/chunk-SAVJUS2X.js +128 -0
  134. package/dist/chunk-SFLHVCKX.js +173 -0
  135. package/dist/chunk-STSFNCY4.js +127 -0
  136. package/dist/chunk-SWBF2LTK.js +170 -0
  137. package/dist/chunk-T5KELPAR.js +109 -0
  138. package/dist/chunk-TFFGOFVZ.js +1481 -0
  139. package/dist/chunk-TLHIFK4M.js +256 -0
  140. package/dist/chunk-TLQE7ZN3.js +156 -0
  141. package/dist/chunk-TPHWJ7UG.js +1981 -0
  142. package/dist/chunk-TRJCALW3.js +291 -0
  143. package/dist/chunk-TTEIYD5P.js +133 -0
  144. package/dist/chunk-U64O2MXY.js +407 -0
  145. package/dist/chunk-UCQ2VUTG.js +630 -0
  146. package/dist/chunk-UTI5G6OJ.js +44 -0
  147. package/dist/chunk-UVHDMMIP.js +188 -0
  148. package/dist/chunk-UZ6QQWJT.js +120 -0
  149. package/dist/chunk-VAX3UZOY.js +686 -0
  150. package/dist/chunk-W3HBUKFO.js +57 -0
  151. package/dist/chunk-WKQLGKCL.js +2823 -0
  152. package/dist/chunk-WQFNASK4.js +560 -0
  153. package/dist/chunk-WRBKLYSJ.js +224 -0
  154. package/dist/chunk-WTPZRR4I.js +17 -0
  155. package/dist/chunk-WZDJ2LLX.js +2385 -0
  156. package/dist/chunk-X2NL4KUO.js +14 -0
  157. package/dist/chunk-X4DVXBFY.js +38 -0
  158. package/dist/chunk-X677DMZM.js +7050 -0
  159. package/dist/chunk-XBKMWY7F.js +612 -0
  160. package/dist/chunk-XNCP4KYO.js +78 -0
  161. package/dist/chunk-XVBGLISP.js +35 -0
  162. package/dist/chunk-XW6KISBB.js +1192 -0
  163. package/dist/chunk-YGZHHAAB.js +8156 -0
  164. package/dist/chunk-YHEFQUQB.js +186 -0
  165. package/dist/chunk-YLDALTWZ.js +653 -0
  166. package/dist/chunk-YU4HSQW7.js +229 -0
  167. package/dist/chunk-ZDPP6RKB.js +27 -0
  168. package/dist/chunk-ZFDZKNGG.js +194 -0
  169. package/dist/chunk-ZIY7RNUT.js +49 -0
  170. package/dist/chunk-ZYJP6BOO.js +30 -0
  171. package/dist/cli.d.ts +1111 -0
  172. package/dist/cli.js +165 -0
  173. package/dist/codegen-command-VR2GWR6C.js +173 -0
  174. package/dist/codegen.d.ts +115 -0
  175. package/dist/codegen.js +19 -0
  176. package/dist/commands-GJMJ4XYZ.js +76 -0
  177. package/dist/completion-ZQLO6PB6.js +738 -0
  178. package/dist/config-MBYGCAFK.js +136 -0
  179. package/dist/deploy-command-JVZPWHMK.js +180 -0
  180. package/dist/deploy-source-3W45CXMP.js +81 -0
  181. package/dist/dev-env-sync-HN44K4D5.js +188 -0
  182. package/dist/diagnostics-UEAAHWVF.js +30 -0
  183. package/dist/display-name-hint-ABBPVQIR.js +46 -0
  184. package/dist/emit-CyhBDxli.d.ts +7007 -0
  185. package/dist/env-example-refresh-ET5HMMDW.js +126 -0
  186. package/dist/env-pull-command-TNMNB3CV.js +323 -0
  187. package/dist/env-target-O4HRKTGZ.js +40 -0
  188. package/dist/env-var-command-ZIRDCAZA.js +427 -0
  189. package/dist/ephemeral-P7F3PMAD.js +54 -0
  190. package/dist/ephemeral-command-CLJJKOFT.js +592 -0
  191. package/dist/ephemeral-state-PYCBSOGX.js +61 -0
  192. package/dist/file-lock-PT74GWYW.js +10 -0
  193. package/dist/generate-command-AYEOLA26.js +510 -0
  194. package/dist/gitignore-3SJ3WNRG.js +51 -0
  195. package/dist/guards-4EBNCZDC.js +162 -0
  196. package/dist/hosted-file-PSHJB3HX.js +28 -0
  197. package/dist/impersonate-command-5JAS3WSV.js +152 -0
  198. package/dist/import-EQSFU6JC.js +19 -0
  199. package/dist/index.d.ts +5470 -0
  200. package/dist/index.js +371 -0
  201. package/dist/init-command-X2FR4UAK.js +125 -0
  202. package/dist/init-modules-RY7UHAOL.js +50 -0
  203. package/dist/init-web-M4YZSZK6.js +42 -0
  204. package/dist/internal.d.ts +179 -0
  205. package/dist/internal.js +2634 -0
  206. package/dist/io-RC56QSN5.js +26 -0
  207. package/dist/keep-data-merge-7MPLVAVI.js +1119 -0
  208. package/dist/lambda-config-reconcile-OUZ4OYAB.js +116 -0
  209. package/dist/landed-753YLJ5H.js +40 -0
  210. package/dist/landing-record-SU52SKXU.js +61 -0
  211. package/dist/live-diff-YONW2VI3.js +65 -0
  212. package/dist/local-engine-choice-CH5X3W7E.js +79 -0
  213. package/dist/local-engine-command-Z3OL7VOD.js +766 -0
  214. package/dist/local-engine-config-5U3SC434.js +39 -0
  215. package/dist/local-engine-deploy-PCQ4SNPB.js +39 -0
  216. package/dist/local-engine-process-EHTE5LLU.js +63 -0
  217. package/dist/local-engine-state-A4FTRFAF.js +32 -0
  218. package/dist/local-engine-update-check-6L645VBL.js +162 -0
  219. package/dist/lock-MRRHW5GS.js +87 -0
  220. package/dist/lock-commands-2QG25HL7.js +963 -0
  221. package/dist/login-command-QPYRWOXZ.js +538 -0
  222. package/dist/logout-command-WOIQLDP6.js +56 -0
  223. package/dist/loop-ALIZLOSX.js +191 -0
  224. package/dist/marketplace-command-K5YL42NO.js +977 -0
  225. package/dist/marketplace-resolve-LY32JES5.js +40 -0
  226. package/dist/meta-client-YXGPW53C.js +244 -0
  227. package/dist/module-manifest-JFGHU2TC.js +38 -0
  228. package/dist/near-key.d.ts +13 -0
  229. package/dist/near-key.js +8 -0
  230. package/dist/node.d.ts +95 -0
  231. package/dist/node.js +969 -0
  232. package/dist/operation-outcome-TZSESNC7.js +51 -0
  233. package/dist/output-target-AL3I44GG.js +47 -0
  234. package/dist/package-manager-PRAHUSCN.js +34 -0
  235. package/dist/plan-disclosure-6G4MLZKD.js +114 -0
  236. package/dist/plugin-contributions-WRNY5ABG.js +28 -0
  237. package/dist/plugin-prompt-4VA3B4FF.js +20 -0
  238. package/dist/plugin-questions-JTSYA74Q.js +24 -0
  239. package/dist/plugin.d.ts +396 -0
  240. package/dist/plugin.js +1 -0
  241. package/dist/preflight-command-2T5Z36MI.js +321 -0
  242. package/dist/profile-command-AH3PIM4X.js +800 -0
  243. package/dist/profile-pointer-GRWJU3YD.js +31 -0
  244. package/dist/profile-select-74TRDEPD.js +23 -0
  245. package/dist/project-dependency-KSH63ODT.js +35 -0
  246. package/dist/project-sdk-REPPOIBD.js +24 -0
  247. package/dist/promote-command-PCWT5N6S.js +140 -0
  248. package/dist/prompt-II3F3LND.js +27 -0
  249. package/dist/publish-command-TTDUUJI5.js +414 -0
  250. package/dist/pull-command-VBO7C4S3.js +161 -0
  251. package/dist/pull-superseded-GJWLG7XO.js +20 -0
  252. package/dist/release-command-N4ZPKMHR.js +146 -0
  253. package/dist/release-ns-command-3KFDMZ6G.js +1745 -0
  254. package/dist/response-HlXahv4K.d.ts +925 -0
  255. package/dist/retry-command-AS5EVREX.js +34 -0
  256. package/dist/routes-manifest-SNWUVBT6.js +43 -0
  257. package/dist/runtime-XETHVF33.js +14 -0
  258. package/dist/scaffold.d.ts +1911 -0
  259. package/dist/scaffold.js +107 -0
  260. package/dist/secrets-file-LVZD6IIM.js +56 -0
  261. package/dist/secrets-fill-command-TTCPSVXN.js +218 -0
  262. package/dist/seed-VU7C3QYS.js +46 -0
  263. package/dist/sent-writes-N7X4OVXT.js +22 -0
  264. package/dist/source-resolve-S2XA3XZF.js +83 -0
  265. package/dist/static-host-B2Y6AG3W.js +352 -0
  266. package/dist/status-command-RUDXTF7I.js +554 -0
  267. package/dist/store-6VNCD4D7.js +20 -0
  268. package/dist/store-ARM6VMO5.js +98 -0
  269. package/dist/store-DuYfzKlW.d.ts +3144 -0
  270. package/dist/suggest-6FOOYKHG.js +12 -0
  271. package/dist/sveltekit.d.ts +154 -0
  272. package/dist/sveltekit.js +109 -0
  273. package/dist/sync-contributions-UCEROO26.js +415 -0
  274. package/dist/table-ENAVMITR.js +42 -0
  275. package/dist/tables-command-GUPXXSB5.js +156 -0
  276. package/dist/tenant-IIHPOHGP.js +42 -0
  277. package/dist/tenant-command-D5HGI2X4.js +965 -0
  278. package/dist/test-command-TIKZMDPZ.js +476 -0
  279. package/dist/tests-BGGIOK3L.js +26 -0
  280. package/dist/token-NICJUTMT.js +72 -0
  281. package/dist/toolchain-hooks-GHKLUJOH.js +96 -0
  282. package/dist/toolchain-modules-5EAZUONB.js +24 -0
  283. package/dist/tracked-backend-EIBUMDZA.js +80 -0
  284. package/dist/update-check-2W2NLDTC.js +136 -0
  285. package/dist/upgrade-command-QHNFWM7O.js +531 -0
  286. package/dist/verify-rollout-DRCK5TDD.js +61 -0
  287. package/dist/whoami-command-STGINTXH.js +51 -0
  288. package/dist/workspace-2CLHU2LK.js +93 -0
  289. package/dist/workspace-binding-56PIIPCP.js +54 -0
  290. package/dist/workspace-command-JEXQETJD.js +535 -0
  291. package/dist/workspace-env-F2RFMSC5.js +70 -0
  292. package/dist/workspace-export-OJSH2HIW.js +21 -0
  293. package/dist/writable-VA7OISSK.js +25 -0
  294. package/dist/xano-ICFUSPFR.js +42 -0
  295. package/dist/xanosdk-import-GN42TO2B.js +56 -0
  296. package/dist/xanosdk-project-S6DXJONQ.js +41 -0
  297. package/dist/xdo-CxDr2Q1C.d.ts +1371 -0
  298. package/guides/README.md +33 -0
  299. package/guides/authoring.md +921 -0
  300. package/guides/cli.md +401 -0
  301. package/guides/codegen.md +177 -0
  302. package/guides/codes.md +404 -0
  303. package/guides/coverage.md +74 -0
  304. package/guides/deploying.md +1525 -0
  305. package/guides/environment.md +400 -0
  306. package/guides/marketplace.md +415 -0
  307. package/guides/module-contract.md +558 -0
  308. package/guides/object-kinds.md +433 -0
  309. package/guides/project-structure.md +43 -0
  310. package/guides/scaffold.md +351 -0
  311. package/guides/typed-frontend.md +242 -0
  312. package/llms/client.md +63 -0
  313. package/llms/errors.md +56 -0
  314. package/llms/fields.md +176 -0
  315. package/llms/filters.md +183 -0
  316. package/llms/kinds-agent-mcp.md +30 -0
  317. package/llms/kinds-core.md +100 -0
  318. package/llms/kinds-knowledge.md +20 -0
  319. package/llms/kinds-realtime.md +76 -0
  320. package/llms/lambda.md +94 -0
  321. package/llms/legacy.md +44 -0
  322. package/llms/lock.md +40 -0
  323. package/llms/object-kinds.md +34 -0
  324. package/llms/statements-calls.md +62 -0
  325. package/llms/statements-catalog.md +320 -0
  326. package/llms/statements-data.md +66 -0
  327. package/llms/statements-runtime.md +68 -0
  328. package/llms/tests.md +59 -0
  329. package/llms/toolchain.md +16 -0
  330. package/llms/triggers.md +36 -0
  331. package/llms/values.md +29 -0
  332. package/llms-full.txt +2085 -0
  333. package/llms.txt +493 -0
  334. package/manifest.json +11224 -0
  335. package/package.json +162 -0
  336. package/types/lambda-globals.d.ts +129 -0
@@ -0,0 +1,538 @@
1
+ import {
2
+ revocableRecord,
3
+ revokeProfileSession,
4
+ warnRevokeFailed
5
+ } from "./chunk-ELP2HMXC.js";
6
+ import {
7
+ loopbackRedirectUri,
8
+ openBrowser,
9
+ startCallbackServer
10
+ } from "./chunk-FQOF7E2E.js";
11
+ import {
12
+ promptLine
13
+ } from "./chunk-65HWOMGV.js";
14
+ import {
15
+ ensureGitignoredOrWarn
16
+ } from "./chunk-YHEFQUQB.js";
17
+ import "./chunk-DAD3ONIS.js";
18
+ import {
19
+ describeRefreshAnswer,
20
+ environmentCredentialVars
21
+ } from "./chunk-ET4Y4XCB.js";
22
+ import "./chunk-5QU2P5CA.js";
23
+ import "./chunk-ZYJP6BOO.js";
24
+ import "./chunk-QO6BVGS5.js";
25
+ import "./chunk-JZGVVJSI.js";
26
+ import "./chunk-T5KELPAR.js";
27
+ import "./chunk-622HUCZT.js";
28
+ import "./chunk-NAQDMEHV.js";
29
+ import "./chunk-5A2PLKZB.js";
30
+ import "./chunk-AHJWCYQO.js";
31
+ import "./chunk-DX4QR4B2.js";
32
+ import "./chunk-6QXLMMT3.js";
33
+ import "./chunk-ZFDZKNGG.js";
34
+ import "./chunk-FWD7AL6N.js";
35
+ import "./chunk-2GNFDZA2.js";
36
+ import "./chunk-JTUKLCXS.js";
37
+ import "./chunk-4KHEMC32.js";
38
+ import "./chunk-ROY4YAEQ.js";
39
+ import "./chunk-TLQE7ZN3.js";
40
+ import "./chunk-WRBKLYSJ.js";
41
+ import "./chunk-3LDULPRE.js";
42
+ import {
43
+ CALLBACK_PATH,
44
+ DEFAULT_PORT,
45
+ OpenIdProvider,
46
+ assertCredentialFileWritable,
47
+ assertSignInOrigin,
48
+ credentialFileFlag,
49
+ decodeAudience,
50
+ envOrigin,
51
+ globalAuthFilePath,
52
+ loginCommand,
53
+ oauthErrorCode,
54
+ oauthErrorResponse,
55
+ profileNames,
56
+ readCredentialFile,
57
+ readProfile,
58
+ resolveAuthFilePath,
59
+ resolveAuthHost,
60
+ resolveOAuthErrorCode,
61
+ resolveScope,
62
+ withCredentialLock,
63
+ writeCredentialFile
64
+ } from "./chunk-XW6KISBB.js";
65
+ import "./chunk-AWQ7BQTQ.js";
66
+ import "./chunk-EUUUMY7J.js";
67
+ import {
68
+ describeTransportFailure,
69
+ isTimeoutError
70
+ } from "./chunk-YLDALTWZ.js";
71
+ import {
72
+ resolveProjectProfile
73
+ } from "./chunk-5FBYXK5P.js";
74
+ import "./chunk-LLNZGEFK.js";
75
+ import {
76
+ resolveActiveProfile
77
+ } from "./chunk-QXTKSOFI.js";
78
+ import {
79
+ envFlagSet
80
+ } from "./chunk-X2NL4KUO.js";
81
+ import "./chunk-UCQ2VUTG.js";
82
+ import "./chunk-DGWHAVRG.js";
83
+ import {
84
+ UsageError,
85
+ blank,
86
+ detail,
87
+ hostLabel,
88
+ info,
89
+ isMachineOutput,
90
+ step,
91
+ success,
92
+ warn,
93
+ writeJson
94
+ } from "./chunk-PTHVMXZI.js";
95
+ import "./chunk-GSGDWJB5.js";
96
+ import "./chunk-UTI5G6OJ.js";
97
+ import "./chunk-2EZ3ZJZZ.js";
98
+ import "./chunk-6MR5TI5V.js";
99
+ import {
100
+ shellQuote
101
+ } from "./chunk-5ZSO4T2G.js";
102
+ import "./chunk-XNCP4KYO.js";
103
+ import "./chunk-TFFGOFVZ.js";
104
+ import "./chunk-NZOWWHU5.js";
105
+ import "./chunk-4BW2SG2N.js";
106
+ import "./chunk-CIMQZRRE.js";
107
+ import "./chunk-OHX6MIUZ.js";
108
+ import "./chunk-36JUQZVQ.js";
109
+ import "./chunk-PZ5AY32C.js";
110
+
111
+ // src/emit/login-command.ts
112
+ import { homedir } from "os";
113
+ import { dirname, join } from "path";
114
+ import * as client from "openid-client";
115
+
116
+ // src/auth/paste.ts
117
+ var EXAMPLE = "Paste either the full URL from your browser's address bar (http://127.0.0.1:\u2026/oauth/callback?code=\u2026) or just the code=\u2026 value from it.";
118
+ function normalizePastedCallback(input, ctx) {
119
+ const trimmed = input.trim();
120
+ if (trimmed === "") throw new Error(`Nothing was pasted. ${EXAMPLE}`);
121
+ const params = extractParams(trimmed, ctx);
122
+ const error = params.get("error");
123
+ if (error) {
124
+ const description = params.get("error_description");
125
+ const authError = new Error(
126
+ `Authorization server returned error: ${error}${description ? ` (${description})` : ""}`
127
+ );
128
+ authError.error = error;
129
+ throw authError;
130
+ }
131
+ if (!params.get("code")) {
132
+ throw new Error(`That paste carries no \`code\` value. ${EXAMPLE}`);
133
+ }
134
+ for (const key of ["code", "state", "iss"]) {
135
+ if (params.getAll(key).length > 1) {
136
+ throw new Error(`That paste carries \`${key}\` more than once, so it is not one redirect. ${EXAMPLE}`);
137
+ }
138
+ }
139
+ const state = params.get("state");
140
+ if (state && state !== ctx.state) {
141
+ throw new Error(
142
+ "That URL is from a different sign-in attempt \u2014 its `state` does not match this one. Finish signing in with the link printed above and paste the URL that one lands on."
143
+ );
144
+ }
145
+ const iss = params.get("iss");
146
+ if (iss && iss !== ctx.issuer) {
147
+ throw new Error(
148
+ `That URL was issued by ${iss}, not by ${ctx.issuer}, which this sign-in is talking to. Finish signing in with the link printed above and paste the URL that one lands on.`
149
+ );
150
+ }
151
+ if (!state) params.set("state", ctx.state);
152
+ if (!iss) params.set("iss", ctx.issuer);
153
+ return `${ctx.redirectUri}?${params.toString()}`;
154
+ }
155
+ function extractParams(trimmed, ctx) {
156
+ const url = parseUrl(trimmed);
157
+ if (url) return url.searchParams;
158
+ const queryStart = trimmed.indexOf("?");
159
+ if (queryStart !== -1 && isRecognizedQuery(trimmed.slice(queryStart + 1))) {
160
+ return new URLSearchParams(trimmed.slice(queryStart + 1));
161
+ }
162
+ if (isRecognizedQuery(trimmed)) return new URLSearchParams(trimmed);
163
+ return new URLSearchParams({ code: trimmed, state: ctx.state, iss: ctx.issuer });
164
+ }
165
+ function isRecognizedQuery(value) {
166
+ return /(^|&)(code|error)=/.test(value);
167
+ }
168
+ function parseUrl(value) {
169
+ try {
170
+ const url = new URL(value);
171
+ return url.protocol === "http:" || url.protocol === "https:" ? url : void 0;
172
+ } catch {
173
+ return void 0;
174
+ }
175
+ }
176
+
177
+ // src/emit/login-command.ts
178
+ async function runLoginCommand(args) {
179
+ const authHost = resolveAuthHost(args);
180
+ const scope = resolveScope(args);
181
+ const port = args.port ?? DEFAULT_PORT;
182
+ try {
183
+ assertSignInOrigin(authHost, args.authHost === void 0 && envOrigin() !== void 0 ? "XANO_ORIGIN" : "--origin");
184
+ } catch (err) {
185
+ throw new UsageError(err instanceof Error ? err.message : String(err), { hintFor: { command: "login" } });
186
+ }
187
+ if (args.paste && port === 0) {
188
+ throw new UsageError(
189
+ "`--port 0` asks for an ephemeral port, which --paste cannot use: nothing is bound, so the port is only part of the redirect URL's identity. Drop --port to use the default.",
190
+ { hintFor: { command: "login" } }
191
+ );
192
+ }
193
+ const targetPath = resolveAuthFilePath(args, "write");
194
+ const profile = resolveLoginProfile(args, targetPath);
195
+ assertCredentialFileWritable(targetPath);
196
+ if (!args.force && reportAlreadySignedIn(args, targetPath, profile)) return;
197
+ if (args.paste && process.stdin.isTTY !== true) {
198
+ throw new UsageError(
199
+ `\`--paste\` reads the authorization code back from you, so it needs a terminal. For automation, set XANO_INSTANCE_URL / XANO_WORKSPACE_ID / XANO_META_TOKEN, or store a meta API token with \`xanosdk profile add ${args.profile !== void 0 ? shellQuote(profile) : "<name>"}${credentialFileFlag(targetPath)} --instance <url> --workspace-id <id>\`.`,
200
+ { hintFor: { command: "login" } }
201
+ );
202
+ }
203
+ step(`Signing in to ${hostLabel(authHost)}`);
204
+ const again = loginCommand(profile, { path: targetPath, origin: authHost }, [
205
+ ...args.paste ? ["--paste"] : [],
206
+ ...args.port !== void 0 ? [`--port ${args.port}`] : [],
207
+ ...args.force ? ["--force"] : []
208
+ ]);
209
+ let record;
210
+ try {
211
+ record = await attemptLogin({ authHost, scope, port, paste: args.paste, again, profile });
212
+ } catch (err) {
213
+ if (oauthErrorCode(err) !== "invalid_client") throw err;
214
+ warn("The registered client was rejected \u2014 re-registering and retrying once.", "login.client-reregistered");
215
+ record = await attemptLogin({ authHost, scope, port, paste: args.paste, again, profile, retry: true });
216
+ }
217
+ const authFilePath = targetPath;
218
+ let becameDefault = false;
219
+ let isDefault = false;
220
+ let replaced;
221
+ try {
222
+ await withCredentialLock(authFilePath, (file) => {
223
+ replaced = revocableRecord(file, profile, authFilePath);
224
+ becameDefault = profileNames(file).length === 0;
225
+ file.profiles[profile] = record;
226
+ if (becameDefault) file.default = profile;
227
+ isDefault = file.default === profile;
228
+ writeCredentialFile(authFilePath, file);
229
+ });
230
+ } catch (err) {
231
+ await revokeProfileSession(args, record, profile, "minted");
232
+ throw err;
233
+ }
234
+ if (replaced !== void 0 && replaced.refresh_token !== record.refresh_token) {
235
+ step(`Revoking the session that profile "${profile}" held\u2026`);
236
+ await revokeProfileSession(args, replaced, profile, "replace");
237
+ }
238
+ blank();
239
+ success(`Signed in to ${hostLabel(record.instance)} as profile "${profile}"`);
240
+ detail(`Workspace ${record.workspace_id} (pinned \u2014 every command acts on this one)`);
241
+ detail(`Credentials saved to ${authFilePath}`);
242
+ const machineFile = authFilePath === globalAuthFilePath();
243
+ const defaultOf = machineFile ? "this machine's default" : `the default profile in ${authFilePath}`;
244
+ if (becameDefault) {
245
+ detail(machineFile ? `It is this machine's default profile.` : `It is ${defaultOf}.`);
246
+ } else if (isDefault) {
247
+ detail(machineFile ? `It is still this machine's default profile.` : `It is still ${defaultOf}.`);
248
+ } else {
249
+ const fileFlag = credentialFileFlag(authFilePath);
250
+ info(
251
+ `"${profile}" is not ${defaultOf} \u2014 select it with \`--profile ${profile}${fileFlag}\`, or pin this project to it with \`xanosdk profile use ${profile}${fileFlag}\`.`
252
+ );
253
+ }
254
+ const env = environmentCredentialVars();
255
+ if (env.vars.length > 0) {
256
+ const them = env.vars.length === 1 ? "it" : "them";
257
+ warn(
258
+ `${env.vars.join(", ")} ${env.vars.length === 1 ? "is" : "are"} set in this environment, outranking this credential \u2014 ` + (env.complete ? `commands will keep using ${them}. ` : `it is an incomplete credential, so commands will fail on ${them} rather than use this one. `) + `Unset ${them} to act as the account you just signed in as.`,
259
+ "credential.env-outranks"
260
+ );
261
+ }
262
+ if (machineFile) {
263
+ const shared = authFilePath === join(homedir(), ".xanosdk", "auth.json") ? "~/.xanosdk" : dirname(authFilePath);
264
+ detail(`Using the shared ${shared} cache \u2014 available from any project directory.`);
265
+ } else if (args.local) {
266
+ const root = dirname(dirname(authFilePath));
267
+ detail(
268
+ root === process.cwd() ? "Using the project-local .xano cache \u2014 scoped to this project." : `Using the project-local .xano cache at the project root ${root} \u2014 scoped to this project, and read from any directory in it.`
269
+ );
270
+ }
271
+ const gitignored = ensureGitignoredOrWarn(authFilePath);
272
+ if (!record.refresh_token) {
273
+ warn(
274
+ "No refresh token was issued (offline_access not granted); push will require re-login once the access token expires.",
275
+ "login.no-refresh-token"
276
+ );
277
+ }
278
+ if (isMachineOutput(args)) {
279
+ writeLoginDocument({
280
+ profile,
281
+ path: authFilePath,
282
+ signedIn: true,
283
+ changed: true,
284
+ gitignored,
285
+ instance: record.instance,
286
+ workspaceId: record.workspace_id,
287
+ credential: "oauth",
288
+ isDefault
289
+ });
290
+ }
291
+ }
292
+ function resolveLoginProfile(args, authFilePath) {
293
+ let fileDefault;
294
+ try {
295
+ fileDefault = readCredentialFile(authFilePath)?.default;
296
+ } catch {
297
+ }
298
+ return resolveActiveProfile({
299
+ flag: args.profile,
300
+ fileDefault,
301
+ readPointer: () => resolveProjectProfile(process.cwd())
302
+ }).name;
303
+ }
304
+ function reportAlreadySignedIn(args, authFilePath, profile) {
305
+ let existing;
306
+ let isDefault = false;
307
+ try {
308
+ const file = readCredentialFile(authFilePath);
309
+ existing = file === null ? null : readProfile(file, profile, authFilePath);
310
+ isDefault = file?.default === profile;
311
+ } catch {
312
+ return false;
313
+ }
314
+ if (!existing) return false;
315
+ if (existing.type === "oauth" && !existing.refresh_token && Date.now() >= existing.expires_at) return false;
316
+ const target = existing.type === "token" ? `${hostLabel(existing.instance_base_url)} with a meta API token profile (from \`profile add\`)` : hostLabel(existing.instance);
317
+ info(`Profile "${profile}" is already signed in to ${target}, workspace ${existing.workspace_id}.`);
318
+ detail(`Credential: ${authFilePath}`);
319
+ const asked = args.authHost === void 0 ? void 0 : originOf(resolveAuthHost(args));
320
+ const stored = existing.type === "oauth" ? originOf(existing.auth_host) : void 0;
321
+ const origin = asked === void 0 ? "" : ` --origin ${shellQuote(asked)}`;
322
+ const forced = `xanosdk login --profile ${shellQuote(profile)}${credentialFileFlag(authFilePath)}${origin} --force`;
323
+ const hint = asked !== void 0 && asked !== stored ? `\`--origin ${asked}\` was not used: this profile signed in through ${stored ?? "a meta API token, with no sign-in server"}. Run \`${forced}\` to sign in through ${asked} and replace it.` : existing.type === "token" ? (
324
+ // `login --force` would REPLACE a token profile with an OAuth sign-in;
325
+ // refreshing its token is `profile add --force`, which keeps the kind.
326
+ `To replace its meta API token, run \`xanosdk profile add ${shellQuote(profile)}${credentialFileFlag(authFilePath)} --instance ${existing.instance_base_url} --workspace-id ${existing.workspace_id} --force\` (\`${forced}\` would replace it with an OAuth sign-in instead).`
327
+ ) : `Run \`${forced}\` to sign in again.`;
328
+ detail(hint);
329
+ const gitignored = ensureGitignoredOrWarn(authFilePath);
330
+ if (isMachineOutput(args)) {
331
+ writeLoginDocument({
332
+ profile,
333
+ path: authFilePath,
334
+ signedIn: true,
335
+ changed: false,
336
+ gitignored,
337
+ isDefault,
338
+ instance: existing.type === "token" ? existing.instance_base_url : existing.instance,
339
+ workspaceId: existing.workspace_id,
340
+ credential: existing.type,
341
+ hint
342
+ });
343
+ }
344
+ return true;
345
+ }
346
+ function originOf(url) {
347
+ try {
348
+ return new URL(url).origin;
349
+ } catch {
350
+ return url;
351
+ }
352
+ }
353
+ function writeLoginDocument(doc) {
354
+ const { hint, ...rest } = doc;
355
+ writeJson({ verb: "login", ...rest, ...doc.changed ? {} : { hint: hint ?? "Re-run with --force to sign in again." } });
356
+ }
357
+ async function attemptLogin(p) {
358
+ const verifier = client.randomPKCECodeVerifier();
359
+ const state = client.randomState();
360
+ const { callbackUrl, provider } = p.paste ? await acquireByPaste({ ...p, verifier, state }) : await acquireByLoopback({ ...p, verifier, state });
361
+ let tokens;
362
+ try {
363
+ tokens = await provider.exchange(callbackUrl, { verifier, state });
364
+ } catch (err) {
365
+ if (oauthErrorCode(err) === "invalid_client") {
366
+ await provider.reset();
367
+ throw err;
368
+ }
369
+ throw await explainRefusedCode(err, p.again) ?? explainRejectedResponse(err, p.paste, p.again);
370
+ }
371
+ const boundInstance = decodeAudience(tokens.access_token);
372
+ if (!boundInstance) {
373
+ await revokeMinted(provider, tokens.refresh_token, p.authHost, p.profile);
374
+ throw new Error(
375
+ `Could not determine the instance from the issued token (no readable \`aud\` claim). This is unexpected \u2014 please report it.`
376
+ );
377
+ }
378
+ const { resolveScopedWorkspaceId } = await import("./workspace-2CLHU2LK.js");
379
+ detail("Resolving the workspace this token is scoped to\u2026");
380
+ let workspaceId;
381
+ try {
382
+ workspaceId = await resolveScopedWorkspaceId(
383
+ { access_token: tokens.access_token, instance: boundInstance },
384
+ { again: p.again }
385
+ );
386
+ } catch (err) {
387
+ await revokeMinted(provider, tokens.refresh_token, p.authHost, p.profile);
388
+ throw err;
389
+ }
390
+ return {
391
+ type: "oauth",
392
+ access_token: tokens.access_token,
393
+ refresh_token: tokens.refresh_token,
394
+ expires_at: Date.now() + (tokens.expires_in ?? 0) * 1e3,
395
+ scope: tokens.scope ?? p.scope,
396
+ instance: boundInstance,
397
+ workspace_id: workspaceId,
398
+ auth_host: p.authHost,
399
+ // Record exactly which client minted the token — required to refresh/revoke
400
+ // it later. Resolved already (buildAuthUrl awaited the config).
401
+ client_id: provider.clientId()
402
+ };
403
+ }
404
+ async function revokeMinted(provider, refreshToken, authHost, profile) {
405
+ if (refreshToken === void 0) return;
406
+ try {
407
+ await provider.revoke(refreshToken);
408
+ } catch (err) {
409
+ await warnRevokeFailed(`the session this sign-in minted for profile "${profile}"`, authHost, err, "minted");
410
+ }
411
+ }
412
+ function explainRejectedResponse(err, paste, again) {
413
+ if (err?.code !== "OAUTH_INVALID_RESPONSE") return err;
414
+ const cause = err.cause;
415
+ const reason = cause instanceof Error ? cause.message : typeof cause === "string" ? cause : void 0;
416
+ return new Error(
417
+ `The sign-in response was rejected${reason === void 0 ? "" : `: ${reason}`}. ` + (paste ? "Paste the full URL your browser lands on after finishing THIS sign-in (or just its code=\u2026 value). " : "") + `Run \`${again}\` again to start over.`,
418
+ { cause: err }
419
+ );
420
+ }
421
+ async function explainRefusedCode(err, command) {
422
+ const res = oauthErrorResponse(err);
423
+ const code = await resolveOAuthErrorCode(err);
424
+ const again = `run \`${command}\` again`;
425
+ if (res === void 0 && code === void 0) {
426
+ if (!isTransportFailure(err)) return void 0;
427
+ return new Error(
428
+ `Sign-in failed: could not reach the authorization server to exchange the code (${describeTransportFailure(err)}). This is a network error, not an auth problem \u2014 ${again}.`,
429
+ { cause: err }
430
+ );
431
+ }
432
+ if (code === void 0 && res !== void 0 && res.status >= 500) {
433
+ const answer = await describeRefreshAnswer(err) ?? `HTTP ${res.status}`;
434
+ return new Error(
435
+ `Sign-in failed while exchanging the code: the authorization server answered ${answer}. This is a server-side error, not an auth problem \u2014 ${again}. If it persists, the sign-in server is having trouble.`,
436
+ { cause: err }
437
+ );
438
+ }
439
+ const why = [res === void 0 ? void 0 : `HTTP ${res.status}`, code].filter((p) => p !== void 0);
440
+ return new Error(
441
+ `The authorization server refused the sign-in code${why.length === 0 ? "" : ` (${why.join(" \u2014 ")})`}. A code is single-use and expires within minutes, so one that was already used, has expired, or belongs to another sign-in is refused. Run \`${command}\` again for a fresh one.`,
442
+ { cause: err }
443
+ );
444
+ }
445
+ function isTransportFailure(err) {
446
+ if (isTimeoutError(err)) return true;
447
+ return err instanceof TypeError && /fetch failed/i.test(err.message);
448
+ }
449
+ var MAX_PASTE_ATTEMPTS = 3;
450
+ async function acquireByLoopback(p) {
451
+ let listener;
452
+ try {
453
+ listener = await startCallbackServer({ callbackPath: CALLBACK_PATH, expectedState: p.state, port: p.port });
454
+ } catch (err) {
455
+ throw loopbackListenRefusal(err, p.port);
456
+ }
457
+ const provider = new OpenIdProvider({ authHost: p.authHost, redirectUri: listener.redirectUri, scope: p.scope });
458
+ let authorizeUrl;
459
+ try {
460
+ authorizeUrl = await provider.buildAuthUrl({ verifier: p.verifier, state: p.state });
461
+ } catch (err) {
462
+ listener.close();
463
+ throw err;
464
+ }
465
+ if (envFlagSet("XANO_NO_BROWSER")) {
466
+ detail("Open this URL in your browser to authorize \u2014 waiting for you to finish:");
467
+ } else {
468
+ detail("Opening your browser to authorize \u2014 waiting for you to finish\u2026");
469
+ detail("If it doesn't open, paste this URL into your browser:");
470
+ }
471
+ detail(authorizeUrl);
472
+ openBrowser(authorizeUrl);
473
+ try {
474
+ const { callbackUrl } = await listener.waitForCallback;
475
+ return { callbackUrl, provider };
476
+ } catch (err) {
477
+ listener.close();
478
+ if (oauthErrorCode(err) === "invalid_client") await provider.reset();
479
+ throw err;
480
+ }
481
+ }
482
+ function loopbackListenRefusal(err, port) {
483
+ const code = err?.code;
484
+ const fix = `Pass another with \`--port <n>\`, or drop \`--port\` for the default ${DEFAULT_PORT}.`;
485
+ const hint = { hintFor: { command: "login" } };
486
+ if (code === "EADDRINUSE") {
487
+ return new UsageError(`Loopback port ${port} is in use. ${fix}`, hint);
488
+ }
489
+ if (code === "EACCES") {
490
+ return new UsageError(
491
+ `Loopback port ${port} needs elevated privileges to listen on (EACCES) \u2014 ports below 1024 usually do. Pass one of 1024 or above with \`--port <n>\`, or drop \`--port\` for the default ${DEFAULT_PORT}.`,
492
+ hint
493
+ );
494
+ }
495
+ const why = err instanceof Error ? err.message : String(err);
496
+ return new UsageError(`Could not listen on loopback port ${port} (${why}). ${fix}`, hint);
497
+ }
498
+ async function acquireByPaste(p) {
499
+ const redirectUri = loopbackRedirectUri(p.port, CALLBACK_PATH);
500
+ const provider = new OpenIdProvider({ authHost: p.authHost, redirectUri, scope: p.scope });
501
+ const authorizeUrl = await provider.buildAuthUrl({ verifier: p.verifier, state: p.state });
502
+ blank();
503
+ if (p.retry) detail("Starting over with a freshly registered client \u2014 this is a NEW link and a NEW code.");
504
+ detail("Open this URL in any browser and finish signing in:");
505
+ detail(authorizeUrl);
506
+ blank();
507
+ detail(
508
+ `Your browser will then fail to load ${redirectUri} \u2014 that is expected, nothing is listening here. The address bar is what you want.`
509
+ );
510
+ openBrowser(authorizeUrl);
511
+ for (let attempt = 0; ; attempt++) {
512
+ const pasted = await promptLine("Paste that URL (or just the code from it):", {
513
+ noTtyHint: "--paste has to read the code from you, so it needs a terminal. For automation, set XANO_INSTANCE_URL / XANO_WORKSPACE_ID / XANO_META_TOKEN, or store a meta API token with `xanosdk profile add <name>`."
514
+ });
515
+ try {
516
+ const callbackUrl = normalizePastedCallback(pasted, {
517
+ redirectUri,
518
+ state: p.state,
519
+ issuer: provider.issuer()
520
+ });
521
+ return { callbackUrl, provider };
522
+ } catch (err) {
523
+ if (oauthErrorCode(err) === "invalid_client") await provider.reset();
524
+ const unreadable = oauthErrorCode(err) === void 0;
525
+ if (!unreadable || attempt + 1 >= MAX_PASTE_ATTEMPTS) throw err;
526
+ warn(
527
+ `${err instanceof Error ? err.message : String(err)}`,
528
+ "login.paste-failed",
529
+ ["The link above is still valid \u2014 try pasting again."]
530
+ );
531
+ }
532
+ }
533
+ }
534
+ export {
535
+ loopbackListenRefusal,
536
+ runLoginCommand
537
+ };
538
+ //# sourceMappingURL=login-command-QPYRWOXZ.js.map
@@ -0,0 +1,56 @@
1
+ import {
2
+ combineRevokes,
3
+ confirmDanglingRemoval,
4
+ revocableRecord,
5
+ revokeFields,
6
+ revokeProfileSession,
7
+ runLogoutCommand,
8
+ salvageRevocable,
9
+ signInAgain,
10
+ warnRevokeFailed
11
+ } from "./chunk-ELP2HMXC.js";
12
+ import "./chunk-65HWOMGV.js";
13
+ import "./chunk-ET4Y4XCB.js";
14
+ import "./chunk-5QU2P5CA.js";
15
+ import "./chunk-ZYJP6BOO.js";
16
+ import "./chunk-QO6BVGS5.js";
17
+ import "./chunk-JZGVVJSI.js";
18
+ import "./chunk-T5KELPAR.js";
19
+ import "./chunk-622HUCZT.js";
20
+ import "./chunk-NAQDMEHV.js";
21
+ import "./chunk-FWD7AL6N.js";
22
+ import "./chunk-4KHEMC32.js";
23
+ import "./chunk-TLQE7ZN3.js";
24
+ import "./chunk-XW6KISBB.js";
25
+ import "./chunk-AWQ7BQTQ.js";
26
+ import "./chunk-EUUUMY7J.js";
27
+ import "./chunk-YLDALTWZ.js";
28
+ import "./chunk-5FBYXK5P.js";
29
+ import "./chunk-LLNZGEFK.js";
30
+ import "./chunk-QXTKSOFI.js";
31
+ import "./chunk-X2NL4KUO.js";
32
+ import "./chunk-PTHVMXZI.js";
33
+ import "./chunk-UTI5G6OJ.js";
34
+ import "./chunk-2EZ3ZJZZ.js";
35
+ import "./chunk-6MR5TI5V.js";
36
+ import "./chunk-5ZSO4T2G.js";
37
+ import "./chunk-XNCP4KYO.js";
38
+ import "./chunk-TFFGOFVZ.js";
39
+ import "./chunk-NZOWWHU5.js";
40
+ import "./chunk-4BW2SG2N.js";
41
+ import "./chunk-CIMQZRRE.js";
42
+ import "./chunk-OHX6MIUZ.js";
43
+ import "./chunk-36JUQZVQ.js";
44
+ import "./chunk-PZ5AY32C.js";
45
+ export {
46
+ combineRevokes,
47
+ confirmDanglingRemoval,
48
+ revocableRecord,
49
+ revokeFields,
50
+ revokeProfileSession,
51
+ runLogoutCommand,
52
+ salvageRevocable,
53
+ signInAgain,
54
+ warnRevokeFailed
55
+ };
56
+ //# sourceMappingURL=logout-command-WOIQLDP6.js.map