agl 41.0.1 → 41.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +24 -0
- package/dist_serve/bundle.js +1448 -1448
- package/dist_serve/bundle.js.map +2 -2
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/aglapi/aglapisurface.document.js +7 -3
- package/dist_ts/classes.authmodels.d.ts +15 -0
- package/dist_ts/classes.authmodels.js +78 -7
- package/dist_ts/classes.authstore.js +23 -6
- package/dist_ts/classes.cli.js +8 -3
- package/dist_ts/classes.controller.d.ts +13 -0
- package/dist_ts/classes.controller.js +51 -14
- package/dist_ts/classes.controllermanagement.d.ts +53 -6
- package/dist_ts/classes.controllermanagement.js +180 -72
- package/dist_ts/classes.inferencegateway.d.ts +6 -6
- package/dist_ts/classes.inferencegateway.js +28 -15
- package/dist_ts/classes.inferenceusage.d.ts +19 -7
- package/dist_ts/classes.inferenceusage.js +49 -13
- package/dist_ts/classes.inferenceusagetap.d.ts +15 -3
- package/dist_ts/classes.inferenceusagetap.js +16 -9
- package/dist_ts/classes.processinspection.d.ts +3 -1
- package/dist_ts/classes.processinspection.js +4 -2
- package/dist_ts/classes.proxycontrol.d.ts +22 -7
- package/dist_ts/classes.proxycontrol.js +5 -3
- package/dist_ts/classes.proxycontrolclient.d.ts +4 -3
- package/dist_ts/classes.proxycontrolclient.js +7 -5
- package/dist_ts/classes.proxydaemon.d.ts +6 -4
- package/dist_ts/classes.proxydaemon.js +42 -17
- package/dist_ts/classes.proxyleaseholder.d.ts +11 -2
- package/dist_ts/classes.proxyleaseholder.js +25 -2
- package/dist_ts/classes.proxystore.d.ts +3 -2
- package/dist_ts/classes.proxystore.js +5 -2
- package/dist_ts/classes.upgradecoordinator.d.ts +2 -1
- package/dist_ts/classes.upgradecoordinator.js +13 -10
- package/dist_ts/classes.upgradetransaction.d.ts +6 -0
- package/dist_ts/classes.upgradetransaction.js +38 -13
- package/dist_ts/classes.usagefeed.js +3 -2
- package/dist_ts/functions.controllermanagementsurface.d.ts +37 -0
- package/dist_ts/functions.controllermanagementsurface.js +110 -0
- package/dist_ts/functions.inferencecli.d.ts +6 -3
- package/dist_ts/functions.inferencecli.js +9 -5
- package/dist_ts/functions.inferencecliarguments.d.ts +1 -1
- package/dist_ts/functions.inferencecliarguments.js +19 -7
- package/dist_ts/functions.inferencelaunch.d.ts +30 -9
- package/dist_ts/functions.inferencelaunch.js +49 -23
- package/dist_ts/interfaces.auth.d.ts +14 -3
- package/dist_ts/interfaces.auth.js +4 -3
- package/dist_ts_interfaces/index.d.ts +1 -0
- package/dist_ts_interfaces/index.js +2 -1
- package/dist_ts_interfaces/interfaces.d.ts +6 -1
- package/dist_ts_interfaces/interfaces.js +2 -2
- package/dist_ts_interfaces/management.d.ts +33 -0
- package/dist_ts_interfaces/management.js +35 -0
- package/dist_ts_interfaces/metrics.d.ts +29 -7
- package/dist_ts_interfaces/metrics.js +14 -1
- package/package.json +6 -5
- package/readme.md +123 -28
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/aglapi/aglapisurface.document.ts +6 -2
- package/ts/classes.authmodels.ts +74 -5
- package/ts/classes.authstore.ts +24 -4
- package/ts/classes.cli.ts +9 -2
- package/ts/classes.controller.ts +98 -59
- package/ts/classes.controllermanagement.ts +284 -107
- package/ts/classes.inferencegateway.ts +31 -19
- package/ts/classes.inferenceusage.ts +58 -19
- package/ts/classes.inferenceusagetap.ts +27 -8
- package/ts/classes.processinspection.ts +2 -1
- package/ts/classes.proxycontrol.ts +25 -9
- package/ts/classes.proxycontrolclient.ts +7 -4
- package/ts/classes.proxydaemon.ts +43 -17
- package/ts/classes.proxyleaseholder.ts +36 -7
- package/ts/classes.proxystore.ts +8 -3
- package/ts/classes.upgradecoordinator.ts +20 -11
- package/ts/classes.upgradetransaction.ts +53 -2
- package/ts/classes.usagefeed.ts +2 -1
- package/ts/functions.controllermanagementsurface.ts +149 -0
- package/ts/functions.inferencecli.ts +15 -7
- package/ts/functions.inferencecliarguments.ts +16 -6
- package/ts/functions.inferencelaunch.ts +57 -23
- package/ts/interfaces.auth.ts +14 -3
- package/ts_interfaces/index.ts +1 -0
- package/ts_interfaces/interfaces.ts +6 -1
- package/ts_interfaces/management.ts +52 -0
- package/ts_interfaces/metrics.ts +34 -7
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/classes.controllersocketclient.ts +5 -2
- package/ts_web/elements.metricsboard.ts +68 -18
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import { type IControllerStatus, type IReq_ControllerUpgradeLaunch, type IReq_ControllerUpgradePrepareBegin, type IReq_ControllerUpgradeFinalize } from '../dist_ts_interfaces/index.js';
|
|
2
|
+
import { type IControllerStatus, type IReq_ControllerUpgradeLaunch, type IReq_ControllerUpgradePrepareBegin, type IReq_ControllerUpgradeFinalize, type TControllerManagementTypedRequest } from '../dist_ts_interfaces/index.js';
|
|
3
3
|
export interface IControllerStatusExpectation {
|
|
4
4
|
packageName: string;
|
|
5
5
|
packageVersion: string;
|
|
6
6
|
protocolVersion?: number;
|
|
7
7
|
upgradeManagementVersion: number;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* A declared management protocol (`controllerManagementProtocolVersion` in a package, `managementProtocolVersion`
|
|
11
|
+
* in a status): a safe integer of 1 or more.
|
|
12
|
+
*/
|
|
13
|
+
export declare const isControllerManagementProtocolVersion: (valueArg: unknown) => valueArg is number;
|
|
14
|
+
/** A controller a management call is addressed to, by what it declares about its management endpoint. */
|
|
15
|
+
export interface IControllerManagementTarget {
|
|
16
|
+
/**
|
|
17
|
+
* The management protocol the controller declares (`controllerManagementProtocolVersion`): the status's own
|
|
18
|
+
* `managementProtocolVersion` once the controller runs, or what the installed package that runs it declares in
|
|
19
|
+
* its `package.json`. Absent when it declares none, as every release older than the endpoint.
|
|
20
|
+
*/
|
|
21
|
+
managementProtocolVersion?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A status read: the identity the status must report, and the declaration that decides how it is read, which comes
|
|
25
|
+
* from the package expected to run the controller, since there is no status yet. Every caller states it, absent
|
|
26
|
+
* included.
|
|
27
|
+
*/
|
|
28
|
+
export interface IControllerStatusQuery extends IControllerStatusExpectation {
|
|
29
|
+
managementProtocolVersion: number | undefined;
|
|
30
|
+
}
|
|
9
31
|
export declare const controllerUpgradePrepareBeginRequestTimeoutMs = 30000;
|
|
10
32
|
/**
|
|
11
33
|
* Validates a controller status document against the expected identity. Without an expected protocol version
|
|
@@ -15,12 +37,37 @@ export declare const controllerUpgradePrepareBeginRequestTimeoutMs = 30000;
|
|
|
15
37
|
* which this release acts on, are checked exactly at every protocol.
|
|
16
38
|
*/
|
|
17
39
|
export declare const assertControllerStatus: (statusArg: unknown, expectationArg: IControllerStatusExpectation, knownProtocolVersionArg?: number) => IControllerStatus;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
40
|
+
/**
|
|
41
|
+
* How this build reaches a controller's management methods, decided by the controller's declaration alone: over its
|
|
42
|
+
* loopback management endpoint when it declares a management protocol, which every later release keeps whatever
|
|
43
|
+
* transport its browser speaks, and over its controller socket when it declares none (a release older than the
|
|
44
|
+
* endpoint, such as a source an upgrade recovery restores), which serves them in every release up to this one.
|
|
45
|
+
* There is no second attempt over the other transport.
|
|
46
|
+
*/
|
|
47
|
+
export declare const controllerManagementTransport: (targetArg: IControllerManagementTarget) => 'http' | 'socket';
|
|
48
|
+
/** A management request the controller answered with an error, or whose answer this build cannot read. */
|
|
49
|
+
export declare class ControllerManagementError extends Error {
|
|
50
|
+
readonly code?: string | undefined;
|
|
51
|
+
constructor(messageArg: string, code?: string | undefined);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Sends one management request over loopback HTTP: a TypedRequest envelope of exactly `method`, `request`,
|
|
55
|
+
* `response: null`, `correlation` and `requestInstanceId`, as a TypedRequest client sends it, with no credential
|
|
56
|
+
* beside what the request itself carries.
|
|
57
|
+
*/
|
|
58
|
+
export declare const requestControllerManagement: <T extends TControllerManagementTypedRequest>(portArg: number, methodArg: T['method'], requestArg: T['request'], optionsArg: {
|
|
59
|
+
timeoutMs: number;
|
|
60
|
+
}) => Promise<unknown>;
|
|
61
|
+
export declare const requestControllerUpgradePrepareBegin: (portArg: number, controllerArg: IControllerManagementTarget, tokenArg: string, targetVersionArg: string, gracePeriodMsArg: number) => Promise<IReq_ControllerUpgradePrepareBegin['response']>;
|
|
62
|
+
export declare const requestControllerUpgradeFinalize: (portArg: number, controllerArg: IControllerManagementTarget, tokenArg: string, modeArg: IReq_ControllerUpgradeFinalize['request']['mode'], timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeFinalize['response']>;
|
|
63
|
+
/**
|
|
64
|
+
* Reads a controller's status over the transport the query's declaration picks. The upgrade calls that follow take
|
|
65
|
+
* the status itself as their target, so from then on the controller's own declaration decides.
|
|
66
|
+
*/
|
|
67
|
+
export declare const queryControllerStatus: (portArg: number, queryArg: IControllerStatusQuery, timeoutMsArg?: number) => Promise<IControllerStatus>;
|
|
68
|
+
export declare const tryQueryControllerStatus: (portArg: number, queryArg: IControllerStatusQuery) => Promise<IControllerStatus | undefined>;
|
|
22
69
|
export declare const isLoopbackPortListening: (portArg: number, timeoutMsArg?: number) => Promise<boolean>;
|
|
23
|
-
export declare const requestControllerUpgradeLaunch: (portArg: number, tokenArg: string, timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeLaunch['response']>;
|
|
70
|
+
export declare const requestControllerUpgradeLaunch: (portArg: number, controllerArg: IControllerManagementTarget, tokenArg: string, timeoutMsArg?: number) => Promise<IReq_ControllerUpgradeLaunch['response']>;
|
|
24
71
|
export declare const waitUntilControllerExited: (optionsArg: {
|
|
25
72
|
pid: number;
|
|
26
73
|
cliPath: string;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import { parseUpgradeBlockers } from './classes.upgradecoordinator.js';
|
|
3
|
-
import { controllerPackageName, controllerProtocolVersion, controllerServiceUnitName, } from '../dist_ts_interfaces/index.js';
|
|
3
|
+
import { controllerManagementResponseMaximumBytes, controllerManagementTypedRequestPath, controllerPackageName, controllerProtocolVersion, controllerServiceUnitName, } from '../dist_ts_interfaces/index.js';
|
|
4
4
|
import { controllerProcessIdentityIsLive, signalVerifiedControllerProcess, } from './classes.processinspection.js';
|
|
5
5
|
import { AglControllerService } from './classes.controllerservice.js';
|
|
6
6
|
const currentCliName = String(controllerPackageName) === 'agl' ? 'agl' : 'hcon';
|
|
7
7
|
const currentRuntimeName = currentCliName === 'agl' ? 'AGL' : currentCliName;
|
|
8
|
+
/**
|
|
9
|
+
* A declared management protocol (`controllerManagementProtocolVersion` in a package, `managementProtocolVersion`
|
|
10
|
+
* in a status): a safe integer of 1 or more.
|
|
11
|
+
*/
|
|
12
|
+
export const isControllerManagementProtocolVersion = (valueArg) => (typeof valueArg === 'number' && Number.isSafeInteger(valueArg) && valueArg >= 1);
|
|
8
13
|
const harnessStates = ['starting', 'ready', 'stopping', 'stopped', 'failed'];
|
|
9
14
|
/** The controller protocol version that added each harness to the status document. */
|
|
10
15
|
const controllerHarnessIntroductions = {
|
|
@@ -135,6 +140,8 @@ export const assertControllerStatus = (statusArg, expectationArg, knownProtocolV
|
|
|
135
140
|
|| (expectationArg.protocolVersion !== undefined
|
|
136
141
|
&& status.protocolVersion !== expectationArg.protocolVersion)
|
|
137
142
|
|| status.upgradeManagementVersion !== expectationArg.upgradeManagementVersion
|
|
143
|
+
|| (status.managementProtocolVersion !== undefined
|
|
144
|
+
&& !isControllerManagementProtocolVersion(status.managementProtocolVersion))
|
|
138
145
|
|| !Number.isSafeInteger(status.controllerPid)
|
|
139
146
|
|| !Number.isSafeInteger(status.processGroupId)
|
|
140
147
|
|| typeof status.processFingerprint !== 'string'
|
|
@@ -162,64 +169,182 @@ export const assertControllerStatus = (statusArg, expectationArg, knownProtocolV
|
|
|
162
169
|
delete readableStatus.proxy;
|
|
163
170
|
return readableStatus;
|
|
164
171
|
};
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|| typeof response !== 'object'
|
|
181
|
-
|| Array.isArray(response)
|
|
182
|
-
|| Object.keys(response).length !== 1
|
|
183
|
-
|| response.accepted !== true)
|
|
184
|
-
throw new Error('The controller returned an invalid upgrade preparation response.');
|
|
185
|
-
return response;
|
|
172
|
+
/**
|
|
173
|
+
* How this build reaches a controller's management methods, decided by the controller's declaration alone: over its
|
|
174
|
+
* loopback management endpoint when it declares a management protocol, which every later release keeps whatever
|
|
175
|
+
* transport its browser speaks, and over its controller socket when it declares none (a release older than the
|
|
176
|
+
* endpoint, such as a source an upgrade recovery restores), which serves them in every release up to this one.
|
|
177
|
+
* There is no second attempt over the other transport.
|
|
178
|
+
*/
|
|
179
|
+
export const controllerManagementTransport = (targetArg) => (isControllerManagementProtocolVersion(targetArg.managementProtocolVersion) ? 'http' : 'socket');
|
|
180
|
+
/** A management request the controller answered with an error, or whose answer this build cannot read. */
|
|
181
|
+
export class ControllerManagementError extends Error {
|
|
182
|
+
code;
|
|
183
|
+
constructor(messageArg, code) {
|
|
184
|
+
super(messageArg);
|
|
185
|
+
this.code = code;
|
|
186
|
+
this.name = 'ControllerManagementError';
|
|
186
187
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
}
|
|
189
|
+
const maximumManagementErrorTextBytes = 4_096;
|
|
190
|
+
const isPlainRecord = (valueArg) => (typeof valueArg === 'object' && valueArg !== null && !Array.isArray(valueArg));
|
|
191
|
+
/**
|
|
192
|
+
* Reads one answer of the management endpoint: the envelope must answer this very request (method, request
|
|
193
|
+
* instance and correlation) and carry `response`; an `error` is the controller's refusal. Keys this build does not
|
|
194
|
+
* read are left alone, so a later release may add some.
|
|
195
|
+
*/
|
|
196
|
+
const readControllerManagementAnswer = (answerArg, requestArg) => {
|
|
197
|
+
if (!isPlainRecord(answerArg)
|
|
198
|
+
|| answerArg.method !== requestArg.method
|
|
199
|
+
|| answerArg.requestInstanceId !== requestArg.requestInstanceId
|
|
200
|
+
|| !isPlainRecord(answerArg.correlation)
|
|
201
|
+
|| answerArg.correlation.id !== requestArg.correlationId
|
|
202
|
+
|| answerArg.correlation.phase !== 'response'
|
|
203
|
+
|| !Object.hasOwn(answerArg, 'response'))
|
|
204
|
+
throw new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch');
|
|
205
|
+
if (answerArg.error === undefined)
|
|
206
|
+
return answerArg.response;
|
|
207
|
+
if (!isPlainRecord(answerArg.error) || typeof answerArg.error.text !== 'string') {
|
|
208
|
+
throw new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch');
|
|
190
209
|
}
|
|
210
|
+
const data = answerArg.error.data;
|
|
211
|
+
const code = isPlainRecord(data) && typeof data.code === 'string' && data.code.length <= 128 ? data.code : undefined;
|
|
212
|
+
const text = Buffer.byteLength(answerArg.error.text, 'utf8') <= maximumManagementErrorTextBytes
|
|
213
|
+
? answerArg.error.text
|
|
214
|
+
: 'The controller refused the management request.';
|
|
215
|
+
throw new ControllerManagementError(text, code);
|
|
191
216
|
};
|
|
192
|
-
|
|
193
|
-
|
|
217
|
+
/** Sends one envelope to the management endpoint on 127.0.0.1 and returns the answer's bytes. */
|
|
218
|
+
const postControllerManagementEnvelope = (portArg, bodyArg, signalArg) => new Promise((resolve, reject) => {
|
|
219
|
+
const request = plugins.http.request({
|
|
220
|
+
protocol: 'http:',
|
|
221
|
+
hostname: '127.0.0.1',
|
|
222
|
+
port: portArg,
|
|
223
|
+
path: controllerManagementTypedRequestPath,
|
|
224
|
+
method: 'POST',
|
|
225
|
+
agent: false,
|
|
226
|
+
signal: signalArg,
|
|
227
|
+
headers: {
|
|
228
|
+
Host: `127.0.0.1:${portArg}`,
|
|
229
|
+
'Content-Type': 'application/json',
|
|
230
|
+
Accept: 'application/json',
|
|
231
|
+
'Content-Length': String(bodyArg.byteLength),
|
|
232
|
+
Connection: 'close',
|
|
233
|
+
},
|
|
234
|
+
}, (responseArg) => {
|
|
235
|
+
const statusCode = responseArg.statusCode ?? 0;
|
|
236
|
+
const contentType = responseArg.headers['content-type'];
|
|
237
|
+
if (statusCode !== 200) {
|
|
238
|
+
responseArg.resume();
|
|
239
|
+
reject(new ControllerManagementError(`The controller refused the management request with HTTP ${statusCode}.`, 'http_refused'));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (typeof contentType !== 'string' || !/^application\/json(?:;|$)/iu.test(contentType)) {
|
|
243
|
+
responseArg.resume();
|
|
244
|
+
reject(new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch'));
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const chunks = [];
|
|
248
|
+
let byteLength = 0;
|
|
249
|
+
responseArg.on('data', (chunkArg) => {
|
|
250
|
+
const chunk = Buffer.isBuffer(chunkArg) ? chunkArg : Buffer.from(chunkArg);
|
|
251
|
+
byteLength += chunk.byteLength;
|
|
252
|
+
if (byteLength > controllerManagementResponseMaximumBytes) {
|
|
253
|
+
responseArg.destroy();
|
|
254
|
+
reject(new ControllerManagementError('The controller management answer exceeded its size limit.', 'response_limit'));
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
chunks.push(chunk);
|
|
258
|
+
});
|
|
259
|
+
responseArg.once('end', () => resolve(Buffer.concat(chunks, byteLength)));
|
|
260
|
+
responseArg.once('error', reject);
|
|
261
|
+
});
|
|
262
|
+
request.once('error', reject);
|
|
263
|
+
request.end(bodyArg);
|
|
264
|
+
});
|
|
265
|
+
/**
|
|
266
|
+
* Sends one management request over loopback HTTP: a TypedRequest envelope of exactly `method`, `request`,
|
|
267
|
+
* `response: null`, `correlation` and `requestInstanceId`, as a TypedRequest client sends it, with no credential
|
|
268
|
+
* beside what the request itself carries.
|
|
269
|
+
*/
|
|
270
|
+
export const requestControllerManagement = async (portArg, methodArg, requestArg, optionsArg) => {
|
|
271
|
+
const identity = {
|
|
272
|
+
method: methodArg,
|
|
273
|
+
requestInstanceId: plugins.crypto.randomUUID(),
|
|
274
|
+
correlationId: plugins.crypto.randomUUID(),
|
|
275
|
+
};
|
|
276
|
+
const body = Buffer.from(JSON.stringify({
|
|
277
|
+
method: methodArg,
|
|
278
|
+
request: requestArg,
|
|
279
|
+
response: null,
|
|
280
|
+
correlation: { id: identity.correlationId, phase: 'request' },
|
|
281
|
+
requestInstanceId: identity.requestInstanceId,
|
|
282
|
+
}), 'utf8');
|
|
283
|
+
const timeoutSignal = AbortSignal.timeout(optionsArg.timeoutMs);
|
|
284
|
+
let answerBytes;
|
|
194
285
|
try {
|
|
195
|
-
|
|
286
|
+
answerBytes = await postControllerManagementEnvelope(portArg, body, timeoutSignal);
|
|
196
287
|
}
|
|
197
|
-
|
|
198
|
-
|
|
288
|
+
catch (errorArg) {
|
|
289
|
+
if (timeoutSignal.aborted && !(errorArg instanceof ControllerManagementError)) {
|
|
290
|
+
throw new ControllerManagementError(`The controller did not answer ${methodArg} within ${optionsArg.timeoutMs} ms.`, 'timeout');
|
|
291
|
+
}
|
|
292
|
+
throw errorArg;
|
|
293
|
+
}
|
|
294
|
+
let answer;
|
|
295
|
+
try {
|
|
296
|
+
const text = answerBytes.toString('utf8');
|
|
297
|
+
if (!Buffer.from(text, 'utf8').equals(answerBytes))
|
|
298
|
+
throw new Error('invalid UTF-8');
|
|
299
|
+
answer = JSON.parse(text);
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
throw new ControllerManagementError('The controller returned an invalid management answer.', 'protocol_mismatch');
|
|
199
303
|
}
|
|
304
|
+
return readControllerManagementAnswer(answer, identity);
|
|
200
305
|
};
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const
|
|
306
|
+
/** Fires one management request over the controller socket, for a controller that declares no management protocol. */
|
|
307
|
+
const requestControllerManagementOverSocket = async (portArg, methodArg, requestArg, optionsArg) => {
|
|
308
|
+
const signal = AbortSignal.timeout(optionsArg.timeoutMs);
|
|
204
309
|
let socket;
|
|
205
310
|
try {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
autoReconnect: false,
|
|
209
|
-
maxRetries: 0,
|
|
210
|
-
abortSignal: abortController.signal,
|
|
211
|
-
});
|
|
212
|
-
const request = socket.createTypedRequest('controller.status', undefined, { timeoutMs: timeoutMsArg, abortSignal: abortController.signal });
|
|
213
|
-
return assertControllerStatus(await request.fire({}), expectationArg);
|
|
311
|
+
socket = await plugins.typedsocket.TypedSocket.createClient(new plugins.typedrequest.TypedRouter(), `http://127.0.0.1:${portArg}`, { autoReconnect: false, maxRetries: 0, abortSignal: signal });
|
|
312
|
+
return await socket.createTypedRequest(methodArg, undefined, { timeoutMs: optionsArg.timeoutMs, abortSignal: signal }).fire(requestArg);
|
|
214
313
|
}
|
|
215
314
|
finally {
|
|
216
|
-
clearTimeout(timeout);
|
|
217
315
|
await socket?.stop();
|
|
218
316
|
}
|
|
219
317
|
};
|
|
220
|
-
|
|
318
|
+
const requestManagedController = (portArg, controllerArg, methodArg, requestArg, optionsArg) => controllerManagementTransport(controllerArg) === 'http'
|
|
319
|
+
? requestControllerManagement(portArg, methodArg, requestArg, optionsArg)
|
|
320
|
+
: requestControllerManagementOverSocket(portArg, methodArg, requestArg, optionsArg);
|
|
321
|
+
export const requestControllerUpgradePrepareBegin = async (portArg, controllerArg, tokenArg, targetVersionArg, gracePeriodMsArg) => {
|
|
322
|
+
const response = await requestManagedController(portArg, controllerArg, 'controller.upgrade.prepare.begin', { token: tokenArg, targetVersion: targetVersionArg, gracePeriodMs: gracePeriodMsArg }, { timeoutMs: controllerUpgradePrepareBeginRequestTimeoutMs });
|
|
323
|
+
if (!isPlainRecord(response)
|
|
324
|
+
|| Object.keys(response).length !== 1
|
|
325
|
+
|| response.accepted !== true)
|
|
326
|
+
throw new Error('The controller returned an invalid upgrade preparation response.');
|
|
327
|
+
return { accepted: true };
|
|
328
|
+
};
|
|
329
|
+
export const requestControllerUpgradeFinalize = async (portArg, controllerArg, tokenArg, modeArg, timeoutMsArg = 60_000) => {
|
|
330
|
+
const response = await requestManagedController(portArg, controllerArg, 'controller.upgrade.finalize', { token: tokenArg, mode: modeArg }, { timeoutMs: timeoutMsArg });
|
|
331
|
+
if (!isPlainRecord(response) || response.finalized !== true) {
|
|
332
|
+
throw new Error('The controller returned an invalid upgrade finalization response.');
|
|
333
|
+
}
|
|
334
|
+
const { continued, failed } = response;
|
|
335
|
+
if (typeof continued !== 'number' || !Number.isSafeInteger(continued) || continued < 0
|
|
336
|
+
|| typeof failed !== 'number' || !Number.isSafeInteger(failed) || failed < 0)
|
|
337
|
+
throw new Error('The controller returned an invalid upgrade finalization response.');
|
|
338
|
+
return { finalized: true, continued, failed };
|
|
339
|
+
};
|
|
340
|
+
/**
|
|
341
|
+
* Reads a controller's status over the transport the query's declaration picks. The upgrade calls that follow take
|
|
342
|
+
* the status itself as their target, so from then on the controller's own declaration decides.
|
|
343
|
+
*/
|
|
344
|
+
export const queryControllerStatus = async (portArg, queryArg, timeoutMsArg = 2_500) => assertControllerStatus(await requestManagedController(portArg, queryArg, 'controller.status', {}, { timeoutMs: timeoutMsArg }), queryArg);
|
|
345
|
+
export const tryQueryControllerStatus = async (portArg, queryArg) => {
|
|
221
346
|
try {
|
|
222
|
-
return await queryControllerStatus(portArg,
|
|
347
|
+
return await queryControllerStatus(portArg, queryArg);
|
|
223
348
|
}
|
|
224
349
|
catch {
|
|
225
350
|
return undefined;
|
|
@@ -242,33 +367,16 @@ export const isLoopbackPortListening = async (portArg, timeoutMsArg = 500) => {
|
|
|
242
367
|
socket.once('error', () => finish(false));
|
|
243
368
|
});
|
|
244
369
|
};
|
|
245
|
-
export const requestControllerUpgradeLaunch = async (portArg, tokenArg, timeoutMsArg = 15_000) => {
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
});
|
|
256
|
-
const response = await socket.createTypedRequest('controller.upgrade.launch', undefined, { timeoutMs: timeoutMsArg, abortSignal: abortController.signal }).fire({ token: tokenArg });
|
|
257
|
-
if (!response
|
|
258
|
-
|| typeof response !== 'object'
|
|
259
|
-
|| response.accepted !== true
|
|
260
|
-
|| !Number.isSafeInteger(response.workerPid)
|
|
261
|
-
|| response.workerPid < 2
|
|
262
|
-
|| typeof response.logFilePath !== 'string'
|
|
263
|
-
|| !plugins.path.isAbsolute(response.logFilePath)) {
|
|
264
|
-
throw new Error(`The controller returned an invalid ${currentCliName} upgrade launch response.`);
|
|
265
|
-
}
|
|
266
|
-
return response;
|
|
267
|
-
}
|
|
268
|
-
finally {
|
|
269
|
-
clearTimeout(timeout);
|
|
270
|
-
await socket?.stop();
|
|
271
|
-
}
|
|
370
|
+
export const requestControllerUpgradeLaunch = async (portArg, controllerArg, tokenArg, timeoutMsArg = 15_000) => {
|
|
371
|
+
const response = await requestManagedController(portArg, controllerArg, 'controller.upgrade.launch', { token: tokenArg }, { timeoutMs: timeoutMsArg });
|
|
372
|
+
const invalid = new Error(`The controller returned an invalid ${currentCliName} upgrade launch response.`);
|
|
373
|
+
if (!isPlainRecord(response) || response.accepted !== true)
|
|
374
|
+
throw invalid;
|
|
375
|
+
const { workerPid, logFilePath } = response;
|
|
376
|
+
if (typeof workerPid !== 'number' || !Number.isSafeInteger(workerPid) || workerPid < 2
|
|
377
|
+
|| typeof logFilePath !== 'string' || !plugins.path.isAbsolute(logFilePath))
|
|
378
|
+
throw invalid;
|
|
379
|
+
return { accepted: true, workerPid, logFilePath };
|
|
272
380
|
};
|
|
273
381
|
export const waitUntilControllerExited = async (optionsArg, timeoutMsArg) => {
|
|
274
382
|
const deadline = Date.now() + timeoutMsArg;
|
|
@@ -391,4 +499,4 @@ export const stopRunningController = async (optionsArg) => {
|
|
|
391
499
|
await stopVerifiedController(optionsArg);
|
|
392
500
|
return 'signals';
|
|
393
501
|
};
|
|
394
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb250cm9sbGVybWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMuY29udHJvbGxlcm1hbmFnZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIseUJBQXlCLEdBTzFCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLCtCQUErQixFQUMvQiwrQkFBK0IsR0FDaEMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV0RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2hGLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7QUFTN0UsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDdEYsc0ZBQXNGO0FBQ3RGLE1BQU0sOEJBQThCLEdBQWdEO0lBQ2xGLFFBQVEsRUFBRSxDQUFDO0lBQ1gsSUFBSSxFQUFFLENBQUM7SUFDUCxLQUFLLEVBQUUsRUFBRTtJQUNULE1BQU0sRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUNGLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLDZDQUE2QyxHQUFHLE1BQU0sQ0FBQztBQUVwRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsU0FB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
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb250cm9sbGVybWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMuY29udHJvbGxlcm1hbmFnZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUNMLHdDQUF3QyxFQUN4QyxvQ0FBb0MsRUFDcEMscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FRMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLCtCQUErQixHQUNoQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXRFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDaEYsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztBQVM3RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxDQUFDLFFBQWlCLEVBQXNCLEVBQUUsQ0FBQyxDQUM5RixPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUNoRixDQUFDO0FBcUJGLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBQ3RGLHNGQUFzRjtBQUN0RixNQUFNLDhCQUE4QixHQUFnRDtJQUNsRixR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
|
|
@@ -50,9 +50,9 @@ export interface IInferenceGatewayOptions {
|
|
|
50
50
|
usageLedger: IInferenceUsageLedger;
|
|
51
51
|
/**
|
|
52
52
|
* The confined listener's Unix socket, bound beside the loopback port and made this user's alone (0600, in a private
|
|
53
|
-
* directory that holds nothing else). It accepts confined credentials alone and serves them the
|
|
54
|
-
*
|
|
55
|
-
* no confined listener and admits no confined credential.
|
|
53
|
+
* directory that holds nothing else). It accepts confined credentials alone and serves them the three endpoints Claude
|
|
54
|
+
* Code uses (`confinedEndpoints`) of their pool, the Claude or the ChatGPT pool, exactly as the loopback listener serves
|
|
55
|
+
* Claude Code on that pool; unset, the gateway has no confined listener and admits no confined credential.
|
|
56
56
|
*/
|
|
57
57
|
confinedSocketPath?: string;
|
|
58
58
|
}
|
|
@@ -106,8 +106,8 @@ export interface IInferenceGatewayClientOptions {
|
|
|
106
106
|
*/
|
|
107
107
|
sessionScope?: string;
|
|
108
108
|
/**
|
|
109
|
-
* Where the credential is accepted; `loopback` when unset. A confined credential is a lease of the Claude
|
|
110
|
-
* on the confined listener alone.
|
|
109
|
+
* Where the credential is accepted; `loopback` when unset. A confined credential is a lease of the Claude or the ChatGPT
|
|
110
|
+
* pool, accepted on the confined listener alone, and stays on the pool it was issued for.
|
|
111
111
|
*/
|
|
112
112
|
route?: TInferenceGatewayRoute;
|
|
113
113
|
}
|
|
@@ -161,7 +161,7 @@ export declare const inferencePaymentCause: (providerArg: TInferenceProvider, cr
|
|
|
161
161
|
export declare const assertInferenceRoutingPolicy: (policyArg: IInferenceRoutingPolicy) => void;
|
|
162
162
|
/**
|
|
163
163
|
* Authenticated Responses and Messages endpoints with bounded, cancelable streaming, on a loopback listener and, for
|
|
164
|
-
* confined credentials, a Unix socket that serves
|
|
164
|
+
* confined credentials, a Unix socket that serves Claude Code's endpoints alone.
|
|
165
165
|
*/
|
|
166
166
|
export declare class InferenceGateway {
|
|
167
167
|
private readonly options;
|