oblien 2.2.35 → 2.2.37

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 (77) hide show
  1. package/README.md +51 -274
  2. package/dist/cli/commands/namespaces.js +19 -6
  3. package/dist/cli/commands/namespaces.js.map +1 -1
  4. package/dist/cli/commands/tunnel.d.ts +1 -0
  5. package/dist/cli/commands/tunnel.d.ts.map +1 -1
  6. package/dist/cli/commands/tunnel.js +23 -1
  7. package/dist/cli/commands/tunnel.js.map +1 -1
  8. package/dist/client.d.ts +7 -1
  9. package/dist/client.d.ts.map +1 -1
  10. package/dist/client.js +9 -1
  11. package/dist/client.js.map +1 -1
  12. package/dist/domain.d.ts +20 -1
  13. package/dist/domain.d.ts.map +1 -1
  14. package/dist/domain.js +37 -0
  15. package/dist/domain.js.map +1 -1
  16. package/dist/edge-proxy.d.ts +50 -11
  17. package/dist/edge-proxy.d.ts.map +1 -1
  18. package/dist/edge-proxy.js +55 -10
  19. package/dist/edge-proxy.js.map +1 -1
  20. package/dist/edge-tunnel.d.ts +3 -1
  21. package/dist/edge-tunnel.d.ts.map +1 -1
  22. package/dist/edge-tunnel.js +4 -0
  23. package/dist/edge-tunnel.js.map +1 -1
  24. package/dist/index.d.ts +3 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/mcp/tools.d.ts.map +1 -1
  29. package/dist/mcp/tools.js +108 -7
  30. package/dist/mcp/tools.js.map +1 -1
  31. package/dist/namespace.d.ts +27 -5
  32. package/dist/namespace.d.ts.map +1 -1
  33. package/dist/namespace.js +30 -4
  34. package/dist/namespace.js.map +1 -1
  35. package/dist/notifications.d.ts +72 -0
  36. package/dist/notifications.d.ts.map +1 -0
  37. package/dist/notifications.js +93 -0
  38. package/dist/notifications.js.map +1 -0
  39. package/dist/resources/network.d.ts +11 -3
  40. package/dist/resources/network.d.ts.map +1 -1
  41. package/dist/resources/network.js +14 -2
  42. package/dist/resources/network.js.map +1 -1
  43. package/dist/types/edge-proxy.d.ts +50 -1
  44. package/dist/types/edge-proxy.d.ts.map +1 -1
  45. package/dist/types/edge-tunnel.d.ts +12 -0
  46. package/dist/types/edge-tunnel.d.ts.map +1 -1
  47. package/dist/types/index.d.ts +6 -4
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/dist/types/namespace.d.ts +55 -9
  50. package/dist/types/namespace.d.ts.map +1 -1
  51. package/dist/types/notifications.d.ts +77 -0
  52. package/dist/types/notifications.d.ts.map +1 -0
  53. package/dist/types/notifications.js +3 -0
  54. package/dist/types/notifications.js.map +1 -0
  55. package/dist/types/webhooks.d.ts +52 -0
  56. package/dist/types/webhooks.d.ts.map +1 -0
  57. package/dist/types/webhooks.js +3 -0
  58. package/dist/types/webhooks.js.map +1 -0
  59. package/dist/types/workspace-resources.d.ts +83 -0
  60. package/dist/types/workspace-resources.d.ts.map +1 -1
  61. package/dist/webhooks.d.ts +53 -0
  62. package/dist/webhooks.d.ts.map +1 -0
  63. package/dist/webhooks.js +60 -0
  64. package/dist/webhooks.js.map +1 -0
  65. package/docs/analytics.md +36 -0
  66. package/docs/domains.md +47 -0
  67. package/docs/edge-proxy.md +44 -0
  68. package/docs/edge-tunnel.md +42 -0
  69. package/docs/errors.md +34 -0
  70. package/docs/namespaces.md +69 -0
  71. package/docs/notifications.md +40 -0
  72. package/docs/pages.md +26 -0
  73. package/docs/runtime.md +53 -0
  74. package/docs/tokens.md +24 -0
  75. package/docs/webhooks.md +42 -0
  76. package/docs/workspaces.md +82 -0
  77. package/package.json +5 -2
@@ -146,12 +146,43 @@ export interface RawTokenResponse {
146
146
  port: number;
147
147
  [key: string]: unknown;
148
148
  }
