@vibes.diy/api-impl 12.2.9 → 12.2.11
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibes.diy/api-impl",
|
|
3
|
-
"version": "12.2.
|
|
3
|
+
"version": "12.2.11",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@adviser/cement": "~0.5.34",
|
|
12
|
-
"@vibes.diy/api-pkg": "12.2.
|
|
13
|
-
"@vibes.diy/api-types": "12.2.
|
|
14
|
-
"@vibes.diy/call-ai-v2": "12.2.
|
|
15
|
-
"@vibes.diy/identity": "12.2.
|
|
16
|
-
"@vibes.diy/vibe-types": "12.2.
|
|
12
|
+
"@vibes.diy/api-pkg": "12.2.11",
|
|
13
|
+
"@vibes.diy/api-types": "12.2.11",
|
|
14
|
+
"@vibes.diy/call-ai-v2": "12.2.11",
|
|
15
|
+
"@vibes.diy/identity": "12.2.11",
|
|
16
|
+
"@vibes.diy/vibe-types": "12.2.11",
|
|
17
17
|
"arktype": "~2.2.3",
|
|
18
18
|
"ws": "~8.21.1"
|
|
19
19
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { VibeDiyApiConnection } from "./api-connection.js";
|
|
2
2
|
export declare function formatWsEvent(event: unknown): string;
|
|
3
|
+
export declare function createWebSocket(url: string, ca?: string[]): Promise<WebSocket>;
|
|
3
4
|
export declare function getVibesDiyWebSocketConnection(url: string, presetWs?: WebSocket, ca?: string[]): Promise<VibeDiyApiConnection>;
|
package/websocket-connection.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BuildURI, exception2Result, Future, KeyedResolvOnce, OnFunc, Result,
|
|
1
|
+
import { BuildURI, exception2Result, Future, KeyedResolvOnce, OnFunc, Result, URI } from "@adviser/cement";
|
|
2
2
|
const vibesDiyApiPerConnection = new KeyedResolvOnce();
|
|
3
3
|
export function formatWsEvent(event) {
|
|
4
4
|
if (event === null || event === undefined)
|
|
@@ -25,12 +25,12 @@ export function formatWsEvent(event) {
|
|
|
25
25
|
return Object.prototype.toString.call(event);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
async function createWebSocket(url, ca) {
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
return new ws.WebSocket(url, { ca });
|
|
28
|
+
export async function createWebSocket(url, ca) {
|
|
29
|
+
if (typeof globalThis.WebSocket !== "undefined" && ca === undefined) {
|
|
30
|
+
return new WebSocket(url);
|
|
32
31
|
}
|
|
33
|
-
|
|
32
|
+
const ws = await import("ws");
|
|
33
|
+
return new ws.WebSocket(url, { ca });
|
|
34
34
|
}
|
|
35
35
|
export function getVibesDiyWebSocketConnection(url, presetWs, ca) {
|
|
36
36
|
const wsSocketUrl = BuildURI.from(url)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-connection.js","sourceRoot":"","sources":["../jsr/websocket-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"websocket-connection.js","sourceRoot":"","sources":["../jsr/websocket-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,22 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const wsMockState = vi.hoisted(() => ({ throwOnAccess: true }));
|
|
3
|
+
class MockWsWebSocket {
|
|
4
|
+
url;
|
|
5
|
+
opts;
|
|
6
|
+
constructor(url, opts) {
|
|
7
|
+
this.url = url;
|
|
8
|
+
this.opts = opts;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
vi.mock("ws", () => ({
|
|
12
|
+
get WebSocket() {
|
|
13
|
+
if (wsMockState.throwOnAccess) {
|
|
14
|
+
throw new Error("ws should not be imported when a global WebSocket is available and no ca is set");
|
|
15
|
+
}
|
|
16
|
+
return MockWsWebSocket;
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
const { createWebSocket, formatWsEvent } = await import("./websocket-connection.js");
|
|
3
20
|
describe("formatWsEvent", () => {
|
|
4
21
|
it("returns strings verbatim", () => {
|
|
5
22
|
expect(formatWsEvent("network down")).toBe("network down");
|
|
@@ -36,4 +53,41 @@ describe("formatWsEvent", () => {
|
|
|
36
53
|
}
|
|
37
54
|
});
|
|
38
55
|
});
|
|
56
|
+
describe("createWebSocket", () => {
|
|
57
|
+
afterEach(() => {
|
|
58
|
+
vi.unstubAllGlobals();
|
|
59
|
+
wsMockState.throwOnAccess = true;
|
|
60
|
+
});
|
|
61
|
+
it("uses the global WebSocket constructor when present and no ca is configured, without importing ws", async () => {
|
|
62
|
+
class FakeGlobalWebSocket {
|
|
63
|
+
url;
|
|
64
|
+
constructor(url) {
|
|
65
|
+
this.url = url;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
vi.stubGlobal("WebSocket", FakeGlobalWebSocket);
|
|
69
|
+
const socket = await createWebSocket("wss://example.test/socket");
|
|
70
|
+
expect(socket).toBeInstanceOf(FakeGlobalWebSocket);
|
|
71
|
+
expect(socket.url).toBe("wss://example.test/socket");
|
|
72
|
+
});
|
|
73
|
+
it("still falls back to ws when a custom ca is configured, even with a global WebSocket present", async () => {
|
|
74
|
+
class FakeGlobalWebSocket {
|
|
75
|
+
url;
|
|
76
|
+
constructor(url) {
|
|
77
|
+
this.url = url;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
vi.stubGlobal("WebSocket", FakeGlobalWebSocket);
|
|
81
|
+
wsMockState.throwOnAccess = false;
|
|
82
|
+
const socket = await createWebSocket("wss://example.test/socket", ["-----BEGIN CERTIFICATE-----"]);
|
|
83
|
+
expect(socket).toBeInstanceOf(MockWsWebSocket);
|
|
84
|
+
expect(socket.opts?.ca).toEqual(["-----BEGIN CERTIFICATE-----"]);
|
|
85
|
+
});
|
|
86
|
+
it("falls back to ws when no global WebSocket is available", async () => {
|
|
87
|
+
vi.stubGlobal("WebSocket", undefined);
|
|
88
|
+
wsMockState.throwOnAccess = false;
|
|
89
|
+
const socket = await createWebSocket("wss://example.test/socket");
|
|
90
|
+
expect(socket).toBeInstanceOf(MockWsWebSocket);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
39
93
|
//# sourceMappingURL=websocket-connection.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-connection.test.js","sourceRoot":"","sources":["../jsr/websocket-connection.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket-connection.test.js","sourceRoot":"","sources":["../jsr/websocket-connection.test.ts"],"names":[],"mappings":"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"}
|