@greatlhd/ailo-endpoint-sdk 1.0.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/dist/blob/client.d.ts +15 -0
- package/dist/blob/client.d.ts.map +1 -0
- package/dist/blob/client.js +48 -0
- package/dist/blob/client.js.map +1 -0
- package/dist/blob/index.d.ts +3 -0
- package/dist/blob/index.d.ts.map +1 -0
- package/dist/blob/index.js +2 -0
- package/dist/blob/index.js.map +1 -0
- package/dist/bootstrap.d.ts +37 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +145 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/config-io.d.ts +6 -0
- package/dist/config-io.d.ts.map +1 -0
- package/dist/config-io.js +43 -0
- package/dist/config-io.js.map +1 -0
- package/dist/connection-state.d.ts +24 -0
- package/dist/connection-state.d.ts.map +1 -0
- package/dist/connection-state.js +83 -0
- package/dist/connection-state.js.map +1 -0
- package/dist/connection-util.d.ts +12 -0
- package/dist/connection-util.d.ts.map +1 -0
- package/dist/connection-util.js +15 -0
- package/dist/connection-util.js.map +1 -0
- package/dist/endpoint-client.d.ts +92 -0
- package/dist/endpoint-client.d.ts.map +1 -0
- package/dist/endpoint-client.js +669 -0
- package/dist/endpoint-client.js.map +1 -0
- package/dist/endpoint-config.d.ts +28 -0
- package/dist/endpoint-config.d.ts.map +1 -0
- package/dist/endpoint-config.js +277 -0
- package/dist/endpoint-config.js.map +1 -0
- package/dist/errors.d.ts +17 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/fileref.d.ts +22 -0
- package/dist/fileref.d.ts.map +1 -0
- package/dist/fileref.js +41 -0
- package/dist/fileref.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/local-endpoint-storage.d.ts +11 -0
- package/dist/local-endpoint-storage.d.ts.map +1 -0
- package/dist/local-endpoint-storage.js +143 -0
- package/dist/local-endpoint-storage.js.map +1 -0
- package/dist/logger.d.ts +25 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +27 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-util.d.ts +8 -0
- package/dist/media-util.d.ts.map +1 -0
- package/dist/media-util.js +78 -0
- package/dist/media-util.js.map +1 -0
- package/dist/middleware/index.d.ts +2 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +2 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/media.d.ts +7 -0
- package/dist/middleware/media.d.ts.map +1 -0
- package/dist/middleware/media.js +112 -0
- package/dist/middleware/media.js.map +1 -0
- package/dist/skill-loader.d.ts +19 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +131 -0
- package/dist/skill-loader.js.map +1 -0
- package/dist/tool-dispatch/index.d.ts +3 -0
- package/dist/tool-dispatch/index.d.ts.map +1 -0
- package/dist/tool-dispatch/index.js +2 -0
- package/dist/tool-dispatch/index.js.map +1 -0
- package/dist/tool-dispatch/normalize.d.ts +5 -0
- package/dist/tool-dispatch/normalize.d.ts.map +1 -0
- package/dist/tool-dispatch/normalize.js +100 -0
- package/dist/tool-dispatch/normalize.js.map +1 -0
- package/dist/types.d.ts +150 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/content.d.ts +7 -0
- package/dist/utils/content.d.ts.map +1 -0
- package/dist/utils/content.js +30 -0
- package/dist/utils/content.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface BlobUploadResult {
|
|
2
|
+
fileRef: string;
|
|
3
|
+
}
|
|
4
|
+
export interface BlobClientOptions {
|
|
5
|
+
httpBase: string;
|
|
6
|
+
apiKey: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class BlobClient {
|
|
9
|
+
private opts;
|
|
10
|
+
constructor(opts: BlobClientOptions);
|
|
11
|
+
upload(localPath: string): Promise<BlobUploadResult>;
|
|
12
|
+
download(blobUrl: string): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
export declare function deriveHttpBase(wsUrl: string): string;
|
|
15
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/blob/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,iBAAiB;IAErC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBpD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgBjD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as os from "os";
|
|
4
|
+
export class BlobClient {
|
|
5
|
+
opts;
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
this.opts = opts;
|
|
8
|
+
}
|
|
9
|
+
async upload(localPath) {
|
|
10
|
+
const absPath = path.resolve(localPath);
|
|
11
|
+
const fileBuffer = fs.readFileSync(absPath);
|
|
12
|
+
const fileName = path.basename(absPath);
|
|
13
|
+
const form = new FormData();
|
|
14
|
+
form.append("file", new Blob([fileBuffer]), fileName);
|
|
15
|
+
const res = await fetch(`${this.opts.httpBase}/api/blob/upload`, {
|
|
16
|
+
method: "POST",
|
|
17
|
+
headers: { Authorization: `Bearer ${this.opts.apiKey}` },
|
|
18
|
+
body: form,
|
|
19
|
+
});
|
|
20
|
+
if (!res.ok) {
|
|
21
|
+
throw new Error(`blob upload failed: ${res.status} ${await res.text()}`);
|
|
22
|
+
}
|
|
23
|
+
const json = (await res.json());
|
|
24
|
+
return { fileRef: json.file_ref };
|
|
25
|
+
}
|
|
26
|
+
async download(blobUrl) {
|
|
27
|
+
const tmpDir = path.join(fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'ailo_blob_'))));
|
|
28
|
+
const fileName = blobUrl.split("/").pop() || `blob_${Date.now()}`;
|
|
29
|
+
const tmpFile = path.join(tmpDir, `${Date.now()}_${fileName}`);
|
|
30
|
+
const res = await fetch(blobUrl, {
|
|
31
|
+
headers: { Authorization: `Bearer ${this.opts.apiKey}` }
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
throw new Error(`blob download failed: ${res.status}`);
|
|
35
|
+
}
|
|
36
|
+
fs.writeFileSync(tmpFile, Buffer.from(await res.arrayBuffer()));
|
|
37
|
+
return tmpFile;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function deriveHttpBase(wsUrl) {
|
|
41
|
+
let base = wsUrl.replace(/\/ws\/?$/, "");
|
|
42
|
+
if (base.startsWith("wss://"))
|
|
43
|
+
base = base.replace("wss://", "https://");
|
|
44
|
+
else if (base.startsWith("ws://"))
|
|
45
|
+
base = base.replace("ws://", "http://");
|
|
46
|
+
return base;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/blob/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blob/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blob/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EndpointClient } from "./endpoint-client.js";
|
|
2
|
+
import { type LogLevel, type LogData } from "./logger.js";
|
|
3
|
+
import type { AcceptMessage, EndpointStorage, EndpointUpdateParams, ToolHandler, ToolCapability, SkillMeta } from "./types.js";
|
|
4
|
+
export interface EndpointContext {
|
|
5
|
+
accept(msg: AcceptMessage): Promise<void>;
|
|
6
|
+
storage: EndpointStorage;
|
|
7
|
+
sendSignal(signal: string, data?: unknown): void;
|
|
8
|
+
onSignal(signal: string, callback: (data: unknown) => void): void;
|
|
9
|
+
uploadBlob(localPath: string): Promise<string>;
|
|
10
|
+
resolveToLocal(pathOrUrl: string): Promise<string>;
|
|
11
|
+
sendFile(localPath: string): Promise<string>;
|
|
12
|
+
update(params: EndpointUpdateParams): Promise<void>;
|
|
13
|
+
client: EndpointClient;
|
|
14
|
+
log(level: LogLevel, message: string, data?: LogData): void;
|
|
15
|
+
reportHealth(status: string): void;
|
|
16
|
+
}
|
|
17
|
+
export interface EndpointHandler {
|
|
18
|
+
start(ctx: EndpointContext): void | Promise<void>;
|
|
19
|
+
stop(): void | Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export interface EndpointConfig {
|
|
22
|
+
caps?: string[];
|
|
23
|
+
handler: EndpointHandler;
|
|
24
|
+
tools?: ToolCapability[];
|
|
25
|
+
toolHandlers?: Record<string, ToolHandler>;
|
|
26
|
+
onUnknownTool?: (name: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
27
|
+
blueprints?: string[];
|
|
28
|
+
ailoWsUrl?: string;
|
|
29
|
+
ailoApiKey?: string;
|
|
30
|
+
endpointId?: string;
|
|
31
|
+
instructions?: string;
|
|
32
|
+
skillDirs?: string[];
|
|
33
|
+
skills?: SkillMeta[];
|
|
34
|
+
onConnectFailure?: (err: Error, client: EndpointClient) => void | Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export declare function runEndpoint(config: EndpointConfig): void;
|
|
37
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtD,OAAO,EAA8B,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EACV,aAAa,EAEb,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAClE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAiJxD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { EndpointClient } from "./endpoint-client.js";
|
|
4
|
+
import { createLocalEndpointStorage } from "./local-endpoint-storage.js";
|
|
5
|
+
import { loadSkills } from "./skill-loader.js";
|
|
6
|
+
import { BlobClient, deriveHttpBase } from "./blob/client.js";
|
|
7
|
+
import { autoUploadMedia, resolveFileArgsInPlace, resolveToLocal } from "./middleware/media.js";
|
|
8
|
+
import { normalizeToolResult } from "./tool-dispatch/normalize.js";
|
|
9
|
+
import { inferMime, classifyMedia } from "./media-util.js";
|
|
10
|
+
import { ConsoleLogger } from "./logger.js";
|
|
11
|
+
export function runEndpoint(config) {
|
|
12
|
+
const { handler } = config;
|
|
13
|
+
const ailoWsUrl = config.ailoWsUrl ?? process.env.AILO_WS_URL ?? "";
|
|
14
|
+
const ailoApiKey = config.ailoApiKey ?? process.env.AILO_API_KEY ?? "";
|
|
15
|
+
const endpointId = config.endpointId ?? process.env.AILO_ENDPOINT_ID ?? "";
|
|
16
|
+
const caps = config.caps ?? ["message", "tool_execute"];
|
|
17
|
+
if (!ailoWsUrl || !ailoApiKey || !endpointId) {
|
|
18
|
+
console.error("[endpoint] Missing ailoWsUrl, ailoApiKey or endpointId. " +
|
|
19
|
+
"Please pass these values in the config or set them via the config file.");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const tag = `[${endpointId}]`;
|
|
23
|
+
const logger = new ConsoleLogger(tag);
|
|
24
|
+
const skills = config.skills !== undefined
|
|
25
|
+
? config.skills
|
|
26
|
+
: loadSkills(config.skillDirs);
|
|
27
|
+
if (skills.length > 0) {
|
|
28
|
+
logger.info('skills_loaded', { count: skills.length, names: skills.map((s) => s.name).join(", ") });
|
|
29
|
+
}
|
|
30
|
+
const client = new EndpointClient({
|
|
31
|
+
url: ailoWsUrl,
|
|
32
|
+
apiKey: ailoApiKey,
|
|
33
|
+
endpointId,
|
|
34
|
+
caps,
|
|
35
|
+
tools: config.tools,
|
|
36
|
+
instructions: config.instructions,
|
|
37
|
+
blueprints: config.blueprints,
|
|
38
|
+
skills,
|
|
39
|
+
}, { logger });
|
|
40
|
+
const shutdown = (reason = "shutdown") => {
|
|
41
|
+
logger.info('shutting_down', { reason });
|
|
42
|
+
Promise.resolve(handler.stop()).catch(() => { });
|
|
43
|
+
client.close();
|
|
44
|
+
process.exit(0);
|
|
45
|
+
};
|
|
46
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
47
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
48
|
+
client.onEvicted(() => {
|
|
49
|
+
logger.warn('evicted', { message: 'evicted by a newer instance, exiting.' });
|
|
50
|
+
Promise.resolve(handler.stop()).catch(() => { });
|
|
51
|
+
process.exit(0);
|
|
52
|
+
});
|
|
53
|
+
(async () => {
|
|
54
|
+
const ailoHttpBase = deriveHttpBase(ailoWsUrl);
|
|
55
|
+
const blobUrlPrefix = `${ailoHttpBase}/api/blob/`;
|
|
56
|
+
const blobClient = new BlobClient({ httpBase: ailoHttpBase, apiKey: ailoApiKey });
|
|
57
|
+
async function uploadBlob(localPath) {
|
|
58
|
+
const absPath = path.resolve(localPath);
|
|
59
|
+
const fileBuffer = fs.readFileSync(absPath);
|
|
60
|
+
const fileName = path.basename(absPath);
|
|
61
|
+
const form = new FormData();
|
|
62
|
+
form.append("file", new Blob([fileBuffer]), fileName);
|
|
63
|
+
const res = await fetch(`${ailoHttpBase}/api/blob/upload`, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers: { Authorization: `Bearer ${ailoApiKey}` },
|
|
66
|
+
body: form,
|
|
67
|
+
});
|
|
68
|
+
if (!res.ok)
|
|
69
|
+
throw new Error(`blob upload failed: ${res.status} ${await res.text()}`);
|
|
70
|
+
const json = (await res.json());
|
|
71
|
+
return json.file_ref;
|
|
72
|
+
}
|
|
73
|
+
if (config.toolHandlers || config.onUnknownTool) {
|
|
74
|
+
const handlers = config.toolHandlers ?? {};
|
|
75
|
+
const onUnknown = config.onUnknownTool;
|
|
76
|
+
client.onToolRequest(async (req) => {
|
|
77
|
+
await resolveFileArgsInPlace(req.args, blobClient, blobUrlPrefix);
|
|
78
|
+
const fn = handlers[req.name];
|
|
79
|
+
if (fn) {
|
|
80
|
+
const result = await fn(req.args);
|
|
81
|
+
return normalizeToolResult(result, blobClient);
|
|
82
|
+
}
|
|
83
|
+
if (onUnknown) {
|
|
84
|
+
const result = await onUnknown(req.name, req.args);
|
|
85
|
+
return normalizeToolResult(result, blobClient);
|
|
86
|
+
}
|
|
87
|
+
throw new Error(`unknown tool: ${req.name}`);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const ctx = {
|
|
91
|
+
async accept(msg) {
|
|
92
|
+
await autoUploadMedia(msg.content, blobClient);
|
|
93
|
+
return client.accept(msg);
|
|
94
|
+
},
|
|
95
|
+
storage: createLocalEndpointStorage(endpointId),
|
|
96
|
+
sendSignal: (signal, data) => client.sendSignal(signal, data),
|
|
97
|
+
onSignal: (signal, callback) => {
|
|
98
|
+
client.onSignal(signal, (_sig, data) => callback(data));
|
|
99
|
+
},
|
|
100
|
+
uploadBlob,
|
|
101
|
+
resolveToLocal: (pathOrUrl) => resolveToLocal(pathOrUrl, blobClient, endpointId, blobUrlPrefix),
|
|
102
|
+
async sendFile(localPath) {
|
|
103
|
+
const absPath = path.resolve(localPath);
|
|
104
|
+
const fileRef = await uploadBlob(absPath);
|
|
105
|
+
const mime = inferMime(absPath);
|
|
106
|
+
const mediaType = classifyMedia(mime);
|
|
107
|
+
await ctx.accept({
|
|
108
|
+
content: [{ type: mediaType, media: { type: mediaType, fileRef, mime, name: path.basename(absPath) } }],
|
|
109
|
+
contextTags: [],
|
|
110
|
+
});
|
|
111
|
+
return fileRef;
|
|
112
|
+
},
|
|
113
|
+
update: (params) => client.update(params),
|
|
114
|
+
client,
|
|
115
|
+
log: (level, message, data) => logger[level](message, data),
|
|
116
|
+
reportHealth: (status) => logger.info('health_report', { status }),
|
|
117
|
+
};
|
|
118
|
+
for (;;) {
|
|
119
|
+
try {
|
|
120
|
+
await client.connect();
|
|
121
|
+
logger.info('connected', { message: 'Ailo WebSocket connected' });
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
const e = err instanceof Error ? err : new Error(String(err));
|
|
126
|
+
logger.error('connect_failed', { error: e.message });
|
|
127
|
+
if (config.onConnectFailure) {
|
|
128
|
+
await Promise.resolve(config.onConnectFailure(e, client));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
await handler.start(ctx);
|
|
137
|
+
logger.info('handler_started', { message: 'handler started' });
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
logger.error('handler_start_failed', { error: err instanceof Error ? err.message : String(err) });
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
})();
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function readConfig<T = Record<string, unknown>>(configPath: string): Partial<T>;
|
|
2
|
+
export declare function writeConfig<T = Record<string, unknown>>(configPath: string, data: T): void;
|
|
3
|
+
declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
|
|
4
|
+
declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void;
|
|
5
|
+
export { getNestedValue, setNestedValue };
|
|
6
|
+
//# sourceMappingURL=config-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-io.d.ts","sourceRoot":"","sources":["../src/config-io.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAOtF;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAM1F;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ3E;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CASxF;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, renameSync, existsSync } from "fs";
|
|
2
|
+
import { dirname, join } from "path";
|
|
3
|
+
import { randomBytes } from "crypto";
|
|
4
|
+
export function readConfig(configPath) {
|
|
5
|
+
try {
|
|
6
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
7
|
+
return JSON.parse(raw);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function writeConfig(configPath, data) {
|
|
14
|
+
const dir = dirname(configPath);
|
|
15
|
+
if (!existsSync(dir))
|
|
16
|
+
mkdirSync(dir, { recursive: true });
|
|
17
|
+
const tmp = join(dir, `.config-${randomBytes(4).toString("hex")}.tmp`);
|
|
18
|
+
writeFileSync(tmp, JSON.stringify(data, null, 2) + "\n", "utf-8");
|
|
19
|
+
renameSync(tmp, configPath);
|
|
20
|
+
}
|
|
21
|
+
function getNestedValue(obj, path) {
|
|
22
|
+
const parts = path.split(".");
|
|
23
|
+
let cur = obj;
|
|
24
|
+
for (const p of parts) {
|
|
25
|
+
if (cur == null || typeof cur !== "object")
|
|
26
|
+
return undefined;
|
|
27
|
+
cur = cur[p];
|
|
28
|
+
}
|
|
29
|
+
return cur;
|
|
30
|
+
}
|
|
31
|
+
function setNestedValue(obj, path, value) {
|
|
32
|
+
const parts = path.split(".");
|
|
33
|
+
let cur = obj;
|
|
34
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
35
|
+
const p = parts[i];
|
|
36
|
+
if (cur[p] == null || typeof cur[p] !== "object")
|
|
37
|
+
cur[p] = {};
|
|
38
|
+
cur = cur[p];
|
|
39
|
+
}
|
|
40
|
+
cur[parts[parts.length - 1]] = value;
|
|
41
|
+
}
|
|
42
|
+
export { getNestedValue, setNestedValue };
|
|
43
|
+
//# sourceMappingURL=config-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-io.js","sourceRoot":"","sources":["../src/config-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,UAAU,UAAU,CAA8B,UAAkB;IACxE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAA8B,UAAkB,EAAE,IAAO;IAClF,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAClE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B,EAAE,IAAY;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAY,GAAG,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC7D,GAAG,GAAI,GAA+B,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B,EAAE,IAAY,EAAE,KAAc;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9D,GAAG,GAAG,GAAG,CAAC,CAAC,CAA4B,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACvC,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'closing';
|
|
2
|
+
export interface StateTransition {
|
|
3
|
+
from: ConnectionState;
|
|
4
|
+
to: ConnectionState;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
reason?: string;
|
|
7
|
+
}
|
|
8
|
+
export type StateChangeListener = (transition: StateTransition) => void;
|
|
9
|
+
export declare class ConnectionFSM {
|
|
10
|
+
private _state;
|
|
11
|
+
private listeners;
|
|
12
|
+
private history;
|
|
13
|
+
get state(): ConnectionState;
|
|
14
|
+
get isConnected(): boolean;
|
|
15
|
+
get isConnecting(): boolean;
|
|
16
|
+
get isDisconnected(): boolean;
|
|
17
|
+
canTransitionTo(newState: ConnectionState): boolean;
|
|
18
|
+
transition(newState: ConnectionState, reason?: string): boolean;
|
|
19
|
+
forceTransition(newState: ConnectionState, reason?: string): void;
|
|
20
|
+
onStateChange(listener: StateChangeListener): () => void;
|
|
21
|
+
getHistory(): StateTransition[];
|
|
22
|
+
reset(): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=connection-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-state.d.ts","sourceRoot":"","sources":["../src/connection-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,YAAY,GACZ,WAAW,GACX,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,eAAe,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;AAExE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,OAAO,CAAyB;IAExC,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO;IAWnD,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IA0B/D,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAoBjE,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAQxD,UAAU,IAAI,eAAe,EAAE;IAI/B,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export class ConnectionFSM {
|
|
2
|
+
_state = 'disconnected';
|
|
3
|
+
listeners = [];
|
|
4
|
+
history = [];
|
|
5
|
+
get state() {
|
|
6
|
+
return this._state;
|
|
7
|
+
}
|
|
8
|
+
get isConnected() {
|
|
9
|
+
return this._state === 'connected';
|
|
10
|
+
}
|
|
11
|
+
get isConnecting() {
|
|
12
|
+
return this._state === 'connecting' || this._state === 'reconnecting';
|
|
13
|
+
}
|
|
14
|
+
get isDisconnected() {
|
|
15
|
+
return this._state === 'disconnected';
|
|
16
|
+
}
|
|
17
|
+
canTransitionTo(newState) {
|
|
18
|
+
const allowed = {
|
|
19
|
+
disconnected: ['connecting'],
|
|
20
|
+
connecting: ['connected', 'disconnected', 'reconnecting'],
|
|
21
|
+
connected: ['disconnected', 'reconnecting', 'closing'],
|
|
22
|
+
reconnecting: ['connected', 'disconnected', 'connecting'],
|
|
23
|
+
closing: ['disconnected'],
|
|
24
|
+
};
|
|
25
|
+
return allowed[this._state].includes(newState);
|
|
26
|
+
}
|
|
27
|
+
transition(newState, reason) {
|
|
28
|
+
if (!this.canTransitionTo(newState)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const transition = {
|
|
32
|
+
from: this._state,
|
|
33
|
+
to: newState,
|
|
34
|
+
timestamp: Date.now(),
|
|
35
|
+
reason,
|
|
36
|
+
};
|
|
37
|
+
this.history.push(transition);
|
|
38
|
+
this._state = newState;
|
|
39
|
+
for (const listener of this.listeners) {
|
|
40
|
+
try {
|
|
41
|
+
listener(transition);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// ignore listener errors
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
forceTransition(newState, reason) {
|
|
50
|
+
const transition = {
|
|
51
|
+
from: this._state,
|
|
52
|
+
to: newState,
|
|
53
|
+
timestamp: Date.now(),
|
|
54
|
+
reason,
|
|
55
|
+
};
|
|
56
|
+
this.history.push(transition);
|
|
57
|
+
this._state = newState;
|
|
58
|
+
for (const listener of this.listeners) {
|
|
59
|
+
try {
|
|
60
|
+
listener(transition);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// ignore listener errors
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
onStateChange(listener) {
|
|
68
|
+
this.listeners.push(listener);
|
|
69
|
+
return () => {
|
|
70
|
+
const idx = this.listeners.indexOf(listener);
|
|
71
|
+
if (idx >= 0)
|
|
72
|
+
this.listeners.splice(idx, 1);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
getHistory() {
|
|
76
|
+
return [...this.history];
|
|
77
|
+
}
|
|
78
|
+
reset() {
|
|
79
|
+
this._state = 'disconnected';
|
|
80
|
+
this.history = [];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=connection-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../src/connection-state.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,aAAa;IAChB,MAAM,GAAoB,cAAc,CAAC;IACzC,SAAS,GAA0B,EAAE,CAAC;IACtC,OAAO,GAAsB,EAAE,CAAC;IAExC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;IACrC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC;IACxE,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC;IACxC,CAAC;IAED,eAAe,CAAC,QAAyB;QACvC,MAAM,OAAO,GAA+C;YAC1D,YAAY,EAAE,CAAC,YAAY,CAAC;YAC5B,UAAU,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC;YACzD,SAAS,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,CAAC;YACtD,YAAY,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC;YACzD,OAAO,EAAE,CAAC,cAAc,CAAC;SAC1B,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,QAAyB,EAAE,MAAe;QACnD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAoB;YAClC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,EAAE,EAAE,QAAQ;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QAEvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,QAAyB,EAAE,MAAe;QACxD,MAAM,UAAU,GAAoB;YAClC,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,EAAE,EAAE,QAAQ;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QAEvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa,CAAC,QAA6B;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AiloConnectionConfig {
|
|
2
|
+
url: string;
|
|
3
|
+
apiKey: string;
|
|
4
|
+
endpointId: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function hasValidConfig(c: AiloConnectionConfig): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Exponential backoff delay with optional jitter.
|
|
9
|
+
* @param attempt 0-based attempt count
|
|
10
|
+
*/
|
|
11
|
+
export declare function backoffDelayMs(attempt: number, baseMs?: number, maxMs?: number, jitter?: boolean): number;
|
|
12
|
+
//# sourceMappingURL=connection-util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-util.d.ts","sourceRoot":"","sources":["../src/connection-util.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAE/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,SAAO,EACb,KAAK,SAAS,EACd,MAAM,UAAO,GACZ,MAAM,CAKR"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function hasValidConfig(c) {
|
|
2
|
+
return !!(c.url && c.apiKey && c.endpointId);
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Exponential backoff delay with optional jitter.
|
|
6
|
+
* @param attempt 0-based attempt count
|
|
7
|
+
*/
|
|
8
|
+
export function backoffDelayMs(attempt, baseMs = 1000, maxMs = 60_000, jitter = true) {
|
|
9
|
+
const raw = Math.min(baseMs * 2 ** attempt, maxMs);
|
|
10
|
+
if (!jitter)
|
|
11
|
+
return raw;
|
|
12
|
+
const spread = raw * 0.1 * (Math.random() * 2 - 1);
|
|
13
|
+
return Math.max(100, Math.round(raw + spread));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=connection-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-util.js","sourceRoot":"","sources":["../src/connection-util.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,cAAc,CAAC,CAAuB;IACpD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,MAAM,GAAG,IAAI,EACb,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,IAAI;IAEb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { AcceptMessage, ToolResponsePayload, WorldEnrichmentPayload, IntentPayload, ToolRequestPayload, StreamPayload, ToolCapability, SkillMeta, EndpointUpdateParams } from "./types.js";
|
|
2
|
+
import type { Logger } from "./logger.js";
|
|
3
|
+
import { type ConnectionState, type StateChangeListener } from "./connection-state.js";
|
|
4
|
+
export interface EndpointClientOptions {
|
|
5
|
+
handshakeTimeout?: number;
|
|
6
|
+
heartbeatInterval?: number;
|
|
7
|
+
heartbeatTimeout?: number;
|
|
8
|
+
reconnectBaseDelay?: number;
|
|
9
|
+
reconnectMaxDelay?: number;
|
|
10
|
+
offlineBufferSize?: number;
|
|
11
|
+
logger?: Logger;
|
|
12
|
+
}
|
|
13
|
+
export declare const RECONNECT_COOLDOWN_MS = 1000;
|
|
14
|
+
export type ToolRequestHandler = (payload: ToolRequestPayload) => Promise<unknown>;
|
|
15
|
+
export type IntentHandler = (payload: IntentPayload) => void;
|
|
16
|
+
export type WorldEnrichmentHandler = (payload: WorldEnrichmentPayload) => void;
|
|
17
|
+
export type StreamHandler = (payload: StreamPayload) => void;
|
|
18
|
+
export type SignalHandler = (signal: string, data: unknown) => void;
|
|
19
|
+
export type EvictedHandler = () => void;
|
|
20
|
+
export interface EndpointClientConfig {
|
|
21
|
+
url: string;
|
|
22
|
+
apiKey: string;
|
|
23
|
+
endpointId: string;
|
|
24
|
+
caps: string[];
|
|
25
|
+
tools?: ToolCapability[];
|
|
26
|
+
instructions?: string;
|
|
27
|
+
blueprints?: string[];
|
|
28
|
+
skills?: SkillMeta[];
|
|
29
|
+
offlineBufferSize?: number;
|
|
30
|
+
}
|
|
31
|
+
export type ConnectionOverrides = Partial<Pick<EndpointClientConfig, "url" | "apiKey" | "endpointId">>;
|
|
32
|
+
export declare class EndpointClient {
|
|
33
|
+
private ws;
|
|
34
|
+
private cfg;
|
|
35
|
+
private opts;
|
|
36
|
+
private fsm;
|
|
37
|
+
private reqId;
|
|
38
|
+
private pending;
|
|
39
|
+
private heartbeatTimer;
|
|
40
|
+
private pongTimer;
|
|
41
|
+
private reconnectTimer;
|
|
42
|
+
private reconnectAttempt;
|
|
43
|
+
private offlineBuffer;
|
|
44
|
+
private readonly offlineBufferMax;
|
|
45
|
+
private toolRequestHandler;
|
|
46
|
+
private intentHandler;
|
|
47
|
+
private worldEnrichmentHandler;
|
|
48
|
+
private streamHandler;
|
|
49
|
+
private signalHandlers;
|
|
50
|
+
private evictedHandler;
|
|
51
|
+
private fsProbeMarker;
|
|
52
|
+
private reconnectWaiters;
|
|
53
|
+
constructor(config: EndpointClientConfig, options?: EndpointClientOptions);
|
|
54
|
+
get state(): ConnectionState;
|
|
55
|
+
get isConnected(): boolean;
|
|
56
|
+
onStateChange(listener: StateChangeListener): () => void;
|
|
57
|
+
setLogger(logger: Logger): void;
|
|
58
|
+
connect(): Promise<void>;
|
|
59
|
+
close(): void;
|
|
60
|
+
reconnect(skills?: SkillMeta[], connectionOverrides?: ConnectionOverrides, tools?: ToolCapability[], blueprints?: string[]): Promise<void>;
|
|
61
|
+
update(params: EndpointUpdateParams): Promise<void>;
|
|
62
|
+
onToolRequest(handler: ToolRequestHandler): this;
|
|
63
|
+
onIntent(handler: IntentHandler): this;
|
|
64
|
+
onWorldEnrichment(handler: WorldEnrichmentHandler): this;
|
|
65
|
+
onStream(handler: StreamHandler): this;
|
|
66
|
+
onSignal(signal: string, handler: SignalHandler): this;
|
|
67
|
+
onEvicted(handler: EvictedHandler): this;
|
|
68
|
+
accept(msg: AcceptMessage): Promise<void>;
|
|
69
|
+
toolResponse(payload: ToolResponsePayload): Promise<void>;
|
|
70
|
+
sendSignal(signal: string, data?: unknown): void;
|
|
71
|
+
private dial;
|
|
72
|
+
private handshake;
|
|
73
|
+
private attachHandlers;
|
|
74
|
+
private handleEvent;
|
|
75
|
+
private request;
|
|
76
|
+
private acceptDirect;
|
|
77
|
+
private flushOfflineBuffer;
|
|
78
|
+
private startHeartbeat;
|
|
79
|
+
private stopHeartbeat;
|
|
80
|
+
private waitForConnection;
|
|
81
|
+
private resolveReconnectWaiters;
|
|
82
|
+
private rejectReconnectWaiters;
|
|
83
|
+
private onDisconnect;
|
|
84
|
+
private rejectAllPending;
|
|
85
|
+
private handleFileFetch;
|
|
86
|
+
private handleDirList;
|
|
87
|
+
private handleFilePush;
|
|
88
|
+
private handleFsProbe;
|
|
89
|
+
private writeFsProbeFile;
|
|
90
|
+
private scheduleReconnect;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=endpoint-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-client.d.ts","sourceRoot":"","sources":["../src/endpoint-client.ts"],"names":[],"mappings":"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"}
|