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.
Files changed (46) hide show
  1. package/README.md +1 -0
  2. package/dist/cli/commands/auth.d.ts.map +1 -1
  3. package/dist/cli/commands/auth.js +2 -2
  4. package/dist/cli/commands/auth.js.map +1 -1
  5. package/dist/cli/commands/tunnel.d.ts +14 -0
  6. package/dist/cli/commands/tunnel.d.ts.map +1 -0
  7. package/dist/cli/commands/tunnel.js +201 -0
  8. package/dist/cli/commands/tunnel.js.map +1 -0
  9. package/dist/cli/index.js +16 -1
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/client.d.ts +3 -0
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +4 -0
  14. package/dist/client.js.map +1 -1
  15. package/dist/edge-tunnel.d.ts +95 -0
  16. package/dist/edge-tunnel.d.ts.map +1 -0
  17. package/dist/edge-tunnel.js +127 -0
  18. package/dist/edge-tunnel.js.map +1 -0
  19. package/dist/index.d.ts +4 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/runtime/transfer.d.ts.map +1 -1
  24. package/dist/runtime/transfer.js +43 -1
  25. package/dist/runtime/transfer.js.map +1 -1
  26. package/dist/runtime-http.d.ts +10 -0
  27. package/dist/runtime-http.d.ts.map +1 -1
  28. package/dist/runtime-http.js +83 -1
  29. package/dist/runtime-http.js.map +1 -1
  30. package/dist/tunnel/client.d.ts +70 -0
  31. package/dist/tunnel/client.d.ts.map +1 -0
  32. package/dist/tunnel/client.js +280 -0
  33. package/dist/tunnel/client.js.map +1 -0
  34. package/dist/tunnel/protocol.d.ts +38 -0
  35. package/dist/tunnel/protocol.d.ts.map +1 -0
  36. package/dist/tunnel/protocol.js +66 -0
  37. package/dist/tunnel/protocol.js.map +1 -0
  38. package/dist/types/edge-tunnel.d.ts +40 -0
  39. package/dist/types/edge-tunnel.d.ts.map +1 -0
  40. package/dist/types/edge-tunnel.js +3 -0
  41. package/dist/types/edge-tunnel.js.map +1 -0
  42. package/dist/types/index.d.ts +2 -1
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/types/runtime.d.ts +16 -0
  45. package/dist/types/runtime.d.ts.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,127 @@
