oblien 2.2.36 → 2.2.38
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 +53 -274
- package/dist/cdn.d.ts +105 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/cdn.js +201 -0
- package/dist/cdn.js.map +1 -0
- package/dist/cli/commands/cdn.d.ts +3 -0
- package/dist/cli/commands/cdn.d.ts.map +1 -0
- package/dist/cli/commands/cdn.js +216 -0
- package/dist/cli/commands/cdn.js.map +1 -0
- package/dist/cli/commands/namespaces.js +19 -6
- package/dist/cli/commands/namespaces.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +17 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +113 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/tunnel.d.ts +1 -0
- package/dist/cli/commands/tunnel.d.ts.map +1 -1
- package/dist/cli/commands/tunnel.js +100 -3
- package/dist/cli/commands/tunnel.js.map +1 -1
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/client.d.ts +12 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +16 -1
- package/dist/client.js.map +1 -1
- package/dist/domain.d.ts +20 -1
- package/dist/domain.d.ts.map +1 -1
- package/dist/domain.js +37 -0
- package/dist/domain.js.map +1 -1
- package/dist/edge-proxy.d.ts +50 -11
- package/dist/edge-proxy.d.ts.map +1 -1
- package/dist/edge-proxy.js +55 -10
- package/dist/edge-proxy.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +145 -7
- package/dist/mcp/tools.js.map +1 -1
- package/dist/namespace.d.ts +27 -5
- package/dist/namespace.d.ts.map +1 -1
- package/dist/namespace.js +30 -4
- package/dist/namespace.js.map +1 -1
- package/dist/notifications.d.ts +72 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +93 -0
- package/dist/notifications.js.map +1 -0
- package/dist/runtime/proxy.d.ts +55 -0
- package/dist/runtime/proxy.d.ts.map +1 -0
- package/dist/runtime/proxy.js +79 -0
- package/dist/runtime/proxy.js.map +1 -0
- package/dist/runtime.d.ts +16 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +18 -0
- package/dist/runtime.js.map +1 -1
- package/dist/server/static.d.ts +81 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +465 -0
- package/dist/server/static.js.map +1 -0
- package/dist/types/cdn.d.ts +301 -0
- package/dist/types/cdn.d.ts.map +1 -0
- package/dist/types/cdn.js +10 -0
- package/dist/types/cdn.js.map +1 -0
- package/dist/types/client.d.ts +10 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/edge-proxy.d.ts +50 -1
- package/dist/types/edge-proxy.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/namespace.d.ts +55 -9
- package/dist/types/namespace.d.ts.map +1 -1
- package/dist/types/notifications.d.ts +77 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/notifications.js +3 -0
- package/dist/types/notifications.js.map +1 -0
- package/dist/types/webhooks.d.ts +52 -0
- package/dist/types/webhooks.d.ts.map +1 -0
- package/dist/types/webhooks.js +3 -0
- package/dist/types/webhooks.js.map +1 -0
- package/dist/types/workspace-resources.d.ts +48 -0
- package/dist/types/workspace-resources.d.ts.map +1 -1
- package/dist/webhooks.d.ts +53 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +60 -0
- package/dist/webhooks.js.map +1 -0
- package/docs/analytics.md +36 -0
- package/docs/cdn.md +119 -0
- package/docs/domains.md +47 -0
- package/docs/edge-proxy.md +44 -0
- package/docs/edge-tunnel.md +42 -0
- package/docs/errors.md +34 -0
- package/docs/namespaces.md +69 -0
- package/docs/notifications.md +40 -0
- package/docs/pages.md +26 -0
- package/docs/runtime.md +83 -0
- package/docs/serve.md +84 -0
- package/docs/tokens.md +24 -0
- package/docs/webhooks.md +42 -0
- package/docs/workspaces.md +82 -0
- package/package.json +5 -2
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A handle to a single loopback port inside the workspace, obtained via
|
|
3
|
+
* {@link Runtime.proxy}. Requests are forwarded by the runtime's `/proxy`
|
|
4
|
+
* endpoint to `127.0.0.1:<port>` inside the VM — headers, streaming/SSE, and
|
|
5
|
+
* WebSocket upgrades pass through near-natively. Only loopback ports are
|
|
6
|
+
* reachable; the proxy cannot reach the VM's network or the internet.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* const rt = await client.workspaces.runtime('ws_abc');
|
|
10
|
+
*
|
|
11
|
+
* // HTTP — returns a raw fetch Response
|
|
12
|
+
* const res = await rt.proxy(3000).fetch('/api/users');
|
|
13
|
+
* const users = await res.json();
|
|
14
|
+
*
|
|
15
|
+
* // Streaming (SSE) passes through
|
|
16
|
+
* const stream = await rt.proxy(3000).fetch('/events');
|
|
17
|
+
* for await (const chunk of stream.body!) { /* ... *\/ }
|
|
18
|
+
*
|
|
19
|
+
* // WebSocket
|
|
20
|
+
* const ws = rt.proxy(3000).ws('/socket');
|
|
21
|
+
* ws.onmessage = (e) => console.log(e.data);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class RuntimeProxy {
|
|
25
|
+
_httpBase;
|
|
26
|
+
_wsBase;
|
|
27
|
+
_token;
|
|
28
|
+
_target;
|
|
29
|
+
constructor(options, port, host) {
|
|
30
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
31
|
+
throw new Error(`invalid proxy port: ${port} (must be 1-65535)`);
|
|
32
|
+
}
|
|
33
|
+
const base = (options.baseUrl ?? 'https://workspace.oblien.com').replace(/\/$/, '');
|
|
34
|
+
this._httpBase = base;
|
|
35
|
+
this._wsBase = base.replace(/^http/, 'ws');
|
|
36
|
+
this._token = options.token;
|
|
37
|
+
this._target = host ? `${host}:${port}` : String(port);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Make an HTTP request to the loopback service and return the raw `Response`.
|
|
41
|
+
* The path is passed through untouched (e.g. `/api/users?limit=10`). The
|
|
42
|
+
* runtime connection token is sent via the `Authorization` header and is
|
|
43
|
+
* stripped before the request reaches the in-VM app.
|
|
44
|
+
*/
|
|
45
|
+
fetch(path, init = {}) {
|
|
46
|
+
const headers = new Headers(init.headers);
|
|
47
|
+
headers.set('Authorization', `Bearer ${this._token}`);
|
|
48
|
+
headers.set('X-Oblien-Proxy-Target', this._target);
|
|
49
|
+
return fetch(this._url(this._httpBase, path), {
|
|
50
|
+
method: init.method ?? 'GET',
|
|
51
|
+
headers,
|
|
52
|
+
body: init.body ?? null,
|
|
53
|
+
signal: init.signal,
|
|
54
|
+
redirect: init.redirect,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Open a WebSocket to the loopback service. Auth and target are passed as
|
|
59
|
+
* query params (`token`, `x_oblien_target`) because the browser WebSocket API
|
|
60
|
+
* cannot set request headers.
|
|
61
|
+
*/
|
|
62
|
+
ws(path = '/', protocols) {
|
|
63
|
+
const url = this._url(this._wsBase, path, {
|
|
64
|
+
token: this._token,
|
|
65
|
+
x_oblien_target: this._target,
|
|
66
|
+
});
|
|
67
|
+
return new WebSocket(url, protocols);
|
|
68
|
+
}
|
|
69
|
+
_url(base, path, extraQuery) {
|
|
70
|
+
const p = path.startsWith('/') ? path : `/${path}`;
|
|
71
|
+
const u = new URL(base + '/proxy' + p);
|
|
72
|
+
if (extraQuery) {
|
|
73
|
+
for (const [k, v] of Object.entries(extraQuery))
|
|
74
|
+
u.searchParams.set(k, v);
|
|
75
|
+
}
|
|
76
|
+
return u.toString();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/runtime/proxy.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,YAAY;IACN,SAAS,CAAS;IAClB,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,OAAO,CAAS;IAEjC,YAAY,OAAuB,EAAE,IAAY,EAAE,IAAa;QAC9D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,oBAAoB,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAY,EAAE,OAAuB,EAAE;QAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;YAC5C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,EAAE,CAAC,IAAI,GAAG,GAAG,EAAE,SAA6B;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;YACxC,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,eAAe,EAAE,IAAI,CAAC,OAAO;SAC9B,CAAC,CAAC;QACH,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,SAAiC,CAAC,CAAC;IAC/D,CAAC;IAEO,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,UAAmC;QAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;gBAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;CACF"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { TerminalResource } from './runtime/terminal.js';
|
|
|
6
6
|
import { WatcherResource } from './runtime/watcher.js';
|
|
7
7
|
import { TransferResource } from './runtime/transfer.js';
|
|
8
8
|
import { RuntimeWebSocket } from './runtime/ws.js';
|
|
9
|
+
import { RuntimeProxy } from './runtime/proxy.js';
|
|
9
10
|
import type { RuntimeOptions, WSOptions } from './types/runtime.js';
|
|
10
11
|
/**
|
|
11
12
|
* Workspace Runtime - the data-plane client for interacting with a
|
|
@@ -76,5 +77,20 @@ export declare class Runtime {
|
|
|
76
77
|
* ```
|
|
77
78
|
*/
|
|
78
79
|
ws(options?: WSOptions): RuntimeWebSocket;
|
|
80
|
+
/**
|
|
81
|
+
* Reverse-proxy HTTP/WebSocket requests to a service listening on a loopback
|
|
82
|
+
* port inside the workspace (e.g. a dev server on `127.0.0.1:3000`). Requests
|
|
83
|
+
* are forwarded near-natively — headers, streaming/SSE, and WebSocket upgrades
|
|
84
|
+
* pass through. Only loopback ports are reachable.
|
|
85
|
+
*
|
|
86
|
+
* ```ts
|
|
87
|
+
* const res = await rt.proxy(3000).fetch('/api/users');
|
|
88
|
+
* const ws = rt.proxy(3000).ws('/socket');
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* @param port Loopback port inside the workspace (1-65535).
|
|
92
|
+
* @param host Optional loopback host override (defaults to 127.0.0.1).
|
|
93
|
+
*/
|
|
94
|
+
proxy(port: number, host?: string): RuntimeProxy;
|
|
79
95
|
}
|
|
80
96
|
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,OAAO;IAClB,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAElC,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAE9B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAExB,OAAO,EAAE,cAAc;IAWnC,uEAAuE;IACjE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAYhC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,OAAO;IAClB,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAElC,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAE1C,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAE9B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAEpC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAExB,OAAO,EAAE,cAAc;IAWnC,uEAAuE;IACjE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAYhC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,gBAAgB;IAIzC;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY;CAGjD"}
|
package/dist/runtime.js
CHANGED
|
@@ -6,6 +6,7 @@ import { TerminalResource } from './runtime/terminal.js';
|
|
|
6
6
|
import { WatcherResource } from './runtime/watcher.js';
|
|
7
7
|
import { TransferResource } from './runtime/transfer.js';
|
|
8
8
|
import { RuntimeWebSocket } from './runtime/ws.js';
|
|
9
|
+
import { RuntimeProxy } from './runtime/proxy.js';
|
|
9
10
|
/**
|
|
10
11
|
* Workspace Runtime - the data-plane client for interacting with a
|
|
11
12
|
* running workspace's filesystem, terminal, commands, and file watchers.
|
|
@@ -97,5 +98,22 @@ export class Runtime {
|
|
|
97
98
|
ws(options) {
|
|
98
99
|
return new RuntimeWebSocket(this._options, options);
|
|
99
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Reverse-proxy HTTP/WebSocket requests to a service listening on a loopback
|
|
103
|
+
* port inside the workspace (e.g. a dev server on `127.0.0.1:3000`). Requests
|
|
104
|
+
* are forwarded near-natively — headers, streaming/SSE, and WebSocket upgrades
|
|
105
|
+
* pass through. Only loopback ports are reachable.
|
|
106
|
+
*
|
|
107
|
+
* ```ts
|
|
108
|
+
* const res = await rt.proxy(3000).fetch('/api/users');
|
|
109
|
+
* const ws = rt.proxy(3000).ws('/socket');
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* @param port Loopback port inside the workspace (1-65535).
|
|
113
|
+
* @param host Optional loopback host override (defaults to 127.0.0.1).
|
|
114
|
+
*/
|
|
115
|
+
proxy(port, host) {
|
|
116
|
+
return new RuntimeProxy(this._options, port, host);
|
|
117
|
+
}
|
|
100
118
|
}
|
|
101
119
|
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,OAAO;IAClB,gBAAgB;IACP,KAAK,CAAoB;IAElC,gBAAgB;IACC,QAAQ,CAAiB;IAE1C,wEAAwE;IAC/D,KAAK,CAAgB;IAE9B,oDAAoD;IAC3C,MAAM,CAAiB;IAEhC,0DAA0D;IACjD,IAAI,CAAe;IAE5B,uEAAuE;IAC9D,QAAQ,CAAmB;IAEpC,4CAA4C;IACnC,OAAO,CAAkB;IAElC,iEAAiE;IACxD,QAAQ,CAAmB;IAEpC,YAAY,OAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB;gBACvD,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,EAAE,CAAC,OAAmB;QACpB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,IAAY,EAAE,IAAa;QAC/B,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static file server — a small, dependency-free HTTP server for a folder.
|
|
3
|
+
*
|
|
4
|
+
* Built entirely on Node's `http`/`fs`/`path`, so it adds nothing to the SDK's
|
|
5
|
+
* dependency tree. Pair it with the {@link TunnelClient} (or `oblien serve`) to
|
|
6
|
+
* put a folder on the public internet in one step.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { startStaticServer } from 'oblien';
|
|
10
|
+
*
|
|
11
|
+
* const site = await startStaticServer({ root: './public', spa: true });
|
|
12
|
+
* console.log(`serving on ${site.url}`);
|
|
13
|
+
* // ... later
|
|
14
|
+
* await site.close();
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Features: streamed responses (memory-safe for large files), correct MIME
|
|
18
|
+
* types, `Range` requests (media seeking), `ETag`/`Last-Modified` revalidation
|
|
19
|
+
* (`304`), directory `index.html`, optional directory listings, optional SPA
|
|
20
|
+
* fallback, and strict path-traversal protection.
|
|
21
|
+
*/
|
|
22
|
+
import { type Server, type IncomingMessage, type ServerResponse } from 'node:http';
|
|
23
|
+
export interface StaticServerOptions {
|
|
24
|
+
/** Directory to serve. Resolved against the current working directory. */
|
|
25
|
+
root: string;
|
|
26
|
+
/** Interface to bind. Defaults to `127.0.0.1` (loopback only). */
|
|
27
|
+
host?: string;
|
|
28
|
+
/** Port to listen on. Defaults to `0` — the OS picks a free port. */
|
|
29
|
+
port?: number;
|
|
30
|
+
/** Filename served for directory requests. Defaults to `index.html`. */
|
|
31
|
+
index?: string;
|
|
32
|
+
/** Render an auto-generated listing when a directory has no index. Defaults to `true`. */
|
|
33
|
+
listing?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Single-page-app mode: serve the root `index` for any path that doesn't map
|
|
36
|
+
* to a real file, so client-side routing works. Defaults to `false`.
|
|
37
|
+
*/
|
|
38
|
+
spa?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Serve dotfiles and dot-directories (`.git`, `.env`, …). Defaults to `false`
|
|
41
|
+
* — they're denied with `404`, since this server is often exposed publicly and
|
|
42
|
+
* such files (git internals, secrets) are rarely meant to be shared. The
|
|
43
|
+
* `.well-known/` directory is always allowed.
|
|
44
|
+
*/
|
|
45
|
+
allowDotfiles?: boolean;
|
|
46
|
+
/** Called for each served request (after the response status is known). */
|
|
47
|
+
onRequest?: (info: {
|
|
48
|
+
method: string;
|
|
49
|
+
path: string;
|
|
50
|
+
status: number;
|
|
51
|
+
}) => void;
|
|
52
|
+
}
|
|
53
|
+
export interface StaticServerHandle {
|
|
54
|
+
/** The port the server is actually listening on (resolved even when `port: 0`). */
|
|
55
|
+
port: number;
|
|
56
|
+
/** The host the server is bound to. */
|
|
57
|
+
host: string;
|
|
58
|
+
/** Convenience `http://host:port` origin. */
|
|
59
|
+
url: string;
|
|
60
|
+
/** The underlying Node HTTP server. */
|
|
61
|
+
server: Server;
|
|
62
|
+
/** Stop accepting connections and resolve once fully closed. */
|
|
63
|
+
close(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the request handler for a static root. Exposed so callers can mount it
|
|
67
|
+
* on an existing server if they prefer; most callers want {@link startStaticServer}.
|
|
68
|
+
*/
|
|
69
|
+
export declare function createStaticHandler(options: StaticServerOptions): (req: IncomingMessage, res: ServerResponse) => void;
|
|
70
|
+
/**
|
|
71
|
+
* Create (but do not start) a static HTTP server for `options.root`.
|
|
72
|
+
* Call `.listen()` yourself, or use {@link startStaticServer} to listen and get
|
|
73
|
+
* a resolved {@link StaticServerHandle}.
|
|
74
|
+
*/
|
|
75
|
+
export declare function createStaticServer(options: StaticServerOptions): Server;
|
|
76
|
+
/**
|
|
77
|
+
* Start a static server and resolve once it's listening. When `port` is omitted
|
|
78
|
+
* or `0`, the OS assigns a free port and the resolved handle reports it.
|
|
79
|
+
*/
|
|
80
|
+
export declare function startStaticServer(options: StaticServerOptions): Promise<StaticServerHandle>;
|
|
81
|
+
//# sourceMappingURL=static.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/server/static.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAMjG,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAmJD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,GAC3B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAmFrD;AA+MD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAEvE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8B3F"}
|