@elizaos/plugin-tunnel 2.0.0-beta.1 → 2.0.3-beta.3
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/LICENSE +21 -0
- package/README.md +8 -6
- package/package.json +23 -5
- package/registry-entry.json +45 -0
- package/src/__tests__/unit/local-tunnel-service.test.ts +244 -13
- package/src/actions/start-tunnel.ts +5 -0
- package/src/actions/tunnel.ts +7 -30
- package/src/environment.ts +4 -3
- package/src/index.ts +1 -1
- package/src/services/LocalTunnelService.ts +3 -3
- package/dist/__tests__/TunnelTestSuite.d.ts +0 -6
- package/dist/__tests__/TunnelTestSuite.d.ts.map +0 -1
- package/dist/__tests__/TunnelTestSuite.js +0 -47
- package/dist/__tests__/TunnelTestSuite.js.map +0 -1
- package/dist/actions/get-tunnel-status.d.ts +0 -3
- package/dist/actions/get-tunnel-status.d.ts.map +0 -1
- package/dist/actions/get-tunnel-status.js +0 -43
- package/dist/actions/get-tunnel-status.js.map +0 -1
- package/dist/actions/start-tunnel.d.ts +0 -3
- package/dist/actions/start-tunnel.d.ts.map +0 -1
- package/dist/actions/start-tunnel.js +0 -96
- package/dist/actions/start-tunnel.js.map +0 -1
- package/dist/actions/stop-tunnel.d.ts +0 -3
- package/dist/actions/stop-tunnel.d.ts.map +0 -1
- package/dist/actions/stop-tunnel.js +0 -41
- package/dist/actions/stop-tunnel.js.map +0 -1
- package/dist/actions/tunnel.d.ts +0 -20
- package/dist/actions/tunnel.d.ts.map +0 -1
- package/dist/actions/tunnel.js +0 -159
- package/dist/actions/tunnel.js.map +0 -1
- package/dist/environment.d.ts +0 -18
- package/dist/environment.d.ts.map +0 -1
- package/dist/environment.js +0 -66
- package/dist/environment.js.map +0 -1
- package/dist/index.d.ts +0 -21
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -46
- package/dist/index.js.map +0 -1
- package/dist/providers/tunnel-state.d.ts +0 -12
- package/dist/providers/tunnel-state.d.ts.map +0 -1
- package/dist/providers/tunnel-state.js +0 -43
- package/dist/providers/tunnel-state.js.map +0 -1
- package/dist/services/LocalTunnelService.d.ts +0 -37
- package/dist/services/LocalTunnelService.d.ts.map +0 -1
- package/dist/services/LocalTunnelService.js +0 -186
- package/dist/services/LocalTunnelService.js.map +0 -1
- package/dist/types.d.ts +0 -47
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -34
- package/dist/types.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-state.js","sourceRoot":"","sources":["../../src/providers/tunnel-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,gFAAgF;IAC7F,qBAAqB,EAAE,0CAA0C;IACjE,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAChC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC7F,QAAQ,EAAE,GAAG;IAEb,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,IAAI,EAAE,kCAAkC;gBACxC,IAAI,EAAE;oBACJ,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,KAAK;iBACjB;aACF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM;YACxB,CAAC,CAAC,mBAAmB,MAAM,CAAC,GAAG,IAAI,aAAa,UAAU,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;YACzI,CAAC,CAAC,gBAAgB,MAAM,CAAC,QAAQ,UAAU,CAAC;QAC9C,OAAO;YACL,IAAI;YACJ,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI;gBACf,GAAG,MAAM;gBACT,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;aACpE;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { type IAgentRuntime, Service } from '@elizaos/core';
|
|
2
|
-
import type { ITunnelService, TunnelStatus } from '../types';
|
|
3
|
-
export declare function checkTailscaleInstalled(): Promise<boolean>;
|
|
4
|
-
/**
|
|
5
|
-
* Tunnel service backed by the locally-installed `tailscale` CLI.
|
|
6
|
-
*
|
|
7
|
-
* The user is responsible for `tailscale up` (i.e. authenticating with
|
|
8
|
-
* Tailscale's coordination server, OR with a self-hosted headscale via
|
|
9
|
-
* `--login-server`). This service just calls `tailscale serve` / `tailscale
|
|
10
|
-
* funnel` to expose a port and reads `tailscale status --json` to learn the
|
|
11
|
-
* tailnet DNS name.
|
|
12
|
-
*
|
|
13
|
-
* Coexists with `@elizaos/plugin-elizacloud`'s cloud tunnel and
|
|
14
|
-
* `@elizaos/plugin-ngrok` — only the first one to register `serviceType="tunnel"`
|
|
15
|
-
* wins. This service registers itself only if the `tailscale` binary is on
|
|
16
|
-
* `PATH`, gating out machines that have no Tailscale install.
|
|
17
|
-
*/
|
|
18
|
-
export declare class LocalTunnelService extends Service implements ITunnelService {
|
|
19
|
-
static serviceType: string;
|
|
20
|
-
readonly capabilityDescription = "Tunnel via the locally-installed `tailscale` CLI (serve / funnel). User authenticates separately with `tailscale up`.";
|
|
21
|
-
private tunnelUrl;
|
|
22
|
-
private tunnelPort;
|
|
23
|
-
private startedAt;
|
|
24
|
-
private isShuttingDown;
|
|
25
|
-
private useFunnel;
|
|
26
|
-
static start(runtime: IAgentRuntime): Promise<Service>;
|
|
27
|
-
start(): Promise<void>;
|
|
28
|
-
stop(): Promise<void>;
|
|
29
|
-
startTunnel(port?: number): Promise<string | undefined>;
|
|
30
|
-
stopTunnel(): Promise<void>;
|
|
31
|
-
getUrl(): string | null;
|
|
32
|
-
isActive(): boolean;
|
|
33
|
-
getStatus(): TunnelStatus;
|
|
34
|
-
private fetchSelfDnsName;
|
|
35
|
-
private cleanup;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=LocalTunnelService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LocalTunnelService.d.ts","sourceRoot":"","sources":["../../src/services/LocalTunnelService.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA2C7D,wBAAgB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM1D;AAaD;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAmB,SAAQ,OAAQ,YAAW,cAAc;IACvE,OAAgB,WAAW,SAAY;IACvC,QAAQ,CAAC,qBAAqB,2HAC4F;IAE1H,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;WAEJ,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAwDvD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC,MAAM,IAAI,MAAM,GAAG,IAAI;IAIvB,QAAQ,IAAI,OAAO;IAInB,SAAS,IAAI,YAAY;YAWX,gBAAgB;IAgB9B,OAAO,CAAC,OAAO;CAMhB"}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { elizaLogger, Service } from '@elizaos/core';
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
import { validateTunnelConfig } from '../environment';
|
|
5
|
-
const tailscaleStatusPeerSchema = z.object({
|
|
6
|
-
DNSName: z.string().optional(),
|
|
7
|
-
Online: z.boolean().optional(),
|
|
8
|
-
});
|
|
9
|
-
const tailscaleStatusSchema = z.object({
|
|
10
|
-
Self: z
|
|
11
|
-
.object({
|
|
12
|
-
DNSName: z.string().optional(),
|
|
13
|
-
})
|
|
14
|
-
.optional(),
|
|
15
|
-
MagicDNSSuffix: z.string().optional(),
|
|
16
|
-
Peer: z.record(z.string(), tailscaleStatusPeerSchema).optional(),
|
|
17
|
-
});
|
|
18
|
-
function runCommand(cmd, args) {
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
const child = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
21
|
-
const out = [];
|
|
22
|
-
const err = [];
|
|
23
|
-
child.stdout?.on('data', (chunk) => out.push(chunk));
|
|
24
|
-
child.stderr?.on('data', (chunk) => err.push(chunk));
|
|
25
|
-
child.on('error', reject);
|
|
26
|
-
child.on('exit', (code) => resolve({
|
|
27
|
-
code,
|
|
28
|
-
stdout: Buffer.concat(out).toString('utf8'),
|
|
29
|
-
stderr: Buffer.concat(err).toString('utf8'),
|
|
30
|
-
}));
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
export function checkTailscaleInstalled() {
|
|
34
|
-
return new Promise((resolve) => {
|
|
35
|
-
const proc = spawn('which', ['tailscale']);
|
|
36
|
-
proc.on('exit', (code) => resolve(code === 0));
|
|
37
|
-
proc.on('error', () => resolve(false));
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
function parseTailscaleStatus(stdout) {
|
|
41
|
-
let raw;
|
|
42
|
-
try {
|
|
43
|
-
raw = JSON.parse(stdout);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
const result = tailscaleStatusSchema.safeParse(raw);
|
|
49
|
-
return result.success ? result.data : null;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Tunnel service backed by the locally-installed `tailscale` CLI.
|
|
53
|
-
*
|
|
54
|
-
* The user is responsible for `tailscale up` (i.e. authenticating with
|
|
55
|
-
* Tailscale's coordination server, OR with a self-hosted headscale via
|
|
56
|
-
* `--login-server`). This service just calls `tailscale serve` / `tailscale
|
|
57
|
-
* funnel` to expose a port and reads `tailscale status --json` to learn the
|
|
58
|
-
* tailnet DNS name.
|
|
59
|
-
*
|
|
60
|
-
* Coexists with `@elizaos/plugin-elizacloud`'s cloud tunnel and
|
|
61
|
-
* `@elizaos/plugin-ngrok` — only the first one to register `serviceType="tunnel"`
|
|
62
|
-
* wins. This service registers itself only if the `tailscale` binary is on
|
|
63
|
-
* `PATH`, gating out machines that have no Tailscale install.
|
|
64
|
-
*/
|
|
65
|
-
export class LocalTunnelService extends Service {
|
|
66
|
-
static serviceType = 'tunnel';
|
|
67
|
-
capabilityDescription = 'Tunnel via the locally-installed `tailscale` CLI (serve / funnel). User authenticates separately with `tailscale up`.';
|
|
68
|
-
tunnelUrl = null;
|
|
69
|
-
tunnelPort = null;
|
|
70
|
-
startedAt = null;
|
|
71
|
-
isShuttingDown = false;
|
|
72
|
-
useFunnel = false;
|
|
73
|
-
static async start(runtime) {
|
|
74
|
-
const service = new LocalTunnelService(runtime);
|
|
75
|
-
await service.start();
|
|
76
|
-
return service;
|
|
77
|
-
}
|
|
78
|
-
async start() {
|
|
79
|
-
elizaLogger.info('[LocalTunnelService] starting');
|
|
80
|
-
const installed = await checkTailscaleInstalled();
|
|
81
|
-
if (!installed) {
|
|
82
|
-
throw new Error('tailscale is not installed. Install from https://tailscale.com/download or run: brew install tailscale');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async stop() {
|
|
86
|
-
await this.stopTunnel();
|
|
87
|
-
}
|
|
88
|
-
async startTunnel(port) {
|
|
89
|
-
if (this.isActive()) {
|
|
90
|
-
elizaLogger.warn('[LocalTunnelService] tunnel already running');
|
|
91
|
-
return this.tunnelUrl ?? undefined;
|
|
92
|
-
}
|
|
93
|
-
if (port === undefined || port === null) {
|
|
94
|
-
elizaLogger.warn('[LocalTunnelService] startTunnel called without a port — service active but no tunnel started');
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (port < 1 || port > 65535) {
|
|
98
|
-
throw new Error('Invalid port number');
|
|
99
|
-
}
|
|
100
|
-
const config = await validateTunnelConfig(this.runtime);
|
|
101
|
-
this.useFunnel = config.TUNNEL_FUNNEL;
|
|
102
|
-
elizaLogger.info(`[LocalTunnelService] starting tunnel on port ${port} (funnel=${this.useFunnel})`);
|
|
103
|
-
if (this.useFunnel) {
|
|
104
|
-
const result = await runCommand('tailscale', ['funnel', String(port)]);
|
|
105
|
-
if (result.code !== 0) {
|
|
106
|
-
throw new Error(`tailscale funnel exited with code ${result.code}: ${result.stderr.trim()}`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
const result = await runCommand('tailscale', [
|
|
111
|
-
'serve',
|
|
112
|
-
'--bg',
|
|
113
|
-
'--https=443',
|
|
114
|
-
`localhost:${port}`,
|
|
115
|
-
]);
|
|
116
|
-
if (result.code !== 0) {
|
|
117
|
-
throw new Error(`tailscale serve exited with code ${result.code}: ${result.stderr.trim()}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
const dnsName = await this.fetchSelfDnsName();
|
|
121
|
-
if (!dnsName) {
|
|
122
|
-
throw new Error('tailscale serve started but no DNSName resolved from `tailscale status --json`');
|
|
123
|
-
}
|
|
124
|
-
this.tunnelUrl = `https://${dnsName}`;
|
|
125
|
-
this.tunnelPort = port;
|
|
126
|
-
this.startedAt = new Date();
|
|
127
|
-
elizaLogger.info(`[LocalTunnelService] tunnel started: ${this.tunnelUrl}`);
|
|
128
|
-
return this.tunnelUrl;
|
|
129
|
-
}
|
|
130
|
-
async stopTunnel() {
|
|
131
|
-
if (!this.isActive()) {
|
|
132
|
-
elizaLogger.warn('[LocalTunnelService] no active tunnel to stop');
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
this.isShuttingDown = true;
|
|
136
|
-
elizaLogger.info('[LocalTunnelService] stopping tunnel');
|
|
137
|
-
if (this.useFunnel) {
|
|
138
|
-
await runCommand('tailscale', ['funnel', 'reset']);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
await runCommand('tailscale', ['serve', 'reset']);
|
|
142
|
-
}
|
|
143
|
-
this.cleanup();
|
|
144
|
-
this.isShuttingDown = false;
|
|
145
|
-
elizaLogger.info('[LocalTunnelService] tunnel stopped');
|
|
146
|
-
}
|
|
147
|
-
getUrl() {
|
|
148
|
-
return this.tunnelUrl;
|
|
149
|
-
}
|
|
150
|
-
isActive() {
|
|
151
|
-
return this.tunnelUrl !== null && !this.isShuttingDown;
|
|
152
|
-
}
|
|
153
|
-
getStatus() {
|
|
154
|
-
return {
|
|
155
|
-
active: this.isActive(),
|
|
156
|
-
url: this.tunnelUrl,
|
|
157
|
-
port: this.tunnelPort,
|
|
158
|
-
startedAt: this.startedAt,
|
|
159
|
-
provider: 'tailscale',
|
|
160
|
-
backend: 'local-cli',
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
async fetchSelfDnsName() {
|
|
164
|
-
const result = await runCommand('tailscale', ['status', '--json']);
|
|
165
|
-
if (result.code !== 0) {
|
|
166
|
-
elizaLogger.error(`[LocalTunnelService] tailscale status failed: ${result.stderr.trim()}`);
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
const status = parseTailscaleStatus(result.stdout);
|
|
170
|
-
if (!status) {
|
|
171
|
-
elizaLogger.error('[LocalTunnelService] tailscale status returned malformed JSON');
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
const raw = status.Self?.DNSName;
|
|
175
|
-
if (!raw)
|
|
176
|
-
return null;
|
|
177
|
-
return raw.replace(/\.$/, '');
|
|
178
|
-
}
|
|
179
|
-
cleanup() {
|
|
180
|
-
this.tunnelUrl = null;
|
|
181
|
-
this.tunnelPort = null;
|
|
182
|
-
this.startedAt = null;
|
|
183
|
-
this.useFunnel = false;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
//# sourceMappingURL=LocalTunnelService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LocalTunnelService.js","sourceRoot":"","sources":["../../src/services/LocalTunnelService.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tunnel-service contract shared across all elizaOS tunnel plugins.
|
|
3
|
-
*
|
|
4
|
-
* All tunnel plugins (`@elizaos/plugin-tunnel`, `@elizaos/plugin-elizacloud`'s
|
|
5
|
-
* cloud tunnel, `@elizaos/plugin-ngrok`) register under
|
|
6
|
-
* `serviceType = "tunnel"` so consumers stay backend-agnostic via
|
|
7
|
-
* `runtime.getService("tunnel")`. The runtime returns the FIRST registered
|
|
8
|
-
* service for a given type, so plugins coordinate via conditional
|
|
9
|
-
* registration: each plugin's `init` only registers if its credentials are
|
|
10
|
-
* present and no other tunnel service has already claimed the slot.
|
|
11
|
-
*/
|
|
12
|
-
import type { IAgentRuntime } from '@elizaos/core';
|
|
13
|
-
declare module '@elizaos/core' {
|
|
14
|
-
interface ServiceTypeRegistry {
|
|
15
|
-
TUNNEL: 'tunnel';
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export type TunnelProvider = 'tailscale' | 'headscale' | 'ngrok';
|
|
19
|
-
export interface TunnelStatus {
|
|
20
|
-
active: boolean;
|
|
21
|
-
url: string | null;
|
|
22
|
-
port: number | null;
|
|
23
|
-
startedAt: Date | null;
|
|
24
|
-
provider: TunnelProvider;
|
|
25
|
-
/** Optional human label distinguishing backend variants (e.g. "local-cli", "eliza-cloud-headscale"). */
|
|
26
|
-
backend?: string;
|
|
27
|
-
}
|
|
28
|
-
export interface ITunnelService {
|
|
29
|
-
startTunnel(port?: number): Promise<string | undefined>;
|
|
30
|
-
stopTunnel(): Promise<void>;
|
|
31
|
-
getUrl(): string | null;
|
|
32
|
-
isActive(): boolean;
|
|
33
|
-
getStatus(): TunnelStatus;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Backend-agnostic accessor. Returns the first registered service that
|
|
37
|
-
* implements the tunnel contract; returns null if nothing is registered or
|
|
38
|
-
* the registered service doesn't satisfy the shape (defensive guard against
|
|
39
|
-
* an unrelated service registering under "tunnel").
|
|
40
|
-
*/
|
|
41
|
-
export declare function getTunnelService(runtime: IAgentRuntime): ITunnelService | null;
|
|
42
|
-
/**
|
|
43
|
-
* True iff no tunnel service has claimed `serviceType="tunnel"` yet.
|
|
44
|
-
* Used by tunnel plugins' `init` hooks to coordinate "first active wins".
|
|
45
|
-
*/
|
|
46
|
-
export declare function tunnelSlotIsFree(runtime: IAgentRuntime): boolean;
|
|
47
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAW,MAAM,eAAe,CAAC;AAE5D,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,mBAAmB;QAC3B,MAAM,EAAE,QAAQ,CAAC;KAClB;CACF;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,wGAAwG;IACxG,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,IAAI,OAAO,CAAC;IACpB,SAAS,IAAI,YAAY,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,GAAG,IAAI,CAO9E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAEhE"}
|
package/dist/types.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tunnel-service contract shared across all elizaOS tunnel plugins.
|
|
3
|
-
*
|
|
4
|
-
* All tunnel plugins (`@elizaos/plugin-tunnel`, `@elizaos/plugin-elizacloud`'s
|
|
5
|
-
* cloud tunnel, `@elizaos/plugin-ngrok`) register under
|
|
6
|
-
* `serviceType = "tunnel"` so consumers stay backend-agnostic via
|
|
7
|
-
* `runtime.getService("tunnel")`. The runtime returns the FIRST registered
|
|
8
|
-
* service for a given type, so plugins coordinate via conditional
|
|
9
|
-
* registration: each plugin's `init` only registers if its credentials are
|
|
10
|
-
* present and no other tunnel service has already claimed the slot.
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Backend-agnostic accessor. Returns the first registered service that
|
|
14
|
-
* implements the tunnel contract; returns null if nothing is registered or
|
|
15
|
-
* the registered service doesn't satisfy the shape (defensive guard against
|
|
16
|
-
* an unrelated service registering under "tunnel").
|
|
17
|
-
*/
|
|
18
|
-
export function getTunnelService(runtime) {
|
|
19
|
-
const service = runtime.getService('tunnel');
|
|
20
|
-
if (!service)
|
|
21
|
-
return null;
|
|
22
|
-
if (typeof service.startTunnel !== 'function') {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
return service;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* True iff no tunnel service has claimed `serviceType="tunnel"` yet.
|
|
29
|
-
* Used by tunnel plugins' `init` hooks to coordinate "first active wins".
|
|
30
|
-
*/
|
|
31
|
-
export function tunnelSlotIsFree(runtime) {
|
|
32
|
-
return runtime.getService('tunnel') === null;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8BH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAQ,OAAmC,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAmC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC/C,CAAC"}
|