1
+ import { TunnelClient } from './tunnel/client.js';
2
+ /**
3
+ * Edge tunnel — expose local ports to the internet through the Oblien edge.
4
+ *
5
+ * **Programmatic usage:**
6
+ * ```ts
7
+ * import Oblien from 'oblien';
8
+ * const client = new Oblien({ clientId, clientSecret });
9
+ *
10
+ * // One-liner: create + connect
11
+ * const tunnel = await client.edgeTunnel.connect({
12
+ * name: 'dev-server',
13
+ * port: 3000,
14
+ * });
15
+ *
16
+ * tunnel.on('request', (streamId, port) => {
17
+ * console.log(`Request → localhost:${port}`);
18
+ * });
19
+ *
20
+ * // Later…
21
+ * tunnel.close();
22
+ * ```
23
+ *
24
+ * **Low-level control:**
25
+ * ```ts
26
+ * const { tunnel } = await client.edgeTunnel.create({ name: 'api', port: 8080 });
27
+ * const { token, connect_url } = await client.edgeTunnel.issueToken(tunnel.id);
28
+ *
29
+ * const tc = new TunnelClient({ connectUrl: connect_url, token });
30
+ * tc.connect();
31
+ * ```
32
+ */
33
+ export class EdgeTunnel {
34
+ /** @internal */
35
+ _http;
36
+ _base = '/edge/tunnels';
37
+ constructor(client) {
38
+ this._http = client._http;
39
+ }
40
+ /** List all tunnels for the authenticated user. */
41
+ async list() {
42
+ return this._http.request({ method: 'GET', path: this._base });
43
+ }
44
+ /** Get a single tunnel by ID. */
45
+ async get(tunnelId) {
46
+ return this._http.request({ method: 'GET', path: `${this._base}/${tunnelId}` });
47
+ }
48
+ /** Create a new edge tunnel. */
49
+ async create(params) {
50
+ return this._http.request({ method: 'POST', path: this._base, body: params });
51
+ }
52
+ /** Update tunnel name, slug, or port. */
53
+ async update(tunnelId, params) {
54
+ return this._http.request({ method: 'PUT', path: `${this._base}/${tunnelId}`, body: params });
55
+ }
56
+ /** Enable a disabled tunnel (re-creates the edge route). */
57
+ async enable(tunnelId) {
58
+ return this._http.request({ method: 'POST', path: `${this._base}/${tunnelId}/enable` });
59
+ }
60
+ /** Disable a tunnel (removes the edge route, keeps DB record). */
61
+ async disable(tunnelId) {
62
+ return this._http.request({ method: 'POST', path: `${this._base}/${tunnelId}/disable` });
63
+ }
64
+ /** Permanently delete a tunnel. */
65
+ async delete(tunnelId) {
66
+ return this._http.request({ method: 'DELETE', path: `${this._base}/${tunnelId}` });
67
+ }
68
+ /** Issue a short-lived JWT for agent authentication with the tunnel broker. */
69
+ async issueToken(tunnelId, options) {
70
+ return this._http.request({
71
+ method: 'POST',
72
+ path: `${this._base}/${tunnelId}/token`,
73
+ body: options?.expiresIn ? { expires_in: options.expiresIn } : undefined,
74
+ });
75
+ }
76
+ /**
77
+ * Create a tunnel (or reuse an existing one) and connect in one call.
78
+ *
79
+ * Returns a connected {@link TunnelClient} that forwards incoming Oblien edge
80
+ * traffic to `localhost:<port>`. The tunnel stays open until you call `.close()`.
81
+ *
82
+ * ```ts
83
+ * const tunnel = await client.edgeTunnel.connect({ name: 'dev', port: 3000 });
84
+ * console.log(tunnel.url); // https://dev-xyz.preview.oblien.com
85
+ *
86
+ * tunnel.on('open', () => console.log('connected'));
87
+ * tunnel.on('request', (id, port) => console.log(`→ localhost:${port}`));
88
+ * tunnel.on('close', () => console.log('disconnected'));
89
+ *
90
+ * // Graceful shutdown
91
+ * tunnel.close();
92
+ * ```
93
+ *
94
+ * @param params - Tunnel creation params (port is required).
95
+ * @param connectOpts - Optional overrides for the WebSocket client.
96
+ */
97
+ async connect(params, connectOpts) {
98
+ // 1. Check for an existing active tunnel on this port.
99
+ let tunnel;
100
+ try {
101
+ const { tunnels } = await this.list();
102
+ tunnel = tunnels.find(t => t.port === params.port && t.status === 'active');
103
+ }
104
+ catch { /* first tunnel */ }
105
+ // 2. Create if needed.
106
+ if (!tunnel) {
107
+ const res = await this.create(params);
108
+ tunnel = res.tunnel;
109
+ }
110
+ // 3. Issue token.
111
+ const tokenRes = await this.issueToken(tunnel.id);
112
+ // 4. Build and connect the tunnel client.
113
+ const tc = new TunnelClient({
114
+ connectUrl: tokenRes.connect_url,
115
+ token: tokenRes.token,
116
+ localPort: connectOpts?.localPort ?? params.port,
117
+ minTokenTtlMs: connectOpts?.minTokenTtlMs,
118
+ tokenExpiresAt: connectOpts?.tokenExpiresAt ?? tokenRes.expires_at,
119
+ });
120
+ // Attach metadata for convenience.
121
+ tc.url = tunnel.url;
122
+ tc.tunnelId = tunnel.id;
123
+ tc.connect();
124
+ return tc;
125
+ }
126
+ }
127
+ //# sourceMappingURL=edge-tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-tunnel.js","sourceRoot":"","sources":["../src/edge-tunnel.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,10 +7,13 @@ export { Pages } from './pages.js';
7
7
  /** @deprecated Use {@link Pages} instead. */
