oblien 2.3.2 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/access.d.ts +79 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +42 -0
- package/dist/access.js.map +1 -0
- package/dist/billing.d.ts +19 -10
- package/dist/billing.d.ts.map +1 -1
- package/dist/billing.js +22 -9
- package/dist/billing.js.map +1 -1
- package/dist/cli/commands/desktop.d.ts.map +1 -1
- package/dist/cli/commands/desktop.js +6 -2
- package/dist/cli/commands/desktop.js.map +1 -1
- package/dist/cli/commands/lifecycle.d.ts.map +1 -1
- package/dist/cli/commands/lifecycle.js +22 -0
- package/dist/cli/commands/lifecycle.js.map +1 -1
- package/dist/cli/commands/scp.js +9 -2
- package/dist/cli/commands/scp.js.map +1 -1
- package/dist/cli/commands/ssh.d.ts.map +1 -1
- package/dist/cli/commands/ssh.js +12 -0
- package/dist/cli/commands/ssh.js.map +1 -1
- package/dist/cli/commands/workloads.d.ts.map +1 -1
- package/dist/cli/commands/workloads.js +26 -2
- package/dist/cli/commands/workloads.js.map +1 -1
- package/dist/cli/commands/workspaces.d.ts.map +1 -1
- package/dist/cli/commands/workspaces.js +11 -0
- package/dist/cli/commands/workspaces.js.map +1 -1
- package/dist/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -0
- package/dist/client.js.map +1 -1
- package/dist/disks.d.ts +49 -0
- package/dist/disks.d.ts.map +1 -0
- package/dist/disks.js +143 -0
- package/dist/disks.js.map +1 -0
- package/dist/http.d.ts +2 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +12 -0
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/namespace.d.ts +14 -11
- package/dist/namespace.d.ts.map +1 -1
- package/dist/namespace.js +10 -9
- package/dist/namespace.js.map +1 -1
- package/dist/resources/desktop.d.ts +27 -1
- package/dist/resources/desktop.d.ts.map +1 -1
- package/dist/resources/desktop.js +22 -1
- package/dist/resources/desktop.js.map +1 -1
- package/dist/resources/images.d.ts +70 -1
- package/dist/resources/images.d.ts.map +1 -1
- package/dist/resources/images.js.map +1 -1
- package/dist/resources/lifecycle.d.ts +11 -2
- package/dist/resources/lifecycle.d.ts.map +1 -1
- package/dist/resources/lifecycle.js +7 -2
- package/dist/resources/lifecycle.js.map +1 -1
- package/dist/resources/ssh.d.ts +3 -0
- package/dist/resources/ssh.d.ts.map +1 -1
- package/dist/resources/ssh.js +4 -0
- package/dist/resources/ssh.js.map +1 -1
- package/dist/resources/workloads.d.ts +8 -2
- package/dist/resources/workloads.d.ts.map +1 -1
- package/dist/resources/workloads.js +13 -2
- package/dist/resources/workloads.js.map +1 -1
- package/dist/runtime/terminal.d.ts +10 -0
- package/dist/runtime/terminal.d.ts.map +1 -1
- package/dist/runtime/terminal.js +19 -0
- package/dist/runtime/terminal.js.map +1 -1
- package/dist/runtime/ws.d.ts.map +1 -1
- package/dist/runtime/ws.js +6 -2
- package/dist/runtime/ws.js.map +1 -1
- package/dist/types/access.d.ts +65 -0
- package/dist/types/access.d.ts.map +1 -0
- package/dist/types/access.js +2 -0
- package/dist/types/access.js.map +1 -0
- package/dist/types/billing.d.ts +96 -10
- package/dist/types/billing.d.ts.map +1 -1
- package/dist/types/billing.js +0 -8
- package/dist/types/billing.js.map +1 -1
- package/dist/types/client.d.ts +4 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/disks.d.ts +153 -0
- package/dist/types/disks.d.ts.map +1 -0
- package/dist/types/disks.js +2 -0
- package/dist/types/disks.js.map +1 -0
- package/dist/types/index.d.ts +7 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/namespace.d.ts +31 -3
- package/dist/types/namespace.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +3 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/workspace-resources.d.ts +33 -0
- package/dist/types/workspace-resources.d.ts.map +1 -1
- package/dist/types/workspace.d.ts +41 -3
- package/dist/types/workspace.d.ts.map +1 -1
- package/dist/workspace-handle.d.ts +2 -0
- package/dist/workspace-handle.d.ts.map +1 -1
- package/dist/workspace-handle.js +2 -0
- package/dist/workspace-handle.js.map +1 -1
- package/dist/workspace.d.ts +2 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +23 -7
- package/dist/workspace.js.map +1 -1
- package/docs/billing.md +241 -5
- package/docs/desktop.md +32 -0
- package/docs/namespaces.md +62 -1
- package/docs/on-demand.md +43 -0
- package/docs/runtime.md +2 -0
- package/docs/webhooks.md +42 -0
- package/docs/workspace-limit-report.md +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,6 +51,7 @@ The client wraps every part of the platform. Each feature has a deep-dive page i
|
|
|
51
51
|
| Feature | Accessor | What it does | Guide |
|
|
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
|
+
| **Sleep and wake** | `ws.lifecycle.setIdle(...)` | Save idle VM memory to disk; resume through public port URLs and custom domains | [docs/on-demand](./docs/on-demand.md) |
|
|
54
55
|
| **Runtime** | `client.workspaces.runtime(id)` | Data plane: files, exec, terminal, search, watchers, WebSocket | [docs/runtime](./docs/runtime.md) |
|
|
55
56
|
| **Desktop** | `runtime.desktop` | Live access, browser viewer and native VNC tunnel through the gateway | [docs/desktop](./docs/desktop.md) |
|
|
56
57
|
| **Pages** | `client.pages` | Deploy static files to the edge CDN with automatic TLS | [docs/pages](./docs/pages.md) |
|
package/dist/access.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { Oblien } from './client.js';
|
|
2
|
+
import type { ApiResponse } from './types/common.js';
|
|
3
|
+
import type { AccessResource, AccessRole, AccessibleAccount, AccessInvitation, AccessMember, SharedWorkspaceList } from './types/access.js';
|
|
4
|
+
/** Human collaboration uses personal sessions; derived scoped tokens use the ordinary workspace APIs. */
|
|
5
|
+
export declare class Access {
|
|
6
|
+
private readonly client;
|
|
7
|
+
constructor(client: Oblien);
|
|
8
|
+
accounts(): Promise<{
|
|
9
|
+
success: true;
|
|
10
|
+
accounts: AccessibleAccount[];
|
|
11
|
+
}>;
|
|
12
|
+
sharedWorkspaces(params?: {
|
|
13
|
+
before?: string;
|
|
14
|
+
limit?: number;
|
|
15
|
+
}): Promise<SharedWorkspaceList>;
|
|
16
|
+
invitations(): Promise<{
|
|
17
|
+
success: true;
|
|
18
|
+
invitations: AccessInvitation[];
|
|
19
|
+
}>;
|
|
20
|
+
invite(params: AccessResource & {
|
|
21
|
+
email: string;
|
|
22
|
+
role?: AccessRole;
|
|
23
|
+
expires_at?: string;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
success: true;
|
|
26
|
+
invitation: {
|
|
27
|
+
id: string;
|
|
28
|
+
email: string;
|
|
29
|
+
role: AccessRole;
|
|
30
|
+
expires_at: string;
|
|
31
|
+
};
|
|
32
|
+
invitation_url: string;
|
|
33
|
+
}>;
|
|
34
|
+
accept(params: {
|
|
35
|
+
id: string;
|
|
36
|
+
} | {
|
|
37
|
+
token: string;
|
|
38
|
+
}): Promise<ApiResponse>;
|
|
39
|
+
revokeInvitation(id: string): Promise<ApiResponse>;
|
|
40
|
+
members(resource: AccessResource): Promise<{
|
|
41
|
+
success: true;
|
|
42
|
+
owner: AccessibleAccount;
|
|
43
|
+
members: AccessMember[];
|
|
44
|
+
invitations: AccessInvitation[];
|
|
45
|
+
}>;
|
|
46
|
+
updateMember(id: string, params: {
|
|
47
|
+
role: AccessRole;
|
|
48
|
+
version?: string;
|
|
49
|
+
expires_at?: string | null;
|
|
50
|
+
}): Promise<ApiResponse>;
|
|
51
|
+
removeMember(id: string, version?: string): Promise<ApiResponse>;
|
|
52
|
+
/** Maximum one hour; cannot exceed the issuer's current role or scope. Logout/revocation invalidates it. */
|
|
53
|
+
issueToken(params: AccessResource & {
|
|
54
|
+
role?: AccessRole;
|
|
55
|
+
ttl?: number;
|
|
56
|
+
label?: string;
|
|
57
|
+
}): Promise<{
|
|
58
|
+
success: true;
|
|
59
|
+
token: string;
|
|
60
|
+
expiresAt: string;
|
|
61
|
+
ttl: number;
|
|
62
|
+
scope: string;
|
|
63
|
+
permissions: string[];
|
|
64
|
+
}>;
|
|
65
|
+
audit(resource: AccessResource & {
|
|
66
|
+
before?: string;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
success: true;
|
|
69
|
+
events: {
|
|
70
|
+
id: string;
|
|
71
|
+
action: string;
|
|
72
|
+
actor_id: string;
|
|
73
|
+
actor_name: string;
|
|
74
|
+
created_at: string;
|
|
75
|
+
}[];
|
|
76
|
+
next_cursor: string | null;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE5I,yGAAyG;AACzG,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAC3C,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC;IAGrE,gBAAgB,CAAC,MAAM,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAGhG,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAG1E,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,UAAU,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAG/N,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAGxE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAGlD,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAC;QAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAGjJ,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAG1H,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAGhE,4GAA4G;IAC5G,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG;QAAE,IAAI,CAAC,EAAE,UAAU,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAGzM,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAGlN"}
|
package/dist/access.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Human collaboration uses personal sessions; derived scoped tokens use the ordinary workspace APIs. */
|
|
2
|
+
export class Access {
|
|
3
|
+
client;
|
|
4
|
+
constructor(client) {
|
|
5
|
+
this.client = client;
|
|
6
|
+
}
|
|
7
|
+
accounts() {
|
|
8
|
+
return this.client._http.request({ method: 'GET', path: '/access/accounts' });
|
|
9
|
+
}
|
|
10
|
+
sharedWorkspaces(params = {}) {
|
|
11
|
+
return this.client._http.request({ method: 'GET', path: '/access/shared-workspaces', query: { ...params } });
|
|
12
|
+
}
|
|
13
|
+
invitations() {
|
|
14
|
+
return this.client._http.request({ method: 'GET', path: '/access/invitations' });
|
|
15
|
+
}
|
|
16
|
+
invite(params) {
|
|
17
|
+
return this.client._http.request({ method: 'POST', path: '/access/invitations', body: params });
|
|
18
|
+
}
|
|
19
|
+
accept(params) {
|
|
20
|
+
return this.client._http.request({ method: 'POST', path: '/access/invitations/accept', body: params });
|
|
21
|
+
}
|
|
22
|
+
revokeInvitation(id) {
|
|
23
|
+
return this.client._http.request({ method: 'DELETE', path: `/access/invitations/${encodeURIComponent(id)}` });
|
|
24
|
+
}
|
|
25
|
+
members(resource) {
|
|
26
|
+
return this.client._http.request({ method: 'GET', path: '/access/members', query: { ...resource } });
|
|
27
|
+
}
|
|
28
|
+
updateMember(id, params) {
|
|
29
|
+
return this.client._http.request({ method: 'PATCH', path: `/access/members/${encodeURIComponent(id)}`, body: params });
|
|
30
|
+
}
|
|
31
|
+
removeMember(id, version) {
|
|
32
|
+
return this.client._http.request({ method: 'DELETE', path: `/access/members/${encodeURIComponent(id)}`, body: { version } });
|
|
33
|
+
}
|
|
34
|
+
/** Maximum one hour; cannot exceed the issuer's current role or scope. Logout/revocation invalidates it. */
|
|
35
|
+
issueToken(params) {
|
|
36
|
+
return this.client._http.request({ method: 'POST', path: '/access/tokens', body: params });
|
|
37
|
+
}
|
|
38
|
+
audit(resource) {
|
|
39
|
+
return this.client._http.request({ method: 'GET', path: '/access/audit', query: { ...resource } });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.js","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAIA,yGAAyG;AACzG,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAC/C,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,gBAAgB,CAAC,SAA8C,EAAE;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,CAAC,MAAkF;QACvF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,CAAC,MAA0C;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,gBAAgB,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,CAAC,QAAwB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,YAAY,CAAC,EAAU,EAAE,MAA0E;QACjG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzH,CAAC;IACD,YAAY,CAAC,EAAU,EAAE,OAAgB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/H,CAAC;IACD,4GAA4G;IAC5G,UAAU,CAAC,MAA4E;QACrF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,KAAK,CAAC,QAA8C;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;CACF"}
|
package/dist/billing.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
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';
|
|
2
|
+
import type { BillingBalance, BillingCatalog, BillingDefaults, BillingDefaultsParams, BillingPolicy, BillingPolicyParams, CheckoutParams, CheckoutResponse, BillingCheckoutResponse, Entitlement, PortalParams, PortalResponse, BillingSubscriptionResponse, ResetQuotaParams, ResetQuotaResponse } from './types/billing.js';
|
|
3
3
|
/**
|
|
4
4
|
* Billing — namespace-bound subscriptions, credit top-ups, and entitlement.
|
|
5
5
|
*
|
|
@@ -8,7 +8,7 @@ import type { BillingBalance, BillingCatalog, BillingDefaults, BillingDefaultsPa
|
|
|
8
8
|
* math.
|
|
9
9
|
*
|
|
10
10
|
* **The namespace is the unit of billing.** Every subscription, quota, entitlement and
|
|
11
|
-
* suspension is per-namespace
|
|
11
|
+
* suspension is per-namespace. The owner's wallet and capacity remain shared. That is what
|
|
12
12
|
* makes this usable for multi-tenant products: give each of your customers a namespace
|
|
13
13
|
* and they are billed independently.
|
|
14
14
|
*
|
|
@@ -70,7 +70,7 @@ export declare class Billing {
|
|
|
70
70
|
* Two kinds:
|
|
71
71
|
*
|
|
72
72
|
* - `kind: 'topup'` + `packId` — adds the pack's credits to that namespace's ceiling.
|
|
73
|
-
*
|
|
73
|
+
* Unused purchased credits survive renewal and stack, so this unblocks a namespace that
|
|
74
74
|
* ran out mid-cycle without changing its plan.
|
|
75
75
|
* - `kind: 'subscription'` + `planTierId` — puts the namespace on a recurring tier.
|
|
76
76
|
* Renewals reset usage and re-assert the ceiling automatically.
|
|
@@ -87,18 +87,27 @@ export declare class Billing {
|
|
|
87
87
|
* ```
|
|
88
88
|
*
|
|
89
89
|
* On `successUrl` / `cancelUrl`: both are optional, and their HOST must be on the
|
|
90
|
-
* platform's redirect allowlist
|
|
91
|
-
*
|
|
92
|
-
* `url` is not proof your URL was accepted. Have the operator allowlist your host via
|
|
93
|
-
* `REDIRECT_ALLOWED_HOSTS`.
|
|
90
|
+
* platform's redirect allowlist and the scheme must be HTTPS. An unapproved host
|
|
91
|
+
* returns `billing_redirect_not_allowed`. Configure `REDIRECT_ALLOWED_HOSTS` first.
|
|
94
92
|
*
|
|
95
93
|
* Fulfilment is idempotent: a webhook redelivery never credits twice, and a delivery
|
|
96
|
-
* whose allocation fails
|
|
97
|
-
*
|
|
94
|
+
* whose allocation fails remains retryable by Stripe. Reconcile pending payments
|
|
95
|
+
* with checkoutStatus/entitlement; a browser redirect is not proof of fulfillment.
|
|
96
|
+
*
|
|
97
|
+
* For reseller pricing, send `offer` instead of planTierId/packId. A $10 offer with
|
|
98
|
+
* `credits: 100` funds 1000 wallet credits at the current standard rate and grants
|
|
99
|
+
* only 100 namespace credits. The offer name/description appears in checkout.
|
|
100
|
+
* Oblien-admin promotions reduce the first payment while preserving the full
|
|
101
|
+
* credits and namespace allowance; Oblien funds and records the discount.
|
|
102
|
+
* Set `allowPromotionCodes: true` to enable the hosted promotion entry step.
|
|
103
|
+
* Omit it or set false to keep direct Stripe checkout without promotion entry.
|
|
104
|
+
* Always redirect to the returned URL and treat checkoutId as opaque.
|
|
98
105
|
*
|
|
99
106
|
* @throws ValidationError on an unknown namespace, kind, plan or pack.
|
|
100
107
|
*/
|
|
101
108
|
checkout(params: CheckoutParams): Promise<CheckoutResponse>;
|
|
109
|
+
/** Inspect a reseller checkout bound to this owner and namespace, including net fulfillment/refund amounts. */
|
|
110
|
+
checkoutStatus(namespace: string, checkoutId: string): Promise<BillingCheckoutResponse>;
|
|
102
111
|
/**
|
|
103
112
|
* Open the hosted "manage subscription / payment method / invoices" portal.
|
|
104
113
|
*
|
|
@@ -120,7 +129,7 @@ export declare class Billing {
|
|
|
120
129
|
/** Undo scheduled cancellation before the subscription ends; no charge is created. */
|
|
121
130
|
resumeSubscription(namespace: string): Promise<BillingSubscriptionResponse>;
|
|
122
131
|
/**
|
|
123
|
-
* Mode A: start a new allowance cycle
|
|
132
|
+
* Mode A: start a new allowance cycle, carrying forward unused purchased credits.
|
|
124
133
|
* Supply the same periodEnd on retry. Mode-B subscriptions renew automatically.
|
|
125
134
|
*/
|
|
126
135
|
resetQuota(namespace: string, params: ResetQuotaParams): Promise<ResetQuotaResponse>;
|
package/dist/billing.d.ts.map
CHANGED
|
@@ -1 +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
|
|
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,uBAAuB,EACvB,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQjE,+GAA+G;IACzG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAM7F;;;;;;;;;;;;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
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* math.
|
|
7
7
|
*
|
|
8
8
|
* **The namespace is the unit of billing.** Every subscription, quota, entitlement and
|
|
9
|
-
* suspension is per-namespace
|
|
9
|
+
* suspension is per-namespace. The owner's wallet and capacity remain shared. That is what
|
|
10
10
|
* makes this usable for multi-tenant products: give each of your customers a namespace
|
|
11
11
|
* and they are billed independently.
|
|
12
12
|
*
|
|
@@ -73,7 +73,7 @@ export class Billing {
|
|
|
73
73
|
* Two kinds:
|
|
74
74
|
*
|
|
75
75
|
* - `kind: 'topup'` + `packId` — adds the pack's credits to that namespace's ceiling.
|
|
76
|
-
*
|
|
76
|
+
* Unused purchased credits survive renewal and stack, so this unblocks a namespace that
|
|
77
77
|
* ran out mid-cycle without changing its plan.
|
|
78
78
|
* - `kind: 'subscription'` + `planTierId` — puts the namespace on a recurring tier.
|
|
79
79
|
* Renewals reset usage and re-assert the ceiling automatically.
|
|
@@ -90,14 +90,21 @@ export class Billing {
|
|
|
90
90
|
* ```
|
|
91
91
|
*
|
|
92
92
|
* On `successUrl` / `cancelUrl`: both are optional, and their HOST must be on the
|
|
93
|
-
* platform's redirect allowlist
|
|
94
|
-
*
|
|
95
|
-
* `url` is not proof your URL was accepted. Have the operator allowlist your host via
|
|
96
|
-
* `REDIRECT_ALLOWED_HOSTS`.
|
|
93
|
+
* platform's redirect allowlist and the scheme must be HTTPS. An unapproved host
|
|
94
|
+
* returns `billing_redirect_not_allowed`. Configure `REDIRECT_ALLOWED_HOSTS` first.
|
|
97
95
|
*
|
|
98
96
|
* Fulfilment is idempotent: a webhook redelivery never credits twice, and a delivery
|
|
99
|
-
* whose allocation fails
|
|
100
|
-
*
|
|
97
|
+
* whose allocation fails remains retryable by Stripe. Reconcile pending payments
|
|
98
|
+
* with checkoutStatus/entitlement; a browser redirect is not proof of fulfillment.
|
|
99
|
+
*
|
|
100
|
+
* For reseller pricing, send `offer` instead of planTierId/packId. A $10 offer with
|
|
101
|
+
* `credits: 100` funds 1000 wallet credits at the current standard rate and grants
|
|
102
|
+
* only 100 namespace credits. The offer name/description appears in checkout.
|
|
103
|
+
* Oblien-admin promotions reduce the first payment while preserving the full
|
|
104
|
+
* credits and namespace allowance; Oblien funds and records the discount.
|
|
105
|
+
* Set `allowPromotionCodes: true` to enable the hosted promotion entry step.
|
|
106
|
+
* Omit it or set false to keep direct Stripe checkout without promotion entry.
|
|
107
|
+
* Always redirect to the returned URL and treat checkoutId as opaque.
|
|
101
108
|
*
|
|
102
109
|
* @throws ValidationError on an unknown namespace, kind, plan or pack.
|
|
103
110
|
*/
|
|
@@ -108,6 +115,12 @@ export class Billing {
|
|
|
108
115
|
body: params,
|
|
109
116
|
});
|
|
110
117
|
}
|
|
118
|
+
/** Inspect a reseller checkout bound to this owner and namespace, including net fulfillment/refund amounts. */
|
|
119
|
+
async checkoutStatus(namespace, checkoutId) {
|
|
120
|
+
return this._http.request({
|
|
121
|
+
method: 'GET', path: `/billing/checkout/${encodeURIComponent(checkoutId)}`, query: { namespace },
|
|
122
|
+
});
|
|
123
|
+
}
|
|
111
124
|
/**
|
|
112
125
|
* Open the hosted "manage subscription / payment method / invoices" portal.
|
|
113
126
|
*
|
|
@@ -149,7 +162,7 @@ export class Billing {
|
|
|
149
162
|
});
|
|
150
163
|
}
|
|
151
164
|
/**
|
|
152
|
-
* Mode A: start a new allowance cycle
|
|
165
|
+
* Mode A: start a new allowance cycle, carrying forward unused purchased credits.
|
|
153
166
|
* Supply the same periodEnd on retry. Mode-B subscriptions renew automatically.
|
|
154
167
|
*/
|
|
155
168
|
async resetQuota(namespace, params) {
|
package/dist/billing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,CA+B/E"}
|
|
@@ -4,13 +4,17 @@ import { parseFlag, requireId } from './helpers.js';
|
|
|
4
4
|
export async function desktopCmd(args, flags) {
|
|
5
5
|
const action = args[0];
|
|
6
6
|
if (!action || action === '--help') {
|
|
7
|
-
console.log('Usage: oblien desktop <status|enable|disable|credentials|ssh|vnc> <workspace-id> [--port 5901]');
|
|
7
|
+
console.log('Usage: oblien desktop <status|enable|disable|install|installation|credentials|ssh|vnc> <workspace-id> [--port 5901]');
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
|
-
if (!['status', 'enable', 'disable', 'credentials', 'ssh', 'vnc'].includes(action))
|
|
10
|
+
if (!['status', 'enable', 'disable', 'install', 'installation', 'credentials', 'ssh', 'vnc'].includes(action))
|
|
11
11
|
throw new Error('Unknown desktop action');
|
|
12
12
|
const id = requireId(args[1], `desktop ${action} <workspace-id>`);
|
|
13
13
|
const client = buildClient(flags);
|
|
14
|
+
if (action === 'install')
|
|
15
|
+
return printResult(await client.workspaces.desktop.install(id), flags.json);
|
|
16
|
+
if (action === 'installation')
|
|
17
|
+
return printResult(await client.workspaces.desktop.installation(id), flags.json);
|
|
14
18
|
if (action === 'ssh')
|
|
15
19
|
return printResult(await client.workspaces.desktop.sshConnection(id), flags.json);
|
|
16
20
|
const runtime = await client.workspaces.runtime(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../src/cli/commands/desktop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc,EAAE,KAAe;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,
|
|
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":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCjF"}
|
|
@@ -8,6 +8,7 @@ export async function lifecycleCmd(args, flags) {
|
|
|
8
8
|
case 'make-permanent': return lcMakePermanent(args[1], flags);
|
|
9
9
|
case 'make-temporary': return lcMakeTemporary(args[1], args.slice(2), flags);
|
|
10
10
|
case 'update-ttl': return lcUpdateTtl(args[1], args.slice(2), flags);
|
|
11
|
+
case 'idle': return lcIdle(args[1], args.slice(2), flags);
|
|
11
12
|
case 'destroy': return lcDestroy(args[1], flags);
|
|
12
13
|
default:
|
|
13
14
|
console.log(`
|
|
@@ -18,6 +19,8 @@ export async function lifecycleCmd(args, flags) {
|
|
|
18
19
|
oblien lifecycle make-permanent <ws-id> Set permanent mode
|
|
19
20
|
oblien lifecycle make-temporary <ws-id> [flags] Set temporary mode
|
|
20
21
|
oblien lifecycle update-ttl <ws-id> [flags] Update TTL
|
|
22
|
+
oblien lifecycle idle <ws-id> --after 15m Sleep when idle; published URLs wake it
|
|
23
|
+
oblien lifecycle idle <ws-id> --disable Disable automatic sleep
|
|
21
24
|
oblien lifecycle destroy <ws-id> Destroy workspace
|
|
22
25
|
|
|
23
26
|
Temporary mode flags:
|
|
@@ -25,6 +28,9 @@ export async function lifecycleCmd(args, flags) {
|
|
|
25
28
|
--ttl-action <action> Action on TTL expiry: stop, pause, suspend, or remove (default: stop)
|
|
26
29
|
|
|
27
30
|
Examples:
|
|
31
|
+
oblien lifecycle idle ws_abc123 --after 15m
|
|
32
|
+
oblien lifecycle idle ws_abc123 --after 15m --stop-after 72h
|
|
33
|
+
oblien lifecycle idle ws_abc123 --disable
|
|
28
34
|
oblien lifecycle get ws_abc123
|
|
29
35
|
oblien lifecycle make-temporary ws_abc123 --ttl 3600
|
|
30
36
|
oblien lifecycle make-temporary ws_abc123 --ttl 1h --ttl-action pause
|
|
@@ -39,6 +45,22 @@ async function lcGet(id, flags) {
|
|
|
39
45
|
const res = await client.workspaces.lifecycle.get(wsId);
|
|
40
46
|
printResult(res, flags.json);
|
|
41
47
|
}
|
|
48
|
+
async function lcIdle(id, args, flags) {
|
|
49
|
+
const wsId = requireId(id, 'lifecycle idle <workspace-id> --after 15m | --disable');
|
|
50
|
+
const after = parseFlag(args, '--after');
|
|
51
|
+
const stopAfter = parseFlag(args, '--stop-after');
|
|
52
|
+
const disabled = args.includes('--disable');
|
|
53
|
+
if ((!disabled && !after) || (disabled && (after || stopAfter))) {
|
|
54
|
+
throw new Error('Choose --after <duration> (minimum 2m) or --disable');
|
|
55
|
+
}
|
|
56
|
+
const result = await buildClient(flags).workspaces.lifecycle.setIdle(wsId, disabled ? null : {
|
|
57
|
+
suspend_after: after, ...(stopAfter ? { stop_after: stopAfter } : {}),
|
|
58
|
+
});
|
|
59
|
+
if (flags.json)
|
|
60
|
+
printResult(result, true);
|
|
61
|
+
else
|
|
62
|
+
printSuccess(disabled ? `Disabled automatic sleep for ${wsId}` : `Sleep ${wsId} after ${after} without requests; published URLs wake it`);
|
|
63
|
+
}
|
|
42
64
|
async function lcMakePermanent(id, flags) {
|
|
43
65
|
const wsId = requireId(id, 'make-permanent');
|
|
44
66
|
const client = buildClient(flags);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,KAAe;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK,CAAC,CAAc,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,KAAK,gBAAgB,CAAC,CAAG,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,KAAK,gBAAgB,CAAC,CAAG,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/E,KAAK,YAAY,CAAC,CAAO,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3E,KAAK,SAAS,CAAC,CAAU,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1D;YACE,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/commands/scp.js
CHANGED
|
@@ -42,6 +42,13 @@ export async function scpCmd(args, flags) {
|
|
|
42
42
|
async function ensureSshConnection(wsId, flags) {
|
|
43
43
|
const client = buildClient(flags);
|
|
44
44
|
let status = await client.workspaces.ssh.status(wsId);
|
|
45
|
+
if (status.requires_account_access) {
|
|
46
|
+
const { ssh, expires_at } = await client.workspaces.ssh.connection(wsId);
|
|
47
|
+
console.error(`Gateway fingerprint: ${ssh.host_key_fingerprint}`);
|
|
48
|
+
console.error(`Temporary connection password (expires ${expires_at}): ${ssh.password}`);
|
|
49
|
+
console.error('Paste this password when SCP asks.');
|
|
50
|
+
return { user: ssh.username, host: ssh.host, bastion: '', command: '', scp_upload: '', scp_download: '' };
|
|
51
|
+
}
|
|
45
52
|
if (!status.ssh_enabled) {
|
|
46
53
|
console.error('SSH is not enabled. Enabling...');
|
|
47
54
|
const res = await client.workspaces.ssh.enable(wsId);
|
|
@@ -77,7 +84,7 @@ async function scpPush(wsId, args, flags) {
|
|
|
77
84
|
const conn = await ensureSshConnection(id, flags);
|
|
78
85
|
// Build: scp -o 'ProxyJump root@bastion' -r <paths...> root@host:<dest>
|
|
79
86
|
const scpArgs = [
|
|
80
|
-
'-o', `ProxyJump ${conn.user}@${conn.bastion}
|
|
87
|
+
...(conn.bastion ? ['-o', `ProxyJump ${conn.user}@${conn.bastion}`] : []),
|
|
81
88
|
'-r',
|
|
82
89
|
...localPaths,
|
|
83
90
|
`${conn.user}@${conn.host}:${dest}`,
|
|
@@ -106,7 +113,7 @@ async function scpPull(wsId, args, flags) {
|
|
|
106
113
|
// Build: scp -o 'ProxyJump root@bastion' -r root@host:<path1> root@host:<path2> <local>
|
|
107
114
|
const remoteArgs = remotePaths.map(p => `${conn.user}@${conn.host}:${p}`);
|
|
108
115
|
const scpArgs = [
|
|
109
|
-
'-o', `ProxyJump ${conn.user}@${conn.bastion}
|
|
116
|
+
...(conn.bastion ? ['-o', `ProxyJump ${conn.user}@${conn.bastion}`] : []),
|
|
110
117
|
'-r',
|
|
111
118
|
...remoteArgs,
|
|
112
119
|
localDest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scp.js","sourceRoot":"","sources":["../../../src/cli/commands/scp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAItC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,KAAe;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC,CAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/D;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,KAAe;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scp.js","sourceRoot":"","sources":["../../../src/cli/commands/scp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC3E"}
|
package/dist/cli/commands/ssh.js
CHANGED
|
@@ -7,6 +7,7 @@ export async function sshCmd(args, flags) {
|
|
|
7
7
|
const sub = args[0];
|
|
8
8
|
switch (sub) {
|
|
9
9
|
case 'connect': return sshConnect(args[1], flags);
|
|
10
|
+
case 'connection': return printResult(await buildClient(flags).workspaces.ssh.connection(requireId(args[1], 'ssh connection <workspace>')), flags.json);
|
|
10
11
|
case 'status': return sshStatus(args[1], flags);
|
|
11
12
|
case 'enable': return sshEnable(args[1], flags);
|
|
12
13
|
case 'disable': return sshDisable(args[1], flags);
|
|
@@ -18,6 +19,7 @@ export async function sshCmd(args, flags) {
|
|
|
18
19
|
|
|
19
20
|
Usage:
|
|
20
21
|
oblien ssh connect <ws> [--key] Connect via SSH
|
|
22
|
+
oblien ssh connection <ws> Get a temporary identity-bound connection
|
|
21
23
|
oblien ssh status <ws> Check SSH status
|
|
22
24
|
oblien ssh enable <ws> Enable SSH
|
|
23
25
|
oblien ssh disable <ws> Disable SSH
|
|
@@ -44,6 +46,16 @@ async function sshConnect(id, flags) {
|
|
|
44
46
|
const wsId = requireId(id, 'ssh connect <workspace>');
|
|
45
47
|
const client = buildClient(flags);
|
|
46
48
|
let status = await client.workspaces.ssh.status(wsId);
|
|
49
|
+
if (status.requires_account_access) {
|
|
50
|
+
const { ssh, expires_at } = await client.workspaces.ssh.connection(wsId);
|
|
51
|
+
console.error(`Gateway fingerprint: ${ssh.host_key_fingerprint}`);
|
|
52
|
+
console.error(`Temporary connection password (expires ${expires_at}): ${ssh.password}`);
|
|
53
|
+
console.error('Paste this password when SSH asks. This connection uses your own account permissions.');
|
|
54
|
+
const child = spawn('ssh', ['-p', String(ssh.port), '-o', 'PreferredAuthentications=keyboard-interactive,password', `${ssh.username}@${ssh.host}`], { stdio: 'inherit' });
|
|
55
|
+
child.on('close', code => { process.exitCode = code ?? 0; });
|
|
56
|
+
child.on('error', error => { console.error(error.message); process.exitCode = 1; });
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
47
59
|
// ── Passwordless flow ──────────────────────────────────────────────
|
|
48
60
|
if (flags.passwordless) {
|
|
49
61
|
// Ensure SSH is enabled
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIjE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,KAAe;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC,CAAO,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,KAAK,QAAQ,CAAC,CAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,KAAK,QAAQ,CAAC,CAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,KAAK,SAAS,CAAC,CAAO,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,KAAK,cAAc,CAAC,CAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3E,KAAK,SAAS,CAAC,CAAO,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtE;YACE,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../../src/cli/commands/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workloads.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/workloads.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"workloads.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/workloads.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDjF"}
|
|
@@ -42,6 +42,13 @@ export async function workloadsCmd(args, flags) {
|
|
|
42
42
|
--cmd <command> Command to run
|
|
43
43
|
--port <port> Exposed port
|
|
44
44
|
--env <KEY=VAL,...> Environment variables
|
|
45
|
+
--max-log-size-mb <n> MiB per log file, 1–64 (two files retained)
|
|
46
|
+
--log-retention-hours <n> Upper log age, 1–720 hours
|
|
47
|
+
|
|
48
|
+
Log flags:
|
|
49
|
+
--stream Follow live output
|
|
50
|
+
--clear Delete stored logs without stopping the workload
|
|
51
|
+
--config Show applied retention and stored size
|
|
45
52
|
|
|
46
53
|
Examples:
|
|
47
54
|
oblien workloads create ws_abc123 --name web --image nginx --port 80
|
|
@@ -60,6 +67,12 @@ async function wlCreate(wsIdRaw, args, flags) {
|
|
|
60
67
|
const cmd = parseFlag(args, '--cmd');
|
|
61
68
|
const port = parseFlag(args, '--port');
|
|
62
69
|
const env = parseFlag(args, '--env');
|
|
70
|
+
const logSize = parseFlag(args, '--max-log-size-mb');
|
|
71
|
+
const logHours = parseFlag(args, '--log-retention-hours');
|
|
72
|
+
if (logSize !== undefined)
|
|
73
|
+
params.max_log_size_mb = Number(logSize);
|
|
74
|
+
if (logHours !== undefined)
|
|
75
|
+
params.log_retention_hours = Number(logHours);
|
|
63
76
|
if (name)
|
|
64
77
|
params.name = name;
|
|
65
78
|
if (image)
|
|
@@ -118,7 +131,8 @@ async function wlUpdate(wsIdRaw, wlIdRaw, args, flags) {
|
|
|
118
131
|
for (let i = 0; i < args.length; i++) {
|
|
119
132
|
if (args[i].startsWith('--') && i + 1 < args.length) {
|
|
120
133
|
const key = args[i].slice(2).replace(/-/g, '_');
|
|
121
|
-
|
|
134
|
+
const value = args[++i];
|
|
135
|
+
params[key] = ['max_log_size_mb', 'log_retention_hours'].includes(key) ? Number(value) : value;
|
|
122
136
|
}
|
|
123
137
|
}
|
|
124
138
|
const res = await client.workspaces.workloads.update(wsId, wlId, params);
|
|
@@ -132,7 +146,8 @@ async function wlPatch(wsIdRaw, wlIdRaw, args, flags) {
|
|
|
132
146
|
for (let i = 0; i < args.length; i++) {
|
|
133
147
|
if (args[i].startsWith('--') && i + 1 < args.length) {
|
|
134
148
|
const key = args[i].slice(2).replace(/-/g, '_');
|
|
135
|
-
|
|
149
|
+
const value = args[++i];
|
|
150
|
+
params[key] = ['max_log_size_mb', 'log_retention_hours'].includes(key) ? Number(value) : value;
|
|
136
151
|
}
|
|
137
152
|
}
|
|
138
153
|
const res = await client.workspaces.workloads.patch(wsId, wlId, params);
|
|
@@ -179,6 +194,15 @@ async function wlLogs(wsIdRaw, wlIdRaw, args, flags) {
|
|
|
179
194
|
const wsId = requireId(wsIdRaw, 'workloads logs <workspace-id>');
|
|
180
195
|
const wlId = requireId(wlIdRaw, 'workloads logs <workspace-id> <workload-id>');
|
|
181
196
|
const client = buildClient(flags);
|
|
197
|
+
if (args.includes('--clear')) {
|
|
198
|
+
await client.workspaces.workloads.clearLogs(wsId, wlId);
|
|
199
|
+
printSuccess('Stored workload logs cleared; the process is unchanged.');
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (args.includes('--config')) {
|
|
203
|
+
printResult(await client.workspaces.workloads.logConfig(wsId, wlId), flags.json);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
182
206
|
if (args.includes('--stream')) {
|
|
183
207
|
for await (const event of client.workspaces.workloads.logsStream(wsId, wlId)) {
|
|
184
208
|
if (flags.json) {
|