@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.
- package/LICENSE +21 -0
- package/README.md +48 -2
- package/dist/cjs/browser-discovery.js +23 -0
- package/dist/cjs/browser-discovery.js.map +1 -0
- package/dist/cjs/client.js +51 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/connect.js +87 -0
- package/dist/cjs/connect.js.map +1 -0
- package/dist/cjs/errors.js +52 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/events.js +173 -0
- package/dist/cjs/events.js.map +1 -0
- package/dist/cjs/generated/sdk/client/client.gen.js +221 -0
- package/dist/cjs/generated/sdk/client/client.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/client/index.js +18 -0
- package/dist/cjs/generated/sdk/client/index.js.map +1 -0
- package/dist/cjs/generated/sdk/client/types.gen.js +4 -0
- package/dist/cjs/generated/sdk/client/types.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/client/utils.gen.js +240 -0
- package/dist/cjs/generated/sdk/client/utils.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/client.gen.js +7 -0
- package/dist/cjs/generated/sdk/client.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/auth.gen.js +19 -0
- package/dist/cjs/generated/sdk/core/auth.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/bodySerializer.gen.js +61 -0
- package/dist/cjs/generated/sdk/core/bodySerializer.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/params.gen.js +113 -0
- package/dist/cjs/generated/sdk/core/params.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/pathSerializer.gen.js +116 -0
- package/dist/cjs/generated/sdk/core/pathSerializer.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/queryKeySerializer.gen.js +99 -0
- package/dist/cjs/generated/sdk/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/serverSentEvents.gen.js +137 -0
- package/dist/cjs/generated/sdk/core/serverSentEvents.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/types.gen.js +4 -0
- package/dist/cjs/generated/sdk/core/types.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/core/utils.gen.js +94 -0
- package/dist/cjs/generated/sdk/core/utils.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/index.js +38 -0
- package/dist/cjs/generated/sdk/index.js.map +1 -0
- package/dist/cjs/generated/sdk/sdk.gen.js +5563 -0
- package/dist/cjs/generated/sdk/sdk.gen.js.map +1 -0
- package/dist/cjs/generated/sdk/types.gen.js +4 -0
- package/dist/cjs/generated/sdk/types.gen.js.map +1 -0
- package/dist/cjs/generated/sse/client/client.gen.js +221 -0
- package/dist/cjs/generated/sse/client/client.gen.js.map +1 -0
- package/dist/cjs/generated/sse/client/index.js +18 -0
- package/dist/cjs/generated/sse/client/index.js.map +1 -0
- package/dist/cjs/generated/sse/client/types.gen.js +4 -0
- package/dist/cjs/generated/sse/client/types.gen.js.map +1 -0
- package/dist/cjs/generated/sse/client/utils.gen.js +240 -0
- package/dist/cjs/generated/sse/client/utils.gen.js.map +1 -0
- package/dist/cjs/generated/sse/client.gen.js +7 -0
- package/dist/cjs/generated/sse/client.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/auth.gen.js +19 -0
- package/dist/cjs/generated/sse/core/auth.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/bodySerializer.gen.js +61 -0
- package/dist/cjs/generated/sse/core/bodySerializer.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/params.gen.js +113 -0
- package/dist/cjs/generated/sse/core/params.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/pathSerializer.gen.js +116 -0
- package/dist/cjs/generated/sse/core/pathSerializer.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/queryKeySerializer.gen.js +99 -0
- package/dist/cjs/generated/sse/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/serverSentEvents.gen.js +137 -0
- package/dist/cjs/generated/sse/core/serverSentEvents.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/types.gen.js +4 -0
- package/dist/cjs/generated/sse/core/types.gen.js.map +1 -0
- package/dist/cjs/generated/sse/core/utils.gen.js +94 -0
- package/dist/cjs/generated/sse/core/utils.gen.js.map +1 -0
- package/dist/cjs/generated/sse/index.js +19 -0
- package/dist/cjs/generated/sse/index.js.map +1 -0
- package/dist/cjs/generated/sse/sdk.gen.js +123 -0
- package/dist/cjs/generated/sse/sdk.gen.js.map +1 -0
- package/dist/cjs/generated/sse/types.gen.js +4 -0
- package/dist/cjs/generated/sse/types.gen.js.map +1 -0
- package/dist/cjs/index-node.js +28 -0
- package/dist/cjs/index-node.js.map +1 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/node-binary.js +53 -0
- package/dist/cjs/node-binary.js.map +1 -0
- package/dist/cjs/node-discovery.js +95 -0
- package/dist/cjs/node-discovery.js.map +1 -0
- package/dist/cjs/node-process.js +113 -0
- package/dist/cjs/node-process.js.map +1 -0
- package/dist/cjs/node.js +137 -0
- package/dist/cjs/node.js.map +1 -0
- package/dist/cjs/operation-types.js +3 -0
- package/dist/cjs/operation-types.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/prompt.js +183 -0
- package/dist/cjs/prompt.js.map +1 -0
- package/dist/cjs/version.js +6 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/browser-discovery.js +20 -0
- package/dist/esm/browser-discovery.js.map +1 -0
- package/dist/esm/client.js +47 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/connect.js +83 -0
- package/dist/esm/connect.js.map +1 -0
- package/dist/esm/errors.js +43 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/events.js +137 -0
- package/dist/esm/events.js.map +1 -0
- package/dist/esm/generated/sdk/client/client.gen.js +217 -0
- package/dist/esm/generated/sdk/client/client.gen.js.map +1 -0
- package/dist/esm/generated/sdk/client/index.js +7 -0
- package/dist/esm/generated/sdk/client/index.js.map +1 -0
- package/dist/esm/generated/sdk/client/types.gen.js +3 -0
- package/dist/esm/generated/sdk/client/types.gen.js.map +1 -0
- package/dist/esm/generated/sdk/client/utils.gen.js +229 -0
- package/dist/esm/generated/sdk/client/utils.gen.js.map +1 -0
- package/dist/esm/generated/sdk/client.gen.js +4 -0
- package/dist/esm/generated/sdk/client.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/auth.gen.js +15 -0
- package/dist/esm/generated/sdk/core/auth.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/bodySerializer.gen.js +58 -0
- package/dist/esm/generated/sdk/core/bodySerializer.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/params.gen.js +110 -0
- package/dist/esm/generated/sdk/core/params.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/pathSerializer.gen.js +107 -0
- package/dist/esm/generated/sdk/core/pathSerializer.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/queryKeySerializer.gen.js +93 -0
- package/dist/esm/generated/sdk/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/serverSentEvents.gen.js +134 -0
- package/dist/esm/generated/sdk/core/serverSentEvents.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/types.gen.js +3 -0
- package/dist/esm/generated/sdk/core/types.gen.js.map +1 -0
- package/dist/esm/generated/sdk/core/utils.gen.js +88 -0
- package/dist/esm/generated/sdk/core/utils.gen.js.map +1 -0
- package/dist/esm/generated/sdk/index.js +3 -0
- package/dist/esm/generated/sdk/index.js.map +1 -0
- package/dist/esm/generated/sdk/sdk.gen.js +5528 -0
- package/dist/esm/generated/sdk/sdk.gen.js.map +1 -0
- package/dist/esm/generated/sdk/types.gen.js +3 -0
- package/dist/esm/generated/sdk/types.gen.js.map +1 -0
- package/dist/esm/generated/sse/client/client.gen.js +217 -0
- package/dist/esm/generated/sse/client/client.gen.js.map +1 -0
- package/dist/esm/generated/sse/client/index.js +7 -0
- package/dist/esm/generated/sse/client/index.js.map +1 -0
- package/dist/esm/generated/sse/client/types.gen.js +3 -0
- package/dist/esm/generated/sse/client/types.gen.js.map +1 -0
- package/dist/esm/generated/sse/client/utils.gen.js +229 -0
- package/dist/esm/generated/sse/client/utils.gen.js.map +1 -0
- package/dist/esm/generated/sse/client.gen.js +4 -0
- package/dist/esm/generated/sse/client.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/auth.gen.js +15 -0
- package/dist/esm/generated/sse/core/auth.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/bodySerializer.gen.js +58 -0
- package/dist/esm/generated/sse/core/bodySerializer.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/params.gen.js +110 -0
- package/dist/esm/generated/sse/core/params.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/pathSerializer.gen.js +107 -0
- package/dist/esm/generated/sse/core/pathSerializer.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/queryKeySerializer.gen.js +93 -0
- package/dist/esm/generated/sse/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/serverSentEvents.gen.js +134 -0
- package/dist/esm/generated/sse/core/serverSentEvents.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/types.gen.js +3 -0
- package/dist/esm/generated/sse/core/types.gen.js.map +1 -0
- package/dist/esm/generated/sse/core/utils.gen.js +88 -0
- package/dist/esm/generated/sse/core/utils.gen.js.map +1 -0
- package/dist/esm/generated/sse/index.js +3 -0
- package/dist/esm/generated/sse/index.js.map +1 -0
- package/dist/esm/generated/sse/sdk.gen.js +107 -0
- package/dist/esm/generated/sse/sdk.gen.js.map +1 -0
- package/dist/esm/generated/sse/types.gen.js +3 -0
- package/dist/esm/generated/sse/types.gen.js.map +1 -0
- package/dist/esm/index-node.js +10 -0
- package/dist/esm/index-node.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/node-binary.js +50 -0
- package/dist/esm/node-binary.js.map +1 -0
- package/dist/esm/node-discovery.js +89 -0
- package/dist/esm/node-discovery.js.map +1 -0
- package/dist/esm/node-process.js +106 -0
- package/dist/esm/node-process.js.map +1 -0
- package/dist/esm/node.js +119 -0
- package/dist/esm/node.js.map +1 -0
- package/dist/esm/operation-types.js +2 -0
- package/dist/esm/operation-types.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/prompt.js +178 -0
- package/dist/esm/prompt.js.map +1 -0
- package/dist/esm/version.js +3 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/types/browser-discovery.d.ts +9 -0
- package/dist/types/browser-discovery.d.ts.map +1 -0
- package/dist/types/client.d.ts +19 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/connect.d.ts +33 -0
- package/dist/types/connect.d.ts.map +1 -0
- package/dist/types/errors.d.ts +22 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/events.d.ts +11 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/generated/openapi/compozy-openapi.d.ts +51499 -0
- package/dist/types/generated/sdk/client/client.gen.d.ts +3 -0
- package/dist/types/generated/sdk/client/client.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/client/index.d.ts +11 -0
- package/dist/types/generated/sdk/client/index.d.ts.map +1 -0
- package/dist/types/generated/sdk/client/types.gen.d.ts +121 -0
- package/dist/types/generated/sdk/client/types.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/client/utils.gen.d.ts +38 -0
- package/dist/types/generated/sdk/client/utils.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/client.gen.d.ts +13 -0
- package/dist/types/generated/sdk/client.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/auth.gen.d.ts +26 -0
- package/dist/types/generated/sdk/core/auth.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/bodySerializer.gen.d.ts +26 -0
- package/dist/types/generated/sdk/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/params.gen.d.ts +44 -0
- package/dist/types/generated/sdk/core/params.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/pathSerializer.gen.d.ts +34 -0
- package/dist/types/generated/sdk/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/types/generated/sdk/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/types/generated/sdk/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/types.gen.d.ts +84 -0
- package/dist/types/generated/sdk/core/types.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/core/utils.gen.d.ts +20 -0
- package/dist/types/generated/sdk/core/utils.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/index.d.ts +3 -0
- package/dist/types/generated/sdk/index.d.ts.map +1 -0
- package/dist/types/generated/sdk/sdk.gen.d.ts +1992 -0
- package/dist/types/generated/sdk/sdk.gen.d.ts.map +1 -0
- package/dist/types/generated/sdk/types.gen.d.ts +30514 -0
- package/dist/types/generated/sdk/types.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/client/client.gen.d.ts +3 -0
- package/dist/types/generated/sse/client/client.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/client/index.d.ts +11 -0
- package/dist/types/generated/sse/client/index.d.ts.map +1 -0
- package/dist/types/generated/sse/client/types.gen.d.ts +121 -0
- package/dist/types/generated/sse/client/types.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/client/utils.gen.d.ts +38 -0
- package/dist/types/generated/sse/client/utils.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/client.gen.d.ts +13 -0
- package/dist/types/generated/sse/client.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/auth.gen.d.ts +26 -0
- package/dist/types/generated/sse/core/auth.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/bodySerializer.gen.d.ts +26 -0
- package/dist/types/generated/sse/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/params.gen.d.ts +44 -0
- package/dist/types/generated/sse/core/params.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/pathSerializer.gen.d.ts +34 -0
- package/dist/types/generated/sse/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/types/generated/sse/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/types/generated/sse/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/types.gen.d.ts +84 -0
- package/dist/types/generated/sse/core/types.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/core/utils.gen.d.ts +20 -0
- package/dist/types/generated/sse/core/utils.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/index.d.ts +3 -0
- package/dist/types/generated/sse/index.d.ts.map +1 -0
- package/dist/types/generated/sse/sdk.gen.d.ts +68 -0
- package/dist/types/generated/sse/sdk.gen.d.ts.map +1 -0
- package/dist/types/generated/sse/types.gen.d.ts +1414 -0
- package/dist/types/generated/sse/types.gen.d.ts.map +1 -0
- package/dist/types/index-node.d.ts +10 -0
- package/dist/types/index-node.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/node-binary.d.ts +2 -0
- package/dist/types/node-binary.d.ts.map +1 -0
- package/dist/types/node-discovery.d.ts +16 -0
- package/dist/types/node-discovery.d.ts.map +1 -0
- package/dist/types/node-process.d.ts +18 -0
- package/dist/types/node-process.d.ts.map +1 -0
- package/dist/types/node.d.ts +21 -0
- package/dist/types/node.d.ts.map +1 -0
- package/dist/types/operation-types.d.ts +48 -0
- package/dist/types/operation-types.d.ts.map +1 -0
- package/dist/types/prompt.d.ts +128 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/version.d.ts +3 -0
- package/dist/types/version.d.ts.map +1 -0
- package/package.json +56 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NauckGroup LTDA
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,49 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @compozy/client
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A zero-dependency TypeScript client for applications built on CompozyOS. Supports Node 18+, Bun,
|
|
4
|
+
Deno, browsers, and edge runtimes. The daemon remains a separate service.
|
|
5
|
+
|
|
6
|
+
> Experimental in this release: names and shapes may change in the next release without a deprecation window. Pin the exact version.
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import { Compozy } from "@compozy/client";
|
|
10
|
+
|
|
11
|
+
const compozy = await Compozy.connect();
|
|
12
|
+
const { workspace } = await compozy.workspaces.resolveWorkspace({ body: { path: process.cwd() } });
|
|
13
|
+
const { session } = await compozy.sessions.createSession({
|
|
14
|
+
body: { workspace: workspace.id, agent_name: "claude" },
|
|
15
|
+
});
|
|
16
|
+
const reply = await compozy.prompt({
|
|
17
|
+
workspaceId: workspace.id,
|
|
18
|
+
sessionId: session.id,
|
|
19
|
+
message: "Summarize this repository.",
|
|
20
|
+
});
|
|
21
|
+
if (reply.kind === "stream") {
|
|
22
|
+
for await (const chunk of reply.chunks) {
|
|
23
|
+
if (chunk.type === "text-delta") process.stdout.write(chunk.delta);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Node discovery checks `baseUrl`, `COMPOZY_URL`, the `daemon.json` in `home`/`COMPOZY_HOME`/`~/.compozy`,
|
|
29
|
+
then `http://127.0.0.1:2123`. Browsers default to `http://localhost:2123`. Pass `token` for an app token;
|
|
30
|
+
Node also reads `COMPOZY_APP_TOKEN`. All operations accept an abort signal.
|
|
31
|
+
|
|
32
|
+
Use `promptResponse()` in a server route to forward the AI SDK UI message stream unchanged. Read
|
|
33
|
+
other SSE operations through `events(operationId, options)`, which reconnects with `Last-Event-ID`
|
|
34
|
+
after network or server failures. Client errors stop immediately; 20 consecutive failures stop the
|
|
35
|
+
stream. Aborting a prompt stops reading without canceling the daemon's turn.
|
|
36
|
+
|
|
37
|
+
Prompt helpers generate a command identity when `idempotencyKey` is omitted. Supply the same key
|
|
38
|
+
when retrying the same input to preserve its message identity and replay the daemon's receipt.
|
|
39
|
+
|
|
40
|
+
The Node-only `@compozy/client/node` entry adds `Compozy.start({ home })` and
|
|
41
|
+
`close({ stopDaemon: true })`. It only stops the daemon this instance started while the same home
|
|
42
|
+
still names the owned process. Shutdown signals the retained child handle and waits for its exit,
|
|
43
|
+
so a daemon that replaces it cannot become the stop target. The main browser entry contains no Node modules.
|
|
44
|
+
|
|
45
|
+
Generated resource methods cover JSON operations. Exported `paths`, `operations`, `components`, and
|
|
46
|
+
`Operation*` helpers also work with other HTTP clients. There is no dependency on React or `ai`.
|
|
47
|
+
|
|
48
|
+
See [Build an app](https://compozy.com/docs/apps), [chat UI](https://compozy.com/docs/apps/chat-ui), and
|
|
49
|
+
[browser access](https://compozy.com/docs/apps/browser) for tutorials and API reference samples.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.discover = discover;
|
|
4
|
+
const errors_js_1 = require("./errors.js");
|
|
5
|
+
/** Replaces Node discovery in browser bundles; this module never reads process or files. */
|
|
6
|
+
async function discover(options) {
|
|
7
|
+
const value = options.baseUrl ?? "http://localhost:2123";
|
|
8
|
+
try {
|
|
9
|
+
const url = new URL(value);
|
|
10
|
+
if (!["http:", "https:"].includes(url.protocol) ||
|
|
11
|
+
url.username ||
|
|
12
|
+
url.password ||
|
|
13
|
+
url.search ||
|
|
14
|
+
url.hash) {
|
|
15
|
+
throw new Error("expected an HTTP(S) URL without credentials, query, or fragment");
|
|
16
|
+
}
|
|
17
|
+
return { baseUrl: url.href.replace(/\/$/, "") };
|
|
18
|
+
}
|
|
19
|
+
catch (cause) {
|
|
20
|
+
throw new errors_js_1.CompozyConfigError("Invalid baseUrl: expected an absolute HTTP(S) URL", { cause });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=browser-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-discovery.js","sourceRoot":"","sources":["../../src/browser-discovery.ts"],"names":[],"mappings":";;;AAAA,2CAAiD;AAEjD,4FAA4F;AACrF,KAAK,mBAAmB,OAG9B;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,IAAI,uBAAuB,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,IACE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC3C,GAAG,CAAC,QAAQ;YACZ,GAAG,CAAC,QAAQ;YACZ,GAAG,CAAC,MAAM;YACV,GAAG,CAAC,IAAI,EACR,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,8BAAkB,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Compozy = void 0;
|
|
4
|
+
const browser_discovery_js_1 = require("./browser-discovery.js");
|
|
5
|
+
const connect_js_1 = require("./connect.js");
|
|
6
|
+
const errors_js_1 = require("./errors.js");
|
|
7
|
+
const events_js_1 = require("./events.js");
|
|
8
|
+
const index_js_1 = require("./generated/sdk/client/index.js");
|
|
9
|
+
const sdk_gen_js_1 = require("./generated/sdk/sdk.gen.js");
|
|
10
|
+
const prompt_js_1 = require("./prompt.js");
|
|
11
|
+
/** Public application client. Construct a connected instance with Compozy.connect(). */
|
|
12
|
+
class Compozy extends sdk_gen_js_1.Compozy {
|
|
13
|
+
static discovery = browser_discovery_js_1.discover;
|
|
14
|
+
createPromptId = prompt_js_1.createPromptId;
|
|
15
|
+
daemon;
|
|
16
|
+
state;
|
|
17
|
+
constructor(state) {
|
|
18
|
+
const client = (0, index_js_1.createClient)({
|
|
19
|
+
baseUrl: state.baseUrl,
|
|
20
|
+
headers: state.headers,
|
|
21
|
+
fetch: state.fetch,
|
|
22
|
+
throwOnError: true,
|
|
23
|
+
responseStyle: "data",
|
|
24
|
+
});
|
|
25
|
+
client.interceptors.error.use((error, response) => {
|
|
26
|
+
if (error instanceof Error)
|
|
27
|
+
return error;
|
|
28
|
+
return response ? new errors_js_1.CompozyApiError(response.status, error, response.statusText) : error;
|
|
29
|
+
});
|
|
30
|
+
super({ client });
|
|
31
|
+
this.state = state;
|
|
32
|
+
this.daemon = state.daemon;
|
|
33
|
+
}
|
|
34
|
+
static connection(options) {
|
|
35
|
+
return (0, connect_js_1.connect)(options, this.discovery);
|
|
36
|
+
}
|
|
37
|
+
static async connect(options = {}) {
|
|
38
|
+
return new this(await this.connection(options));
|
|
39
|
+
}
|
|
40
|
+
prompt(input) {
|
|
41
|
+
return (0, prompt_js_1.prompt)(this.state, input, this.createPromptId);
|
|
42
|
+
}
|
|
43
|
+
promptResponse(input) {
|
|
44
|
+
return (0, prompt_js_1.promptResponse)(this.state, input, this.createPromptId);
|
|
45
|
+
}
|
|
46
|
+
events(operationId, options) {
|
|
47
|
+
return (0, events_js_1.events)(this.state, operationId, options);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Compozy = Compozy;
|
|
51
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;AAAA,iEAAkD;AAClD,6CAMsB;AACtB,2CAA8C;AAC9C,2CAMqB;AACrB,8DAA+D;AAC/D,2DAAyE;AACzE,2CAMqB;AAIrB,wFAAwF;AACxF,aAAqB,SAAQ,oBAAgB;IACjC,MAAM,CAAC,SAAS,GAAc,+BAAQ,CAAC;IACvC,cAAc,GAAG,0BAAc,CAAC;IACjC,MAAM,CAAiB;IACb,KAAK,CAAiB;IAEzC,YAAsB,KAAqB;QACzC,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAChD,IAAI,KAAK,YAAY,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,2BAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7F,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;IAES,MAAM,CAAC,UAAU,CAAC,OAAuB;QACjD,OAAO,IAAA,oBAAO,EAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,GAAmB,EAAE;QAC/C,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,OAAO,IAAA,kBAAM,EAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAED,cAAc,CAAC,KAAkB;QAC/B,OAAO,IAAA,0BAAc,EAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CACJ,WAAe,EACf,OAAuB;QAEvB,OAAO,IAAA,kBAAM,EAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.connect = connect;
|
|
4
|
+
exports.checkVersion = checkVersion;
|
|
5
|
+
const errors_js_1 = require("./errors.js");
|
|
6
|
+
const version_js_1 = require("./version.js");
|
|
7
|
+
async function connect(options, discover) {
|
|
8
|
+
const target = await discover(options);
|
|
9
|
+
const timeoutMs = options.timeoutMs ?? 5000;
|
|
10
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
11
|
+
throw new errors_js_1.CompozyConfigError("connect timeoutMs must be a positive number.");
|
|
12
|
+
}
|
|
13
|
+
const headers = new Headers({ "X-Compozy-Client-ID": options.clientId ?? "sdk-ts" });
|
|
14
|
+
const token = options.token ?? target.token;
|
|
15
|
+
if (token)
|
|
16
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
17
|
+
const transport = options.fetch ?? globalThis.fetch;
|
|
18
|
+
if (!transport)
|
|
19
|
+
throw new errors_js_1.CompozyConfigError("This runtime must provide fetch or a fetch option.");
|
|
20
|
+
const fetch = async (input, init) => {
|
|
21
|
+
try {
|
|
22
|
+
return await transport(input, init);
|
|
23
|
+
}
|
|
24
|
+
catch (cause) {
|
|
25
|
+
if (init?.signal?.aborted || (input instanceof Request && input.signal.aborted))
|
|
26
|
+
throw cause;
|
|
27
|
+
throw new errors_js_1.CompozyUnavailableError("CompozyOS daemon is unavailable. Run `compozy daemon start`.", { cause });
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const controller = new AbortController();
|
|
31
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
32
|
+
try {
|
|
33
|
+
const response = await fetch(`${target.baseUrl}/api/status/identity`, {
|
|
34
|
+
headers,
|
|
35
|
+
signal: controller.signal,
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok)
|
|
38
|
+
throw await (0, errors_js_1.responseError)(response);
|
|
39
|
+
const identity = decodeIdentity(await response.json());
|
|
40
|
+
checkVersion(identity.version, options.onVersionMismatch);
|
|
41
|
+
return { baseUrl: target.baseUrl, headers, fetch, daemon: identity };
|
|
42
|
+
}
|
|
43
|
+
catch (cause) {
|
|
44
|
+
if (cause instanceof errors_js_1.CompozyApiError || cause instanceof errors_js_1.CompozyConfigError)
|
|
45
|
+
throw cause;
|
|
46
|
+
throw new errors_js_1.CompozyUnavailableError("CompozyOS daemon is unavailable. Run `compozy daemon start`.", { cause });
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
clearTimeout(timeout);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function decodeIdentity(body) {
|
|
53
|
+
if (!body ||
|
|
54
|
+
typeof body !== "object" ||
|
|
55
|
+
!("daemon" in body) ||
|
|
56
|
+
!body.daemon ||
|
|
57
|
+
typeof body.daemon !== "object") {
|
|
58
|
+
throw new errors_js_1.CompozyConfigError("Daemon identity response is invalid.");
|
|
59
|
+
}
|
|
60
|
+
const daemon = body.daemon;
|
|
61
|
+
if (typeof daemon.version !== "string" ||
|
|
62
|
+
typeof daemon.http_host !== "string" ||
|
|
63
|
+
typeof daemon.http_port !== "number" ||
|
|
64
|
+
typeof daemon.pid !== "number") {
|
|
65
|
+
throw new errors_js_1.CompozyConfigError("Daemon identity response is missing its version or listener identity.");
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
version: daemon.version,
|
|
69
|
+
httpHost: daemon.http_host,
|
|
70
|
+
httpPort: daemon.http_port,
|
|
71
|
+
pid: daemon.pid,
|
|
72
|
+
userHomeDir: typeof daemon.user_home_dir === "string" ? daemon.user_home_dir : "",
|
|
73
|
+
startedAt: typeof daemon.started_at === "string" ? daemon.started_at : "",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function checkVersion(daemon, onMismatch, client = version_js_1.CLIENT_VERSION) {
|
|
77
|
+
if (!client || !daemon || client === "0.0.0-dev" || daemon === "0.0.0-dev")
|
|
78
|
+
return;
|
|
79
|
+
const majorMinor = (version) => /^v?(\d+)\.(\d+)(?:\.|$)/.exec(version)?.slice(1).join(".");
|
|
80
|
+
const clientVersion = majorMinor(client);
|
|
81
|
+
const daemonVersion = majorMinor(daemon);
|
|
82
|
+
if (!clientVersion || !daemonVersion || clientVersion === daemonVersion)
|
|
83
|
+
return;
|
|
84
|
+
(onMismatch ??
|
|
85
|
+
(versions => console.warn(`CompozyOS client ${versions.client} differs from daemon ${versions.daemon}.`)))({ client, daemon });
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompozyBinaryNotFoundError = exports.CompozyStreamError = exports.CompozyConfigError = exports.CompozyUnavailableError = exports.CompozyApiError = void 0;
|
|
4
|
+
exports.responseError = responseError;
|
|
5
|
+
/** The daemon returned an HTTP error. Secrets and request headers are never retained. */
|
|
6
|
+
class CompozyApiError extends Error {
|
|
7
|
+
status;
|
|
8
|
+
code;
|
|
9
|
+
details;
|
|
10
|
+
currentTurnId;
|
|
11
|
+
constructor(status, body, statusText = "") {
|
|
12
|
+
const payload = body !== null && typeof body === "object" ? body : {};
|
|
13
|
+
const field = (key) => {
|
|
14
|
+
const value = Reflect.get(payload, key);
|
|
15
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
16
|
+
};
|
|
17
|
+
super(field("error") ?? field("message") ?? (statusText || `HTTP ${status}`));
|
|
18
|
+
this.name = "CompozyApiError";
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.code = field("code") ?? `http_${status}`;
|
|
21
|
+
this.details = Reflect.get(payload, "details");
|
|
22
|
+
this.currentTurnId = field("current_turn_id");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.CompozyApiError = CompozyApiError;
|
|
26
|
+
class CompozyUnavailableError extends Error {
|
|
27
|
+
name = "CompozyUnavailableError";
|
|
28
|
+
}
|
|
29
|
+
exports.CompozyUnavailableError = CompozyUnavailableError;
|
|
30
|
+
class CompozyConfigError extends Error {
|
|
31
|
+
name = "CompozyConfigError";
|
|
32
|
+
}
|
|
33
|
+
exports.CompozyConfigError = CompozyConfigError;
|
|
34
|
+
class CompozyStreamError extends Error {
|
|
35
|
+
name = "CompozyStreamError";
|
|
36
|
+
}
|
|
37
|
+
exports.CompozyStreamError = CompozyStreamError;
|
|
38
|
+
class CompozyBinaryNotFoundError extends Error {
|
|
39
|
+
name = "CompozyBinaryNotFoundError";
|
|
40
|
+
}
|
|
41
|
+
exports.CompozyBinaryNotFoundError = CompozyBinaryNotFoundError;
|
|
42
|
+
async function responseError(response) {
|
|
43
|
+
let body;
|
|
44
|
+
try {
|
|
45
|
+
body = await response.json();
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// A proxy's non-JSON error still has a useful HTTP status.
|
|
49
|
+
}
|
|
50
|
+
return new CompozyApiError(response.status, body, response.statusText);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;;AAAA,yFAAyF;AACzF,qBAA6B,SAAQ,KAAK;IAC/B,MAAM,CAAS;IACf,IAAI,CAAS;IACb,OAAO,CAAU;IACjB,aAAa,CAAqB;IAE3C,YAAY,MAAc,EAAE,IAAa,EAAE,UAAU,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,CAAC,GAAW,EAAsB,EAAE;YAChD,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,CAAC,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,MAAM,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;CACF;;AAED,6BAAqC,SAAQ,KAAK;IACvC,IAAI,GAAG,yBAAyB,CAAC;CAC3C;;AAED,wBAAgC,SAAQ,KAAK;IAClC,IAAI,GAAG,oBAAoB,CAAC;CACtC;;AAED,wBAAgC,SAAQ,KAAK;IAClC,IAAI,GAAG,oBAAoB,CAAC;CACtC;;AAED,gCAAwC,SAAQ,KAAK;IAC1C,IAAI,GAAG,4BAA4B,CAAC;CAC9C;;AAEM,KAAK,wBAAwB,QAAkB;IACpD,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;IACD,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.events = events;
|
|
37
|
+
const errors_js_1 = require("./errors.js");
|
|
38
|
+
const index_js_1 = require("./generated/sse/client/index.js");
|
|
39
|
+
const operations = __importStar(require("./generated/sse/sdk.gen.js"));
|
|
40
|
+
/** All event feeds use the same bounded reconnect and typed-error policy. */
|
|
41
|
+
async function* events(state, operationId, options) {
|
|
42
|
+
const signal = options.signal ?? undefined;
|
|
43
|
+
let failures = 0;
|
|
44
|
+
let delay = 500;
|
|
45
|
+
let lastEventId;
|
|
46
|
+
let transcriptFence;
|
|
47
|
+
const transcriptStream = operationId === "streamSession" || operationId === "streamGlobalSession";
|
|
48
|
+
while (!signal?.aborted) {
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
const abort = () => controller.abort();
|
|
51
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
52
|
+
if (signal?.aborted)
|
|
53
|
+
abort();
|
|
54
|
+
let failure;
|
|
55
|
+
let parsedJSON = false;
|
|
56
|
+
let receivedFrame = false;
|
|
57
|
+
let frame;
|
|
58
|
+
let activeStream;
|
|
59
|
+
const headers = new Headers(state.headers);
|
|
60
|
+
headers.set("Accept", "text/event-stream");
|
|
61
|
+
if (lastEventId !== undefined)
|
|
62
|
+
headers.set("Last-Event-ID", lastEventId);
|
|
63
|
+
const client = (0, index_js_1.createClient)({
|
|
64
|
+
baseUrl: state.baseUrl,
|
|
65
|
+
headers,
|
|
66
|
+
fetch: async (input, init) => {
|
|
67
|
+
let request = new Request(input, init);
|
|
68
|
+
if (transcriptStream && transcriptFence) {
|
|
69
|
+
const url = new URL(request.url);
|
|
70
|
+
url.searchParams.set("epoch", String(transcriptFence.epoch));
|
|
71
|
+
url.searchParams.set("generation", String(transcriptFence.generation));
|
|
72
|
+
request = new Request(url, request);
|
|
73
|
+
}
|
|
74
|
+
const response = await state.fetch(request);
|
|
75
|
+
if (!response.ok)
|
|
76
|
+
throw await (0, errors_js_1.responseError)(response);
|
|
77
|
+
return response;
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
try {
|
|
81
|
+
// The operation id and its path/query remain correlated at the public boundary.
|
|
82
|
+
const invoke = operations[operationId];
|
|
83
|
+
const result = await invoke({
|
|
84
|
+
...options,
|
|
85
|
+
client,
|
|
86
|
+
signal: controller.signal,
|
|
87
|
+
sseMaxRetryAttempts: 1,
|
|
88
|
+
responseValidator: () => {
|
|
89
|
+
parsedJSON = true;
|
|
90
|
+
return Promise.resolve();
|
|
91
|
+
},
|
|
92
|
+
onSseEvent: received => {
|
|
93
|
+
if (received.id !== undefined)
|
|
94
|
+
lastEventId = received.id;
|
|
95
|
+
if (received.data === undefined)
|
|
96
|
+
return;
|
|
97
|
+
if (!parsedJSON)
|
|
98
|
+
throw new errors_js_1.CompozyStreamError(`Malformed JSON frame from ${operationId}.`);
|
|
99
|
+
parsedJSON = false;
|
|
100
|
+
if (transcriptStream &&
|
|
101
|
+
(received.event === "transcript_snapshot" || received.event === "transcript_delta") &&
|
|
102
|
+
received.data &&
|
|
103
|
+
typeof received.data === "object" &&
|
|
104
|
+
"epoch" in received.data &&
|
|
105
|
+
"generation" in received.data &&
|
|
106
|
+
typeof received.data.epoch === "number" &&
|
|
107
|
+
Number.isInteger(received.data.epoch) &&
|
|
108
|
+
received.data.epoch >= 0 &&
|
|
109
|
+
typeof received.data.generation === "number" &&
|
|
110
|
+
Number.isInteger(received.data.generation) &&
|
|
111
|
+
received.data.generation >= 0) {
|
|
112
|
+
transcriptFence = { epoch: received.data.epoch, generation: received.data.generation };
|
|
113
|
+
}
|
|
114
|
+
receivedFrame = true;
|
|
115
|
+
failures = 0;
|
|
116
|
+
delay = 500;
|
|
117
|
+
frame = {
|
|
118
|
+
data: received.data,
|
|
119
|
+
...(received.event !== undefined && { event: received.event }),
|
|
120
|
+
...(received.id !== undefined && { id: received.id }),
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
onSseError: error => {
|
|
124
|
+
failure = error;
|
|
125
|
+
controller.abort();
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
activeStream = result.stream;
|
|
129
|
+
for await (const _data of activeStream) {
|
|
130
|
+
if (signal?.aborted)
|
|
131
|
+
return;
|
|
132
|
+
if (frame) {
|
|
133
|
+
yield frame;
|
|
134
|
+
frame = undefined;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
failure = error;
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
controller.abort();
|
|
143
|
+
signal?.removeEventListener("abort", abort);
|
|
144
|
+
await activeStream?.return(undefined);
|
|
145
|
+
}
|
|
146
|
+
if (signal?.aborted)
|
|
147
|
+
return;
|
|
148
|
+
if (failure instanceof errors_js_1.CompozyStreamError ||
|
|
149
|
+
(failure instanceof errors_js_1.CompozyApiError && failure.status >= 400 && failure.status < 500))
|
|
150
|
+
throw failure;
|
|
151
|
+
if (!receivedFrame && ++failures >= 20) {
|
|
152
|
+
throw new errors_js_1.CompozyStreamError(`${operationId} failed after 20 consecutive stream attempts.`, {
|
|
153
|
+
cause: failure,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
await backoff(delay, signal);
|
|
157
|
+
delay = Math.min(delay * 2, 8000);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function backoff(ms, signal) {
|
|
161
|
+
return new Promise(resolve => {
|
|
162
|
+
const finish = () => {
|
|
163
|
+
clearTimeout(timer);
|
|
164
|
+
signal?.removeEventListener("abort", finish);
|
|
165
|
+
resolve();
|
|
166
|
+
};
|
|
167
|
+
const timer = setTimeout(finish, ms);
|
|
168
|
+
signal?.addEventListener("abort", finish, { once: true });
|
|
169
|
+
if (signal?.aborted)
|
|
170
|
+
finish();
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"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"}
|