8
8
  export { Pages as Sites } from './pages.js';
9
9
  export { EdgeProxy } from './edge-proxy.js';
10
+ export { EdgeTunnel } from './edge-tunnel.js';
11
+ export { TunnelClient } from './tunnel/client.js';
12
+ export type { TunnelClientOptions } from './tunnel/client.js';
10
13
  export { Domain } from './domain.js';
11
14
  export { Tokens } from './tokens.js';
12
15
  export { Runtime } from './runtime.js';
13
16
  export { RuntimeWebSocket } from './runtime/ws.js';
14
17
  export { OblienError, AuthenticationError, NotFoundError, RateLimitError, ValidationError, PaymentRequiredError, ConflictError, } from './error.js';
15
- export type { OblienOptions, RequestOptions, ApiResponse, WorkspaceCreateParams, WorkspaceUpdateParams, WorkspaceListParams, WorkspaceListResponse, WorkspaceData, ResourceSpec, LifecycleSpec, NetworkSpec, FirewallRule, PrivateLink, RuntimeOptions, FileListParams, FileEntry, FileListResponse, FileReadParams, FileReadResponse, FileWriteParams, FileWriteResponse, FileMkdirParams, FileStatParams, FileStatResponse, FileDeleteParams, ContentSearchParams, SearchMatch, ContentSearchResponse, FileSearchParams, FileSearchResponse, SearchStatusResponse, SearchInitResponse, ExecRunParams, ExecTask, ExecListResponse, ExecStreamEvent, TerminalCreateParams, TerminalSession, TerminalListResponse, TerminalScrollbackResponse, WatcherCreateParams, WatcherInfo, WatcherListResponse, WSOptions, WSMessage, WSTerminalResize, WSTerminalExit, WSTerminalEvent, WSWatcherChange, WSWatcherReady, WSWatcherOverflow, WSWatcherEvent, TransferDownloadParams, TransferUploadParams, TransferUploadResponse, LifecycleStatus, MakeTemporaryParams, UpdateTtlParams, SshStatus, SshPasswordParams, SshKeyParams, PublicAccessPort, ExposePortParams, UpdateSlugParams, SnapshotParams, ArchiveCreateParams, ArchiveInfo, WorkloadCreateParams, WorkloadUpdateParams, WorkloadInfo, WorkloadListParams, UsageParams, UpdateResourcesParams, UpdateMetadataParams, ApiAccessStatus, RawTokenResponse, NetworkUpdateParams, NetworkConfig, LogsParams, LogFile, LogStreamEvent, StatsEvent, WorkloadStatsEvent, WorkloadLogEntry, ImagesListParams, DomainInfo, ConnectDomainParams, ConnectDomainResponse, CheckDNSParams, CheckDNSResponse, RenewSSLResponse, CheckSlugParams, CheckSlugResponse, VerifyDomainParams, VerifyDomainResponse, PageData, PageCreateParams, PageDeployParams, PageUpdateParams, PageListResponse, PageDomainResponse, PageDNSCheckResponse, PageSSLRenewResponse, SiteData, SiteCreateParams, SiteUpdateParams, SiteListResponse, EdgeProxyData, EdgeProxyCreateParams, EdgeProxyUpdateParams, EdgeProxyListResponse, NamespaceStatus, NamespaceType, NamespaceResourceLimits, NamespaceData, NamespaceCreateParams, NamespaceEnsureParams, NamespaceEnsureResponse, NamespaceUpdateParams, NamespaceListParams, NamespaceListResponse, NamespaceActivity, NamespaceActivityParams, NamespaceUsageParams, NamespaceDeleteParams, QuotaPeriod, OverdraftAction, NamespaceQuota, SetNamespaceQuotaParams, ResetNamespaceQuotaParams, NamespaceListWithQuotasParams, NamespaceDetailsParams, DefaultQuotaConfig, SetDefaultQuotaParams, ToggleDefaultQuotaAutoApplyParams, DeleteDefaultQuotaParams, } from './types/index.js';
18
+ export type { OblienOptions, RequestOptions, ApiResponse, WorkspaceCreateParams, WorkspaceUpdateParams, WorkspaceListParams, WorkspaceListResponse, WorkspaceData, ResourceSpec, LifecycleSpec, NetworkSpec, FirewallRule, PrivateLink, RuntimeOptions, FileListParams, FileEntry, FileListResponse, FileReadParams, FileReadResponse, FileWriteParams, FileWriteResponse, FileMkdirParams, FileStatParams, FileStatResponse, FileDeleteParams, ContentSearchParams, SearchMatch, ContentSearchResponse, FileSearchParams, FileSearchResponse, SearchStatusResponse, SearchInitResponse, ExecRunParams, ExecTask, ExecListResponse, ExecStreamEvent, TerminalCreateParams, TerminalSession, TerminalListResponse, TerminalScrollbackResponse, WatcherCreateParams, WatcherInfo, WatcherListResponse, WSOptions, WSMessage, WSTerminalResize, WSTerminalExit, WSTerminalEvent, WSWatcherChange, WSWatcherReady, WSWatcherOverflow, WSWatcherEvent, TransferProgress, TransferDownloadParams, TransferUploadParams, TransferUploadResponse, LifecycleStatus, MakeTemporaryParams, UpdateTtlParams, SshStatus, SshPasswordParams, SshKeyParams, PublicAccessPort, ExposePortParams, UpdateSlugParams, SnapshotParams, ArchiveCreateParams, ArchiveInfo, WorkloadCreateParams, WorkloadUpdateParams, WorkloadInfo, WorkloadListParams, UsageParams, UpdateResourcesParams, UpdateMetadataParams, ApiAccessStatus, RawTokenResponse, NetworkUpdateParams, NetworkConfig, LogsParams, LogFile, LogStreamEvent, StatsEvent, WorkloadStatsEvent, WorkloadLogEntry, ImagesListParams, DomainInfo, ConnectDomainParams, ConnectDomainResponse, CheckDNSParams, CheckDNSResponse, RenewSSLResponse, CheckSlugParams, CheckSlugResponse, VerifyDomainParams, VerifyDomainResponse, PageData, PageCreateParams, PageDeployParams, PageUpdateParams, PageListResponse, PageDomainResponse, PageDNSCheckResponse, PageSSLRenewResponse, SiteData, SiteCreateParams, SiteUpdateParams, SiteListResponse, EdgeProxyData, EdgeProxyCreateParams, EdgeProxyUpdateParams, EdgeProxyListResponse, EdgeTunnelData, EdgeTunnelCreateParams, EdgeTunnelUpdateParams, EdgeTunnelListResponse, EdgeTunnelIssueTokenParams, EdgeTunnelTokenResponse, NamespaceStatus, NamespaceType, NamespaceResourceLimits, NamespaceData, NamespaceCreateParams, NamespaceEnsureParams, NamespaceEnsureResponse, NamespaceUpdateParams, NamespaceListParams, NamespaceListResponse, NamespaceActivity, NamespaceActivityParams, NamespaceUsageParams, NamespaceDeleteParams, QuotaPeriod, OverdraftAction, NamespaceQuota, SetNamespaceQuotaParams, ResetNamespaceQuotaParams, NamespaceListWithQuotasParams, NamespaceDetailsParams, DefaultQuotaConfig, SetDefaultQuotaParams, ToggleDefaultQuotaAutoApplyParams, DeleteDefaultQuotaParams, } from './types/index.js';
16
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,8 @@ export { Pages } from './pages.js';
9
9
  /** @deprecated Use {@link Pages} instead. */
