@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,256 @@
1
+ import {
2
+ classifyFailure
3
+ } from "./chunk-A6E77GDW.js";
4
+ import {
5
+ describeWrite
6
+ } from "./chunk-4KHEMC32.js";
7
+ import {
8
+ EXIT_OUTCOME_UNKNOWN,
9
+ exitCodeOf,
10
+ explainRunFailure,
11
+ failureError,
12
+ processExitCode,
13
+ registerOperation,
14
+ warn,
15
+ writeJson,
16
+ writeTargetPayload
17
+ } from "./chunk-PTHVMXZI.js";
18
+
19
+ // src/emit/operation-result.ts
20
+ var SERVER_PROCESSING_BOUND_MS = 6e5;
21
+ function rollUp(steps) {
22
+ const ran = steps.filter((s) => s !== "skipped");
23
+ if (ran.length === 0) return "no";
24
+ if (ran.includes("no")) return "no";
25
+ if (ran.includes("unknown")) return "unknown";
26
+ return "yes";
27
+ }
28
+ var OperationBuilder = class {
29
+ operation;
30
+ startedAt;
31
+ destination;
32
+ release;
33
+ branch;
34
+ residue;
35
+ extras;
36
+ order;
37
+ checks;
38
+ state = /* @__PURE__ */ new Map();
39
+ current;
40
+ now;
41
+ /** Attached by {@link runOperation}, so `sending()` reaches the interrupt path. */
42
+ registration;
43
+ constructor(init) {
44
+ this.operation = init.operation;
45
+ this.destination = "instance" in init.destination ? { ...init.destination } : writeTargetPayload(init.destination);
46
+ this.release = { ...init.release };
47
+ this.branch = init.branch;
48
+ this.extras = { ...init.extras ?? {} };
49
+ this.order = [...init.steps];
50
+ this.checks = new Set(init.checks ?? []);
51
+ for (const s of this.order) this.state.set(s, {});
52
+ this.now = init.now ?? Date.now;
53
+ this.startedAt = this.now();
54
+ }
55
+ stepState(step) {
56
+ const st = this.state.get(step);
57
+ if (st === void 0) {
58
+ throw new Error(
59
+ `"${step}" is not a requested step of ${this.operation} (${this.order.join(", ")}).`
60
+ );
61
+ }
62
+ return st;
63
+ }
64
+ /** The release as the server stored it, once it says. */
65
+ setRelease(release) {
66
+ this.release = { ...release };
67
+ }
68
+ setBranch(branch) {
69
+ this.branch = branch;
70
+ }
71
+ /** Record what a failed write left behind, and the command that removes it. */
72
+ setResidue(residue) {
73
+ this.residue = residue === void 0 ? void 0 : { ...residue };
74
+ }
75
+ /** Set an operation-specific extra. */
76
+ set(key, value) {
77
+ this.extras[key] = value;
78
+ }
79
+ /** Enter a step. A throw from here on is attributed to it. */
80
+ begin(step) {
81
+ this.stepState(step);
82
+ this.current = step;
83
+ }
84
+ /**
85
+ * The current step's write is about to go on the wire. Call immediately
86
+ * BEFORE sending it: from here a failure of this step is classified as a
87
+ * possibly-landed write, and Ctrl-C reports it `unknown` instead of
88
+ * "Cancelled.".
89
+ */
90
+ sending() {
91
+ if (this.current === void 0)
92
+ throw new Error(
93
+ "sending() called outside a step; call begin(step) first."
94
+ );
95
+ this.stepState(this.current).sentAt = this.now();
96
+ this.registration?.markWriteSent();
97
+ }
98
+ /**
99
+ * Record a step's answer (default `yes`). A step never begun may be recorded
100
+ * directly — `skipped` for one the command had no need to run (a transfer
101
+ * that found its release already at the destination imports nothing).
102
+ */
103
+ finish(step, completed = "yes") {
104
+ this.stepState(step).completed = completed;
105
+ if (this.current === step) this.current = void 0;
106
+ }
107
+ /** The step entered and not yet finished, if any. */
108
+ get inProgress() {
109
+ return this.current;
110
+ }
111
+ /** Whether the step in progress has sent its write. */
112
+ get inProgressSent() {
113
+ return this.current !== void 0 && this.stepState(this.current).sentAt !== void 0;
114
+ }
115
+ /**
116
+ * The result as it stands.
117
+ *
118
+ * Steps are resolved in this order: a recorded answer wins; the step in
119
+ * progress takes the interrupt's or the throw's outcome (or, at a normal
120
+ * return, `unknown` if its write was sent and `no` if not); a step never
121
+ * reached after one that stopped the run is `skipped`; any other step never
122
+ * reached is `no` — it did not happen, and nothing explains why.
123
+ */
124
+ snapshot(ctx = {}) {
125
+ let latestUnknownSend;
126
+ let halted;
127
+ const stop = (name, completed) => {
128
+ halted ??= this.checks.has(name) && completed === "unknown" ? "uncarried" : "carried";
129
+ };
130
+ const steps = this.order.map((name) => {
131
+ const st = this.stepState(name);
132
+ let completed;
133
+ if (st.completed !== void 0) {
134
+ completed = st.completed;
135
+ if (completed === "no" || completed === "unknown") stop(name, completed);
136
+ } else if (name === this.current) {
137
+ completed = ctx.interrupted ? "unknown" : ctx.failure ?? (st.sentAt !== void 0 ? "unknown" : "no");
138
+ stop(name, completed);
139
+ } else {
140
+ completed = halted === "carried" ? "skipped" : "no";
141
+ }
142
+ if (completed === "unknown" && !this.checks.has(name)) {
143
+ const at = st.sentAt ?? this.startedAt;
144
+ latestUnknownSend = latestUnknownSend === void 0 ? at : Math.max(latestUnknownSend, at);
145
+ }
146
+ return { name, completed };
147
+ });
148
+ const core = {
149
+ operation: this.operation,
150
+ destination: this.destination,
151
+ release: this.release,
152
+ branch: this.branch,
153
+ // A check that could not run leaves the outcome as it was; see `checks`.
154
+ completed: rollUp(
155
+ steps.map(
156
+ (s) => this.checks.has(s.name) && s.completed === "unknown" ? "skipped" : s.completed
157
+ )
158
+ ),
159
+ steps,
160
+ startedAt: new Date(this.startedAt).toISOString()
161
+ };
162
+ if (this.residue !== void 0) core.residue = this.residue;
163
+ const resolveWith = ctx.resolveWith ?? this.registration?.resolveWith;
164
+ if (latestUnknownSend !== void 0 && resolveWith !== void 0) {
165
+ core.resolveWith = resolveWith;
166
+ core.resolveNotBefore = new Date(
167
+ latestUnknownSend + SERVER_PROCESSING_BOUND_MS
168
+ ).toISOString();
169
+ }
170
+ return { ...core, ...this.extras };
171
+ }
172
+ };
173
+ function createOperation(init) {
174
+ return new OperationBuilder(init);
175
+ }
176
+ var OperationError = class extends Error {
177
+ constructor(message, exitCode, result, options) {
178
+ super(message, options);
179
+ this.exitCode = exitCode;
180
+ this.result = result;
181
+ }
182
+ exitCode;
183
+ result;
184
+ name = "OperationError";
185
+ };
186
+ async function runOperation(op, opts, body) {
187
+ const registration = registerOperation({
188
+ machine: opts.machine,
189
+ resolveWith: opts.resolveWith,
190
+ ...opts.what === void 0 ? {} : { what: opts.what },
191
+ snapshot: ({ interrupted }) => op.snapshot({ interrupted })
192
+ });
193
+ op.registration = registration;
194
+ let failure;
195
+ let outcome;
196
+ try {
197
+ await describeWrite(
198
+ { ...opts.what === void 0 ? {} : { what: opts.what }, resolveWith: opts.resolveWith },
199
+ () => body(op)
200
+ );
201
+ } catch (caught) {
202
+ const err2 = await explainRunFailure(caught);
203
+ failure = { err: err2 };
204
+ outcome = classifyFailure(err2, { writeSent: op.inProgressSent });
205
+ }
206
+ let result;
207
+ try {
208
+ result = op.snapshot({
209
+ ...outcome === void 0 ? {} : { failure: outcome },
210
+ resolveWith: opts.resolveWith
211
+ });
212
+ } finally {
213
+ registration.clear();
214
+ op.registration = void 0;
215
+ }
216
+ const unresolved = result.resolveWith !== void 0;
217
+ if (unresolved && opts.resolveSteps !== void 0) {
218
+ const { resolveNotBefore, ...rest } = result;
219
+ result = { ...rest, resolveSteps: [...opts.resolveSteps], resolveNotBefore };
220
+ }
221
+ const err = failure?.err;
222
+ const own = exitCodeOf(err);
223
+ const statedUnknown = failure !== void 0 && ownExitCode(err) === void 0 && processExitCode(err) === EXIT_OUTCOME_UNKNOWN;
224
+ const code = unresolved || statedUnknown ? EXIT_OUTCOME_UNKNOWN : ownExitCode(err) ?? opts.exitCode ?? 1;
225
+ const message = failure === void 0 ? `${op.operation} did not complete: ${result.steps.filter((s) => s.completed !== "yes").map((s) => `${s.name} ${s.completed}`).join(", ")}.` : err instanceof Error ? err.message : String(err);
226
+ if (failure !== void 0) {
227
+ result = { ok: false, ...result, error: failureError(err, message, code) };
228
+ }
229
+ if (opts.machine) writeJson(result);
230
+ if (unresolved) {
231
+ warn(
232
+ `Outcome unknown \u2014 check with \`${result.resolveWith}\` before retrying. An "absent" answer before ${result.resolveNotBefore} is not proof: the server may still be finishing the write.`,
233
+ "operation.outcome-unknown",
234
+ opts.resolveSteps
235
+ );
236
+ }
237
+ if (failure === void 0 && result.completed === "yes") return result;
238
+ if (failure !== void 0 && code === own) throw err;
239
+ throw new OperationError(
240
+ message,
241
+ code,
242
+ result,
243
+ failure === void 0 ? void 0 : { cause: err }
244
+ );
245
+ }
246
+ function ownExitCode(err) {
247
+ const code = err?.exitCode;
248
+ return typeof code === "number" ? exitCodeOf(err) : void 0;
249
+ }
250
+
251
+ export {
252
+ createOperation,
253
+ OperationError,
254
+ runOperation
255
+ };
256
+ //# sourceMappingURL=chunk-TLHIFK4M.js.map
@@ -0,0 +1,156 @@
1
+ import {
2
+ LOCK_PAYLOAD_KEYS,
3
+ lockKey
4
+ } from "./chunk-6MR5TI5V.js";
5
+
6
+ // src/lock/landed.ts
7
+ function destinationKey(instance, dest) {
8
+ let host;
9
+ try {
10
+ host = new URL(instance).host.toLowerCase();
11
+ } catch {
12
+ host = instance.replace(/^[a-z]+:\/\//i, "").replace(/\/.*$/, "").toLowerCase();
13
+ }
14
+ return dest.kind === "workspace" ? `${host}/workspace/${dest.workspaceId}` : `${host}/${dest.kind}/${dest.name}`;
15
+ }
16
+ function isEphemeralDestinationKey(key) {
17
+ return /^[^/\s]+\/ephemeral\/[^/\s]+$/.test(key);
18
+ }
19
+ function groupNames(payload) {
20
+ const groups = /* @__PURE__ */ new Map();
21
+ for (const section of ["app", "realtime_server", "channel"]) {
22
+ const rows = payload[section];
23
+ for (const g of Array.isArray(rows) ? rows : []) {
24
+ if (g === null || typeof g !== "object") continue;
25
+ const { name, guid, id } = g;
26
+ if (typeof name !== "string") continue;
27
+ if (typeof guid === "string" && guid !== "") groups.set(guid, name);
28
+ if (typeof id === "number" && id !== 0) groups.set(`${section}#${id}`, name);
29
+ }
30
+ }
31
+ return groups;
32
+ }
33
+ function landedKeyForRow(payloadKey, row, groups) {
34
+ if (typeof row.name !== "string" || row.name === "") return void 0;
35
+ const parent = (ref, section) => {
36
+ const id = ref?.id;
37
+ if (typeof id === "string" && id !== "") return groups.get(id) ?? id;
38
+ return typeof id === "number" && id !== 0 ? groups.get(`${section}#${id}`) ?? `#${id}` : "";
39
+ };
40
+ if (payloadKey === "channel") return lockKey(payloadKey, [parent(row.server, "realtime_server"), row.name].join("|"));
41
+ if (payloadKey === "message") {
42
+ return lockKey(payloadKey, [parent(row.server, "realtime_server"), parent(row.channel, "channel"), row.name].join("|"));
43
+ }
44
+ if (payloadKey !== "query") return lockKey(payloadKey, row.name);
45
+ const verb = typeof row.verb === "string" ? row.verb : "";
46
+ const appId = row.app?.id;
47
+ const group = appId === void 0 || appId === null || appId === 0 || appId === "" ? "" : groups.get(typeof appId === "number" ? `app#${appId}` : appId) ?? "";
48
+ return lockKey("query", [group, verb, row.name].join("|"));
49
+ }
50
+ function landedIdentities(bundle) {
51
+ const payload = bundle?.payload;
52
+ const out = {};
53
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) return out;
54
+ const sections = payload;
55
+ const groups = groupNames(sections);
56
+ for (const payloadKey of LOCK_PAYLOAD_KEYS) {
57
+ const rows = sections[payloadKey];
58
+ if (!Array.isArray(rows)) continue;
59
+ for (const row of rows) {
60
+ if (row === null || typeof row !== "object") continue;
61
+ const r = row;
62
+ if (typeof r.guid !== "string" || r.guid === "") continue;
63
+ const key = landedKeyForRow(payloadKey, r, groups);
64
+ if (key === void 0) continue;
65
+ out[key] = payloadKey === "toolset" && r.type === "agent" ? { guid: r.guid, type: "agent" } : { guid: r.guid };
66
+ }
67
+ }
68
+ return out;
69
+ }
70
+ function identitiesMatchLock(identities, lock) {
71
+ const keys = Object.keys(identities);
72
+ if (keys.length === 0) return false;
73
+ return keys.every((key) => {
74
+ const entry = lock.objects[key];
75
+ if (entry?.guid !== identities[key].guid) return false;
76
+ return !key.startsWith("toolset:") || entry.type === "agent" === (identities[key].type === "agent");
77
+ });
78
+ }
79
+ function applyLanding(lock, destKey, update) {
80
+ const next = nextLandedRecord(lock.landed?.[destKey] ?? {}, update);
81
+ const landed = { ...lock.landed ?? {} };
82
+ if (Object.keys(next).length > 0) landed[destKey] = next;
83
+ else delete landed[destKey];
84
+ const objects = withoutPrunedObjects(lock.objects, update);
85
+ return Object.keys(landed).length > 0 ? { version: lock.version, objects, landed } : { version: lock.version, objects };
86
+ }
87
+ function withoutPrunedObjects(objects, update) {
88
+ const drop = Object.entries(update.removed ?? {}).filter(
89
+ ([key, entry]) => objects[key]?.guid === entry.guid && update.identities[key] === void 0
90
+ );
91
+ if (drop.length === 0) return objects;
92
+ const kept = { ...objects };
93
+ for (const [key] of drop) delete kept[key];
94
+ return kept;
95
+ }
96
+ function nextLandedRecord(before, update) {
97
+ let next;
98
+ if (update.mode === "replace") {
99
+ next = { ...update.identities };
100
+ } else {
101
+ const landingGuids = new Map(Object.entries(update.identities).map(([k, e]) => [e.guid, k]));
102
+ next = {};
103
+ for (const [key, entry] of Object.entries(before)) {
104
+ const movedTo = landingGuids.get(entry.guid);
105
+ if (movedTo !== void 0 && movedTo !== key) continue;
106
+ next[key] = entry;
107
+ }
108
+ Object.assign(next, update.identities);
109
+ }
110
+ for (const [key, entry] of Object.entries(update.removed ?? {})) {
111
+ if (next[key]?.guid === entry.guid) delete next[key];
112
+ }
113
+ return next;
114
+ }
115
+ function storedColumnsOf(record) {
116
+ const out = /* @__PURE__ */ new Map();
117
+ for (const [key, entry] of Object.entries(record ?? {})) {
118
+ if (key.startsWith("dbo:") && entry.columns !== void 0) out.set(entry.guid, entry.columns);
119
+ }
120
+ return out;
121
+ }
122
+ function withStoredColumns(identities, stored) {
123
+ if (stored === void 0) return identities;
124
+ const out = {};
125
+ for (const [key, entry] of Object.entries(identities)) {
126
+ const columns = key.startsWith("dbo:") ? stored.get(entry.guid) : void 0;
127
+ out[key] = columns === void 0 ? entry : { ...entry, columns: { ...columns } };
128
+ }
129
+ return out;
130
+ }
131
+ function withoutLanding(lock, destKey) {
132
+ if (lock.landed?.[destKey] === void 0) return lock;
133
+ const { [destKey]: _dropped, ...landed } = lock.landed;
134
+ return Object.keys(landed).length > 0 ? { version: lock.version, objects: lock.objects, landed } : { version: lock.version, objects: lock.objects };
135
+ }
136
+ function landedOn(lock, destKey) {
137
+ const record = lock.landed?.[destKey];
138
+ return record === void 0 || Object.keys(record).length === 0 ? void 0 : record;
139
+ }
140
+
141
+ export {
142
+ destinationKey,
143
+ isEphemeralDestinationKey,
144
+ groupNames,
145
+ landedKeyForRow,
146
+ landedIdentities,
147
+ identitiesMatchLock,
148
+ applyLanding,
149
+ withoutPrunedObjects,
150
+ nextLandedRecord,
151
+ storedColumnsOf,
152
+ withStoredColumns,
153
+ withoutLanding,
154
+ landedOn
155
+ };
156
+ //# sourceMappingURL=chunk-TLQE7ZN3.js.map