oblien 2.2.0 → 2.2.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/README.md +1 -0
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +2 -2
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/tunnel.d.ts +14 -0
- package/dist/cli/commands/tunnel.d.ts.map +1 -0
- package/dist/cli/commands/tunnel.js +201 -0
- package/dist/cli/commands/tunnel.js.map +1 -0
- package/dist/cli/index.js +16 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -0
- package/dist/client.js.map +1 -1
- package/dist/edge-tunnel.d.ts +95 -0
- package/dist/edge-tunnel.d.ts.map +1 -0
- package/dist/edge-tunnel.js +127 -0
- package/dist/edge-tunnel.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/transfer.d.ts.map +1 -1
- package/dist/runtime/transfer.js +43 -1
- package/dist/runtime/transfer.js.map +1 -1
- package/dist/runtime-http.d.ts +10 -0
- package/dist/runtime-http.d.ts.map +1 -1
- package/dist/runtime-http.js +83 -1
- package/dist/runtime-http.js.map +1 -1
- package/dist/tunnel/client.d.ts +70 -0
- package/dist/tunnel/client.d.ts.map +1 -0
- package/dist/tunnel/client.js +280 -0
- package/dist/tunnel/client.js.map +1 -0
- package/dist/tunnel/protocol.d.ts +38 -0
- package/dist/tunnel/protocol.d.ts.map +1 -0
- package/dist/tunnel/protocol.js +66 -0
- package/dist/tunnel/protocol.js.map +1 -0
- package/dist/types/edge-tunnel.d.ts +40 -0
- package/dist/types/edge-tunnel.d.ts.map +1 -0
- package/dist/types/edge-tunnel.js +3 -0
- package/dist/types/edge-tunnel.js.map +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +16 -0
- package/dist/types/runtime.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -154,6 +154,7 @@ This enables the Runtime API server (if needed), fetches a gateway JWT, and retu
|
|
|
154
154
|
| Namespace | What it does |
|
|
155
155
|
|-----------|-------------|
|
|
156
156
|
| `rt.files` | List, read, write, stat, mkdir, delete, stream directory trees |
|
|
157
|
+
| `rt.transfer` | Download and upload `tar.gz` archives, with optional client-side progress callbacks |
|
|
157
158
|
| `rt.exec` | Run commands, stream output, list/kill tasks, send stdin |
|
|
158
159
|
| `rt.terminal` | Create PTY sessions, get scrollback, close sessions |
|
|
159
160
|
| `rt.search` | Content search (ripgrep) and filename search |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6L3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5E"}
|
|
@@ -49,7 +49,8 @@ function prompt(question) {
|
|
|
49
49
|
// ── Login ───────────────────────────────────────────────────────────
|
|
50
50
|
async function authLogin(flags) {
|
|
51
51
|
const base = flags.baseUrl ?? DEFAULT_BASE;
|
|
52
|
-
//
|
|
52
|
+
// If credentials exist but haven't failed, confirm re-auth.
|
|
53
|
+
// If config was already cleared (e.g. after a 401), skip straight to login.
|
|
53
54
|
const existing = loadConfig();
|
|
54
55
|
if (existing?.token || (existing?.clientId && existing?.clientSecret)) {
|
|
55
56
|
const answer = await prompt('You are already logged in. Re-authenticate? [y/N] ');
|
|
@@ -107,7 +108,6 @@ async function authLogin(flags) {
|
|
|
107
108
|
printError('Login timed out. Please try again.');
|
|
108
109
|
process.exit(1);
|
|
109
110
|
}
|
|
110
|
-
console.log(' ✓ Authenticated!\n');
|
|
111
111
|
// Step 5: Save the original JWT — it's now authenticated (user_id bound to its session)
|
|
112
112
|
saveConfig({
|
|
113
113
|
token: jwt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGxD,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAE9C,uEAAuE;AAEvE,KAAK,UAAU,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAI3C,EAAE;IACJ,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;IAElE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;QAC7B,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ;QACvC,CAAC,CAAC,SAAS,GAAG,GAAG;QACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,aAAa,GAAG,GAAG;YACrB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;IAE1B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAiD,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,SAAS,CAAC,KAAe;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,YAAY,CAAC;IAE3C,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oblien tunnel — expose a local port through the Oblien edge.
|
|
3
|
+
*
|
|
4
|
+
* oblien tunnel <port> Expose localhost:port
|
|
5
|
+
* oblien tunnel <port> --slug my-app With custom slug
|
|
6
|
+
* oblien tunnel <port> --name "My App" With custom name
|
|
7
|
+
* oblien tunnel <port> --domain x.com With custom domain
|
|
8
|
+
* oblien tunnel list List existing tunnels
|
|
9
|
+
* oblien tunnel status <id> Show tunnel details
|
|
10
|
+
* oblien tunnel delete <id> Delete a tunnel
|
|
11
|
+
*/
|
|
12
|
+
import type { CliFlags } from './types.js';
|
|
13
|
+
export declare function tunnelCmd(args: string[], flags: CliFlags): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB9E"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oblien tunnel — expose a local port through the Oblien edge.
|
|
3
|
+
*
|
|
4
|
+
* oblien tunnel <port> Expose localhost:port
|
|
5
|
+
* oblien tunnel <port> --slug my-app With custom slug
|
|
6
|
+
* oblien tunnel <port> --name "My App" With custom name
|
|
7
|
+
* oblien tunnel <port> --domain x.com With custom domain
|
|
8
|
+
* oblien tunnel list List existing tunnels
|
|
9
|
+
* oblien tunnel status <id> Show tunnel details
|
|
10
|
+
* oblien tunnel delete <id> Delete a tunnel
|
|
11
|
+
*/
|
|
12
|
+
import { buildClient } from '../auth.js';
|
|
13
|
+
import { printResult, printSuccess, printTable, printError } from '../output.js';
|
|
14
|
+
import { parseFlag, requireId, confirm } from './helpers.js';
|
|
15
|
+
import { TunnelClient } from '../../tunnel/client.js';
|
|
16
|
+
export async function tunnelCmd(args, flags) {
|
|
17
|
+
const sub = args[0];
|
|
18
|
+
switch (sub) {
|
|
19
|
+
case 'list':
|
|
20
|
+
case 'ls':
|
|
21
|
+
return tunnelList(flags);
|
|
22
|
+
case 'status':
|
|
23
|
+
return tunnelStatus(args[1], flags);
|
|
24
|
+
case 'delete':
|
|
25
|
+
case 'rm':
|
|
26
|
+
return tunnelDelete(args[1], flags);
|
|
27
|
+
case undefined:
|
|
28
|
+
return tunnelHelp();
|
|
29
|
+
default: {
|
|
30
|
+
// If first arg is a number, treat it as: oblien tunnel <port>
|
|
31
|
+
const port = Number(sub);
|
|
32
|
+
if (!Number.isNaN(port) && port > 0 && port <= 65535) {
|
|
33
|
+
return tunnelConnect(port, args.slice(1), flags);
|
|
34
|
+
}
|
|
35
|
+
console.error(`Unknown subcommand: ${sub}\n`);
|
|
36
|
+
return tunnelHelp();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// ── oblien tunnel <port> ──────────────────────────────────────────
|
|
41
|
+
async function tunnelConnect(port, args, flags) {
|
|
42
|
+
const client = buildClient(flags);
|
|
43
|
+
const slug = parseFlag(args, '--slug');
|
|
44
|
+
const name = parseFlag(args, '--name');
|
|
45
|
+
const domain = parseFlag(args, '--domain');
|
|
46
|
+
const expiresIn = parseFlag(args, '--expires-in');
|
|
47
|
+
// 1. Check for an existing tunnel on this port.
|
|
48
|
+
let tunnel;
|
|
49
|
+
try {
|
|
50
|
+
const { tunnels } = await client.edgeTunnel.list();
|
|
51
|
+
tunnel = tunnels.find(t => t.port === port && t.status === 'active');
|
|
52
|
+
}
|
|
53
|
+
catch { /* no existing tunnels */ }
|
|
54
|
+
// 2. Create a new tunnel if none exists for this port.
|
|
55
|
+
if (!tunnel) {
|
|
56
|
+
const tunnelName = name ?? `tunnel-${port}`;
|
|
57
|
+
const params = { name: tunnelName, port };
|
|
58
|
+
if (slug)
|
|
59
|
+
params.slug = slug;
|
|
60
|
+
if (domain)
|
|
61
|
+
params.domain = domain;
|
|
62
|
+
const res = await client.edgeTunnel.create(params);
|
|
63
|
+
tunnel = res.tunnel;
|
|
64
|
+
}
|
|
65
|
+
// 3. Issue a connection token.
|
|
66
|
+
const tokenRes = await client.edgeTunnel.issueToken(tunnel.id, expiresIn ? { expiresIn } : undefined);
|
|
67
|
+
// 4. Print tunnel info and connect.
|
|
68
|
+
console.log();
|
|
69
|
+
console.log(` \x1b[1m\x1b[32m✓ Tunnel ready\x1b[0m`);
|
|
70
|
+
console.log();
|
|
71
|
+
console.log(` URL ${tunnel.url}`);
|
|
72
|
+
console.log(` Port localhost:${port}`);
|
|
73
|
+
console.log(` ID ${tunnel.id}`);
|
|
74
|
+
if (!slug) {
|
|
75
|
+
console.log();
|
|
76
|
+
console.log(` \x1b[2mTip: Use --slug <name> for a custom URL, e.g. oblien tunnel ${port} --slug my-app\x1b[0m`);
|
|
77
|
+
}
|
|
78
|
+
console.log();
|
|
79
|
+
const tunnelClient = new TunnelClient({
|
|
80
|
+
connectUrl: tokenRes.connect_url,
|
|
81
|
+
token: tokenRes.token,
|
|
82
|
+
localPort: port,
|
|
83
|
+
tokenExpiresAt: tokenRes.expires_at,
|
|
84
|
+
});
|
|
85
|
+
let requestCount = 0;
|
|
86
|
+
tunnelClient.on('open', () => {
|
|
87
|
+
console.log(` \x1b[2mConnected — forwarding traffic. Press Ctrl+C to stop.\x1b[0m`);
|
|
88
|
+
console.log();
|
|
89
|
+
});
|
|
90
|
+
tunnelClient.on('request', (_streamId, localPort) => {
|
|
91
|
+
requestCount++;
|
|
92
|
+
const ts = new Date().toLocaleTimeString();
|
|
93
|
+
console.log(` \x1b[2m${ts}\x1b[0m → localhost:${localPort} \x1b[2m(${requestCount})\x1b[0m`);
|
|
94
|
+
});
|
|
95
|
+
tunnelClient.on('stream-error', (_streamId, reason) => {
|
|
96
|
+
console.log(` \x1b[31m✗\x1b[0m ${reason}`);
|
|
97
|
+
});
|
|
98
|
+
tunnelClient.on('disconnect', (code, reason) => {
|
|
99
|
+
console.log();
|
|
100
|
+
printError(`Disconnected (code=${code}${reason ? `, ${reason}` : ''}). Reconnecting...`);
|
|
101
|
+
// Simple reconnect with backoff
|
|
102
|
+
setTimeout(() => {
|
|
103
|
+
if (!tunnelClient.isConnected) {
|
|
104
|
+
tunnelClient.connect();
|
|
105
|
+
}
|
|
106
|
+
}, 2000);
|
|
107
|
+
});
|
|
108
|
+
let finishRun;
|
|
109
|
+
tunnelClient.on('auth-failed', (failure) => {
|
|
110
|
+
console.log();
|
|
111
|
+
printError(`${failure.message} Token expires at ${failure.expiresAt}.`);
|
|
112
|
+
finishRun?.();
|
|
113
|
+
});
|
|
114
|
+
const runPromise = new Promise((resolve) => {
|
|
115
|
+
let settled = false;
|
|
116
|
+
const finish = () => {
|
|
117
|
+
if (settled)
|
|
118
|
+
return;
|
|
119
|
+
settled = true;
|
|
120
|
+
process.off('SIGINT', shutdown);
|
|
121
|
+
process.off('SIGTERM', shutdown);
|
|
122
|
+
resolve();
|
|
123
|
+
};
|
|
124
|
+
const shutdown = () => {
|
|
125
|
+
console.log();
|
|
126
|
+
console.log(` Disconnecting...`);
|
|
127
|
+
tunnelClient.close();
|
|
128
|
+
finish();
|
|
129
|
+
};
|
|
130
|
+
finishRun = finish;
|
|
131
|
+
process.on('SIGINT', shutdown);
|
|
132
|
+
process.on('SIGTERM', shutdown);
|
|
133
|
+
});
|
|
134
|
+
tunnelClient.connect();
|
|
135
|
+
await runPromise;
|
|
136
|
+
}
|
|
137
|
+
// ── oblien tunnel list ────────────────────────────────────────────
|
|
138
|
+
async function tunnelList(flags) {
|
|
139
|
+
const client = buildClient(flags);
|
|
140
|
+
const res = await client.edgeTunnel.list();
|
|
141
|
+
if (flags.json) {
|
|
142
|
+
printResult(res, true);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const tunnels = res.tunnels ?? [];
|
|
146
|
+
if (tunnels.length === 0) {
|
|
147
|
+
console.log('No tunnels.');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
printTable(tunnels.map(t => ({
|
|
151
|
+
id: t.id,
|
|
152
|
+
name: t.name,
|
|
153
|
+
port: t.port,
|
|
154
|
+
url: t.url,
|
|
155
|
+
status: t.status,
|
|
156
|
+
})), ['id', 'name', 'port', 'url', 'status']);
|
|
157
|
+
}
|
|
158
|
+
// ── oblien tunnel status <id> ─────────────────────────────────────
|
|
159
|
+
async function tunnelStatus(id, flags) {
|
|
160
|
+
const tunnelId = Number(requireId(id, 'tunnel status <id>'));
|
|
161
|
+
const client = buildClient(flags);
|
|
162
|
+
const res = await client.edgeTunnel.get(tunnelId);
|
|
163
|
+
printResult(flags.json ? res : res.tunnel, flags.json);
|
|
164
|
+
}
|
|
165
|
+
// ── oblien tunnel delete <id> ─────────────────────────────────────
|
|
166
|
+
async function tunnelDelete(id, flags) {
|
|
167
|
+
const tunnelId = Number(requireId(id, 'tunnel delete <id>'));
|
|
168
|
+
const client = buildClient(flags);
|
|
169
|
+
const ok = await confirm(`Delete tunnel ${tunnelId}?`);
|
|
170
|
+
if (!ok)
|
|
171
|
+
return;
|
|
172
|
+
await client.edgeTunnel.delete(tunnelId);
|
|
173
|
+
printSuccess(`Tunnel ${tunnelId} deleted.`);
|
|
174
|
+
}
|
|
175
|
+
// ── Help ──────────────────────────────────────────────────────────
|
|
176
|
+
function tunnelHelp() {
|
|
177
|
+
console.log(`
|
|
178
|
+
oblien tunnel - Expose a local port through the Oblien edge
|
|
179
|
+
|
|
180
|
+
Usage:
|
|
181
|
+
oblien tunnel <port> Expose localhost:port
|
|
182
|
+
oblien tunnel list List existing tunnels
|
|
183
|
+
oblien tunnel status <id> Show tunnel details
|
|
184
|
+
oblien tunnel delete <id> Delete a tunnel
|
|
185
|
+
|
|
186
|
+
Flags:
|
|
187
|
+
--slug <slug> Custom subdomain slug
|
|
188
|
+
--name <name> Display name for the tunnel
|
|
189
|
+
--domain <domain> Custom base domain
|
|
190
|
+
--expires-in <ttl> Token TTL like 30s, 5m, 1h, 7d
|
|
191
|
+
|
|
192
|
+
Examples:
|
|
193
|
+
oblien tunnel 3000
|
|
194
|
+
oblien tunnel 8080 --slug my-api
|
|
195
|
+
oblien tunnel 3000 --name "Dev Server" --domain preview.oblien.com
|
|
196
|
+
oblien tunnel 3000 --expires-in 15m
|
|
197
|
+
oblien tunnel list
|
|
198
|
+
oblien tunnel delete 42
|
|
199
|
+
`);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../../src/cli/commands/tunnel.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { createRequire } from 'node:module';
|
|
12
12
|
import { extractGlobalFlags } from './output.js';
|
|
13
|
+
import { clearConfig } from './config-store.js';
|
|
13
14
|
import { authCmd } from './commands/auth.js';
|
|
14
15
|
import { configCmd } from './commands/config.js';
|
|
15
16
|
import { skillsCmd } from './commands/skills.js';
|
|
@@ -35,6 +36,7 @@ import { metadataCmd } from './commands/metadata.js';
|
|
|
35
36
|
import { terminalCmd } from './commands/terminal.js';
|
|
36
37
|
import { watcherCmd } from './commands/watcher.js';
|
|
37
38
|
import { tokensCmd } from './commands/tokens.js';
|
|
39
|
+
import { tunnelCmd } from './commands/tunnel.js';
|
|
38
40
|
// ── Version ─────────────────────────────────────────────────────────
|
|
39
41
|
function version() {
|
|
40
42
|
const require = createRequire(import.meta.url);
|
|
@@ -80,6 +82,7 @@ function help() {
|
|
|
80
82
|
terminal Manage runtime terminal sessions
|
|
81
83
|
watcher Manage file system watchers
|
|
82
84
|
tokens Issue scoped tokens (namespace/workspace JWTs)
|
|
85
|
+
tunnel Expose local ports through the Oblien edge
|
|
83
86
|
|
|
84
87
|
Global flags:
|
|
85
88
|
--json Output as JSON
|
|
@@ -122,6 +125,9 @@ function help() {
|
|
|
122
125
|
oblien terminal list ws_abc123
|
|
123
126
|
oblien watcher create ws_abc123 --path /app/src
|
|
124
127
|
oblien tokens create --scope namespace --namespace my-ns
|
|
128
|
+
oblien tunnel 3000
|
|
129
|
+
oblien tunnel 8080 --slug my-api
|
|
130
|
+
oblien tunnel list
|
|
125
131
|
`.trimStart());
|
|
126
132
|
}
|
|
127
133
|
// ── Main ────────────────────────────────────────────────────────────
|
|
@@ -225,6 +231,9 @@ async function main() {
|
|
|
225
231
|
case 'tokens':
|
|
226
232
|
await tokensCmd(args, flags);
|
|
227
233
|
break;
|
|
234
|
+
case 'tunnel':
|
|
235
|
+
await tunnelCmd(args, flags);
|
|
236
|
+
break;
|
|
228
237
|
default:
|
|
229
238
|
console.error(`Unknown command: ${command}\n`);
|
|
230
239
|
help();
|
|
@@ -234,7 +243,13 @@ async function main() {
|
|
|
234
243
|
catch (err) {
|
|
235
244
|
const msg = err instanceof Error ? err.message : String(err);
|
|
236
245
|
const code = err.status;
|
|
237
|
-
|
|
246
|
+
if (code === 401) {
|
|
247
|
+
clearConfig();
|
|
248
|
+
console.error(`✗ Session expired. Run: oblien login`);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.error(`✗ ${msg}${code ? ` (HTTP ${code})` : ''}`);
|
|
252
|
+
}
|
|
238
253
|
process.exit(1);
|
|
239
254
|
}
|
|
240
255
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { WorkspaceHandle } from './workspace-handle.js';
|
|
|
4
4
|
import { Namespace } from './namespace.js';
|
|
5
5
|
import { Pages } from './pages.js';
|
|
6
6
|
import { EdgeProxy } from './edge-proxy.js';
|
|
7
|
+
import { EdgeTunnel } from './edge-tunnel.js';
|
|
7
8
|
import { Domain } from './domain.js';
|
|
8
9
|
import { Tokens } from './tokens.js';
|
|
9
10
|
import type { OblienOptions } from './types/index.js';
|
|
@@ -41,6 +42,8 @@ export declare class Oblien {
|
|
|
41
42
|
get sites(): Pages;
|
|
42
43
|
/** Edge proxy — reverse proxy subdomains to external upstreams (enterprise). */
|
|
43
44
|
readonly edgeProxy: EdgeProxy;
|
|
45
|
+
/** Edge tunnel — expose local ports to the internet through the Oblien edge. */
|
|
46
|
+
readonly edgeTunnel: EdgeTunnel;
|
|
44
47
|
/** Standalone domain utilities (DNS validation). */
|
|
45
48
|
readonly domain: Domain;
|
|
46
49
|
/** Scoped tokens — issue short-lived namespace/workspace JWTs for end-users. */
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,MAAM;IACjB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAE/B,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAE/B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtB,6CAA6C;IAC7C,IAAI,KAAK,IAAI,KAAK,CAAuB;IAEzC,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,MAAM;IACjB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAE/B,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAE/B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtB,6CAA6C;IAC7C,IAAI,KAAK,IAAI,KAAK,CAAuB;IAEzC,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,gFAAgF;IAChF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,aAAa;IAWlC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;CAGhD"}
|
package/dist/client.js
CHANGED
|
@@ -4,6 +4,7 @@ import { WorkspaceHandle } from './workspace-handle.js';
|
|
|
4
4
|
import { Namespace } from './namespace.js';
|
|
5
5
|
import { Pages } from './pages.js';
|
|
6
6
|
import { EdgeProxy } from './edge-proxy.js';
|
|
7
|
+
import { EdgeTunnel } from './edge-tunnel.js';
|
|
7
8
|
import { Domain } from './domain.js';
|
|
8
9
|
import { Tokens } from './tokens.js';
|
|
9
10
|
/**
|
|
@@ -40,6 +41,8 @@ export class Oblien {
|
|
|
40
41
|
get sites() { return this.pages; }
|
|
41
42
|
/** Edge proxy — reverse proxy subdomains to external upstreams (enterprise). */
|
|
42
43
|
edgeProxy;
|
|
44
|
+
/** Edge tunnel — expose local ports to the internet through the Oblien edge. */
|
|
45
|
+
edgeTunnel;
|
|
43
46
|
/** Standalone domain utilities (DNS validation). */
|
|
44
47
|
domain;
|
|
45
48
|
/** Scoped tokens — issue short-lived namespace/workspace JWTs for end-users. */
|
|
@@ -50,6 +53,7 @@ export class Oblien {
|
|
|
50
53
|
this.namespaces = new Namespace(this);
|
|
51
54
|
this.pages = new Pages(this);
|
|
52
55
|
this.edgeProxy = new EdgeProxy(this);
|
|
56
|
+
this.edgeTunnel = new EdgeTunnel(this);
|
|
53
57
|
this.domain = new Domain(this._http);
|
|
54
58
|
this.tokens = new Tokens(this);
|
|
55
59
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,MAAM;IACjB,kEAAkE;IACzD,KAAK,CAAa;IAE3B,oEAAoE;IAC3D,UAAU,CAAY;IAE/B,+DAA+D;IACtD,UAAU,CAAY;IAE/B,mEAAmE;IAC1D,KAAK,CAAQ;IAEtB,6CAA6C;IAC7C,IAAI,KAAK,KAAY,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzC,gFAAgF;IACvE,SAAS,CAAY;IAE9B,oDAAoD;IAC3C,MAAM,CAAS;IAExB,gFAAgF;IACvE,MAAM,CAAS;IAExB,YAAY,OAAsB;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,WAAmB;QAC3B,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,MAAM;IACjB,kEAAkE;IACzD,KAAK,CAAa;IAE3B,oEAAoE;IAC3D,UAAU,CAAY;IAE/B,+DAA+D;IACtD,UAAU,CAAY;IAE/B,mEAAmE;IAC1D,KAAK,CAAQ;IAEtB,6CAA6C;IAC7C,IAAI,KAAK,KAAY,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzC,gFAAgF;IACvE,SAAS,CAAY;IAE9B,gFAAgF;IACvE,UAAU,CAAa;IAEhC,oDAAoD;IAC3C,MAAM,CAAS;IAExB,gFAAgF;IACvE,MAAM,CAAS;IAExB,YAAY,OAAsB;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,WAAmB;QAC3B,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { HttpClient } from './http.js';
|
|
2
|
+
import type { ApiResponse } from './types/common.js';
|
|
3
|
+
import type { EdgeTunnelData, EdgeTunnelCreateParams, EdgeTunnelUpdateParams, EdgeTunnelListResponse, EdgeTunnelIssueTokenParams, EdgeTunnelTokenResponse } from './types/edge-tunnel.js';
|
|
4
|
+
import { TunnelClient, type TunnelClientOptions } from './tunnel/client.js';
|
|
5
|
+
/**
|
|
6
|
+
* Edge tunnel — expose local ports to the internet through the Oblien edge.
|
|
7
|
+
*
|
|
8
|
+
* **Programmatic usage:**
|
|
9
|
+
* ```ts
|
|
10
|
+
* import Oblien from 'oblien';
|
|
11
|
+
* const client = new Oblien({ clientId, clientSecret });
|
|
12
|
+
*
|
|
13
|
+
* // One-liner: create + connect
|
|
14
|
+
* const tunnel = await client.edgeTunnel.connect({
|
|
15
|
+
* name: 'dev-server',
|
|
16
|
+
* port: 3000,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* tunnel.on('request', (streamId, port) => {
|
|
20
|
+
* console.log(`Request → localhost:${port}`);
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Later…
|
|
24
|
+
* tunnel.close();
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* **Low-level control:**
|
|
28
|
+
* ```ts
|
|
29
|
+
* const { tunnel } = await client.edgeTunnel.create({ name: 'api', port: 8080 });
|
|
30
|
+
* const { token, connect_url } = await client.edgeTunnel.issueToken(tunnel.id);
|
|
31
|
+
*
|
|
32
|
+
* const tc = new TunnelClient({ connectUrl: connect_url, token });
|
|
33
|
+
* tc.connect();
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class EdgeTunnel {
|
|
37
|
+
/** @internal */
|
|
38
|
+
readonly _http: HttpClient;
|
|
39
|
+
private readonly _base;
|
|
40
|
+
constructor(client: {
|
|
41
|
+
_http: HttpClient;
|
|
42
|
+
});
|
|
43
|
+
/** List all tunnels for the authenticated user. */
|
|
44
|
+
list(): Promise<EdgeTunnelListResponse>;
|
|
45
|
+
/** Get a single tunnel by ID. */
|
|
46
|
+
get(tunnelId: number): Promise<ApiResponse & {
|
|
47
|
+
tunnel: EdgeTunnelData;
|
|
48
|
+
}>;
|
|
49
|
+
/** Create a new edge tunnel. */
|
|
50
|
+
create(params: EdgeTunnelCreateParams): Promise<ApiResponse & {
|
|
51
|
+
tunnel: EdgeTunnelData;
|
|
52
|
+
}>;
|
|
53
|
+
/** Update tunnel name, slug, or port. */
|
|
54
|
+
update(tunnelId: number, params: EdgeTunnelUpdateParams): Promise<ApiResponse & {
|
|
55
|
+
tunnel: EdgeTunnelData;
|
|
56
|
+
}>;
|
|
57
|
+
/** Enable a disabled tunnel (re-creates the edge route). */
|
|
58
|
+
enable(tunnelId: number): Promise<ApiResponse & {
|
|
59
|
+
tunnel: EdgeTunnelData;
|
|
60
|
+
}>;
|
|
61
|
+
/** Disable a tunnel (removes the edge route, keeps DB record). */
|
|
62
|
+
disable(tunnelId: number): Promise<ApiResponse & {
|
|
63
|
+
tunnel: EdgeTunnelData;
|
|
64
|
+
}>;
|
|
65
|
+
/** Permanently delete a tunnel. */
|
|
66
|
+
delete(tunnelId: number): Promise<ApiResponse>;
|
|
67
|
+
/** Issue a short-lived JWT for agent authentication with the tunnel broker. */
|
|
68
|
+
issueToken(tunnelId: number, options?: EdgeTunnelIssueTokenParams): Promise<EdgeTunnelTokenResponse>;
|
|
69
|
+
/**
|
|
70
|
+
* Create a tunnel (or reuse an existing one) and connect in one call.
|
|
71
|
+
*
|
|
72
|
+
* Returns a connected {@link TunnelClient} that forwards incoming Oblien edge
|
|
73
|
+
* traffic to `localhost:<port>`. The tunnel stays open until you call `.close()`.
|
|
74
|
+
*
|
|
75
|
+
* ```ts
|
|
76
|
+
* const tunnel = await client.edgeTunnel.connect({ name: 'dev', port: 3000 });
|
|
77
|
+
* console.log(tunnel.url); // https://dev-xyz.preview.oblien.com
|
|
78
|
+
*
|
|
79
|
+
* tunnel.on('open', () => console.log('connected'));
|
|
80
|
+
* tunnel.on('request', (id, port) => console.log(`→ localhost:${port}`));
|
|
81
|
+
* tunnel.on('close', () => console.log('disconnected'));
|
|
82
|
+
*
|
|
83
|
+
* // Graceful shutdown
|
|
84
|
+
* tunnel.close();
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @param params - Tunnel creation params (port is required).
|
|
88
|
+
* @param connectOpts - Optional overrides for the WebSocket client.
|
|
89
|
+
*/
|
|
90
|
+
connect(params: EdgeTunnelCreateParams, connectOpts?: Partial<Pick<TunnelClientOptions, 'localPort' | 'minTokenTtlMs' | 'tokenExpiresAt'>>): Promise<TunnelClient & {
|
|
91
|
+
url: string;
|
|
92
|
+
tunnelId: number;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=edge-tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-tunnel.d.ts","sourceRoot":"","sources":["../src/edge-tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,UAAU;IACrB,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAE7B,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE;IAIzC,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAI7C,iCAAiC;IAC3B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC;IAI9E,gCAAgC;IAC1B,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC;IAI/F,yCAAyC;IACnC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC;IAIjH,4DAA4D;IACtD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC;IAIjF,kEAAkE;IAC5D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC;IAIlF,mCAAmC;IAC7B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpD,+EAA+E;IACzE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQ1G;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,OAAO,CACX,MAAM,EAAE,sBAAsB,EAC9B,WAAW,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC,CAAC,GACjG,OAAO,CAAC,YAAY,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAiC7D"}
|