149
+ /**
150
+ * Bring-Your-Own-Proxy (BYOP) — route this workspace's outbound traffic
151
+ * through your own HTTP/HTTPS proxy. Scale plan only.
152
+ *
153
+ * The proxy host MUST be a public IPv4 (hostnames and reserved/private
154
+ * ranges are rejected server-side). Credentials are stored server-side
155
+ * and only sent to the upstream proxy as a Proxy-Authorization header.
156
+ */
157
+ export interface CustomProxyParams {
158
+ /** Upstream proxy IPv4 address (public only). */
159
+ host: string;
160
+ /** Upstream proxy port (1-65535). */
161
+ port: number;
162
+ /** Proxy protocol — "http" or "https". Defaults to "http". */
163
+ protocol?: 'http' | 'https';
164
+ /** Optional username for Proxy-Authorization. */
165
+ username?: string;
166
+ /** Optional password for Proxy-Authorization. Required if username is set. */
167
+ password?: string;
168
+ }
149
169
  export interface NetworkUpdateParams {
150
170
  private_link_ids?: string[];
151
171
  allow_internet?: boolean;
152
172
  ingress_ports?: number[];
153
173
  egress?: string[];
154
174
  public_access?: boolean;
175
+ /** BYOP: "custom" routes through custom_proxy, "managed" uses the pool IP. */
176
+ outbound_mode?: 'managed' | 'custom';
177
+ /** Required when outbound_mode === "custom". */
178
+ custom_proxy?: CustomProxyParams;
179
+ }
180
+ export interface OutboundProxyInfo {
181
+ host: string;
182
+ port: number;
183
+ protocol: 'http' | 'https';
184
+ /** True when credentials are stored — the password itself is never returned. */
185
+ has_credentials: boolean;
155
186
  }