10
10
  export { Pages as Sites } from './pages.js';
11
11
  export { EdgeProxy } from './edge-proxy.js';
12
+ export { EdgeTunnel } from './edge-tunnel.js';
13
+ export { TunnelClient } from './tunnel/client.js';
12
14
  export { Domain } from './domain.js';
13
15
  export { Tokens } from './tokens.js';
14
16
  export { Runtime } from './runtime.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAEhD,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,6CAA6C;AAC7C,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5C,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,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,SAAS;AACT,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAEhD,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,6CAA6C;AAC7C,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,SAAS;AACT,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/runtime/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,iBAAiB;IAErD;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAWjE;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAO5E"}
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/runtime/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAEV,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,iBAAiB;IAErD;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkDjE;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAS5E"}
@@ -25,7 +25,7 @@ export class TransferResource {
25
25
  * Returns the raw `Response` — read `.body` for the binary stream.
26
26
  */
27
27
  async download(params) {
28
- return this._http.requestStream({
28
+ const response = await this._http.requestStream({
29
29
  method: 'POST',
30
30
  path: '/files/transfer/download',
31
31
  body: {
@@ -33,6 +33,40 @@ export class TransferResource {
33
33
  exclude_patterns: params.excludePatterns,
34
34
  },
35
35
  });
36
+ if (!params.onProgress || !response.body) {
37
+ return response;
38
+ }
39
+ const totalBytesHeader = response.headers.get('content-length');
40
+ const totalBytes = totalBytesHeader ? Number(totalBytesHeader) : undefined;
41
+ let loadedBytes = 0;
42
+ const reader = response.body.getReader();
43
+ const stream = new ReadableStream({
44
+ async pull(controller) {
45
+ const { done, value } = await reader.read();
46
+ if (done) {
47
+ controller.close();
48
+ return;
49
+ }
50
+ if (value) {
51
+ loadedBytes += value.byteLength;
52
+ params.onProgress?.({
53
+ phase: 'download',
54
+ loadedBytes,
55
+ totalBytes: Number.isFinite(totalBytes) ? totalBytes : undefined,
56
+ percent: computePercent(loadedBytes, totalBytes),
57
+ });
58
+ controller.enqueue(value);
59
+ }
60
+ },
61
+ async cancel(reason) {
62
+ await reader.cancel(reason);
63
+ },
64
+ });
65
+ return new Response(stream, {
66
+ status: response.status,
67
+ statusText: response.statusText,
68
+ headers: response.headers,
69
+ });
36
70
  }
37
71
  /**
38
72
  * Upload a tar.gz archive and extract it into the workspace.
@@ -43,7 +77,15 @@ export class TransferResource {
43
77
  path: '/files/transfer/upload',
44
78
  body: params.body,
45
79
  query: { dest: params.dest ?? '/' },
80
+ totalBytes: params.totalBytes,
81
+ onProgress: params.onProgress,
46
82
  });
47
83
  }
48
84
  }
85
+ function computePercent(loadedBytes, totalBytes) {
86
+ if (typeof totalBytes !== 'number' || !Number.isFinite(totalBytes) || totalBytes <= 0) {
87
+ return undefined;
88
+ }
89
+ return Math.min(100, (loadedBytes / totalBytes) * 100);
90
+ }
49
91
  //# sourceMappingURL=transfer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/runtime/transfer.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,KAAwB;QAAxB,UAAK,GAAL,KAAK,CAAmB;IAAG,CAAC;IAEzD;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,MAA8B;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAC9B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE;gBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,gBAAgB,EAAE,MAAM,CAAC,eAAe;aACzC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,MAA4B;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAyB;YACtD,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/runtime/transfer.ts"],"names":[],"mappings":"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"}
@@ -33,10 +33,20 @@ export declare class RuntimeHttpClient {
33
33
  body: ArrayBuffer | Uint8Array | Blob | ReadableStream<Uint8Array>;
34
34
  query?: Record<string, string | number | boolean | undefined>;
35
35
  contentType?: string;
36
+ totalBytes?: number;
37
+ onProgress?: (progress: {
38
+ phase: 'upload';
39
+ loadedBytes: number;
40
+ totalBytes?: number;
41
+ percent?: number;
42
+ }) => void;
36
43
  }): Promise<T>;
37
44
  getBaseUrl(): string;
38
45
  getHeaders(): Record<string, string>;
39
46
  private buildUrl;
40
47
  private errorForStatus;
48
+ private wrapUploadBody;
49
+ private normalizeUploadSource;
50
+ private computePercent;
41
51
  }
42
52
  //# sourceMappingURL=runtime-http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-http.d.ts","sourceRoot":"","sources":["../src/runtime-http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,cAAc;IAQ7B,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QAClC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2Bd,kCAAkC;IAC5B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB9D;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBrB,gFAAgF;IAC1E,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACnE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBd,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMpC,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,cAAc;CAGvB"}
1
+ {"version":3,"file":"runtime-http.d.ts","sourceRoot":"","sources":["../src/runtime-http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,OAAO,EAAE,cAAc;IAQ7B,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QAClC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2Bd,kCAAkC;IAC5B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB9D;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBrB,gFAAgF;IAC1E,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACnE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;YAAE,KAAK,EAAE,QAAQ,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KAClH,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBd,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMpC,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IA4CtB,OAAO,CAAC,qBAAqB;IA0C7B,OAAO,CAAC,cAAc;CAMvB"}
@@ -76,13 +76,14 @@ export class RuntimeHttpClient {
76
76
  /** Send a raw binary body (for tar.gz upload). Returns parsed JSON response. */
77
77
  async requestUpload(options) {
78
78
  const url = this.buildUrl(options.path, options.query);
79
+ const upload = this.wrapUploadBody(options.body, options.totalBytes, options.onProgress);
79
80
  const res = await fetch(url, {
80
81
  method: 'POST',
81
82
  headers: {
82
83
  'Authorization': this.headers['Authorization'],
83
84
  'Content-Type': options.contentType ?? 'application/gzip',
84
85
  },
85
- body: options.body,
86
+ body: upload.body,
86
87
  duplex: 'half',
87
88
  });
88
89
  const json = await res.json().catch(() => null);
@@ -111,5 +112,86 @@ export class RuntimeHttpClient {
111
112
  errorForStatus(status, body) {
112
113
  return buildOblienError(status, body);
113
114
  }
115
+ wrapUploadBody(body, totalBytes, onProgress) {
116
+ if (!onProgress) {
117
+ return { body };
118
+ }
119
+ const source = this.normalizeUploadSource(body, totalBytes);
120
+ let loadedBytes = 0;
121
+ const stream = new ReadableStream({
122
+ start: async (controller) => {
123
+ const reader = source.stream.getReader();
124
+ try {
125
+ for (;;) {
126
+ const { done, value } = await reader.read();
127
+ if (done)
128
+ break;
129
+ if (!value)
130
+ continue;
131
+ loadedBytes += value.byteLength;
132
+ onProgress({
133
+ phase: 'upload',
134
+ loadedBytes,
135
+ totalBytes: source.totalBytes,
136
+ percent: this.computePercent(loadedBytes, source.totalBytes),
137
+ });
138
+ controller.enqueue(value);
139
+ }
140
+ if (source.totalBytes === 0) {
141
+ onProgress({ phase: 'upload', loadedBytes: 0, totalBytes: 0, percent: 100 });
142
+ }
143
+ controller.close();
144
+ }
145
+ catch (error) {
146
+ controller.error(error);
147
+ }
148
+ finally {
149
+ reader.releaseLock();
150
+ }
151
+ },
152
+ });
153
+ return { body: stream };
154
+ }
155
+ normalizeUploadSource(body, totalBytes) {
156
+ if (body instanceof Uint8Array) {
157
+ return {
158
+ stream: new ReadableStream({
159
+ start(controller) {
160
+ controller.enqueue(body);
161
+ controller.close();
162
+ },
163
+ }),
164
+ totalBytes: totalBytes ?? body.byteLength,
165
+ };
166
+ }
167
+ if (body instanceof ArrayBuffer) {
168
+ const bytes = new Uint8Array(body);
169
+ return {
170
+ stream: new ReadableStream({
171
+ start(controller) {
172
+ controller.enqueue(bytes);
173
+ controller.close();
174
+ },
175
+ }),
176
+ totalBytes: totalBytes ?? bytes.byteLength,
177
+ };
178
+ }
179
+ if (typeof Blob !== 'undefined' && body instanceof Blob) {
180
+ return {
181
+ stream: body.stream(),
182
+ totalBytes: totalBytes ?? body.size,
183
+ };
184
+ }
185
+ return {
186
+ stream: body,
187
+ totalBytes,
188
+ };
189
+ }
190
+ computePercent(loadedBytes, totalBytes) {
191
+ if (typeof totalBytes !== 'number' || totalBytes <= 0) {
192
+ return undefined;
193
+ }
194
+ return Math.min(100, (loadedBytes / totalBytes) * 100);
195
+ }
114
196
  }
115
197
  //# sourceMappingURL=runtime-http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-http.js","sourceRoot":"","sources":["../src/runtime-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-http.js","sourceRoot":"","sources":["../src/runtime-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Tunnel client — connects to the broker over WebSocket and forwards
3
+ * incoming requests to a local TCP port.
4
+ *
5
+ * This is the agent side of the tunnel. Use it directly for programmatic
6
+ * control, or via {@link EdgeTunnel.connect} for the full create+connect flow.
7
+ *
8
+ * ```ts
9
+ * import { TunnelClient } from 'oblien';
10
+ *
11
+ * const client = new TunnelClient({
12
+ * connectUrl: 'wss://edge.oblien.com/connect',
13
+ * token: '<tunnel-jwt>',
14
+ * localPort: 3000,
15
+ * });
16
+ *
17
+ * client.on('open', () => console.log('connected'));
18
+ * client.on('request', (streamId, port) => console.log(`→ localhost:${port}`));
19
+ * client.on('disconnect', (code, reason) => console.log('lost connection'));
20
+ * client.on('close', () => console.log('done'));
21
+ *
22
+ * client.connect();
23
+ * ```
24
+ */
25
+ import { EventEmitter } from 'node:events';
26
+ export interface TunnelClientOptions {
27
+ /** WebSocket URL (wss://edge.oblien.com/connect). */
28
+ connectUrl: string;
29
+ /** JWT token for broker auth. */
30
+ token: string;
31
+ /** Override the local port to forward to. */
32
+ localPort?: number;
33
+ /** Optional absolute token expiry time from the issuer. */
34
+ tokenExpiresAt?: string | Date;
35
+ /** Minimum TTL required before connect proceeds. Defaults to 15 seconds. */
36
+ minTokenTtlMs?: number;
37
+ }
38
+ export declare class TunnelClient extends EventEmitter {
39
+ private readonly opts;
40
+ private ws;
41
+ private streams;
42
+ private connected;
43
+ private closing;
44
+ constructor(opts: TunnelClientOptions);
45
+ /** Open the WebSocket connection and start forwarding. */
46
+ connect(): void;
47
+ /** Gracefully close the tunnel. */
48
+ close(): void;
49
+ /** Whether the WebSocket is connected. */
50
+ get isConnected(): boolean;
51
+ private handleFrame;
52
+ /**
53
+ * OPEN: broker wants us to open a TCP connection to localhost:port.
54
+ * We open the connection immediately and store it in the stream map.
55
+ */
56
+ private onOpen;
57
+ /**
58
+ * DATA: raw bytes for an existing stream → write to the TCP socket.
59
+ */
60
+ private onData;
61
+ /**
62
+ * CLOSE: broker is done sending request data.
63
+ * Half-close the TCP write side and start reading the response.
64
+ */
65
+ private onClose;
66
+ private sendFrame;
67
+ private cleanup;
68
+ private getPreflightAuthFailure;
69
+ }
70
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/tunnel/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe3C,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAWD,qBAAa,YAAa,SAAQ,YAAY;IAMhC,OAAO,CAAC,QAAQ,CAAC,IAAI;IALjC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;gBAEK,IAAI,EAAE,mBAAmB;IAItD,0DAA0D;IAC1D,OAAO,IAAI,IAAI;IAgDf,mCAAmC;IACnC,KAAK,IAAI,IAAI;IAUb,0CAA0C;IAC1C,IAAI,WAAW,IAAI,OAAO,CAEzB;IAID,OAAO,CAAC,WAAW;IAkBnB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAed;;OAEG;IACH,OAAO,CAAC,MAAM;IAMd;;;OAGG;IACH,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,uBAAuB;CA4BhC"}