@grackle-ai/adapter-sdk 0.53.0 → 0.53.2
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/connect.d.ts +15 -1
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +17 -10
- package/dist/connect.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/tunnel.d.ts +19 -2
- package/dist/tunnel.d.ts.map +1 -1
- package/dist/tunnel.js +20 -5
- package/dist/tunnel.js.map +1 -1
- package/package.json +2 -2
package/dist/connect.d.ts
CHANGED
|
@@ -10,9 +10,23 @@ export declare function createPowerLineClient(baseUrl: string, powerlineToken: s
|
|
|
10
10
|
* service responds to a ping.
|
|
11
11
|
*/
|
|
12
12
|
export declare function connectThroughTunnel(environmentId: string, localPort: number, powerlineToken: string, logger?: AdapterLogger): Promise<PowerLineConnection>;
|
|
13
|
+
/** Single-shot TCP port prober used by {@link waitForLocalPort}. */
|
|
14
|
+
export interface PortProber {
|
|
15
|
+
/** Attempt a single TCP connection to `host:port`, returning `true` if it succeeds. */
|
|
16
|
+
probe(port: number, host?: string): Promise<boolean>;
|
|
17
|
+
}
|
|
18
|
+
/** Default {@link PortProber} that uses real TCP sockets. */
|
|
19
|
+
export declare const TCP_PORT_PROBER: PortProber;
|
|
20
|
+
/** Options for {@link waitForLocalPort}. */
|
|
21
|
+
export interface WaitForLocalPortOptions {
|
|
22
|
+
/** Override port probing (primarily for testing). */
|
|
23
|
+
portProber?: PortProber;
|
|
24
|
+
/** Override the sleep function (primarily for testing). */
|
|
25
|
+
sleep?: (ms: number) => Promise<void>;
|
|
26
|
+
}
|
|
13
27
|
/**
|
|
14
28
|
* Poll until a TCP connection can be established on localhost at the given port.
|
|
15
29
|
* Used to wait for a tunnel process to begin accepting connections.
|
|
16
30
|
*/
|
|
17
|
-
export declare function waitForLocalPort(port: number): Promise<void>;
|
|
31
|
+
export declare function waitForLocalPort(port: number, options?: WaitForLocalPortOptions): Promise<void>;
|
|
18
32
|
//# sourceMappingURL=connect.d.ts.map
|
package/dist/connect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,CAa9F;AAID;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAID;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,eAAe,CAa9F;AAID;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAID,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,EAAE,UAc7B,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcrG"}
|
package/dist/connect.js
CHANGED
|
@@ -60,15 +60,11 @@ export async function connectThroughTunnel(environmentId, localPort, powerlineTo
|
|
|
60
60
|
}
|
|
61
61
|
throw new Error(`Could not reach PowerLine after ${CONNECT_MAX_RETRIES} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`);
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
export async function waitForLocalPort(port) {
|
|
69
|
-
for (let attempt = 0; attempt < TUNNEL_PORT_POLL_MAX_ATTEMPTS; attempt++) {
|
|
70
|
-
const reachable = await new Promise((resolve) => {
|
|
71
|
-
const socket = createConnection({ host: "127.0.0.1", port });
|
|
63
|
+
/** Default {@link PortProber} that uses real TCP sockets. */
|
|
64
|
+
export const TCP_PORT_PROBER = {
|
|
65
|
+
probe(port, host = "127.0.0.1") {
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
const socket = createConnection({ host, port });
|
|
72
68
|
socket.once("connect", () => {
|
|
73
69
|
socket.destroy();
|
|
74
70
|
resolve(true);
|
|
@@ -78,10 +74,21 @@ export async function waitForLocalPort(port) {
|
|
|
78
74
|
resolve(false);
|
|
79
75
|
});
|
|
80
76
|
});
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Poll until a TCP connection can be established on localhost at the given port.
|
|
81
|
+
* Used to wait for a tunnel process to begin accepting connections.
|
|
82
|
+
*/
|
|
83
|
+
export async function waitForLocalPort(port, options) {
|
|
84
|
+
const prober = options?.portProber ?? TCP_PORT_PROBER;
|
|
85
|
+
const sleepFn = options?.sleep ?? sleep;
|
|
86
|
+
for (let attempt = 0; attempt < TUNNEL_PORT_POLL_MAX_ATTEMPTS; attempt++) {
|
|
87
|
+
const reachable = await prober.probe(port, "127.0.0.1");
|
|
81
88
|
if (reachable) {
|
|
82
89
|
return;
|
|
83
90
|
}
|
|
84
|
-
await
|
|
91
|
+
await sleepFn(TUNNEL_PORT_POLL_DELAY_MS);
|
|
85
92
|
}
|
|
86
93
|
throw new Error(`Local port ${port} did not become reachable after ${TUNNEL_PORT_POLL_MAX_ATTEMPTS} attempts`);
|
|
87
94
|
}
|
package/dist/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,+DAA+D;AAE/D,sDAAsD;AACtD,MAAM,sBAAsB,GAAW,KAAK,CAAC;AAE7C,0DAA0D;AAC1D,MAAM,mBAAmB,GAAW,EAAE,CAAC;AAEvC,6CAA6C;AAC7C,MAAM,yBAAyB,GAAW,GAAG,CAAC;AAE9C,iDAAiD;AACjD,MAAM,6BAA6B,GAAW,EAAE,CAAC;AAEjD,+DAA+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,cAAsB;IAC3E,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACpC,OAAO;QACP,YAAY,EAAE,cAAc;YAC1B,CAAC,CAAC;gBACE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,cAAc,EAAE,CAAC,CAAC;oBAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;aACF;YACH,CAAC,CAAC,EAAE;KACP,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC;AAED,+DAA+D;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAqB,EACrB,SAAiB,EACjB,cAAsB,EACtB,SAAwB,aAAa;IAErC,MAAM,MAAM,GAAG,qBAAqB,CAAC,oBAAoB,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC;IAEtF,IAAI,SAAkB,CAAC;IACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,mBAAmB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAChB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,8CAA8C,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,mBAAmB,cAAc,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC5J,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,+DAA+D;AAE/D,sDAAsD;AACtD,MAAM,sBAAsB,GAAW,KAAK,CAAC;AAE7C,0DAA0D;AAC1D,MAAM,mBAAmB,GAAW,EAAE,CAAC;AAEvC,6CAA6C;AAC7C,MAAM,yBAAyB,GAAW,GAAG,CAAC;AAE9C,iDAAiD;AACjD,MAAM,6BAA6B,GAAW,EAAE,CAAC;AAEjD,+DAA+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,cAAsB;IAC3E,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACpC,OAAO;QACP,YAAY,EAAE,cAAc;YAC1B,CAAC,CAAC;gBACE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,cAAc,EAAE,CAAC,CAAC;oBAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;aACF;YACH,CAAC,CAAC,EAAE;KACP,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC;AAED,+DAA+D;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAqB,EACrB,SAAiB,EACjB,cAAsB,EACtB,SAAwB,aAAa;IAErC,MAAM,MAAM,GAAG,qBAAqB,CAAC,oBAAoB,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC;IAEtF,IAAI,SAAkB,CAAC;IACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,mBAAmB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAChB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,8CAA8C,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,mBAAmB,cAAc,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC5J,CAAC;AAUD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,KAAK,CAAC,IAAY,EAAE,OAAe,WAAW;QAC5C,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;gBAC1B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAUF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAiC;IACpF,MAAM,MAAM,GAAG,OAAO,EAAE,UAAU,IAAI,eAAe,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IAExC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,6BAA6B,EAAE,OAAO,EAAE,EAAE,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAExD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,mCAAmC,6BAA6B,WAAW,CAAC,CAAC;AACjH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,11 +4,12 @@ export { powerline } from "@grackle-ai/common";
|
|
|
4
4
|
export type { PowerLineClient, PowerLineConnection, ProvisionEvent, BaseEnvironmentConfig, EnvironmentAdapter, } from "./adapter.js";
|
|
5
5
|
export { reconnectOrProvision } from "./adapter.js";
|
|
6
6
|
export type { RemoteExecutor } from "./remote-executor.js";
|
|
7
|
-
export type { RemoteTunnel } from "./tunnel.js";
|
|
7
|
+
export type { RemoteTunnel, TunnelProcessFactory, TunnelPortProbe } from "./tunnel.js";
|
|
8
8
|
export { ProcessTunnel } from "./tunnel.js";
|
|
9
9
|
export type { TunnelState } from "./tunnel-registry.js";
|
|
10
10
|
export { registerTunnel, getTunnel, closeTunnel, closeAllTunnels } from "./tunnel-registry.js";
|
|
11
|
-
export {
|
|
11
|
+
export type { PortProber, WaitForLocalPortOptions } from "./connect.js";
|
|
12
|
+
export { createPowerLineClient, connectThroughTunnel, waitForLocalPort, TCP_PORT_PROBER } from "./connect.js";
|
|
12
13
|
export type { BootstrapOptions, StartRemotePowerLineOptions } from "./bootstrap.js";
|
|
13
14
|
export { bootstrapPowerLine, buildEnvFileContent, startRemotePowerLine, probeRemotePowerLine, writeRemoteEnvFile, buildRemoteKillCommand, } from "./bootstrap.js";
|
|
14
15
|
export { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operations.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG/F,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG9G,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,OAAO,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,7 @@ export { powerline } from "@grackle-ai/common";
|
|
|
4
4
|
export { reconnectOrProvision } from "./adapter.js";
|
|
5
5
|
export { ProcessTunnel } from "./tunnel.js";
|
|
6
6
|
export { registerTunnel, getTunnel, closeTunnel, closeAllTunnels } from "./tunnel-registry.js";
|
|
7
|
-
|
|
8
|
-
export { createPowerLineClient, connectThroughTunnel, waitForLocalPort } from "./connect.js";
|
|
7
|
+
export { createPowerLineClient, connectThroughTunnel, waitForLocalPort, TCP_PORT_PROBER } from "./connect.js";
|
|
9
8
|
export { bootstrapPowerLine, buildEnvFileContent, startRemotePowerLine, probeRemotePowerLine, writeRemoteEnvFile, buildRemoteKillCommand, } from "./bootstrap.js";
|
|
10
9
|
// ─── Shared Operations ─────────────────────────────────────
|
|
11
10
|
export { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operations.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,iEAAiE;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,iEAAiE;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI/F,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI9G,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,+DAA+D;AAC/D,OAAO,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
package/dist/tunnel.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import { type ChildProcess } from "node:child_process";
|
|
1
|
+
import { type ChildProcess, type SpawnOptions } from "node:child_process";
|
|
2
2
|
import type { AdapterLogger } from "./logger.js";
|
|
3
|
+
/** Abstraction over child-process spawning used by {@link ProcessTunnel}. */
|
|
4
|
+
export interface TunnelProcessFactory {
|
|
5
|
+
/** Spawn a child process. */
|
|
6
|
+
spawn(command: string, args: string[], options: SpawnOptions): ChildProcess;
|
|
7
|
+
}
|
|
8
|
+
/** Abstraction over port readiness probing used by {@link ProcessTunnel}. */
|
|
9
|
+
export interface TunnelPortProbe {
|
|
10
|
+
/** Wait for a TCP port to accept connections on localhost. */
|
|
11
|
+
waitForPort(port: number): Promise<void>;
|
|
12
|
+
}
|
|
3
13
|
/** Abstraction for a long-lived port-forwarding tunnel. */
|
|
4
14
|
export interface RemoteTunnel {
|
|
5
15
|
/** The local port the tunnel is bound to. */
|
|
@@ -19,12 +29,19 @@ export declare abstract class ProcessTunnel implements RemoteTunnel {
|
|
|
19
29
|
localPort: number;
|
|
20
30
|
protected process: ChildProcess | undefined;
|
|
21
31
|
protected logger: AdapterLogger;
|
|
22
|
-
|
|
32
|
+
protected readonly processFactory: TunnelProcessFactory;
|
|
33
|
+
protected readonly portProbe: TunnelPortProbe;
|
|
34
|
+
constructor(localPort: number, logger?: AdapterLogger, processFactory?: TunnelProcessFactory, portProbe?: TunnelPortProbe);
|
|
23
35
|
/** Return the command and arguments to spawn the tunnel process. */
|
|
24
36
|
protected abstract spawnArgs(): {
|
|
25
37
|
command: string;
|
|
26
38
|
args: string[];
|
|
27
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Wait for the tunnel to become ready after spawning.
|
|
42
|
+
* Override in subclasses that can't probe a local port (e.g. reverse tunnels).
|
|
43
|
+
*/
|
|
44
|
+
protected waitForReady(): Promise<void>;
|
|
28
45
|
/** Open the tunnel by spawning the background process. */
|
|
29
46
|
open(): Promise<void>;
|
|
30
47
|
/** Close the tunnel by killing the background process. */
|
package/dist/tunnel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQjD,6EAA6E;AAC7E,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CAAC;CAC7E;AAKD,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAKD,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,uDAAuD;IACvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,0DAA0D;IAC1D,OAAO,IAAI,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,8BAAsB,aAAc,YAAW,YAAY;IAClD,SAAS,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IACxD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;gBAG5C,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,aAAa,EACtB,cAAc,CAAC,EAAE,oBAAoB,EACrC,SAAS,CAAC,EAAE,eAAe;IAQ7B,oEAAoE;IACpE,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;IAEnE;;;OAGG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C,0DAA0D;IAC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BlC,0DAA0D;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAanC,0DAA0D;IACnD,OAAO,IAAI,OAAO;CAG1B"}
|
package/dist/tunnel.js
CHANGED
|
@@ -4,6 +4,10 @@ import { sleep } from "./utils.js";
|
|
|
4
4
|
import { waitForLocalPort } from "./connect.js";
|
|
5
5
|
/** Grace period before sending SIGKILL to a tunnel process. */
|
|
6
6
|
const TUNNEL_KILL_GRACE_MS = 1_000;
|
|
7
|
+
/** Default implementation that delegates to Node's `child_process.spawn`. */
|
|
8
|
+
const NODE_TUNNEL_PROCESS_FACTORY = { spawn };
|
|
9
|
+
/** Default implementation that polls with real TCP connections. */
|
|
10
|
+
const NODE_TUNNEL_PORT_PROBE = { waitForPort: waitForLocalPort };
|
|
7
11
|
/**
|
|
8
12
|
* Base class for tunnels backed by a long-lived child process.
|
|
9
13
|
* Subclasses provide the command and arguments to spawn.
|
|
@@ -12,15 +16,26 @@ export class ProcessTunnel {
|
|
|
12
16
|
localPort;
|
|
13
17
|
process;
|
|
14
18
|
logger;
|
|
15
|
-
|
|
19
|
+
processFactory;
|
|
20
|
+
portProbe;
|
|
21
|
+
constructor(localPort, logger, processFactory, portProbe) {
|
|
16
22
|
this.localPort = localPort;
|
|
17
|
-
this.logger = logger;
|
|
23
|
+
this.logger = logger ?? defaultLogger;
|
|
24
|
+
this.processFactory = processFactory ?? NODE_TUNNEL_PROCESS_FACTORY;
|
|
25
|
+
this.portProbe = portProbe ?? NODE_TUNNEL_PORT_PROBE;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Wait for the tunnel to become ready after spawning.
|
|
29
|
+
* Override in subclasses that can't probe a local port (e.g. reverse tunnels).
|
|
30
|
+
*/
|
|
31
|
+
async waitForReady() {
|
|
32
|
+
await this.portProbe.waitForPort(this.localPort);
|
|
18
33
|
}
|
|
19
34
|
/** Open the tunnel by spawning the background process. */
|
|
20
35
|
async open() {
|
|
21
36
|
const { command, args } = this.spawnArgs();
|
|
22
37
|
this.logger.info({ command, args }, "Opening tunnel");
|
|
23
|
-
this.process = spawn(command, args, {
|
|
38
|
+
this.process = this.processFactory.spawn(command, args, {
|
|
24
39
|
stdio: ["ignore", "ignore", "pipe"],
|
|
25
40
|
detached: false,
|
|
26
41
|
});
|
|
@@ -30,9 +45,9 @@ export class ProcessTunnel {
|
|
|
30
45
|
this.process.stderr?.on("data", (data) => {
|
|
31
46
|
this.logger.debug({ stderr: data.toString() }, "Tunnel stderr");
|
|
32
47
|
});
|
|
33
|
-
// Wait for the
|
|
48
|
+
// Wait for the tunnel to become ready. Kill the process if it fails.
|
|
34
49
|
try {
|
|
35
|
-
await
|
|
50
|
+
await this.waitForReady();
|
|
36
51
|
}
|
|
37
52
|
catch (err) {
|
|
38
53
|
await this.close();
|
package/dist/tunnel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/adapter-sdk",
|
|
3
|
-
"version": "0.53.
|
|
3
|
+
"version": "0.53.2",
|
|
4
4
|
"description": "SDK for building Grackle environment adapters",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"@bufbuild/protobuf": "^2.5.0",
|
|
28
28
|
"@connectrpc/connect": "^2.0.0",
|
|
29
29
|
"@connectrpc/connect-node": "^2.0.0",
|
|
30
|
-
"@grackle-ai/common": "0.53.
|
|
30
|
+
"@grackle-ai/common": "0.53.2"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@rushstack/heft": "1.2.4",
|