156
187
  export interface NetworkConfig {
157
188
  ip?: string;
@@ -159,6 +190,10 @@ export interface NetworkConfig {
159
190
  public_access?: boolean;
160
191
  allow_internet?: boolean;
161
192
  private_links?: Record<string, unknown>[];
193
+ /** "custom" when BYOP is active, "managed" otherwise. */
194
+ outbound_mode?: 'managed' | 'custom';
195
+ /** Present only when outbound_mode === "custom". */
196
+ outbound_proxy?: OutboundProxyInfo;
162
197
  [key: string]: unknown;
163
198
  }
164
199
  export interface LogsParams {
@@ -285,6 +320,54 @@ export interface VerifyDomainResponse {
285
320
  };
286
321
  edge_ips: string[];
287
322
  }
323
+ /** Optional namespace filter. Namespace-scoped keys are always pinned to their own. */
324
+ export interface DomainListParams {
325
+ /** Filter to a namespace (admin/dashboard only; scoped keys are auto-pinned). */
326
+ namespace?: string;
327
+ }
328
+ /** A registered route (port / page / edge proxy / edge tunnel / workspace / custom domain). */
329
+ export interface DomainRoute {
330
+ id: number;
331
+ hostname: string;
332
+ slug: string;
333
+ domain: string;
334
+ route_type: string;
335
+ target: string;
336
+ owner_type: string;
337
+ owner_id: string;
338
+ namespace?: string | null;
339
+ is_custom: boolean;
340
+ status: string;
341
+ metadata?: Record<string, unknown>;
342
+ created_at?: string;
343
+ updated_at?: string;
344
+ }
345
+ export interface DomainRoutesResponse {
346
+ success: boolean;
347
+ data: DomainRoute[];
348
+ }
349
+ /** An SSL certificate with renewal status. */
350
+ export interface SslCertificate {
351
+ domain: string;
352
+ namespace?: string | null;
353
+ active: boolean;
354
+ auto_renew: boolean;
355
+ expires_at: number | string | null;
356
+ source: string;
357
+ last_attempt_at?: string | null;
358
+ /** Last renewal error, if the most recent attempt failed. */
359
+ last_error?: string | null;
360
+ renew_attempts?: number;
361
+ }
362
+ export interface SslListResponse {
363
+ success: boolean;
364
+ data: SslCertificate[];
365
+ }
366
+ export interface SslAutoRenewResponse {
367
+ success: boolean;
368
+ domain: string;
369
+ auto_renew: boolean;
370
+ }
288
371
  export interface StatsEvent {
289
372
  cpu_usage?: number;
290
373
  memory_usage?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-resources.d.ts","sourceRoot":"","sources":["../../src/types/workspace-resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-resources.d.ts","sourceRoot":"","sources":["../../src/types/workspace-resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { HttpClient } from './http.js';
2
+ import type { ApiResponse } from './types/common.js';
3
+ import type { Webhook, WebhookCreateParams, WebhookUpdateParams, WebhookListParams, WebhookListResponse, WebhookEventsResponse } from './types/webhooks.js';
4
+ /**
5
+ * Webhooks — subscribe an HTTPS endpoint to platform events (vm/workload
6
+ * lifecycle, credit usage, namespace quota thresholds). Deliveries are signed
7
+ * with HMAC-SHA256 (`X-Webhook-Signature`) when a secret is set.
8
+ *
9
+ * A webhook can be **scoped to a namespace** so it only receives that
10
+ * namespace's events — e.g. all usage events for one team:
11
+ *
12
+ * ```ts
13
+ * import Oblien from 'oblien';
14
+ * const client = new Oblien({ clientId, clientSecret });
15
+ *
16
+ * await client.webhooks.create({
17
+ * url: 'https://example.com/hooks/oblien',
18
+ * events: ['credits.usage', 'namespace.quota.threshold'],
19
+ * namespace: 'team-a', // ← only team-a's events; omit for account-wide
20
+ * secret: process.env.WH_SECRET,
21
+ * });
22
+ *
23
+ * const { events } = await client.webhooks.events(); // available event types
24
+ * const { webhooks } = await client.webhooks.list({ namespace: 'team-a' });
25
+ * await client.webhooks.delete(webhooks[0].id);
26
+ * ```
27
+ */
28
+ export declare class Webhooks {
29
+ /** @internal */
30
+ readonly _http: HttpClient;
31
+ private readonly _base;
32
+ constructor(client: {
33
+ _http: HttpClient;
34
+ });
35
+ /** List webhooks. Optionally filter by namespace (scoped keys auto-pinned). */
36
+ list(params?: WebhookListParams): Promise<WebhookListResponse>;
37
+ /** The set of event types you can subscribe to. */
38
+ events(): Promise<WebhookEventsResponse>;
39
+ /**
40
+ * Create a webhook. Set `namespace` to scope it to one namespace's events,
41
+ * or omit for account-wide.
42
+ */
43
+ create(params: WebhookCreateParams): Promise<ApiResponse & {
44
+ webhook: Webhook;
45
+ }>;
46
+ /** Update a webhook (url, events, secret, description, namespace, active). */
47
+ update(id: number, params: WebhookUpdateParams): Promise<ApiResponse & {
48
+ webhook: Webhook;
49
+ }>;
50
+ /** Delete a webhook. */
51
+ delete(id: number): Promise<ApiResponse>;
52
+ }
53
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.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,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,QAAQ;IACnB,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE;IAIzC,+EAA+E;IACzE,IAAI,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQxE,mDAAmD;IAC7C,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAI9C;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAItF,8EAA8E;IACxE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAIlG,wBAAwB;IAClB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAG/C"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Webhooks — subscribe an HTTPS endpoint to platform events (vm/workload
3
+ * lifecycle, credit usage, namespace quota thresholds). Deliveries are signed
4
+ * with HMAC-SHA256 (`X-Webhook-Signature`) when a secret is set.
5
+ *
6
+ * A webhook can be **scoped to a namespace** so it only receives that
7
+ * namespace's events — e.g. all usage events for one team:
8
+ *
9
+ * ```ts
10
+ * import Oblien from 'oblien';
11
+ * const client = new Oblien({ clientId, clientSecret });
12
+ *
13
+ * await client.webhooks.create({
14
+ * url: 'https://example.com/hooks/oblien',
15
+ * events: ['credits.usage', 'namespace.quota.threshold'],
16
+ * namespace: 'team-a', // ← only team-a's events; omit for account-wide
17
+ * secret: process.env.WH_SECRET,
18
+ * });
19
+ *
20
+ * const { events } = await client.webhooks.events(); // available event types
21
+ * const { webhooks } = await client.webhooks.list({ namespace: 'team-a' });
22
+ * await client.webhooks.delete(webhooks[0].id);
23
+ * ```
24
+ */
25
+ export class Webhooks {
26
+ /** @internal */
27
+ _http;
28
+ _base = '/webhooks';
29
+ constructor(client) {
30
+ this._http = client._http;
31
+ }
32
+ /** List webhooks. Optionally filter by namespace (scoped keys auto-pinned). */
33
+ async list(params = {}) {
34
+ return this._http.request({
35
+ method: 'GET',
36
+ path: this._base,
37
+ query: params.namespace ? { namespace: params.namespace } : undefined,
38
+ });
39
+ }
40
+ /** The set of event types you can subscribe to. */
41
+ async events() {
42
+ return this._http.request({ method: 'GET', path: `${this._base}/events` });
43
+ }
44
+ /**
45
+ * Create a webhook. Set `namespace` to scope it to one namespace's events,
46
+ * or omit for account-wide.
47
+ */
48
+ async create(params) {
49
+ return this._http.request({ method: 'POST', path: this._base, body: params });
50
+ }
51
+ /** Update a webhook (url, events, secret, description, namespace, active). */
52
+ async update(id, params) {
53
+ return this._http.request({ method: 'PUT', path: `${this._base}/${id}`, body: params });
54
+ }
55
+ /** Delete a webhook. */
56
+ async delete(id) {
57
+ return this._http.request({ method: 'DELETE', path: `${this._base}/${id}` });
58
+ }
59
+ }
60
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,QAAQ;IACnB,gBAAgB;IACP,KAAK,CAAa;IAEV,KAAK,GAAG,WAAW,CAAC;IAErC,YAAY,MAA6B;QACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,IAAI,CAAC,SAA4B,EAAE;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YACxB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC,CAAC;IACL,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,MAA2B;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAA2B;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ # Analytics
2
+
3
+ Edge traffic analytics — requests, bandwidth, geo, and live streaming — for your domains, aggregated across the account or per namespace.
4
+
5
+ ```typescript
6
+ const a = client.analytics;
7
+ ```
8
+
9
+ ## Account / namespace summary
10
+
11
+ ```typescript
12
+ // All your domains
13
+ const all = await a.home();
14
+
15
+ // One namespace's domains (the dashboard's per-namespace view)
16
+ const ns = await a.home({ namespace: 'production' });
17
+ // → { domains: [{ domain, requests, bandwidth_in, bandwidth_out }], totals: {...} }
18
+ ```
19
+
20
+ ## Per-domain
21
+
22
+ ```typescript
23
+ const overview = await a.get('app.example.com', { from, to }); // overview+timeseries+geo+requests
24
+ const series = await a.timeseries('app.example.com', { from, to, interval: 'hour' });
25
+ const geo = await a.geo('app.example.com');
26
+ const requests = await a.requests('app.example.com', { limit: 100 });
27
+
28
+ // Short-lived JWT for the live SSE stream (edge.oblien.com/stream)
29
+ const { token, stream_url } = await a.streamToken('app.example.com');
30
+ ```
31
+
32
+ `from`/`to` are epoch milliseconds; `interval` auto-detects (minute/hour/day) by range. Recent data comes from Redis, older from durable rollups — stitched transparently.
33
+
34
+ > For **compute** usage per namespace (vCPU-hours, GB-hours, etc.), use [`namespaces.usageUnits`](./namespaces.md) — analytics covers the **edge** plane.
35
+
36
+ **Full reference:** [Analytics API](https://oblien.com/docs/api/analytics)
@@ -0,0 +1,47 @@
1
+ # Domains
2
+
3
+ Standalone domain utilities — slug availability, custom-domain DNS verification, and listing your routes + SSL certificates. (For per-workspace custom domains, see `client.workspaces.domains`; for static pages, `client.pages.connectDomain`.)
4
+
5
+ ```typescript
6
+ const dm = client.domain;
7
+ ```
8
+
9
+ ## Pre-flight checks
10
+
11
+ ```typescript
12
+ // Is a slug free on a wildcard domain?
13
+ const { available, url } = await dm.checkSlug({ slug: 'my-app' });
14
+
15
+ // Verify DNS for a custom domain (CNAME → edge + TXT ownership)
16
+ const { verified, cname, ownership, errors, required_records } = await dm.verify({
17
+ domain: 'app.example.com',
18
+ resource_id: 'ws_abc',
19
+ });
20
+ ```
21
+
22
+ Standard plans require both edge DNS and TXT ownership; enterprise custom-domain grants verify with edge DNS only.
23
+
24
+ ## Routes
25
+
26
+ Every route you own — ports, pages, edge proxies/tunnels, custom domains — each with the resource it's bound to (`owner_type`/`owner_id`):
27
+
28
+ ```typescript
29
+ const { data: routes } = await dm.routes(); // all
30
+ const { data: scoped } = await dm.routes({ namespace: 'team-a' }); // filtered
31
+ ```
32
+
33
+ Namespace-scoped keys see only their namespace; admins may filter via `namespace`.
34
+
35
+ ## SSL certificates + auto-renew
36
+
37
+ ```typescript
38
+ // Certs + renewal status (expiry, auto_renew, last_error)
39
+ const { data: ssls } = await dm.ssls({ namespace: 'team-a' });
40
+
41
+ // Opt a cert out of (or back into) automatic renewal
42
+ await dm.setSslAutoRenew('app.example.com', false);
43
+ ```
44
+
45
+ Certs auto-renew ~14 days before expiry; `last_error`/`renew_attempts` surface a failing cert before it expires.
46
+
47
+ **Full reference:** [Domains API](https://oblien.com/docs/api/domains)
@@ -0,0 +1,44 @@
1
+ # Edge Proxy
2
+
3
+ Reverse-proxy a subdomain through the Oblien edge to an external upstream. A target must be **proven** before it can be routed — `create`/`update` reject an unverified target with `403 target_unverified`.
4
+
5
+ ```typescript
6
+ const ep = client.edgeProxy;
7
+ ```
8
+
9
+ ## Verify, then create
10
+
11
+ ```typescript
12
+ const target = 'https://internal-staging.example.com:8080';
13
+
14
+ // 1. Request a challenge.
15
+ const { verification } = await ep.requestVerification(target);
16
+ console.log(verification.instructions); // serve verification.token at verification.path
17
+
18
+ // 2. Prove it — Oblien fetches the token over an SSRF-safe, IP-pinned connection.
19
+ const { verification: result } = await ep.checkVerification(verification.id);
20
+ if (result.status !== 'verified') throw new Error(result.error);
21
+
22
+ // 3. Create (domain optional — defaults to the platform domain; pinned to the verified IP).
23
+ const { proxy } = await ep.create({ name: 'staging-api', slug: 'staging-api', target });
24
+ ```
25
+
26
+ Verification lasts 90 days and auto-renews; if a target can no longer be proven its proxies are disabled.
27
+
28
+ ## Manage
29
+
30
+ ```typescript
31
+ const { proxies } = await ep.list();
32
+ await ep.update(proxy.id, { target: 'https://new-upstream.example.com' });
33
+ await ep.disable(proxy.id);
34
+ await ep.enable(proxy.id);
35
+ await ep.delete(proxy.id);
36
+
37
+ // Verifications
38
+ await ep.listVerifications();
39
+ await ep.deleteVerification(verification.id);
40
+ ```
41
+
42
+ The check endpoint is rate-limited (it makes an outbound request) and a single challenge caps failed attempts — re-request to reset.
43
+
44
+ **Full reference:** [Edge Proxy concept](https://oblien.com/docs/concepts/edge-proxy) · [API](https://oblien.com/docs/api/edge-proxy)
@@ -0,0 +1,42 @@
1
+ # Edge Tunnel
2
+
3
+ Expose a **local** port to the internet through the Oblien edge — like a built-in ngrok. The tunnel client forwards incoming edge traffic to `localhost:<port>`.
4
+
5
+ ```typescript
6
+ const et = client.edgeTunnel;
7
+ ```
8
+
9
+ ## One-liner: create + connect
10
+
11
+ ```typescript
12
+ const tunnel = await et.connect({ name: 'dev-server', port: 3000 });
13
+ console.log(tunnel.url); // https://dev-xyz.preview.oblien.com
14
+
15
+ tunnel.on('request', (id, port) => console.log(`→ localhost:${port}`));
16
+ tunnel.on('close', () => console.log('disconnected'));
17
+
18
+ // Later…
19
+ tunnel.close();
20
+ ```
21
+
22
+ ## Low-level
23
+
24
+ ```typescript
25
+ const { tunnel } = await et.create({ name: 'api', port: 8080 });
26
+ const { token, connect_url } = await et.issueToken(tunnel.id);
27
+ // → drive a TunnelClient yourself with { connectUrl: connect_url, token }
28
+ ```
29
+
30
+ ## Manage
31
+
32
+ ```typescript
33
+ const { tunnels } = await et.list();
34
+ await et.checkDomain({ host: 'tunnel.example.com' }); // pre-flight custom domain (TXT/CNAME)
35
+ await et.update(tunnel.id, { name: 'api-v2' });
36
+ await et.enable(tunnel.id);
37
+ await et.disable(tunnel.id);
38
+ await et.renewSSL(tunnel.id);
39
+ await et.delete(tunnel.id);
40
+ ```
41
+
42
+ **Full reference:** [Edge Tunnel API](https://oblien.com/docs/api/edge-tunnel)
package/docs/errors.md ADDED
@@ -0,0 +1,34 @@
1
+ # Error handling
2
+
3
+ Every API error is an instance of `OblienError` with typed subclasses. The SDK preserves the machine-readable `code`, human-readable `message`, optional `details`, and optional `requestId` from the API response.
4
+
5
+ ```typescript
6
+ import {
7
+ OblienError,
8
+ NotFoundError,
9
+ RateLimitError,
10
+ PaymentRequiredError,
11
+ } from 'oblien';
12
+
13
+ try {
14
+ await client.workspaces.get('ws_nonexistent');
15
+ } catch (err) {
16
+ if (err instanceof NotFoundError) { /* 404 */ }
17
+ if (err instanceof RateLimitError) { /* 429 — back off */ }
18
+ if (err instanceof PaymentRequiredError) { /* 402 — quota exceeded */ }
19
+ if (err instanceof OblienError) {
20
+ console.error(err.code, err.message, err.details, err.requestId);
21
+ }
22
+ }
23
+ ```
24
+
25
+ | Error class | HTTP | When |
26
+ |---|---|---|
27
+ | `AuthenticationError` | 401 | Invalid or missing credentials |
28
+ | `PaymentRequiredError` | 402 | Credit quota exceeded |
29
+ | `NotFoundError` | 404 | Resource does not exist |
30
+ | `ConflictError` | 409 | Resource in wrong state |
31
+ | `ValidationError` | 422 | Invalid parameters |
32
+ | `RateLimitError` | 429 | Too many requests |
33
+
34
+ All subclasses extend `OblienError`, so a single `instanceof OblienError` catch handles everything while still exposing `.code`/`.message`/`.details`/`.requestId`.
@@ -0,0 +1,69 @@
1
+ # Namespaces
2
+
3
+ Group workspaces into isolated namespaces with **resource limits**, **spending quotas**, lifecycle controls, and **per-namespace usage** — the building block for multi-tenant setups (one namespace per customer/team).
4
+
5
+ ```typescript
6
+ const ns = client.namespaces;
7
+ ```
8
+
9
+ ## Create + resource limits
10
+
11
+ ```typescript
12
+ const { data } = await ns.create({
13
+ name: 'production',
14
+ resource_limits: {
15
+ max_workspaces: 50,
16
+ max_vcpus: 16, // per-workspace cap
17
+ max_ram_mb: 32768,
18
+ max_disk_gb: 100,
19
+ },
20
+ });
21
+ ```
22
+
23
+ Resource limits are enforced **atomically at workspace create and resource upgrade** — over-limit returns `409 NAMESPACE_LIMIT_REACHED`. `max_workspaces` is race-proof (the namespace row is locked + the count re-checked inside the insert transaction). Update them with `ns.update(id, { resource_limits })`.
24
+
25
+ ## Lifecycle
26
+
27
+ ```typescript
28
+ await ns.suspend(id); // freeze — blocks new creates/starts in the namespace
29
+ await ns.activate(id);
30
+ await ns.stopWorkspaces(id);
31
+ const { namespaces } = await ns.list();
32
+ ```
33
+
34
+ ## Quotas (optional)
35
+
36
+ Spending limits per service, with overdraft + threshold webhooks. Skip these if you bill externally (use **usage units** below instead).
37
+
38
+ ```typescript
39
+ await ns.setQuota({
40
+ namespace: 'production', service: 'sandbox',
41
+ quotaLimit: 500, overdraft: 50,
42
+ onOverdraftAction: 'stop_workspaces',
43
+ notificationThresholds: [80, 95], // fires namespace.quota.threshold webhooks
44
+ });
45
+ await ns.resetQuota({ namespace: 'production', service: 'sandbox' });
46
+ await ns.listWithQuotas();
47
+ ```
48
+
49
+ ## Usage
50
+
51
+ ```typescript
52
+ // Credits view (Oblien's converted units, grouped by service)
53
+ const usage = await ns.usage(id, { days: 30 });
54
+ const details = await ns.getDetails('production'); // quota + usage + transactions
55
+
56
+ // RAW metered units — for external billing with your own rates
57
+ const { data } = await ns.usageUnits('production', {
58
+ from: '2026-06-01T00:00:00Z', to: '2026-06-21T00:00:00Z', groupBy: 'day',
59
+ });
60
+ data.totals.vcpu_hours; // cpu_time_minutes/60, gb_hours, network_gb, disk_io_gb …
61
+ ```
62
+
63
+ `usageUnits` is deterministic for a range — poll it and idempotency-key on `(namespace, bucket.timestamp)`. The same raw units are also pushed per cycle on the `credits.usage` [webhook](./webhooks.md). Edge metrics (requests/bandwidth) per namespace come from [Analytics](./analytics.md) `home({ namespace })`.
64
+
65
+ ## Namespace-scoped API keys
66
+
67
+ A namespace-scoped key is pinned to its namespace: list/get/usage/webhooks all auto-filter to it, and it can't widen scope. `user_id` is always the tenant gate.
68
+
69
+ **Full reference:** [Namespaces API](https://oblien.com/docs/api/namespaces)
@@ -0,0 +1,40 @@
1
+ # Notifications
2
+
3
+ Push notifications to the Oblien mobile app. Flow: **inside a workspace ▶ Oblien ▶ FCM ▶ device**. The app registers a device; you mint **virtual** send tokens scoped to a workspace; code inside that workspace sends with a token. The real device FCM token never leaves Oblien, and a virtual token can be revoked independently.
4
+
5
+ ```typescript
6
+ const nt = client.notifications;
7
+ ```
8
+
9
+ ## Devices
10
+
11
+ The mobile app registers itself. Keyed by a stable `device_id` (the FCM token rotates under it); the token is **validated with FCM before storage**.
12
+
13
+ ```typescript
14
+ await nt.registerDevice({ device_id: 'dev_abc', fcm_token: '<fcm>', platform: 'ios' });
15
+ await nt.listDevices();
16
+ await nt.removeDevice(deviceId);
17
+ ```
18
+
19
+ ## Send tokens (per workspace)
20
+
21
+ ```typescript
22
+ // Plaintext token returned ONCE — store it.
23
+ const { token } = await nt.createToken({ workspace_id: 'ws_123', name: 'agent' });
24
+
25
+ await nt.listTokens('ws_123');
26
+ await nt.revokeToken(token.id); // soft — stops routing
27
+ await nt.deleteToken(token.id); // permanent
28
+ ```
29
+
30
+ ## Send
31
+
32
+ Authenticated by the virtual token itself (not client credentials) — callable from inside a workspace. Fans out to the token owner's active devices.
33
+
34
+ ```typescript
35
+ await nt.send(token.token, { title: 'Build done', body: 'Agent finished', data: { run_id: 'abc' } });
36
+ ```
37
+
38
+ Dead device tokens (app uninstalled) are auto-pruned on send.
39
+
40
+ **Full reference:** [Notifications concept](https://oblien.com/docs/concepts/notifications) · [API](https://oblien.com/docs/api/notifications)
package/docs/pages.md ADDED
@@ -0,0 +1,26 @@
1
+ # Pages
2
+
3
+ Deploy static files from a workspace to the edge CDN. The workspace can stop or be deleted after export — the page stays live with automatic TLS. No running VM required.
4
+
5
+ ```typescript
6
+ // Deploy build output from a workspace
7
+ const { page } = await client.pages.create({
8
+ workspace_id: 'ws_abc',
9
+ path: '/app/dist',
10
+ name: 'my-app',
11
+ });
12
+
13
+ // Re-deploy with fresh files
14
+ await client.pages.deploy(page.slug, { workspace_id: 'ws_abc', path: '/app/dist' });
15
+
16
+ // Custom domain (automatic SSL)
17
+ await client.pages.connectDomain(page.slug, { domain: 'app.example.com' });
18
+
19
+ // Toggle
20
+ await client.pages.disable(page.slug);
21
+ await client.pages.enable(page.slug);
22
+ ```
23
+
24
+ Pages are namespace-aware — pass `namespace` on create to group them and apply namespace scoping.
25
+
26
+ **Full reference:** [Pages concept](https://oblien.com/docs/concepts/pages) · [Pages API](https://oblien.com/docs/api/pages)