@grackle-ai/adapter-sdk 0.53.1 → 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/index.d.ts +1 -1
- package/dist/index.d.ts.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/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ 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";
|
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/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",
|