oblien 2.2.45 → 2.3.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 +2 -0
- package/dist/billing.d.ts +209 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +276 -0
- package/dist/billing.js.map +1 -0
- package/dist/cli/commands/desktop.d.ts +3 -0
- package/dist/cli/commands/desktop.d.ts.map +1 -0
- package/dist/cli/commands/desktop.js +41 -0
- package/dist/cli/commands/desktop.js.map +1 -0
- package/dist/cli/commands/workspaces.d.ts.map +1 -1
- package/dist/cli/commands/workspaces.js +9 -1
- package/dist/cli/commands/workspaces.js.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -0
- package/dist/client.js.map +1 -1
- package/dist/http-error.d.ts.map +1 -1
- package/dist/http-error.js +4 -1
- package/dist/http-error.js.map +1 -1
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +4 -7
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resources/desktop.d.ts +25 -0
- package/dist/resources/desktop.d.ts.map +1 -0
- package/dist/resources/desktop.js +12 -0
- package/dist/resources/desktop.js.map +1 -0
- package/dist/runtime/desktop-tunnel.d.ts +7 -0
- package/dist/runtime/desktop-tunnel.d.ts.map +1 -0
- package/dist/runtime/desktop-tunnel.js +56 -0
- package/dist/runtime/desktop-tunnel.js.map +1 -0
- package/dist/runtime/desktop.d.ts +37 -0
- package/dist/runtime/desktop.d.ts.map +1 -0
- package/dist/runtime/desktop.js +41 -0
- package/dist/runtime/desktop.js.map +1 -0
- package/dist/runtime-http.js +1 -1
- package/dist/runtime-http.js.map +1 -1
- package/dist/runtime.d.ts +12 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +24 -2
- package/dist/runtime.js.map +1 -1
- package/dist/types/billing.d.ts +187 -0
- package/dist/types/billing.d.ts.map +1 -0
- package/dist/types/billing.js +10 -0
- package/dist/types/billing.js.map +1 -0
- package/dist/types/common.d.ts +1 -0
- package/dist/types/common.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/notifications.d.ts +8 -0
- package/dist/types/notifications.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +48 -0
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/webhooks.d.ts +1 -1
- package/dist/types/webhooks.d.ts.map +1 -1
- package/dist/types/workspace-resources.d.ts +18 -0
- package/dist/types/workspace-resources.d.ts.map +1 -1
- package/dist/types/workspace.d.ts +61 -1
- package/dist/types/workspace.d.ts.map +1 -1
- package/dist/workspace-handle.d.ts +6 -1
- package/dist/workspace-handle.d.ts.map +1 -1
- package/dist/workspace-handle.js +8 -0
- package/dist/workspace-handle.js.map +1 -1
- package/dist/workspace.d.ts +11 -3
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +86 -7
- package/dist/workspace.js.map +1 -1
- package/docs/billing.md +137 -0
- package/docs/desktop.md +83 -0
- package/docs/errors.md +7 -1
- package/docs/notifications.md +15 -0
- package/docs/workspace-limit-report.md +34 -0
- package/docs/workspaces.md +30 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -52,6 +52,7 @@ The client wraps every part of the platform. Each feature has a deep-dive page i
|
|
|
52
52
|
|---------|----------|--------------|-------|
|
|
53
53
|
| **Workspaces** | `client.workspaces`, `client.workspace(id)` | microVM CRUD, power, and 14 sub-resources (network, ssh, snapshots, …) | [docs/workspaces](./docs/workspaces.md) |
|
|
54
54
|
| **Runtime** | `client.workspaces.runtime(id)` | Data plane: files, exec, terminal, search, watchers, WebSocket | [docs/runtime](./docs/runtime.md) |
|
|
55
|
+
| **Desktop** | `runtime.desktop` | Live access, browser viewer and native VNC tunnel through the gateway | [docs/desktop](./docs/desktop.md) |
|
|
55
56
|
| **Pages** | `client.pages` | Deploy static files to the edge CDN with automatic TLS | [docs/pages](./docs/pages.md) |
|
|
56
57
|
| **Namespaces** | `client.namespaces` | Group workspaces; resource limits, quotas, per-namespace usage | [docs/namespaces](./docs/namespaces.md) |
|
|
57
58
|
| **Domains** | `client.domain` | Slug/DNS pre-flight, route listing, SSL certs + auto-renew | [docs/domains](./docs/domains.md) |
|
|
@@ -73,6 +74,7 @@ client
|
|
|
73
74
|
├── workspace(id) scoped handle (ID pre-filled)
|
|
74
75
|
├── pages static deploys to the edge CDN → docs/pages.md
|
|
75
76
|
├── namespaces grouping · limits · quotas · usage → docs/namespaces.md
|
|
77
|
+
├── billing checkout · portal · renewal · quotas → docs/billing.md
|
|
76
78
|
├── domain slug/DNS checks · routes · SSL → docs/domains.md
|
|
77
79
|
├── edgeProxy subdomain → verified upstream → docs/edge-proxy.md
|
|
78
80
|
├── edgeTunnel local port → public URL → docs/edge-tunnel.md
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import type { HttpClient } from './http.js';
|
|
2
|
+
import type { BillingBalance, BillingCatalog, BillingDefaults, BillingDefaultsParams, BillingPolicy, BillingPolicyParams, CheckoutParams, CheckoutResponse, Entitlement, PortalParams, PortalResponse, BillingSubscriptionResponse, ResetQuotaParams, ResetQuotaResponse } from './types/billing.js';
|
|
3
|
+
/**
|
|
4
|
+
* Billing — namespace-bound subscriptions, credit top-ups, and entitlement.
|
|
5
|
+
*
|
|
6
|
+
* Oblien is the payment engine: it runs Stripe internally, meters usage, enforces
|
|
7
|
+
* quotas and suspends namespaces. You never touch Stripe and never re-implement quota
|
|
8
|
+
* math.
|
|
9
|
+
*
|
|
10
|
+
* **The namespace is the unit of billing.** Every subscription, quota, entitlement and
|
|
11
|
+
* suspension is per-namespace, so exhausting one never affects a sibling. That is what
|
|
12
|
+
* makes this usable for multi-tenant products: give each of your customers a namespace
|
|
13
|
+
* and they are billed independently.
|
|
14
|
+
*
|
|
15
|
+
* ### Selling credits to a namespace
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* // 1. Show what's for sale (public — no auth needed).
|
|
19
|
+
* const { creditPacks } = await client.billing.catalog();
|
|
20
|
+
*
|
|
21
|
+
* // 2. Create a checkout bound to the customer's namespace.
|
|
22
|
+
* const { url } = await client.billing.checkout({
|
|
23
|
+
* namespace: 'tenant-abc',
|
|
24
|
+
* kind: 'topup',
|
|
25
|
+
* packId: creditPacks[0].packId,
|
|
26
|
+
* successUrl: 'https://your-app.com/billing/done',
|
|
27
|
+
* cancelUrl: 'https://your-app.com/billing',
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* // 3. Send the browser there. On the cleared payment Oblien credits THAT namespace.
|
|
31
|
+
* redirect(url);
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* Do **not** grant access off the redirect — the payment is confirmed by webhook, not by
|
|
35
|
+
* the browser coming back. Poll {@link Billing.entitlement} or listen for
|
|
36
|
+
* `payment.succeeded`.
|
|
37
|
+
*
|
|
38
|
+
* ### Two ways to use this
|
|
39
|
+
*
|
|
40
|
+
* - **Mode B (above)** — Oblien hosts the payment against its own catalog. Use
|
|
41
|
+
* {@link Billing.catalog}, {@link Billing.checkout}, {@link Billing.portal}.
|
|
42
|
+
* - **Mode A** — you collect your own money and only want Oblien to enforce a budget.
|
|
43
|
+
* Skip checkout entirely and set the ceiling directly with {@link Billing.setPolicy}
|
|
44
|
+
* (or {@link Billing.setDefaults} for a template applied to every new namespace).
|
|
45
|
+
*
|
|
46
|
+
* **Requires an `admin`- or `billing`-scoped API key** for everything except
|
|
47
|
+
* {@link Billing.catalog}. Namespace- and workspace-scoped tokens — the lightweight ones
|
|
48
|
+
* you hand to end-users — are refused on every billing route by design.
|
|
49
|
+
*/
|
|
50
|
+
export declare class Billing {
|
|
51
|
+
/** @internal */
|
|
52
|
+
private readonly _http;
|
|
53
|
+
constructor(client: {
|
|
54
|
+
_http: HttpClient;
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* Plans and credit packs on offer. Public — no authentication.
|
|
58
|
+
*
|
|
59
|
+
* Read prices from here rather than hardcoding them: the catalog is the platform's
|
|
60
|
+
* source of truth and can change without an SDK release.
|
|
61
|
+
*
|
|
62
|
+
* ```ts
|
|
63
|
+
* const { plans, creditPacks } = await client.billing.catalog();
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
catalog(): Promise<BillingCatalog>;
|
|
67
|
+
/**
|
|
68
|
+
* Create a hosted checkout bound to a namespace, and get the URL to redirect to.
|
|
69
|
+
*
|
|
70
|
+
* Two kinds:
|
|
71
|
+
*
|
|
72
|
+
* - `kind: 'topup'` + `packId` — adds the pack's credits to that namespace's ceiling.
|
|
73
|
+
* They **survive renewal** and stack, so this is how you un-block a namespace that
|
|
74
|
+
* ran out mid-cycle without changing its plan.
|
|
75
|
+
* - `kind: 'subscription'` + `planTierId` — puts the namespace on a recurring tier.
|
|
76
|
+
* Renewals reset usage and re-assert the ceiling automatically.
|
|
77
|
+
*
|
|
78
|
+
* ```ts
|
|
79
|
+
* const { url, checkoutId } = await client.billing.checkout({
|
|
80
|
+
* namespace: 'tenant-abc',
|
|
81
|
+
* kind: 'topup',
|
|
82
|
+
* packId: 'pack_1k',
|
|
83
|
+
* successUrl: 'https://your-app.com/billing/done',
|
|
84
|
+
* cancelUrl: 'https://your-app.com/billing',
|
|
85
|
+
* idempotencyKey: `topup-${orderId}`,
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* On `successUrl` / `cancelUrl`: both are optional, and their HOST must be on the
|
|
90
|
+
* platform's redirect allowlist. An off-allowlist host **silently falls back** to the
|
|
91
|
+
* platform default instead of erroring (open-redirect mitigation) — so a returned
|
|
92
|
+
* `url` is not proof your URL was accepted. Have the operator allowlist your host via
|
|
93
|
+
* `REDIRECT_ALLOWED_HOSTS`.
|
|
94
|
+
*
|
|
95
|
+
* Fulfilment is idempotent: a webhook redelivery never credits twice, and a delivery
|
|
96
|
+
* whose allocation fails is retried until it lands. A customer who has paid is never
|
|
97
|
+
* left with a namespace that is still capped.
|
|
98
|
+
*
|
|
99
|
+
* @throws ValidationError on an unknown namespace, kind, plan or pack.
|
|
100
|
+
*/
|
|
101
|
+
checkout(params: CheckoutParams): Promise<CheckoutResponse>;
|
|
102
|
+
/**
|
|
103
|
+
* Open the hosted "manage subscription / payment method / invoices" portal.
|
|
104
|
+
*
|
|
105
|
+
* Opens only this namespace's isolated Stripe customer. Resolve the namespace from
|
|
106
|
+
* your authenticated customer on your server; keep the admin/billing key there.
|
|
107
|
+
*
|
|
108
|
+
* ```ts
|
|
109
|
+
* const { url } = await client.billing.portal({ namespace: 'tenant-abc', returnUrl: 'https://your-app.com/billing' });
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* @throws NotFoundError (`no_customer`) if this namespace has never checked out.
|
|
113
|
+
* @throws ConflictError (`billing_customer_conflict`) for shared legacy billing.
|
|
114
|
+
*/
|
|
115
|
+
portal(params: PortalParams): Promise<PortalResponse>;
|
|
116
|
+
/** Read this namespace's subscription, including a pending end-of-period cancellation. */
|
|
117
|
+
subscription(namespace: string): Promise<BillingSubscriptionResponse>;
|
|
118
|
+
/** Stop renewal at the end of the paid period. Repeat calls are safe. */
|
|
119
|
+
cancelSubscription(namespace: string): Promise<BillingSubscriptionResponse>;
|
|
120
|
+
/** Undo scheduled cancellation before the subscription ends; no charge is created. */
|
|
121
|
+
resumeSubscription(namespace: string): Promise<BillingSubscriptionResponse>;
|
|
122
|
+
/**
|
|
123
|
+
* Mode A: start a new allowance cycle without losing purchased credits.
|
|
124
|
+
* Supply the same periodEnd on retry. Mode-B subscriptions renew automatically.
|
|
125
|
+
*/
|
|
126
|
+
resetQuota(namespace: string, params: ResetQuotaParams): Promise<ResetQuotaResponse>;
|
|
127
|
+
/**
|
|
128
|
+
* Everything you need to render a namespace's billing state: tier, status, period and
|
|
129
|
+
* quota. This is the single call behind tier badges, usage bars and access gating.
|
|
130
|
+
*
|
|
131
|
+
* ```ts
|
|
132
|
+
* const ent = await client.billing.entitlement('tenant-abc');
|
|
133
|
+
* // ent.status → 'active' | 'past_due' | 'canceled' | 'credit_exhausted'
|
|
134
|
+
* // ent.quota → { limit, used, balance } ← limit INCLUDES purchased top-ups
|
|
135
|
+
* ```
|
|
136
|
+
*
|
|
137
|
+
* `quota.limit === null` means uncapped.
|
|
138
|
+
*/
|
|
139
|
+
entitlement(namespace: string): Promise<Entitlement>;
|
|
140
|
+
/**
|
|
141
|
+
* The one-shot "can this namespace do work right now?" check.
|
|
142
|
+
*
|
|
143
|
+
* ```ts
|
|
144
|
+
* const { blocking } = await client.billing.balance('tenant-abc');
|
|
145
|
+
* if (blocking) return showTopUpPrompt();
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* `blocking` is `true` when the namespace is suspended or out of credits. You do not
|
|
149
|
+
* have to enforce it yourself — Oblien already refuses creates, starts, resumes and
|
|
150
|
+
* wakes for a blocked namespace — but checking lets you show a useful message instead
|
|
151
|
+
* of surfacing an error.
|
|
152
|
+
*/
|
|
153
|
+
balance(namespace: string): Promise<BillingBalance>;
|
|
154
|
+
/**
|
|
155
|
+
* Read a namespace's allowance policy.
|
|
156
|
+
*
|
|
157
|
+
* ```ts
|
|
158
|
+
* const policy = await client.billing.policy('tenant-abc');
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
policy(namespace: string): Promise<BillingPolicy>;
|
|
162
|
+
/**
|
|
163
|
+
* Set a namespace's budget directly — **Mode A**, for when you collect your own
|
|
164
|
+
* payment and just want Oblien to meter and enforce.
|
|
165
|
+
*
|
|
166
|
+
* ```ts
|
|
167
|
+
* await client.billing.setPolicy('tenant-abc', {
|
|
168
|
+
* quotaLimit: 5000, // included allowance for the cycle
|
|
169
|
+
* overdraft: 500, // may run this far past it before being BLOCKED
|
|
170
|
+
* suspendThreshold: 500, // ...and this far before being SUSPENDED
|
|
171
|
+
* onOverdraftAction: 'stop_workspaces',
|
|
172
|
+
* });
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* `overdraft` must be `<= suspendThreshold`, otherwise the request is rejected with
|
|
176
|
+
* `invalid_policy`. The reverse would wedge the namespace: it would stop accepting
|
|
177
|
+
* work before it was ever suspended or reset, so it could never recover.
|
|
178
|
+
*
|
|
179
|
+
* `quotaLimit: null` makes the namespace uncapped. Note that `purchasedCredits` is
|
|
180
|
+
* read-only here — only a {@link Billing.checkout} top-up moves it.
|
|
181
|
+
*
|
|
182
|
+
* @throws ValidationError (`invalid_policy`) on an inverted grace ladder.
|
|
183
|
+
*/
|
|
184
|
+
setPolicy(namespace: string, params: BillingPolicyParams): Promise<BillingPolicy>;
|
|
185
|
+
/**
|
|
186
|
+
* Read the template policy applied to new namespaces.
|
|
187
|
+
*/
|
|
188
|
+
defaults(): Promise<BillingDefaults>;
|
|
189
|
+
/**
|
|
190
|
+
* Set the template policy applied to every NEW namespace — so you configure the budget
|
|
191
|
+
* once instead of per tenant.
|
|
192
|
+
*
|
|
193
|
+
* ```ts
|
|
194
|
+
* await client.billing.setDefaults({
|
|
195
|
+
* quotaLimit: 1000,
|
|
196
|
+
* overdraft: 0,
|
|
197
|
+
* suspendThreshold: 0,
|
|
198
|
+
* autoApply: true,
|
|
199
|
+
* });
|
|
200
|
+
* ```
|
|
201
|
+
*
|
|
202
|
+
* Worth setting: a namespace with no ceiling and no default is **uncapped**, so it
|
|
203
|
+
* meters usage without ever blocking.
|
|
204
|
+
*
|
|
205
|
+
* Same `overdraft <= suspendThreshold` rule as {@link Billing.setPolicy}.
|
|
206
|
+
*/
|
|
207
|
+
setDefaults(params: BillingDefaultsParams): Promise<BillingDefaults>;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=billing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,2BAA2B,EAC3B,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,OAAO;IAClB,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE;IAIzC;;;;;;;;;OASG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQjE;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAS3D,0FAA0F;IACpF,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAM3E,yEAAyE;IACnE,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAMjF,sFAAsF;IAChF,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAMjF;;;OAGG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM1F;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ1D;;;;;;;;;;;;OAYG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQzD;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOvD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQvF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAO1C;;;;;;;;;;;;;;;;;OAiBG;IACG,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;CAO3E"}
|
package/dist/billing.js
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Billing — namespace-bound subscriptions, credit top-ups, and entitlement.
|
|
3
|
+
*
|
|
4
|
+
* Oblien is the payment engine: it runs Stripe internally, meters usage, enforces
|
|
5
|
+
* quotas and suspends namespaces. You never touch Stripe and never re-implement quota
|
|
6
|
+
* math.
|
|
7
|
+
*
|
|
8
|
+
* **The namespace is the unit of billing.** Every subscription, quota, entitlement and
|
|
9
|
+
* suspension is per-namespace, so exhausting one never affects a sibling. That is what
|
|
10
|
+
* makes this usable for multi-tenant products: give each of your customers a namespace
|
|
11
|
+
* and they are billed independently.
|
|
12
|
+
*
|
|
13
|
+
* ### Selling credits to a namespace
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* // 1. Show what's for sale (public — no auth needed).
|
|
17
|
+
* const { creditPacks } = await client.billing.catalog();
|
|
18
|
+
*
|
|
19
|
+
* // 2. Create a checkout bound to the customer's namespace.
|
|
20
|
+
* const { url } = await client.billing.checkout({
|
|
21
|
+
* namespace: 'tenant-abc',
|
|
22
|
+
* kind: 'topup',
|
|
23
|
+
* packId: creditPacks[0].packId,
|
|
24
|
+
* successUrl: 'https://your-app.com/billing/done',
|
|
25
|
+
* cancelUrl: 'https://your-app.com/billing',
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // 3. Send the browser there. On the cleared payment Oblien credits THAT namespace.
|
|
29
|
+
* redirect(url);
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* Do **not** grant access off the redirect — the payment is confirmed by webhook, not by
|
|
33
|
+
* the browser coming back. Poll {@link Billing.entitlement} or listen for
|
|
34
|
+
* `payment.succeeded`.
|
|
35
|
+
*
|
|
36
|
+
* ### Two ways to use this
|
|
37
|
+
*
|
|
38
|
+
* - **Mode B (above)** — Oblien hosts the payment against its own catalog. Use
|
|
39
|
+
* {@link Billing.catalog}, {@link Billing.checkout}, {@link Billing.portal}.
|
|
40
|
+
* - **Mode A** — you collect your own money and only want Oblien to enforce a budget.
|
|
41
|
+
* Skip checkout entirely and set the ceiling directly with {@link Billing.setPolicy}
|
|
42
|
+
* (or {@link Billing.setDefaults} for a template applied to every new namespace).
|
|
43
|
+
*
|
|
44
|
+
* **Requires an `admin`- or `billing`-scoped API key** for everything except
|
|
45
|
+
* {@link Billing.catalog}. Namespace- and workspace-scoped tokens — the lightweight ones
|
|
46
|
+
* you hand to end-users — are refused on every billing route by design.
|
|
47
|
+
*/
|
|
48
|
+
export class Billing {
|
|
49
|
+
/** @internal */
|
|
50
|
+
_http;
|
|
51
|
+
constructor(client) {
|
|
52
|
+
this._http = client._http;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Plans and credit packs on offer. Public — no authentication.
|
|
56
|
+
*
|
|
57
|
+
* Read prices from here rather than hardcoding them: the catalog is the platform's
|
|
58
|
+
* source of truth and can change without an SDK release.
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* const { plans, creditPacks } = await client.billing.catalog();
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
async catalog() {
|
|
65
|
+
return this._http.request({
|
|
66
|
+
method: 'GET',
|
|
67
|
+
path: '/billing/catalog',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a hosted checkout bound to a namespace, and get the URL to redirect to.
|
|
72
|
+
*
|
|
73
|
+
* Two kinds:
|
|
74
|
+
*
|
|
75
|
+
* - `kind: 'topup'` + `packId` — adds the pack's credits to that namespace's ceiling.
|
|
76
|
+
* They **survive renewal** and stack, so this is how you un-block a namespace that
|
|
77
|
+
* ran out mid-cycle without changing its plan.
|
|
78
|
+
* - `kind: 'subscription'` + `planTierId` — puts the namespace on a recurring tier.
|
|
79
|
+
* Renewals reset usage and re-assert the ceiling automatically.
|
|
80
|
+
*
|
|
81
|
+
* ```ts
|
|
82
|
+
* const { url, checkoutId } = await client.billing.checkout({
|
|
83
|
+
* namespace: 'tenant-abc',
|
|
84
|
+
* kind: 'topup',
|
|
85
|
+
* packId: 'pack_1k',
|
|
86
|
+
* successUrl: 'https://your-app.com/billing/done',
|
|
87
|
+
* cancelUrl: 'https://your-app.com/billing',
|
|
88
|
+
* idempotencyKey: `topup-${orderId}`,
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* On `successUrl` / `cancelUrl`: both are optional, and their HOST must be on the
|
|
93
|
+
* platform's redirect allowlist. An off-allowlist host **silently falls back** to the
|
|
94
|
+
* platform default instead of erroring (open-redirect mitigation) — so a returned
|
|
95
|
+
* `url` is not proof your URL was accepted. Have the operator allowlist your host via
|
|
96
|
+
* `REDIRECT_ALLOWED_HOSTS`.
|
|
97
|
+
*
|
|
98
|
+
* Fulfilment is idempotent: a webhook redelivery never credits twice, and a delivery
|
|
99
|
+
* whose allocation fails is retried until it lands. A customer who has paid is never
|
|
100
|
+
* left with a namespace that is still capped.
|
|
101
|
+
*
|
|
102
|
+
* @throws ValidationError on an unknown namespace, kind, plan or pack.
|
|
103
|
+
*/
|
|
104
|
+
async checkout(params) {
|
|
105
|
+
return this._http.request({
|
|
106
|
+
method: 'POST',
|
|
107
|
+
path: '/billing/checkout',
|
|
108
|
+
body: params,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Open the hosted "manage subscription / payment method / invoices" portal.
|
|
113
|
+
*
|
|
114
|
+
* Opens only this namespace's isolated Stripe customer. Resolve the namespace from
|
|
115
|
+
* your authenticated customer on your server; keep the admin/billing key there.
|
|
116
|
+
*
|
|
117
|
+
* ```ts
|
|
118
|
+
* const { url } = await client.billing.portal({ namespace: 'tenant-abc', returnUrl: 'https://your-app.com/billing' });
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @throws NotFoundError (`no_customer`) if this namespace has never checked out.
|
|
122
|
+
* @throws ConflictError (`billing_customer_conflict`) for shared legacy billing.
|
|
123
|
+
*/
|
|
124
|
+
async portal(params) {
|
|
125
|
+
if (!params?.namespace?.trim())
|
|
126
|
+
throw new TypeError('billing.portal requires a namespace');
|
|
127
|
+
return this._http.request({
|
|
128
|
+
method: 'POST',
|
|
129
|
+
path: '/billing/portal',
|
|
130
|
+
body: params,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/** Read this namespace's subscription, including a pending end-of-period cancellation. */
|
|
134
|
+
async subscription(namespace) {
|
|
135
|
+
return this._http.request({
|
|
136
|
+
method: 'GET', path: '/billing/subscription', query: { namespace },
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/** Stop renewal at the end of the paid period. Repeat calls are safe. */
|
|
140
|
+
async cancelSubscription(namespace) {
|
|
141
|
+
return this._http.request({
|
|
142
|
+
method: 'POST', path: '/billing/subscription/cancel', body: { namespace },
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/** Undo scheduled cancellation before the subscription ends; no charge is created. */
|
|
146
|
+
async resumeSubscription(namespace) {
|
|
147
|
+
return this._http.request({
|
|
148
|
+
method: 'POST', path: '/billing/subscription/resume', body: { namespace },
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Mode A: start a new allowance cycle without losing purchased credits.
|
|
153
|
+
* Supply the same periodEnd on retry. Mode-B subscriptions renew automatically.
|
|
154
|
+
*/
|
|
155
|
+
async resetQuota(namespace, params) {
|
|
156
|
+
return this._http.request({
|
|
157
|
+
method: 'POST', path: `/billing/policy/${encodeURIComponent(namespace)}/reset`, body: params,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Everything you need to render a namespace's billing state: tier, status, period and
|
|
162
|
+
* quota. This is the single call behind tier badges, usage bars and access gating.
|
|
163
|
+
*
|
|
164
|
+
* ```ts
|
|
165
|
+
* const ent = await client.billing.entitlement('tenant-abc');
|
|
166
|
+
* // ent.status → 'active' | 'past_due' | 'canceled' | 'credit_exhausted'
|
|
167
|
+
* // ent.quota → { limit, used, balance } ← limit INCLUDES purchased top-ups
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* `quota.limit === null` means uncapped.
|
|
171
|
+
*/
|
|
172
|
+
async entitlement(namespace) {
|
|
173
|
+
return this._http.request({
|
|
174
|
+
method: 'GET',
|
|
175
|
+
path: '/billing/entitlement',
|
|
176
|
+
query: { namespace },
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The one-shot "can this namespace do work right now?" check.
|
|
181
|
+
*
|
|
182
|
+
* ```ts
|
|
183
|
+
* const { blocking } = await client.billing.balance('tenant-abc');
|
|
184
|
+
* if (blocking) return showTopUpPrompt();
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* `blocking` is `true` when the namespace is suspended or out of credits. You do not
|
|
188
|
+
* have to enforce it yourself — Oblien already refuses creates, starts, resumes and
|
|
189
|
+
* wakes for a blocked namespace — but checking lets you show a useful message instead
|
|
190
|
+
* of surfacing an error.
|
|
191
|
+
*/
|
|
192
|
+
async balance(namespace) {
|
|
193
|
+
return this._http.request({
|
|
194
|
+
method: 'GET',
|
|
195
|
+
path: '/billing/balance',
|
|
196
|
+
query: { namespace },
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Read a namespace's allowance policy.
|
|
201
|
+
*
|
|
202
|
+
* ```ts
|
|
203
|
+
* const policy = await client.billing.policy('tenant-abc');
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
async policy(namespace) {
|
|
207
|
+
return this._http.request({
|
|
208
|
+
method: 'GET',
|
|
209
|
+
path: `/billing/policy/${encodeURIComponent(namespace)}`,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Set a namespace's budget directly — **Mode A**, for when you collect your own
|
|
214
|
+
* payment and just want Oblien to meter and enforce.
|
|
215
|
+
*
|
|
216
|
+
* ```ts
|
|
217
|
+
* await client.billing.setPolicy('tenant-abc', {
|
|
218
|
+
* quotaLimit: 5000, // included allowance for the cycle
|
|
219
|
+
* overdraft: 500, // may run this far past it before being BLOCKED
|
|
220
|
+
* suspendThreshold: 500, // ...and this far before being SUSPENDED
|
|
221
|
+
* onOverdraftAction: 'stop_workspaces',
|
|
222
|
+
* });
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* `overdraft` must be `<= suspendThreshold`, otherwise the request is rejected with
|
|
226
|
+
* `invalid_policy`. The reverse would wedge the namespace: it would stop accepting
|
|
227
|
+
* work before it was ever suspended or reset, so it could never recover.
|
|
228
|
+
*
|
|
229
|
+
* `quotaLimit: null` makes the namespace uncapped. Note that `purchasedCredits` is
|
|
230
|
+
* read-only here — only a {@link Billing.checkout} top-up moves it.
|
|
231
|
+
*
|
|
232
|
+
* @throws ValidationError (`invalid_policy`) on an inverted grace ladder.
|
|
233
|
+
*/
|
|
234
|
+
async setPolicy(namespace, params) {
|
|
235
|
+
return this._http.request({
|
|
236
|
+
method: 'PUT',
|
|
237
|
+
path: `/billing/policy/${encodeURIComponent(namespace)}`,
|
|
238
|
+
body: params,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Read the template policy applied to new namespaces.
|
|
243
|
+
*/
|
|
244
|
+
async defaults() {
|
|
245
|
+
return this._http.request({
|
|
246
|
+
method: 'GET',
|
|
247
|
+
path: '/billing/defaults',
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Set the template policy applied to every NEW namespace — so you configure the budget
|
|
252
|
+
* once instead of per tenant.
|
|
253
|
+
*
|
|
254
|
+
* ```ts
|
|
255
|
+
* await client.billing.setDefaults({
|
|
256
|
+
* quotaLimit: 1000,
|
|
257
|
+
* overdraft: 0,
|
|
258
|
+
* suspendThreshold: 0,
|
|
259
|
+
* autoApply: true,
|
|
260
|
+
* });
|
|
261
|
+
* ```
|
|
262
|
+
*
|
|
263
|
+
* Worth setting: a namespace with no ceiling and no default is **uncapped**, so it
|
|
264
|
+
* meters usage without ever blocking.
|
|
265
|
+
*
|
|
266
|
+
* Same `overdraft <= suspendThreshold` rule as {@link Billing.setPolicy}.
|
|
267
|
+
*/
|
|
268
|
+
async setDefaults(params) {
|
|
269
|
+
return this._http.request({
|
|
270
|
+
method: 'PUT',
|
|
271
|
+
path: '/billing/defaults',
|
|
272
|
+
body: params,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=billing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/desktop.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult } from '../output.js';
|
|
3
|
+
import { parseFlag, requireId } from './helpers.js';
|
|
4
|
+
export async function desktopCmd(args, flags) {
|
|
5
|
+
const action = args[0];
|
|
6
|
+
if (!action || action === '--help') {
|
|
7
|
+
console.log('Usage: oblien desktop <status|enable|disable|credentials|ssh|vnc> <workspace-id> [--port 5901]');
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!['status', 'enable', 'disable', 'credentials', 'ssh', 'vnc'].includes(action))
|
|
11
|
+
throw new Error('Unknown desktop action');
|
|
12
|
+
const id = requireId(args[1], `desktop ${action} <workspace-id>`);
|
|
13
|
+
const client = buildClient(flags);
|
|
14
|
+
if (action === 'ssh')
|
|
15
|
+
return printResult(await client.workspaces.desktop.sshConnection(id), flags.json);
|
|
16
|
+
const runtime = await client.workspaces.runtime(id);
|
|
17
|
+
if (action === 'status')
|
|
18
|
+
return printResult(await runtime.desktop.status(), flags.json);
|
|
19
|
+
if (action === 'enable')
|
|
20
|
+
return printResult(await runtime.desktop.enable(), flags.json);
|
|
21
|
+
if (action === 'disable')
|
|
22
|
+
return printResult(await runtime.desktop.disable(), flags.json);
|
|
23
|
+
if (action === 'credentials')
|
|
24
|
+
return printResult(await runtime.desktop.credentials(), flags.json);
|
|
25
|
+
const port = parseFlag(args.slice(2), '--port');
|
|
26
|
+
const tunnel = await runtime.desktop.tunnel({
|
|
27
|
+
port: port === undefined ? 5901 : Number(port),
|
|
28
|
+
onError: error => console.error(error.message),
|
|
29
|
+
});
|
|
30
|
+
printResult({ url: tunnel.url, host: tunnel.host, port: tunnel.port }, flags.json);
|
|
31
|
+
if (!flags.json)
|
|
32
|
+
console.log('Connect your VNC client to this local address. Keep this command running; Ctrl+C closes it.');
|
|
33
|
+
const close = () => {
|
|
34
|
+
process.removeListener('SIGINT', close);
|
|
35
|
+
process.removeListener('SIGTERM', close);
|
|
36
|
+
void tunnel.close().catch(() => { process.exitCode = 1; });
|
|
37
|
+
};
|
|
38
|
+
process.once('SIGINT', close);
|
|
39
|
+
process.once('SIGTERM', close);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=desktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../src/cli/commands/desktop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiElF"}
|
|
@@ -53,6 +53,8 @@ export async function workspacesCmd(args, flags) {
|
|
|
53
53
|
--mode <mode> permanent or temporary
|
|
54
54
|
--namespace <ns> Namespace
|
|
55
55
|
--ssh Enable SSH access on creation
|
|
56
|
+
--no-wait Return the ID while the workspace is creating
|
|
57
|
+
--idempotency-key <k> Reuse on a retry to avoid creating a second workspace
|
|
56
58
|
|
|
57
59
|
Examples:
|
|
58
60
|
oblien ws create --image node-20 --name my-app --cpus 2 --memory 2048
|
|
@@ -76,6 +78,11 @@ async function wsCreate(args, flags) {
|
|
|
76
78
|
const mode = parseFlag(args, '--mode');
|
|
77
79
|
const namespace = parseFlag(args, '--namespace');
|
|
78
80
|
const sshAccess = args.includes('--ssh');
|
|
81
|
+
if (args.includes('--no-wait'))
|
|
82
|
+
params.wait_ready = false;
|
|
83
|
+
const idempotencyKey = parseFlag(args, '--idempotency-key');
|
|
84
|
+
if (idempotencyKey)
|
|
85
|
+
params.idempotency_key = idempotencyKey;
|
|
79
86
|
if (image)
|
|
80
87
|
params.image = image;
|
|
81
88
|
if (name)
|
|
@@ -115,7 +122,8 @@ async function wsList(args, flags) {
|
|
|
115
122
|
const rows = res.workspaces.map(w => ({
|
|
116
123
|
id: w.id,
|
|
117
124
|
name: w.name ?? '-',
|
|
118
|
-
status: w.
|
|
125
|
+
status: w.provisioning?.state === 'failed' ? 'failed' : w.provisioning?.phase === 'deleting' ? 'deleting'
|
|
126
|
+
: ['queued', 'running'].includes(w.provisioning?.state || '') ? 'creating' : w.ready ? 'ready' : w.info?.status || w.status,
|
|
119
127
|
mode: w.mode ?? '-',
|
|
120
128
|
image: w.image,
|
|
121
129
|
created: w.created_at?.slice(0, 10) ?? '-',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/cli/commands/workspaces.ts"],"names":[],"mappings":"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"}
|