@sarxina/sarxina-tools 0.1.5 → 0.1.6
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/dist/vts/VTSClient.d.ts +44 -56
- package/dist/vts/VTSClient.d.ts.map +1 -1
- package/dist/vts/VTSClient.js +116 -70
- package/dist/vts/VTSClient.js.map +1 -1
- package/dist/vts/getForeheadPin.d.ts +26 -0
- package/dist/vts/getForeheadPin.d.ts.map +1 -0
- package/dist/vts/getForeheadPin.js +24 -0
- package/dist/vts/getForeheadPin.js.map +1 -0
- package/dist/vts/index.d.ts +2 -1
- package/dist/vts/index.d.ts.map +1 -1
- package/dist/vts/index.js +1 -0
- package/dist/vts/index.js.map +1 -1
- package/package.json +1 -1
package/dist/vts/VTSClient.d.ts
CHANGED
|
@@ -8,11 +8,6 @@ export interface VTSClientOptions {
|
|
|
8
8
|
/** Timeout for individual requests in ms. Defaults to 10000. */
|
|
9
9
|
requestTimeoutMs?: number;
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
12
|
-
* Shape of a VTube Studio API response. Responses always have a requestID
|
|
13
|
-
* that echoes the one from the request, a messageType describing what came
|
|
14
|
-
* back, and an opaque data payload.
|
|
15
|
-
*/
|
|
16
11
|
interface VTSResponse {
|
|
17
12
|
apiName: string;
|
|
18
13
|
apiVersion: string;
|
|
@@ -20,91 +15,84 @@ interface VTSResponse {
|
|
|
20
15
|
messageType: string;
|
|
21
16
|
data: Record<string, unknown>;
|
|
22
17
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Error thrown when the VTS API returns an APIError messageType.
|
|
25
|
-
*/
|
|
26
18
|
export declare class VTSApiError extends Error {
|
|
27
19
|
readonly code: number | undefined;
|
|
28
20
|
constructor(message: string, code?: number);
|
|
29
21
|
}
|
|
30
|
-
/**
|
|
31
|
-
* A connected, authenticated client for the VTube Studio API.
|
|
32
|
-
*
|
|
33
|
-
* Use the static `connect` factory to create an instance — it handles the
|
|
34
|
-
* websocket handshake and plugin authentication in one step.
|
|
35
|
-
*/
|
|
36
22
|
export declare class VTSClient {
|
|
37
23
|
private readonly ws;
|
|
38
24
|
private readonly pendingRequests;
|
|
25
|
+
private readonly eventListeners;
|
|
39
26
|
private readonly requestTimeoutMs;
|
|
40
27
|
private nextRequestId;
|
|
41
28
|
private authenticated;
|
|
42
29
|
private constructor();
|
|
43
|
-
/**
|
|
44
|
-
* Open a connection to VTube Studio and authenticate as a plugin.
|
|
45
|
-
*
|
|
46
|
-
* Authentication is a two-step handshake: the client first asks VTS for
|
|
47
|
-
* a token, the user approves the plugin in the VTS UI, and then the
|
|
48
|
-
* client uses the token to authenticate for the session. The user only
|
|
49
|
-
* sees the approval prompt the first time a plugin connects.
|
|
50
|
-
*/
|
|
51
30
|
static connect(opts: VTSClientOptions): Promise<VTSClient>;
|
|
52
|
-
/**
|
|
53
|
-
* Send a raw request and get the response. Throws VTSApiError if VTS
|
|
54
|
-
* returns an APIError messageType.
|
|
55
|
-
*/
|
|
56
31
|
sendRequest(messageType: string, data?: Record<string, unknown>): Promise<VTSResponse>;
|
|
57
|
-
/**
|
|
58
|
-
* Close the connection cleanly.
|
|
59
|
-
*/
|
|
60
32
|
disconnect(): void;
|
|
61
33
|
private authenticate;
|
|
34
|
+
isAuthenticated(): boolean;
|
|
62
35
|
/**
|
|
63
|
-
*
|
|
36
|
+
* Subscribe to a VTS event. The callback fires every time the event
|
|
37
|
+
* occurs until you unsubscribe.
|
|
64
38
|
*/
|
|
65
|
-
|
|
39
|
+
subscribeToEvent(eventName: string, callback: (data: Record<string, unknown>) => void, config?: Record<string, unknown>): Promise<void>;
|
|
66
40
|
/**
|
|
67
|
-
*
|
|
68
|
-
* Returns the instanceID that can be used to unload or pin the item later.
|
|
41
|
+
* Unsubscribe from a VTS event.
|
|
69
42
|
*/
|
|
70
|
-
|
|
43
|
+
unsubscribeFromEvent(eventName: string): Promise<void>;
|
|
71
44
|
/**
|
|
72
|
-
*
|
|
45
|
+
* Wait for the user to click on their model in VTS. Returns the exact
|
|
46
|
+
* artmesh and vertex-level position of the click, which can be passed
|
|
47
|
+
* directly to pinItem() with vertexPinType "Provided" for pixel-perfect
|
|
48
|
+
* pinning.
|
|
49
|
+
*
|
|
50
|
+
* Subscribes to ModelClickedEvent, waits for one click, unsubscribes,
|
|
51
|
+
* and returns the topmost artmesh hit info.
|
|
52
|
+
*
|
|
53
|
+
* The caller is responsible for telling the user what to click (e.g.
|
|
54
|
+
* via a UI prompt in the launcher).
|
|
73
55
|
*/
|
|
56
|
+
requestUserClick(): Promise<ClickPinResult>;
|
|
57
|
+
loadItem(opts: LoadItemOptions): Promise<string>;
|
|
74
58
|
unloadItem(instanceID: string): Promise<void>;
|
|
75
59
|
/**
|
|
76
|
-
* Pin an item to a
|
|
60
|
+
* Pin an item to a mesh using center-point pinning.
|
|
77
61
|
*/
|
|
78
62
|
pinItem(instanceID: string, pinInfo: PinInfo): Promise<void>;
|
|
79
63
|
/**
|
|
80
|
-
*
|
|
64
|
+
* Pin an item to an exact position on the model using vertex-level
|
|
65
|
+
* coordinates from requestUserClick() or a saved ClickPinResult.
|
|
81
66
|
*/
|
|
67
|
+
pinItemExact(instanceID: string, pin: ClickPinResult, opts?: {
|
|
68
|
+
angleRelativeTo?: PinInfo["angleRelativeTo"];
|
|
69
|
+
sizeRelativeTo?: PinInfo["sizeRelativeTo"];
|
|
70
|
+
size?: number;
|
|
71
|
+
}): Promise<void>;
|
|
82
72
|
unpinItem(instanceID: string): Promise<void>;
|
|
83
|
-
/**
|
|
84
|
-
* Get the list of art mesh names on the currently loaded model.
|
|
85
|
-
*/
|
|
86
73
|
listArtMeshes(): Promise<string[]>;
|
|
87
|
-
/**
|
|
88
|
-
* Find the first art mesh whose name contains one of the given patterns.
|
|
89
|
-
* Useful for pinning items to face parts across different models where
|
|
90
|
-
* the exact mesh name isn't known up front.
|
|
91
|
-
*
|
|
92
|
-
* Patterns are tried in order — the first match wins.
|
|
93
|
-
*/
|
|
94
74
|
findArtMesh(patterns: string[]): Promise<string | null>;
|
|
95
|
-
/**
|
|
96
|
-
* Get the list of input parameters on the current model (e.g. FaceAngleX,
|
|
97
|
-
* LeftEyeOpenAmount). Each parameter has a min/max range that describes
|
|
98
|
-
* what values the model accepts.
|
|
99
|
-
*/
|
|
100
75
|
getInputParameters(): Promise<ModelParameter[]>;
|
|
101
|
-
/**
|
|
102
|
-
* Send parameter values to VTS. Mode "set" replaces the value, "add" adds
|
|
103
|
-
* to the current value. The default is "set".
|
|
104
|
-
*/
|
|
105
76
|
injectParameters(values: ParameterValue[], mode?: "set" | "add"): void;
|
|
106
77
|
private handleMessage;
|
|
107
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* The result of a user clicking on their model. Contains the exact
|
|
81
|
+
* artmesh and vertex-level position of the click. Can be saved to
|
|
82
|
+
* config and reused with pinItemExact().
|
|
83
|
+
*/
|
|
84
|
+
export interface ClickPinResult {
|
|
85
|
+
modelID: string;
|
|
86
|
+
artMeshID: string;
|
|
87
|
+
angle: number;
|
|
88
|
+
size: number;
|
|
89
|
+
vertexID1: number;
|
|
90
|
+
vertexID2: number;
|
|
91
|
+
vertexID3: number;
|
|
92
|
+
vertexWeight1: number;
|
|
93
|
+
vertexWeight2: number;
|
|
94
|
+
vertexWeight3: number;
|
|
95
|
+
}
|
|
108
96
|
export interface LoadItemOptions {
|
|
109
97
|
fileName: string;
|
|
110
98
|
customDataBase64: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VTSClient.d.ts","sourceRoot":"","sources":["../../src/vts/VTSClient.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC7B,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED
|
|
1
|
+
{"version":3,"file":"VTSClient.d.ts","sourceRoot":"","sources":["../../src/vts/VTSClient.ts"],"names":[],"mappings":"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"}
|
package/dist/vts/VTSClient.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import WebSocket from "ws";
|
|
2
|
-
/**
|
|
3
|
-
* Error thrown when the VTS API returns an APIError messageType.
|
|
4
|
-
*/
|
|
5
2
|
export class VTSApiError extends Error {
|
|
6
3
|
code;
|
|
7
4
|
constructor(message, code) {
|
|
@@ -10,15 +7,10 @@ export class VTSApiError extends Error {
|
|
|
10
7
|
this.code = code;
|
|
11
8
|
}
|
|
12
9
|
}
|
|
13
|
-
/**
|
|
14
|
-
* A connected, authenticated client for the VTube Studio API.
|
|
15
|
-
*
|
|
16
|
-
* Use the static `connect` factory to create an instance — it handles the
|
|
17
|
-
* websocket handshake and plugin authentication in one step.
|
|
18
|
-
*/
|
|
19
10
|
export class VTSClient {
|
|
20
11
|
ws;
|
|
21
12
|
pendingRequests = new Map();
|
|
13
|
+
eventListeners = new Map();
|
|
22
14
|
requestTimeoutMs;
|
|
23
15
|
nextRequestId = 0;
|
|
24
16
|
authenticated = false;
|
|
@@ -29,14 +21,6 @@ export class VTSClient {
|
|
|
29
21
|
this.handleMessage(raw);
|
|
30
22
|
});
|
|
31
23
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Open a connection to VTube Studio and authenticate as a plugin.
|
|
34
|
-
*
|
|
35
|
-
* Authentication is a two-step handshake: the client first asks VTS for
|
|
36
|
-
* a token, the user approves the plugin in the VTS UI, and then the
|
|
37
|
-
* client uses the token to authenticate for the session. The user only
|
|
38
|
-
* sees the approval prompt the first time a plugin connects.
|
|
39
|
-
*/
|
|
40
24
|
static async connect(opts) {
|
|
41
25
|
const url = opts.url ?? "ws://localhost:8001";
|
|
42
26
|
const requestTimeoutMs = opts.requestTimeoutMs ?? 10000;
|
|
@@ -49,10 +33,6 @@ export class VTSClient {
|
|
|
49
33
|
await client.authenticate(opts.pluginName, opts.pluginDeveloper);
|
|
50
34
|
return client;
|
|
51
35
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Send a raw request and get the response. Throws VTSApiError if VTS
|
|
54
|
-
* returns an APIError messageType.
|
|
55
|
-
*/
|
|
56
36
|
async sendRequest(messageType, data) {
|
|
57
37
|
const requestID = String(++this.nextRequestId);
|
|
58
38
|
const request = {
|
|
@@ -78,16 +58,13 @@ export class VTSClient {
|
|
|
78
58
|
}
|
|
79
59
|
return response;
|
|
80
60
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Close the connection cleanly.
|
|
83
|
-
*/
|
|
84
61
|
disconnect() {
|
|
85
|
-
// Cancel all pending request timeouts
|
|
86
62
|
for (const pending of this.pendingRequests.values()) {
|
|
87
63
|
clearTimeout(pending.timeout);
|
|
88
64
|
pending.reject(new Error("VTSClient was disconnected"));
|
|
89
65
|
}
|
|
90
66
|
this.pendingRequests.clear();
|
|
67
|
+
this.eventListeners.clear();
|
|
91
68
|
this.ws.close();
|
|
92
69
|
}
|
|
93
70
|
// --- Plugin authentication ---
|
|
@@ -100,7 +77,6 @@ export class VTSClient {
|
|
|
100
77
|
if (!token) {
|
|
101
78
|
throw new Error("VTS did not return an authentication token");
|
|
102
79
|
}
|
|
103
|
-
// Give the user a moment to approve the plugin in VTS if prompted.
|
|
104
80
|
await new Promise((r) => setTimeout(r, 2000));
|
|
105
81
|
const authResp = await this.sendRequest("AuthenticationRequest", {
|
|
106
82
|
pluginName,
|
|
@@ -113,17 +89,83 @@ export class VTSClient {
|
|
|
113
89
|
}
|
|
114
90
|
this.authenticated = true;
|
|
115
91
|
}
|
|
116
|
-
/**
|
|
117
|
-
* Whether the client has completed authentication.
|
|
118
|
-
*/
|
|
119
92
|
isAuthenticated() {
|
|
120
93
|
return this.authenticated;
|
|
121
94
|
}
|
|
122
|
-
// ---
|
|
95
|
+
// --- Event subscriptions ---
|
|
123
96
|
/**
|
|
124
|
-
*
|
|
125
|
-
*
|
|
97
|
+
* Subscribe to a VTS event. The callback fires every time the event
|
|
98
|
+
* occurs until you unsubscribe.
|
|
126
99
|
*/
|
|
100
|
+
async subscribeToEvent(eventName, callback, config = {}) {
|
|
101
|
+
await this.sendRequest("EventSubscriptionRequest", {
|
|
102
|
+
eventName,
|
|
103
|
+
subscribe: true,
|
|
104
|
+
config,
|
|
105
|
+
});
|
|
106
|
+
const listeners = this.eventListeners.get(eventName) ?? [];
|
|
107
|
+
listeners.push(callback);
|
|
108
|
+
this.eventListeners.set(eventName, listeners);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Unsubscribe from a VTS event.
|
|
112
|
+
*/
|
|
113
|
+
async unsubscribeFromEvent(eventName) {
|
|
114
|
+
await this.sendRequest("EventSubscriptionRequest", {
|
|
115
|
+
eventName,
|
|
116
|
+
subscribe: false,
|
|
117
|
+
config: {},
|
|
118
|
+
});
|
|
119
|
+
this.eventListeners.delete(eventName);
|
|
120
|
+
}
|
|
121
|
+
// --- User click ---
|
|
122
|
+
/**
|
|
123
|
+
* Wait for the user to click on their model in VTS. Returns the exact
|
|
124
|
+
* artmesh and vertex-level position of the click, which can be passed
|
|
125
|
+
* directly to pinItem() with vertexPinType "Provided" for pixel-perfect
|
|
126
|
+
* pinning.
|
|
127
|
+
*
|
|
128
|
+
* Subscribes to ModelClickedEvent, waits for one click, unsubscribes,
|
|
129
|
+
* and returns the topmost artmesh hit info.
|
|
130
|
+
*
|
|
131
|
+
* The caller is responsible for telling the user what to click (e.g.
|
|
132
|
+
* via a UI prompt in the launcher).
|
|
133
|
+
*/
|
|
134
|
+
async requestUserClick() {
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
136
|
+
const onEvent = (data) => {
|
|
137
|
+
const modelWasClicked = data["modelWasClicked"];
|
|
138
|
+
if (!modelWasClicked)
|
|
139
|
+
return; // click wasn't on the model
|
|
140
|
+
const hits = data["artMeshHits"];
|
|
141
|
+
if (!hits || hits.length === 0)
|
|
142
|
+
return;
|
|
143
|
+
// Take the topmost (order 0) hit
|
|
144
|
+
const topHit = hits.find((h) => h.artMeshOrder === 0) ?? hits[0];
|
|
145
|
+
const info = topHit.hitInfo;
|
|
146
|
+
// Unsubscribe and resolve
|
|
147
|
+
this.unsubscribeFromEvent("ModelClickedEvent").catch(() => {
|
|
148
|
+
// Best effort
|
|
149
|
+
});
|
|
150
|
+
resolve({
|
|
151
|
+
modelID: info.modelID,
|
|
152
|
+
artMeshID: info.artMeshID,
|
|
153
|
+
angle: info.angle,
|
|
154
|
+
size: info.size,
|
|
155
|
+
vertexID1: info.vertexID1,
|
|
156
|
+
vertexID2: info.vertexID2,
|
|
157
|
+
vertexID3: info.vertexID3,
|
|
158
|
+
vertexWeight1: info.vertexWeight1,
|
|
159
|
+
vertexWeight2: info.vertexWeight2,
|
|
160
|
+
vertexWeight3: info.vertexWeight3,
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
this.subscribeToEvent("ModelClickedEvent", onEvent, {
|
|
164
|
+
onlyClicksOnModel: true,
|
|
165
|
+
}).catch(reject);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
// --- Item management ---
|
|
127
169
|
async loadItem(opts) {
|
|
128
170
|
const resp = await this.sendRequest("ItemLoadRequest", {
|
|
129
171
|
fileName: opts.fileName,
|
|
@@ -150,9 +192,6 @@ export class VTSClient {
|
|
|
150
192
|
}
|
|
151
193
|
return instanceID;
|
|
152
194
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Unload a previously-loaded item by its instanceID.
|
|
155
|
-
*/
|
|
156
195
|
async unloadItem(instanceID) {
|
|
157
196
|
await this.sendRequest("ItemUnloadRequest", {
|
|
158
197
|
instanceIDs: [instanceID],
|
|
@@ -162,7 +201,7 @@ export class VTSClient {
|
|
|
162
201
|
});
|
|
163
202
|
}
|
|
164
203
|
/**
|
|
165
|
-
* Pin an item to a
|
|
204
|
+
* Pin an item to a mesh using center-point pinning.
|
|
166
205
|
*/
|
|
167
206
|
async pinItem(instanceID, pinInfo) {
|
|
168
207
|
await this.sendRequest("ItemPinRequest", {
|
|
@@ -180,8 +219,30 @@ export class VTSClient {
|
|
|
180
219
|
});
|
|
181
220
|
}
|
|
182
221
|
/**
|
|
183
|
-
*
|
|
222
|
+
* Pin an item to an exact position on the model using vertex-level
|
|
223
|
+
* coordinates from requestUserClick() or a saved ClickPinResult.
|
|
184
224
|
*/
|
|
225
|
+
async pinItemExact(instanceID, pin, opts) {
|
|
226
|
+
await this.sendRequest("ItemPinRequest", {
|
|
227
|
+
pin: true,
|
|
228
|
+
itemInstanceID: instanceID,
|
|
229
|
+
angleRelativeTo: opts?.angleRelativeTo ?? "RelativeToModel",
|
|
230
|
+
sizeRelativeTo: opts?.sizeRelativeTo ?? "RelativeToWorld",
|
|
231
|
+
vertexPinType: "Provided",
|
|
232
|
+
pinInfo: {
|
|
233
|
+
modelID: pin.modelID,
|
|
234
|
+
artMeshID: pin.artMeshID,
|
|
235
|
+
angle: pin.angle,
|
|
236
|
+
size: opts?.size ?? pin.size,
|
|
237
|
+
vertexID1: pin.vertexID1,
|
|
238
|
+
vertexID2: pin.vertexID2,
|
|
239
|
+
vertexID3: pin.vertexID3,
|
|
240
|
+
vertexWeight1: pin.vertexWeight1,
|
|
241
|
+
vertexWeight2: pin.vertexWeight2,
|
|
242
|
+
vertexWeight3: pin.vertexWeight3,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
}
|
|
185
246
|
async unpinItem(instanceID) {
|
|
186
247
|
await this.sendRequest("ItemPinRequest", {
|
|
187
248
|
pin: false,
|
|
@@ -189,20 +250,10 @@ export class VTSClient {
|
|
|
189
250
|
});
|
|
190
251
|
}
|
|
191
252
|
// --- Art mesh helpers ---
|
|
192
|
-
/**
|
|
193
|
-
* Get the list of art mesh names on the currently loaded model.
|
|
194
|
-
*/
|
|
195
253
|
async listArtMeshes() {
|
|
196
254
|
const resp = await this.sendRequest("ArtMeshListRequest");
|
|
197
255
|
return resp.data.artMeshNames ?? [];
|
|
198
256
|
}
|
|
199
|
-
/**
|
|
200
|
-
* Find the first art mesh whose name contains one of the given patterns.
|
|
201
|
-
* Useful for pinning items to face parts across different models where
|
|
202
|
-
* the exact mesh name isn't known up front.
|
|
203
|
-
*
|
|
204
|
-
* Patterns are tried in order — the first match wins.
|
|
205
|
-
*/
|
|
206
257
|
async findArtMesh(patterns) {
|
|
207
258
|
const meshNames = await this.listArtMeshes();
|
|
208
259
|
for (const pattern of patterns) {
|
|
@@ -213,23 +264,15 @@ export class VTSClient {
|
|
|
213
264
|
return null;
|
|
214
265
|
}
|
|
215
266
|
// --- Parameter injection ---
|
|
216
|
-
/**
|
|
217
|
-
* Get the list of input parameters on the current model (e.g. FaceAngleX,
|
|
218
|
-
* LeftEyeOpenAmount). Each parameter has a min/max range that describes
|
|
219
|
-
* what values the model accepts.
|
|
220
|
-
*/
|
|
221
267
|
async getInputParameters() {
|
|
222
268
|
const resp = await this.sendRequest("InputParameterListRequest");
|
|
223
269
|
const data = resp.data;
|
|
224
|
-
// VTS returns parameters under various keys depending on the kind.
|
|
225
|
-
// Collect anything that looks like a parameter list.
|
|
226
270
|
const candidates = [];
|
|
227
271
|
for (const key of ["modelParameters", "defaultParameters", "customParameters"]) {
|
|
228
272
|
const val = data[key];
|
|
229
273
|
if (Array.isArray(val))
|
|
230
274
|
candidates.push(...val);
|
|
231
275
|
}
|
|
232
|
-
// Fall back to collecting any array values if the known keys were empty.
|
|
233
276
|
if (candidates.length === 0) {
|
|
234
277
|
for (const val of Object.values(data)) {
|
|
235
278
|
if (Array.isArray(val))
|
|
@@ -243,13 +286,7 @@ export class VTSClient {
|
|
|
243
286
|
typeof p.min === "number" &&
|
|
244
287
|
typeof p.max === "number");
|
|
245
288
|
}
|
|
246
|
-
/**
|
|
247
|
-
* Send parameter values to VTS. Mode "set" replaces the value, "add" adds
|
|
248
|
-
* to the current value. The default is "set".
|
|
249
|
-
*/
|
|
250
289
|
injectParameters(values, mode = "set") {
|
|
251
|
-
// Fire-and-forget for performance — high-frequency callers (e.g. 30fps
|
|
252
|
-
// animation loops) don't want to await a round-trip per frame.
|
|
253
290
|
const request = {
|
|
254
291
|
apiName: "VTubeStudioPublicAPI",
|
|
255
292
|
apiVersion: "1.0",
|
|
@@ -265,19 +302,28 @@ export class VTSClient {
|
|
|
265
302
|
}
|
|
266
303
|
// --- Internal ---
|
|
267
304
|
handleMessage(raw) {
|
|
268
|
-
let
|
|
305
|
+
let message;
|
|
269
306
|
try {
|
|
270
|
-
|
|
307
|
+
message = JSON.parse(raw.toString());
|
|
271
308
|
}
|
|
272
309
|
catch {
|
|
273
|
-
return;
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
// Check if this is a pending request response
|
|
313
|
+
const pending = this.pendingRequests.get(message.requestID);
|
|
314
|
+
if (pending) {
|
|
315
|
+
clearTimeout(pending.timeout);
|
|
316
|
+
this.pendingRequests.delete(message.requestID);
|
|
317
|
+
pending.resolve(message);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
// Check if this is a pushed event
|
|
321
|
+
const listeners = this.eventListeners.get(message.messageType);
|
|
322
|
+
if (listeners) {
|
|
323
|
+
for (const listener of listeners) {
|
|
324
|
+
listener(message.data);
|
|
325
|
+
}
|
|
274
326
|
}
|
|
275
|
-
const pending = this.pendingRequests.get(response.requestID);
|
|
276
|
-
if (!pending)
|
|
277
|
-
return; // unknown requestID (e.g. from injectParameters fire-and-forget)
|
|
278
|
-
clearTimeout(pending.timeout);
|
|
279
|
-
this.pendingRequests.delete(response.requestID);
|
|
280
|
-
pending.resolve(response);
|
|
281
327
|
}
|
|
282
328
|
}
|
|
283
329
|
//# sourceMappingURL=VTSClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VTSClient.js","sourceRoot":"","sources":["../../src/vts/VTSClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VTSClient.js","sourceRoot":"","sources":["../../src/vts/VTSClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { VTSClient, ClickPinResult } from "./VTSClient.js";
|
|
2
|
+
/**
|
|
3
|
+
* Storage interface for persisting forehead pin data. The caller provides
|
|
4
|
+
* the implementation — could be a JSON file, Electron config store, etc.
|
|
5
|
+
*/
|
|
6
|
+
export interface PinStorage {
|
|
7
|
+
/** Load a previously saved forehead pin, or null if none exists. */
|
|
8
|
+
load(): ClickPinResult | null;
|
|
9
|
+
/** Save a forehead pin for future use. */
|
|
10
|
+
save(pin: ClickPinResult): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get the user's forehead pin coordinates. If a pin was previously saved
|
|
14
|
+
* in the provided storage, returns it immediately. Otherwise, waits for
|
|
15
|
+
* the user to click their forehead in VTS and saves the result.
|
|
16
|
+
*
|
|
17
|
+
* The caller is responsible for prompting the user (via UI, console, etc.)
|
|
18
|
+
* BEFORE calling this function, since it blocks waiting for a click.
|
|
19
|
+
*
|
|
20
|
+
* @param vts - Connected VTSClient instance
|
|
21
|
+
* @param storage - Where to load/save the pin coordinates
|
|
22
|
+
* @param forceNew - If true, ignores saved pin and asks the user again
|
|
23
|
+
* @returns The forehead pin coordinates, ready for pinItemExact()
|
|
24
|
+
*/
|
|
25
|
+
export declare function getForeheadPin(vts: VTSClient, storage: PinStorage, forceNew?: boolean): Promise<ClickPinResult>;
|
|
26
|
+
//# sourceMappingURL=getForeheadPin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getForeheadPin.d.ts","sourceRoot":"","sources":["../../src/vts/getForeheadPin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,oEAAoE;IACpE,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;IAC9B,0CAA0C;IAC1C,IAAI,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,UAAU,EACnB,QAAQ,GAAE,OAAe,GAC1B,OAAO,CAAC,cAAc,CAAC,CASzB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the user's forehead pin coordinates. If a pin was previously saved
|
|
3
|
+
* in the provided storage, returns it immediately. Otherwise, waits for
|
|
4
|
+
* the user to click their forehead in VTS and saves the result.
|
|
5
|
+
*
|
|
6
|
+
* The caller is responsible for prompting the user (via UI, console, etc.)
|
|
7
|
+
* BEFORE calling this function, since it blocks waiting for a click.
|
|
8
|
+
*
|
|
9
|
+
* @param vts - Connected VTSClient instance
|
|
10
|
+
* @param storage - Where to load/save the pin coordinates
|
|
11
|
+
* @param forceNew - If true, ignores saved pin and asks the user again
|
|
12
|
+
* @returns The forehead pin coordinates, ready for pinItemExact()
|
|
13
|
+
*/
|
|
14
|
+
export async function getForeheadPin(vts, storage, forceNew = false) {
|
|
15
|
+
if (!forceNew) {
|
|
16
|
+
const saved = storage.load();
|
|
17
|
+
if (saved)
|
|
18
|
+
return saved;
|
|
19
|
+
}
|
|
20
|
+
const pin = await vts.requestUserClick();
|
|
21
|
+
storage.save(pin);
|
|
22
|
+
return pin;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=getForeheadPin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getForeheadPin.js","sourceRoot":"","sources":["../../src/vts/getForeheadPin.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,GAAc,EACd,OAAmB,EACnB,WAAoB,KAAK;IAEzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,GAAG,CAAC;AACf,CAAC"}
|
package/dist/vts/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { VTSClient, VTSApiError, type VTSClientOptions, type LoadItemOptions, type PinInfo, type ModelParameter, type ParameterValue, } from "./VTSClient.js";
|
|
1
|
+
export { VTSClient, VTSApiError, type VTSClientOptions, type ClickPinResult, type LoadItemOptions, type PinInfo, type ModelParameter, type ParameterValue, } from "./VTSClient.js";
|
|
2
|
+
export { getForeheadPin, type PinStorage, } from "./getForeheadPin.js";
|
|
2
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/vts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,cAAc,GACtB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,cAAc,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,cAAc,EACd,KAAK,UAAU,GAClB,MAAM,qBAAqB,CAAC"}
|
package/dist/vts/index.js
CHANGED
package/dist/vts/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,WAAW,GAOd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACH,cAAc,GAEjB,MAAM,qBAAqB,CAAC"}
|