@compozy/client 0.0.0-stage → 0.3.0-beta.36

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 (282) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -2
  3. package/dist/cjs/browser-discovery.js +23 -0
  4. package/dist/cjs/browser-discovery.js.map +1 -0
  5. package/dist/cjs/client.js +51 -0
  6. package/dist/cjs/client.js.map +1 -0
  7. package/dist/cjs/connect.js +87 -0
  8. package/dist/cjs/connect.js.map +1 -0
  9. package/dist/cjs/errors.js +52 -0
  10. package/dist/cjs/errors.js.map +1 -0
  11. package/dist/cjs/events.js +173 -0
  12. package/dist/cjs/events.js.map +1 -0
  13. package/dist/cjs/generated/sdk/client/client.gen.js +221 -0
  14. package/dist/cjs/generated/sdk/client/client.gen.js.map +1 -0
  15. package/dist/cjs/generated/sdk/client/index.js +18 -0
  16. package/dist/cjs/generated/sdk/client/index.js.map +1 -0
  17. package/dist/cjs/generated/sdk/client/types.gen.js +4 -0
  18. package/dist/cjs/generated/sdk/client/types.gen.js.map +1 -0
  19. package/dist/cjs/generated/sdk/client/utils.gen.js +240 -0
  20. package/dist/cjs/generated/sdk/client/utils.gen.js.map +1 -0
  21. package/dist/cjs/generated/sdk/client.gen.js +7 -0
  22. package/dist/cjs/generated/sdk/client.gen.js.map +1 -0
  23. package/dist/cjs/generated/sdk/core/auth.gen.js +19 -0
  24. package/dist/cjs/generated/sdk/core/auth.gen.js.map +1 -0
  25. package/dist/cjs/generated/sdk/core/bodySerializer.gen.js +61 -0
  26. package/dist/cjs/generated/sdk/core/bodySerializer.gen.js.map +1 -0
  27. package/dist/cjs/generated/sdk/core/params.gen.js +113 -0
  28. package/dist/cjs/generated/sdk/core/params.gen.js.map +1 -0
  29. package/dist/cjs/generated/sdk/core/pathSerializer.gen.js +116 -0
  30. package/dist/cjs/generated/sdk/core/pathSerializer.gen.js.map +1 -0
  31. package/dist/cjs/generated/sdk/core/queryKeySerializer.gen.js +99 -0
  32. package/dist/cjs/generated/sdk/core/queryKeySerializer.gen.js.map +1 -0
  33. package/dist/cjs/generated/sdk/core/serverSentEvents.gen.js +137 -0
  34. package/dist/cjs/generated/sdk/core/serverSentEvents.gen.js.map +1 -0
  35. package/dist/cjs/generated/sdk/core/types.gen.js +4 -0
  36. package/dist/cjs/generated/sdk/core/types.gen.js.map +1 -0
  37. package/dist/cjs/generated/sdk/core/utils.gen.js +94 -0
  38. package/dist/cjs/generated/sdk/core/utils.gen.js.map +1 -0
  39. package/dist/cjs/generated/sdk/index.js +38 -0
  40. package/dist/cjs/generated/sdk/index.js.map +1 -0
  41. package/dist/cjs/generated/sdk/sdk.gen.js +5563 -0
  42. package/dist/cjs/generated/sdk/sdk.gen.js.map +1 -0
  43. package/dist/cjs/generated/sdk/types.gen.js +4 -0
  44. package/dist/cjs/generated/sdk/types.gen.js.map +1 -0
  45. package/dist/cjs/generated/sse/client/client.gen.js +221 -0
  46. package/dist/cjs/generated/sse/client/client.gen.js.map +1 -0
  47. package/dist/cjs/generated/sse/client/index.js +18 -0
  48. package/dist/cjs/generated/sse/client/index.js.map +1 -0
  49. package/dist/cjs/generated/sse/client/types.gen.js +4 -0
  50. package/dist/cjs/generated/sse/client/types.gen.js.map +1 -0
  51. package/dist/cjs/generated/sse/client/utils.gen.js +240 -0
  52. package/dist/cjs/generated/sse/client/utils.gen.js.map +1 -0
  53. package/dist/cjs/generated/sse/client.gen.js +7 -0
  54. package/dist/cjs/generated/sse/client.gen.js.map +1 -0
  55. package/dist/cjs/generated/sse/core/auth.gen.js +19 -0
  56. package/dist/cjs/generated/sse/core/auth.gen.js.map +1 -0
  57. package/dist/cjs/generated/sse/core/bodySerializer.gen.js +61 -0
  58. package/dist/cjs/generated/sse/core/bodySerializer.gen.js.map +1 -0
  59. package/dist/cjs/generated/sse/core/params.gen.js +113 -0
  60. package/dist/cjs/generated/sse/core/params.gen.js.map +1 -0
  61. package/dist/cjs/generated/sse/core/pathSerializer.gen.js +116 -0
  62. package/dist/cjs/generated/sse/core/pathSerializer.gen.js.map +1 -0
  63. package/dist/cjs/generated/sse/core/queryKeySerializer.gen.js +99 -0
  64. package/dist/cjs/generated/sse/core/queryKeySerializer.gen.js.map +1 -0
  65. package/dist/cjs/generated/sse/core/serverSentEvents.gen.js +137 -0
  66. package/dist/cjs/generated/sse/core/serverSentEvents.gen.js.map +1 -0
  67. package/dist/cjs/generated/sse/core/types.gen.js +4 -0
  68. package/dist/cjs/generated/sse/core/types.gen.js.map +1 -0
  69. package/dist/cjs/generated/sse/core/utils.gen.js +94 -0
  70. package/dist/cjs/generated/sse/core/utils.gen.js.map +1 -0
  71. package/dist/cjs/generated/sse/index.js +19 -0
  72. package/dist/cjs/generated/sse/index.js.map +1 -0
  73. package/dist/cjs/generated/sse/sdk.gen.js +123 -0
  74. package/dist/cjs/generated/sse/sdk.gen.js.map +1 -0
  75. package/dist/cjs/generated/sse/types.gen.js +4 -0
  76. package/dist/cjs/generated/sse/types.gen.js.map +1 -0
  77. package/dist/cjs/index-node.js +28 -0
  78. package/dist/cjs/index-node.js.map +1 -0
  79. package/dist/cjs/index.js +12 -0
  80. package/dist/cjs/index.js.map +1 -0
  81. package/dist/cjs/node-binary.js +53 -0
  82. package/dist/cjs/node-binary.js.map +1 -0
  83. package/dist/cjs/node-discovery.js +95 -0
  84. package/dist/cjs/node-discovery.js.map +1 -0
  85. package/dist/cjs/node-process.js +113 -0
  86. package/dist/cjs/node-process.js.map +1 -0
  87. package/dist/cjs/node.js +137 -0
  88. package/dist/cjs/node.js.map +1 -0
  89. package/dist/cjs/operation-types.js +3 -0
  90. package/dist/cjs/operation-types.js.map +1 -0
  91. package/dist/cjs/package.json +3 -0
  92. package/dist/cjs/prompt.js +183 -0
  93. package/dist/cjs/prompt.js.map +1 -0
  94. package/dist/cjs/version.js +6 -0
  95. package/dist/cjs/version.js.map +1 -0
  96. package/dist/esm/browser-discovery.js +20 -0
  97. package/dist/esm/browser-discovery.js.map +1 -0
  98. package/dist/esm/client.js +47 -0
  99. package/dist/esm/client.js.map +1 -0
  100. package/dist/esm/connect.js +83 -0
  101. package/dist/esm/connect.js.map +1 -0
  102. package/dist/esm/errors.js +43 -0
  103. package/dist/esm/errors.js.map +1 -0
  104. package/dist/esm/events.js +137 -0
  105. package/dist/esm/events.js.map +1 -0
  106. package/dist/esm/generated/sdk/client/client.gen.js +217 -0
  107. package/dist/esm/generated/sdk/client/client.gen.js.map +1 -0
  108. package/dist/esm/generated/sdk/client/index.js +7 -0
  109. package/dist/esm/generated/sdk/client/index.js.map +1 -0
  110. package/dist/esm/generated/sdk/client/types.gen.js +3 -0
  111. package/dist/esm/generated/sdk/client/types.gen.js.map +1 -0
  112. package/dist/esm/generated/sdk/client/utils.gen.js +229 -0
  113. package/dist/esm/generated/sdk/client/utils.gen.js.map +1 -0
  114. package/dist/esm/generated/sdk/client.gen.js +4 -0
  115. package/dist/esm/generated/sdk/client.gen.js.map +1 -0
  116. package/dist/esm/generated/sdk/core/auth.gen.js +15 -0
  117. package/dist/esm/generated/sdk/core/auth.gen.js.map +1 -0
  118. package/dist/esm/generated/sdk/core/bodySerializer.gen.js +58 -0
  119. package/dist/esm/generated/sdk/core/bodySerializer.gen.js.map +1 -0
  120. package/dist/esm/generated/sdk/core/params.gen.js +110 -0
  121. package/dist/esm/generated/sdk/core/params.gen.js.map +1 -0
  122. package/dist/esm/generated/sdk/core/pathSerializer.gen.js +107 -0
  123. package/dist/esm/generated/sdk/core/pathSerializer.gen.js.map +1 -0
  124. package/dist/esm/generated/sdk/core/queryKeySerializer.gen.js +93 -0
  125. package/dist/esm/generated/sdk/core/queryKeySerializer.gen.js.map +1 -0
  126. package/dist/esm/generated/sdk/core/serverSentEvents.gen.js +134 -0
  127. package/dist/esm/generated/sdk/core/serverSentEvents.gen.js.map +1 -0
  128. package/dist/esm/generated/sdk/core/types.gen.js +3 -0
  129. package/dist/esm/generated/sdk/core/types.gen.js.map +1 -0
  130. package/dist/esm/generated/sdk/core/utils.gen.js +88 -0
  131. package/dist/esm/generated/sdk/core/utils.gen.js.map +1 -0
  132. package/dist/esm/generated/sdk/index.js +3 -0
  133. package/dist/esm/generated/sdk/index.js.map +1 -0
  134. package/dist/esm/generated/sdk/sdk.gen.js +5528 -0
  135. package/dist/esm/generated/sdk/sdk.gen.js.map +1 -0
  136. package/dist/esm/generated/sdk/types.gen.js +3 -0
  137. package/dist/esm/generated/sdk/types.gen.js.map +1 -0
  138. package/dist/esm/generated/sse/client/client.gen.js +217 -0
  139. package/dist/esm/generated/sse/client/client.gen.js.map +1 -0
  140. package/dist/esm/generated/sse/client/index.js +7 -0
  141. package/dist/esm/generated/sse/client/index.js.map +1 -0
  142. package/dist/esm/generated/sse/client/types.gen.js +3 -0
  143. package/dist/esm/generated/sse/client/types.gen.js.map +1 -0
  144. package/dist/esm/generated/sse/client/utils.gen.js +229 -0
  145. package/dist/esm/generated/sse/client/utils.gen.js.map +1 -0
  146. package/dist/esm/generated/sse/client.gen.js +4 -0
  147. package/dist/esm/generated/sse/client.gen.js.map +1 -0
  148. package/dist/esm/generated/sse/core/auth.gen.js +15 -0
  149. package/dist/esm/generated/sse/core/auth.gen.js.map +1 -0
  150. package/dist/esm/generated/sse/core/bodySerializer.gen.js +58 -0
  151. package/dist/esm/generated/sse/core/bodySerializer.gen.js.map +1 -0
  152. package/dist/esm/generated/sse/core/params.gen.js +110 -0
  153. package/dist/esm/generated/sse/core/params.gen.js.map +1 -0
  154. package/dist/esm/generated/sse/core/pathSerializer.gen.js +107 -0
  155. package/dist/esm/generated/sse/core/pathSerializer.gen.js.map +1 -0
  156. package/dist/esm/generated/sse/core/queryKeySerializer.gen.js +93 -0
  157. package/dist/esm/generated/sse/core/queryKeySerializer.gen.js.map +1 -0
  158. package/dist/esm/generated/sse/core/serverSentEvents.gen.js +134 -0
  159. package/dist/esm/generated/sse/core/serverSentEvents.gen.js.map +1 -0
  160. package/dist/esm/generated/sse/core/types.gen.js +3 -0
  161. package/dist/esm/generated/sse/core/types.gen.js.map +1 -0
  162. package/dist/esm/generated/sse/core/utils.gen.js +88 -0
  163. package/dist/esm/generated/sse/core/utils.gen.js.map +1 -0
  164. package/dist/esm/generated/sse/index.js +3 -0
  165. package/dist/esm/generated/sse/index.js.map +1 -0
  166. package/dist/esm/generated/sse/sdk.gen.js +107 -0
  167. package/dist/esm/generated/sse/sdk.gen.js.map +1 -0
  168. package/dist/esm/generated/sse/types.gen.js +3 -0
  169. package/dist/esm/generated/sse/types.gen.js.map +1 -0
  170. package/dist/esm/index-node.js +10 -0
  171. package/dist/esm/index-node.js.map +1 -0
  172. package/dist/esm/index.js +3 -0
  173. package/dist/esm/index.js.map +1 -0
  174. package/dist/esm/node-binary.js +50 -0
  175. package/dist/esm/node-binary.js.map +1 -0
  176. package/dist/esm/node-discovery.js +89 -0
  177. package/dist/esm/node-discovery.js.map +1 -0
  178. package/dist/esm/node-process.js +106 -0
  179. package/dist/esm/node-process.js.map +1 -0
  180. package/dist/esm/node.js +119 -0
  181. package/dist/esm/node.js.map +1 -0
  182. package/dist/esm/operation-types.js +2 -0
  183. package/dist/esm/operation-types.js.map +1 -0
  184. package/dist/esm/package.json +3 -0
  185. package/dist/esm/prompt.js +178 -0
  186. package/dist/esm/prompt.js.map +1 -0
  187. package/dist/esm/version.js +3 -0
  188. package/dist/esm/version.js.map +1 -0
  189. package/dist/types/browser-discovery.d.ts +9 -0
  190. package/dist/types/browser-discovery.d.ts.map +1 -0
  191. package/dist/types/client.d.ts +19 -0
  192. package/dist/types/client.d.ts.map +1 -0
  193. package/dist/types/connect.d.ts +33 -0
  194. package/dist/types/connect.d.ts.map +1 -0
  195. package/dist/types/errors.d.ts +22 -0
  196. package/dist/types/errors.d.ts.map +1 -0
  197. package/dist/types/events.d.ts +11 -0
  198. package/dist/types/events.d.ts.map +1 -0
  199. package/dist/types/generated/openapi/compozy-openapi.d.ts +51499 -0
  200. package/dist/types/generated/sdk/client/client.gen.d.ts +3 -0
  201. package/dist/types/generated/sdk/client/client.gen.d.ts.map +1 -0
  202. package/dist/types/generated/sdk/client/index.d.ts +11 -0
  203. package/dist/types/generated/sdk/client/index.d.ts.map +1 -0
  204. package/dist/types/generated/sdk/client/types.gen.d.ts +121 -0
  205. package/dist/types/generated/sdk/client/types.gen.d.ts.map +1 -0
  206. package/dist/types/generated/sdk/client/utils.gen.d.ts +38 -0
  207. package/dist/types/generated/sdk/client/utils.gen.d.ts.map +1 -0
  208. package/dist/types/generated/sdk/client.gen.d.ts +13 -0
  209. package/dist/types/generated/sdk/client.gen.d.ts.map +1 -0
  210. package/dist/types/generated/sdk/core/auth.gen.d.ts +26 -0
  211. package/dist/types/generated/sdk/core/auth.gen.d.ts.map +1 -0
  212. package/dist/types/generated/sdk/core/bodySerializer.gen.d.ts +26 -0
  213. package/dist/types/generated/sdk/core/bodySerializer.gen.d.ts.map +1 -0
  214. package/dist/types/generated/sdk/core/params.gen.d.ts +44 -0
  215. package/dist/types/generated/sdk/core/params.gen.d.ts.map +1 -0
  216. package/dist/types/generated/sdk/core/pathSerializer.gen.d.ts +34 -0
  217. package/dist/types/generated/sdk/core/pathSerializer.gen.d.ts.map +1 -0
  218. package/dist/types/generated/sdk/core/queryKeySerializer.gen.d.ts +19 -0
  219. package/dist/types/generated/sdk/core/queryKeySerializer.gen.d.ts.map +1 -0
  220. package/dist/types/generated/sdk/core/serverSentEvents.gen.d.ts +72 -0
  221. package/dist/types/generated/sdk/core/serverSentEvents.gen.d.ts.map +1 -0
  222. package/dist/types/generated/sdk/core/types.gen.d.ts +84 -0
  223. package/dist/types/generated/sdk/core/types.gen.d.ts.map +1 -0
  224. package/dist/types/generated/sdk/core/utils.gen.d.ts +20 -0
  225. package/dist/types/generated/sdk/core/utils.gen.d.ts.map +1 -0
  226. package/dist/types/generated/sdk/index.d.ts +3 -0
  227. package/dist/types/generated/sdk/index.d.ts.map +1 -0
  228. package/dist/types/generated/sdk/sdk.gen.d.ts +1992 -0
  229. package/dist/types/generated/sdk/sdk.gen.d.ts.map +1 -0
  230. package/dist/types/generated/sdk/types.gen.d.ts +30514 -0
  231. package/dist/types/generated/sdk/types.gen.d.ts.map +1 -0
  232. package/dist/types/generated/sse/client/client.gen.d.ts +3 -0
  233. package/dist/types/generated/sse/client/client.gen.d.ts.map +1 -0
  234. package/dist/types/generated/sse/client/index.d.ts +11 -0
  235. package/dist/types/generated/sse/client/index.d.ts.map +1 -0
  236. package/dist/types/generated/sse/client/types.gen.d.ts +121 -0
  237. package/dist/types/generated/sse/client/types.gen.d.ts.map +1 -0
  238. package/dist/types/generated/sse/client/utils.gen.d.ts +38 -0
  239. package/dist/types/generated/sse/client/utils.gen.d.ts.map +1 -0
  240. package/dist/types/generated/sse/client.gen.d.ts +13 -0
  241. package/dist/types/generated/sse/client.gen.d.ts.map +1 -0
  242. package/dist/types/generated/sse/core/auth.gen.d.ts +26 -0
  243. package/dist/types/generated/sse/core/auth.gen.d.ts.map +1 -0
  244. package/dist/types/generated/sse/core/bodySerializer.gen.d.ts +26 -0
  245. package/dist/types/generated/sse/core/bodySerializer.gen.d.ts.map +1 -0
  246. package/dist/types/generated/sse/core/params.gen.d.ts +44 -0
  247. package/dist/types/generated/sse/core/params.gen.d.ts.map +1 -0
  248. package/dist/types/generated/sse/core/pathSerializer.gen.d.ts +34 -0
  249. package/dist/types/generated/sse/core/pathSerializer.gen.d.ts.map +1 -0
  250. package/dist/types/generated/sse/core/queryKeySerializer.gen.d.ts +19 -0
  251. package/dist/types/generated/sse/core/queryKeySerializer.gen.d.ts.map +1 -0
  252. package/dist/types/generated/sse/core/serverSentEvents.gen.d.ts +72 -0
  253. package/dist/types/generated/sse/core/serverSentEvents.gen.d.ts.map +1 -0
  254. package/dist/types/generated/sse/core/types.gen.d.ts +84 -0
  255. package/dist/types/generated/sse/core/types.gen.d.ts.map +1 -0
  256. package/dist/types/generated/sse/core/utils.gen.d.ts +20 -0
  257. package/dist/types/generated/sse/core/utils.gen.d.ts.map +1 -0
  258. package/dist/types/generated/sse/index.d.ts +3 -0
  259. package/dist/types/generated/sse/index.d.ts.map +1 -0
  260. package/dist/types/generated/sse/sdk.gen.d.ts +68 -0
  261. package/dist/types/generated/sse/sdk.gen.d.ts.map +1 -0
  262. package/dist/types/generated/sse/types.gen.d.ts +1414 -0
  263. package/dist/types/generated/sse/types.gen.d.ts.map +1 -0
  264. package/dist/types/index-node.d.ts +10 -0
  265. package/dist/types/index-node.d.ts.map +1 -0
  266. package/dist/types/index.d.ts +9 -0
  267. package/dist/types/index.d.ts.map +1 -0
  268. package/dist/types/node-binary.d.ts +2 -0
  269. package/dist/types/node-binary.d.ts.map +1 -0
  270. package/dist/types/node-discovery.d.ts +16 -0
  271. package/dist/types/node-discovery.d.ts.map +1 -0
  272. package/dist/types/node-process.d.ts +18 -0
  273. package/dist/types/node-process.d.ts.map +1 -0
  274. package/dist/types/node.d.ts +21 -0
  275. package/dist/types/node.d.ts.map +1 -0
  276. package/dist/types/operation-types.d.ts +48 -0
  277. package/dist/types/operation-types.d.ts.map +1 -0
  278. package/dist/types/prompt.d.ts +128 -0
  279. package/dist/types/prompt.d.ts.map +1 -0
  280. package/dist/types/version.d.ts +3 -0
  281. package/dist/types/version.d.ts.map +1 -0
  282. package/package.json +56 -4
@@ -0,0 +1,106 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdir, open } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { CompozyUnavailableError } from "./errors.js";
5
+ function environment(home) {
6
+ const env = { ...process.env, COMPOZY_HOME: home };
7
+ // Lifecycle commands are always scoped to their home, never a remote URL.
8
+ delete env.COMPOZY_URL;
9
+ return env;
10
+ }
11
+ export async function launchDaemon(binary, home) {
12
+ const logPath = join(home, "logs", "daemon-stdio.log");
13
+ await mkdir(join(home, "logs"), { recursive: true, mode: 0o700 });
14
+ const log = await open(logPath, "a", 0o600);
15
+ try {
16
+ const logOffset = (await log.stat()).size;
17
+ const child = spawn(binary, ["daemon", "start", "--foreground"], {
18
+ env: environment(home),
19
+ stdio: ["ignore", log.fd, log.fd],
20
+ detached: true,
21
+ windowsHide: true,
22
+ });
23
+ const launch = { child, logPath, logOffset };
24
+ child.once("error", error => {
25
+ launch.error = error;
26
+ });
27
+ child.once("exit", (code, signal) => {
28
+ launch.exited = { code, signal };
29
+ });
30
+ return launch;
31
+ }
32
+ finally {
33
+ await log.close();
34
+ }
35
+ }
36
+ export async function launchError(launch, reason) {
37
+ let tail = "";
38
+ try {
39
+ const log = await open(launch.logPath, "r");
40
+ try {
41
+ const size = (await log.stat()).size;
42
+ const start = Math.max(launch.logOffset, size - 8192);
43
+ const bytes = Buffer.alloc(Math.max(0, size - start));
44
+ const { bytesRead } = await log.read(bytes, 0, bytes.length, start);
45
+ tail = bytes.subarray(0, bytesRead).toString("utf8").trim();
46
+ }
47
+ finally {
48
+ await log.close();
49
+ }
50
+ }
51
+ catch {
52
+ // Preserve the startup error even when the daemon removed or rotated its log.
53
+ }
54
+ const failure = launch.error?.message;
55
+ return new CompozyUnavailableError(`compozy daemon start ${reason}.${failure ? ` ${failure}` : ""}${tail ? `\n${tail}` : ""}`, launch.error ? { cause: launch.error } : undefined);
56
+ }
57
+ export async function terminateLaunch(launch) {
58
+ const { child } = launch;
59
+ if (!child.pid || launch.exited)
60
+ return;
61
+ await new Promise((resolveExit, reject) => {
62
+ const timer = setTimeout(() => {
63
+ child.kill("SIGKILL");
64
+ }, 500);
65
+ child.once("exit", () => {
66
+ clearTimeout(timer);
67
+ resolveExit();
68
+ });
69
+ try {
70
+ child.kill("SIGTERM");
71
+ }
72
+ catch (cause) {
73
+ clearTimeout(timer);
74
+ reject(cause);
75
+ }
76
+ });
77
+ }
78
+ export function waitForLaunchExit(launch, timeoutMs) {
79
+ if (launch.exited)
80
+ return Promise.resolve();
81
+ return new Promise((resolveExit, reject) => {
82
+ const onExit = () => {
83
+ clearTimeout(timer);
84
+ resolveExit();
85
+ };
86
+ const timer = setTimeout(() => {
87
+ launch.child.off("exit", onExit);
88
+ reject(new CompozyUnavailableError("The owned daemon did not exit before the stop deadline."));
89
+ }, timeoutMs);
90
+ launch.child.once("exit", onExit);
91
+ });
92
+ }
93
+ export async function stopDaemon(launch, timeoutMs) {
94
+ // Signal the retained child handle: a second CLI discovery could target a
95
+ // replacement daemon that acquired this home after the ownership check.
96
+ if (!launch.exited) {
97
+ try {
98
+ launch.child.kill("SIGTERM");
99
+ }
100
+ catch (cause) {
101
+ throw new CompozyUnavailableError("Unable to signal the owned daemon.", { cause });
102
+ }
103
+ }
104
+ await waitForLaunchExit(launch, timeoutMs);
105
+ }
106
+ //# sourceMappingURL=node-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-process.js","sourceRoot":"","sources":["../../src/node-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { mkdir, realpath } from "node:fs/promises";
2
+ import { CompozyConfigError, CompozyUnavailableError } from "./errors.js";
3
+ import { Compozy as Client } from "./index-node.js";
4
+ import { resolveBinary } from "./node-binary.js";
5
+ import { daemonBaseUrl, readDaemonInfo, resolveHome } from "./node-discovery.js";
6
+ import { launchDaemon, launchError, stopDaemon, terminateLaunch, waitForLaunchExit, } from "./node-process.js";
7
+ export * from "./index-node.js";
8
+ /** Node-only client that can start a daemon and stop the daemon it started. */
9
+ export class Compozy extends Client {
10
+ ownedDaemon;
11
+ closing;
12
+ static async connect(options = {}) {
13
+ return new Compozy(await this.connection(options));
14
+ }
15
+ static async start(options = {}) {
16
+ const timeoutMs = options.timeoutMs ?? 30_000;
17
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
18
+ throw new CompozyConfigError("start timeoutMs must be a positive number.");
19
+ }
20
+ if (options.home !== undefined && !options.home.trim()) {
21
+ throw new CompozyConfigError("start home must be a non-empty directory path.");
22
+ }
23
+ const deadline = Date.now() + timeoutMs;
24
+ const home = await prepareHome(resolveHome(options.home));
25
+ const existing = await this.connectHome(home, options, deadline);
26
+ if (existing)
27
+ return existing;
28
+ const binary = await resolveBinary(options.binaryPath);
29
+ if (Date.now() >= deadline) {
30
+ throw new CompozyUnavailableError(`compozy daemon start timed out after ${timeoutMs}ms.`);
31
+ }
32
+ // Foreground mode avoids a second, unowned fork. The SDK detaches this exact
33
+ // process after readiness, and can terminate it even before daemon.json exists.
34
+ const launch = await launchDaemon(binary, home);
35
+ try {
36
+ while (Date.now() < deadline) {
37
+ if (launch.error || launch.exited) {
38
+ throw await launchError(launch, "exited before readiness");
39
+ }
40
+ const client = await this.connectHome(home, options, deadline, launch.child.pid);
41
+ if (client && !launch.exited && !launch.error) {
42
+ client.ownedDaemon = { home, pid: client.daemon.pid, timeoutMs, launch };
43
+ launch.child.unref();
44
+ return client;
45
+ }
46
+ await new Promise(resolveDelay => setTimeout(resolveDelay, Math.min(50, Math.max(0, deadline - Date.now()))));
47
+ }
48
+ throw await launchError(launch, `timed out after ${timeoutMs}ms waiting for readiness`);
49
+ }
50
+ catch (cause) {
51
+ await terminateLaunch(launch);
52
+ throw cause;
53
+ }
54
+ }
55
+ /** stopDaemon is effective only while this home's record still names our daemon. */
56
+ async close(options = {}) {
57
+ if (!options.stopDaemon || !this.ownedDaemon)
58
+ return;
59
+ if (this.closing)
60
+ return this.closing;
61
+ this.closing = this.stopOwnedDaemon();
62
+ try {
63
+ await this.closing;
64
+ }
65
+ finally {
66
+ this.closing = undefined;
67
+ }
68
+ }
69
+ async stopOwnedDaemon() {
70
+ const owned = this.ownedDaemon;
71
+ if (!owned)
72
+ return;
73
+ const info = await readDaemonInfo(owned.home);
74
+ if (info && info.pid !== owned.pid) {
75
+ this.ownedDaemon = undefined;
76
+ return;
77
+ }
78
+ const deadline = Date.now() + owned.timeoutMs;
79
+ if (info)
80
+ await stopDaemon(owned.launch, owned.timeoutMs);
81
+ await waitForLaunchExit(owned.launch, Math.max(0, deadline - Date.now()));
82
+ this.ownedDaemon = undefined;
83
+ }
84
+ static async connectHome(home, options, deadline, expectedPid) {
85
+ const info = await readDaemonInfo(home);
86
+ if (!info || (expectedPid !== undefined && info.pid !== expectedPid))
87
+ return undefined;
88
+ try {
89
+ const client = new Compozy(await this.connection({
90
+ ...options,
91
+ home,
92
+ baseUrl: daemonBaseUrl(info),
93
+ timeoutMs: Math.max(1, Math.min(500, deadline - Date.now())),
94
+ }));
95
+ if (client.daemon.pid !== info.pid) {
96
+ throw new CompozyConfigError("Daemon identity does not match the requested home's daemon.json pid.");
97
+ }
98
+ // Readiness and ownership must describe the same record, even during a restart.
99
+ if ((await readDaemonInfo(home))?.pid !== info.pid)
100
+ return undefined;
101
+ return client;
102
+ }
103
+ catch (error) {
104
+ if (error instanceof CompozyUnavailableError)
105
+ return undefined;
106
+ throw error;
107
+ }
108
+ }
109
+ }
110
+ async function prepareHome(home) {
111
+ try {
112
+ await mkdir(home, { recursive: true, mode: 0o700 });
113
+ return await realpath(home);
114
+ }
115
+ catch (cause) {
116
+ throw new CompozyConfigError(`Cannot use daemon home ${home}: expected an accessible directory.`, { cause });
117
+ }
118
+ }
119
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=operation-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-types.js","sourceRoot":"","sources":["../../src/operation-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,178 @@
1
+ import { CompozyStreamError, responseError } from "./errors.js";
2
+ import { createSseClient } from "./generated/sdk/core/serverSentEvents.gen.js";
3
+ export async function promptResponse(state, input, createId = createPromptId) {
4
+ const response = await sendPrompt(state, input, createId);
5
+ if (!response.ok || isStream(response) || response.status === 202)
6
+ return response;
7
+ // Queued, steered, and goal-command results all use the accepted proxy shape.
8
+ return new Response(response.body, { status: 202, headers: response.headers });
9
+ }
10
+ export async function prompt(state, input, createId = createPromptId) {
11
+ const response = await sendPrompt(state, input, createId);
12
+ if (!response.ok)
13
+ throw await responseError(response);
14
+ if (!isStream(response)) {
15
+ const body = await response.json();
16
+ if (!body ||
17
+ typeof body !== "object" ||
18
+ !("prompt" in body) ||
19
+ !body.prompt ||
20
+ typeof body.prompt !== "object") {
21
+ throw new CompozyStreamError("Prompt response is missing its accepted result.");
22
+ }
23
+ return { kind: "accepted", result: body.prompt };
24
+ }
25
+ const chunks = promptChunks(response, input.signal);
26
+ return { kind: "stream", chunks, toReadableStream: () => readable(chunks) };
27
+ }
28
+ function sendPrompt(state, input, createId) {
29
+ const key = input.idempotencyKey ?? createId();
30
+ // Reusing a caller's key must preserve the message identity as well as the receipt key.
31
+ const body = {
32
+ message: input.message,
33
+ message_id: key,
34
+ mode: input.mode,
35
+ idempotency_key: key,
36
+ expected_turn_id: input.expectedTurnId,
37
+ };
38
+ const headers = new Headers(state.headers);
39
+ headers.set("Content-Type", "application/json");
40
+ headers.set("Accept", "text/event-stream, application/json");
41
+ return state.fetch(`${state.baseUrl}/api/workspaces/${encodeURIComponent(input.workspaceId)}/sessions/${encodeURIComponent(input.sessionId)}/prompt`, {
42
+ method: "POST",
43
+ headers,
44
+ signal: input.signal,
45
+ body: JSON.stringify(body),
46
+ });
47
+ }
48
+ // Use the same UUID fallback as the Web client: getRandomValues also works on HTTP origins.
49
+ export function createPromptId() {
50
+ const cryptoApi = globalThis.crypto;
51
+ if (typeof cryptoApi?.randomUUID === "function")
52
+ return cryptoApi.randomUUID();
53
+ if (typeof cryptoApi?.getRandomValues !== "function") {
54
+ throw new Error("Cryptography is required to create a prompt identifier.");
55
+ }
56
+ const bytes = cryptoApi.getRandomValues(new Uint8Array(16));
57
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
58
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
59
+ const hex = Array.from(bytes, byte => byte.toString(16).padStart(2, "0")).join("");
60
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
61
+ }
62
+ function isStream(response) {
63
+ return response.headers.get("content-type")?.split(";", 1)[0]?.trim() === "text/event-stream";
64
+ }
65
+ async function* promptChunks(response, signal) {
66
+ const controller = new AbortController();
67
+ const abort = () => controller.abort();
68
+ signal?.addEventListener("abort", abort, { once: true });
69
+ if (signal?.aborted)
70
+ abort();
71
+ let failure;
72
+ let parsedJSON = false;
73
+ const source = response.body?.getReader();
74
+ if (!source)
75
+ throw new CompozyStreamError("Prompt stream has no body.");
76
+ let tail = "";
77
+ const body = new ReadableStream({
78
+ async pull(destination) {
79
+ const next = await source.read();
80
+ if (next.done) {
81
+ // The generated parser owns framing. Its current runtime silently discards
82
+ // an unterminated tail, so guard only the final wire delimiter here.
83
+ if (tail && !tail.replace(/\r\n/g, "\n").replace(/\r/g, "\n").endsWith("\n\n")) {
84
+ destination.error(new CompozyStreamError("Prompt stream ended mid-frame."));
85
+ }
86
+ else
87
+ destination.close();
88
+ }
89
+ else {
90
+ tail = (tail + String.fromCharCode(...next.value.subarray(-4))).slice(-4);
91
+ destination.enqueue(next.value);
92
+ }
93
+ },
94
+ async cancel() {
95
+ await source.cancel();
96
+ },
97
+ });
98
+ const { stream } = createSseClient({
99
+ url: response.url || "http://localhost/prompt",
100
+ fetch: async () => new Response(body, { headers: response.headers }),
101
+ signal: controller.signal,
102
+ sseMaxRetryAttempts: 1,
103
+ responseValidator: () => {
104
+ parsedJSON = true;
105
+ return Promise.resolve();
106
+ },
107
+ onSseEvent: ({ data }) => {
108
+ if (data === undefined)
109
+ return;
110
+ if (data === "[DONE]")
111
+ return;
112
+ if (!parsedJSON ||
113
+ !data ||
114
+ typeof data !== "object" ||
115
+ !("type" in data) ||
116
+ typeof data.type !== "string") {
117
+ throw new CompozyStreamError("Prompt stream contains a malformed UI message chunk.");
118
+ }
119
+ parsedJSON = false;
120
+ },
121
+ onSseError: error => {
122
+ failure = error;
123
+ controller.abort();
124
+ },
125
+ });
126
+ let terminated = false;
127
+ try {
128
+ for await (const data of stream) {
129
+ if (signal?.aborted)
130
+ throw new CompozyStreamError("Prompt stream was interrupted; the daemon turn continues.");
131
+ if (data === "[DONE]") {
132
+ terminated = true;
133
+ break;
134
+ }
135
+ const chunk = data;
136
+ if (chunk.type === "finish" || chunk.type === "abort")
137
+ terminated = true;
138
+ yield chunk;
139
+ }
140
+ if (failure || signal?.aborted) {
141
+ throw failure instanceof CompozyStreamError
142
+ ? failure
143
+ : new CompozyStreamError("Prompt stream was interrupted; the daemon turn continues.", {
144
+ cause: failure,
145
+ });
146
+ }
147
+ if (!terminated)
148
+ throw new CompozyStreamError("Prompt stream ended before its terminal marker.");
149
+ }
150
+ finally {
151
+ controller.abort();
152
+ signal?.removeEventListener("abort", abort);
153
+ await stream.return();
154
+ await source.cancel().catch(() => { });
155
+ source.releaseLock();
156
+ }
157
+ }
158
+ function readable(iterable) {
159
+ const iterator = iterable[Symbol.asyncIterator]();
160
+ return new ReadableStream({
161
+ async pull(controller) {
162
+ try {
163
+ const next = await iterator.next();
164
+ if (next.done)
165
+ controller.close();
166
+ else
167
+ controller.enqueue(next.value);
168
+ }
169
+ catch (error) {
170
+ controller.error(error);
171
+ }
172
+ },
173
+ async cancel() {
174
+ await iterator.return?.();
175
+ },
176
+ });
177
+ }
178
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Replaced in the published build by the release pipeline. */
2
+ export const CLIENT_VERSION = "0.3.0-beta.36";
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** Replaces Node discovery in browser bundles; this module never reads process or files. */
2
+ export declare function discover(options: {
3
+ baseUrl?: string;
4
+ home?: string;
5
+ }): Promise<{
6
+ baseUrl: string;
7
+ token?: string;
8
+ }>;
9
+ //# sourceMappingURL=browser-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-discovery.d.ts","sourceRoot":"","sources":["../../src/browser-discovery.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB/C"}
@@ -0,0 +1,19 @@
1
+ import { type ConnectedState, type ConnectOptions, type DaemonIdentity, type Discovery } from "./connect.js";
2
+ import { type SseFrame, type SseOperationId, type SseOptions, type StreamEvent } from "./events.js";
3
+ import { Compozy as GeneratedCompozy } from "./generated/sdk/sdk.gen.js";
4
+ import { createPromptId, type PromptInput, type PromptReply } from "./prompt.js";
5
+ export type { ConnectOptions, DaemonIdentity } from "./connect.js";
6
+ /** Public application client. Construct a connected instance with Compozy.connect(). */
7
+ export declare class Compozy extends GeneratedCompozy {
8
+ protected static discovery: Discovery;
9
+ protected createPromptId: typeof createPromptId;
10
+ readonly daemon: DaemonIdentity;
11
+ protected readonly state: ConnectedState;
12
+ protected constructor(state: ConnectedState);
13
+ protected static connection(options: ConnectOptions): Promise<ConnectedState>;
14
+ static connect(options?: ConnectOptions): Promise<Compozy>;
15
+ prompt(input: PromptInput): Promise<PromptReply>;
16
+ promptResponse(input: PromptInput): Promise<Response>;
17
+ events<Id extends SseOperationId>(operationId: Id, options: SseOptions<Id>): AsyncIterable<StreamEvent<SseFrame<Id>>>;
18
+ }
19
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,cAAc,EAGd,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnE,wFAAwF;AACxF,qBAAa,OAAQ,SAAQ,gBAAgB;IAC3C,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAY;IACjD,SAAS,CAAC,cAAc,wBAAkB;IAC1C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAEzC,SAAS,aAAa,KAAK,EAAE,cAAc,EAe1C;IAED,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5E;IAED,OAAa,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;IAED,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAE/C;IAED,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAEpD;IAED,MAAM,CAAC,EAAE,SAAS,cAAc,EAC9B,WAAW,EAAE,EAAE,EACf,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,GACtB,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAE1C;CACF"}
@@ -0,0 +1,33 @@
1
+ export interface ConnectOptions {
2
+ baseUrl?: string;
3
+ token?: string;
4
+ home?: string;
5
+ timeoutMs?: number;
6
+ fetch?: typeof globalThis.fetch;
7
+ clientId?: string;
8
+ onVersionMismatch?: (versions: {
9
+ client: string;
10
+ daemon: string;
11
+ }) => void;
12
+ }
13
+ export interface DaemonIdentity {
14
+ version: string;
15
+ httpHost: string;
16
+ httpPort: number;
17
+ pid: number;
18
+ userHomeDir: string;
19
+ startedAt: string;
20
+ }
21
+ export interface ConnectedState {
22
+ baseUrl: string;
23
+ headers: Headers;
24
+ fetch: typeof globalThis.fetch;
25
+ daemon: DaemonIdentity;
26
+ }
27
+ export type Discovery = (options: ConnectOptions) => Promise<{
28
+ baseUrl: string;
29
+ token?: string;
30
+ }>;
31
+ export declare function connect(options: ConnectOptions, discover: Discovery): Promise<ConnectedState>;
32
+ export declare function checkVersion(daemon: string, onMismatch: ConnectOptions["onVersionMismatch"], client?: string): void;
33
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5E;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElG,wBAAsB,OAAO,CAC3B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,SAAS,GAClB,OAAO,CAAC,cAAc,CAAC,CA2CzB;AAiCD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAC/C,MAAM,SAAiB,GACtB,IAAI,CAYN"}
@@ -0,0 +1,22 @@
1
+ /** The daemon returned an HTTP error. Secrets and request headers are never retained. */
2
+ export declare class CompozyApiError extends Error {
3
+ readonly status: number;
4
+ readonly code: string;
5
+ readonly details: unknown;
6
+ readonly currentTurnId: string | undefined;
7
+ constructor(status: number, body: unknown, statusText?: string);
8
+ }
9
+ export declare class CompozyUnavailableError extends Error {
10
+ name: string;
11
+ }
12
+ export declare class CompozyConfigError extends Error {
13
+ name: string;
14
+ }
15
+ export declare class CompozyStreamError extends Error {
16
+ name: string;
17
+ }
18
+ export declare class CompozyBinaryNotFoundError extends Error {
19
+ name: string;
20
+ }
21
+ export declare function responseError(response: Response): Promise<CompozyApiError>;
22
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,YAAY,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,SAAK,EAYzD;CACF;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACvC,IAAI,SAA6B;CAC3C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,SAAwB;CACtC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,SAAwB;CACtC;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAC1C,IAAI,SAAgC;CAC9C;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAQhF"}
@@ -0,0 +1,11 @@
1
+ import type { ConnectedState } from "./connect.js";
2
+ import type { StreamEvent } from "./generated/sse/core/serverSentEvents.gen.js";
3
+ import * as operations from "./generated/sse/sdk.gen.js";
4
+ export type { StreamEvent } from "./generated/sse/core/serverSentEvents.gen.js";
5
+ export type SseOperationId = keyof typeof operations;
6
+ type GeneratedOptions<Id extends SseOperationId> = NonNullable<Parameters<(typeof operations)[Id]>[0]>;
7
+ export type SseOptions<Id extends SseOperationId> = Pick<GeneratedOptions<Id>, Extract<keyof GeneratedOptions<Id>, "path" | "query" | "body" | "signal">>;
8
+ export type SseFrame<Id extends SseOperationId> = Awaited<ReturnType<(typeof operations)[Id]>>["stream"] extends AsyncGenerator<infer Frame> ? Frame : never;
9
+ /** All event feeds use the same bounded reconnect and typed-error policy. */
10
+ export declare function events<Id extends SseOperationId>(state: ConnectedState, operationId: Id, options: SseOptions<Id>): AsyncGenerator<StreamEvent<SseFrame<Id>>>;
11
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AAEzD,YAAY,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,UAAU,CAAC;AACrD,KAAK,gBAAgB,CAAC,EAAE,SAAS,cAAc,IAAI,WAAW,CAC5D,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;AACF,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,cAAc,IAAI,IAAI,CACtD,gBAAgB,CAAC,EAAE,CAAC,EACpB,OAAO,CAAC,MAAM,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAC1E,CAAC;AACF,MAAM,MAAM,QAAQ,CAAC,EAAE,SAAS,cAAc,IAC5C,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,cAAc,CAAC,MAAM,KAAK,CAAC,GACtF,KAAK,GACL,KAAK,CAAC;AAOZ,6EAA6E;AAC7E,wBAAuB,MAAM,CAAC,EAAE,SAAS,cAAc,EACrD,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,EAAE,EACf,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,GACtB,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAiH3C"}