@meowpanel/api 0.3.0 → 0.4.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.
Files changed (201) hide show
  1. package/esm/mod.d.ts +37 -16
  2. package/esm/mod.d.ts.map +1 -1
  3. package/esm/mod.js +25 -7
  4. package/esm/src/client.d.ts +48 -11
  5. package/esm/src/client.d.ts.map +1 -1
  6. package/esm/src/client.js +53 -12
  7. package/esm/src/http.d.ts +2 -2
  8. package/esm/src/http.d.ts.map +1 -1
  9. package/esm/src/http.js +5 -2
  10. package/esm/src/namespace.d.ts +1 -1
  11. package/esm/src/namespace.js +1 -1
  12. package/esm/src/resources/account.d.ts +50 -19
  13. package/esm/src/resources/account.d.ts.map +1 -1
  14. package/esm/src/resources/account.js +51 -13
  15. package/esm/src/resources/api-keys.d.ts +16 -24
  16. package/esm/src/resources/api-keys.d.ts.map +1 -1
  17. package/esm/src/resources/api-keys.js +16 -20
  18. package/esm/src/resources/auth.d.ts +70 -4
  19. package/esm/src/resources/auth.d.ts.map +1 -1
  20. package/esm/src/resources/auth.js +47 -4
  21. package/esm/src/resources/eggs.d.ts +261 -22
  22. package/esm/src/resources/eggs.d.ts.map +1 -1
  23. package/esm/src/resources/eggs.js +261 -25
  24. package/esm/src/resources/features.d.ts +35 -0
  25. package/esm/src/resources/features.d.ts.map +1 -0
  26. package/esm/src/resources/features.js +21 -0
  27. package/esm/src/resources/hosts.d.ts +143 -18
  28. package/esm/src/resources/hosts.d.ts.map +1 -1
  29. package/esm/src/resources/hosts.js +145 -10
  30. package/esm/src/resources/logs.d.ts +39 -0
  31. package/esm/src/resources/logs.d.ts.map +1 -0
  32. package/esm/src/resources/logs.js +38 -0
  33. package/esm/src/resources/nodes.d.ts +92 -17
  34. package/esm/src/resources/nodes.d.ts.map +1 -1
  35. package/esm/src/resources/nodes.js +108 -16
  36. package/esm/src/resources/permissions.d.ts +45 -0
  37. package/esm/src/resources/permissions.d.ts.map +1 -0
  38. package/esm/src/resources/permissions.js +26 -0
  39. package/esm/src/resources/request-logs.d.ts +91 -0
  40. package/esm/src/resources/request-logs.d.ts.map +1 -0
  41. package/esm/src/resources/request-logs.js +70 -0
  42. package/esm/src/resources/roles.d.ts +128 -0
  43. package/esm/src/resources/roles.d.ts.map +1 -0
  44. package/esm/src/resources/roles.js +142 -0
  45. package/esm/src/resources/server-groups.d.ts +141 -7
  46. package/esm/src/resources/server-groups.d.ts.map +1 -1
  47. package/esm/src/resources/server-groups.js +157 -8
  48. package/esm/src/resources/servers/activity.d.ts +50 -8
  49. package/esm/src/resources/servers/activity.d.ts.map +1 -1
  50. package/esm/src/resources/servers/activity.js +54 -13
  51. package/esm/src/resources/servers/allocations.d.ts +3 -3
  52. package/esm/src/resources/servers/allocations.d.ts.map +1 -1
  53. package/esm/src/resources/servers/allocations.js +7 -7
  54. package/esm/src/resources/servers/backups.d.ts +46 -0
  55. package/esm/src/resources/servers/backups.d.ts.map +1 -0
  56. package/esm/src/resources/servers/backups.js +43 -0
  57. package/esm/src/resources/servers/connection.d.ts +27 -7
  58. package/esm/src/resources/servers/connection.d.ts.map +1 -1
  59. package/esm/src/resources/servers/connection.js +28 -7
  60. package/esm/src/resources/servers/features.d.ts +81 -0
  61. package/esm/src/resources/servers/features.d.ts.map +1 -0
  62. package/esm/src/resources/servers/features.js +60 -0
  63. package/esm/src/resources/servers/files.d.ts +41 -53
  64. package/esm/src/resources/servers/files.d.ts.map +1 -1
  65. package/esm/src/resources/servers/files.js +74 -116
  66. package/esm/src/resources/servers/index.d.ts +46 -27
  67. package/esm/src/resources/servers/index.d.ts.map +1 -1
  68. package/esm/src/resources/servers/index.js +26 -12
  69. package/esm/src/resources/servers/jobs.d.ts +88 -0
  70. package/esm/src/resources/servers/jobs.d.ts.map +1 -0
  71. package/esm/src/resources/servers/jobs.js +115 -0
  72. package/esm/src/resources/servers/node-client.d.ts +33 -0
  73. package/esm/src/resources/servers/node-client.d.ts.map +1 -0
  74. package/esm/src/resources/servers/node-client.js +61 -0
  75. package/esm/src/resources/servers/profiles.d.ts +45 -1
  76. package/esm/src/resources/servers/profiles.d.ts.map +1 -1
  77. package/esm/src/resources/servers/profiles.js +55 -2
  78. package/esm/src/resources/servers/server.d.ts +10 -25
  79. package/esm/src/resources/servers/server.d.ts.map +1 -1
  80. package/esm/src/resources/servers/server.js +18 -34
  81. package/esm/src/resources/servers/sftp.d.ts +12 -19
  82. package/esm/src/resources/servers/sftp.d.ts.map +1 -1
  83. package/esm/src/resources/servers/sftp.js +10 -14
  84. package/esm/src/resources/servers/sub-users.d.ts +99 -0
  85. package/esm/src/resources/servers/sub-users.d.ts.map +1 -0
  86. package/esm/src/resources/servers/sub-users.js +94 -0
  87. package/esm/src/resources/servers/types.d.ts +27 -25
  88. package/esm/src/resources/servers/types.d.ts.map +1 -1
  89. package/esm/src/resources/systems.d.ts +124 -0
  90. package/esm/src/resources/systems.d.ts.map +1 -0
  91. package/esm/src/resources/systems.js +139 -0
  92. package/esm/src/resources/users.d.ts +330 -0
  93. package/esm/src/resources/users.d.ts.map +1 -0
  94. package/esm/src/resources/users.js +280 -0
  95. package/esm/src/types.d.ts +18 -1
  96. package/esm/src/types.d.ts.map +1 -1
  97. package/esm/src/types.js +11 -0
  98. package/package.json +1 -1
  99. package/script/mod.d.ts +37 -16
  100. package/script/mod.d.ts.map +1 -1
  101. package/script/mod.js +50 -5
  102. package/script/src/client.d.ts +48 -11
  103. package/script/src/client.d.ts.map +1 -1
  104. package/script/src/client.js +53 -12
  105. package/script/src/http.d.ts +2 -2
  106. package/script/src/http.d.ts.map +1 -1
  107. package/script/src/http.js +5 -2
  108. package/script/src/namespace.d.ts +1 -1
  109. package/script/src/namespace.js +1 -1
  110. package/script/src/resources/account.d.ts +50 -19
  111. package/script/src/resources/account.d.ts.map +1 -1
  112. package/script/src/resources/account.js +50 -12
  113. package/script/src/resources/api-keys.d.ts +16 -24
  114. package/script/src/resources/api-keys.d.ts.map +1 -1
  115. package/script/src/resources/api-keys.js +15 -19
  116. package/script/src/resources/auth.d.ts +70 -4
  117. package/script/src/resources/auth.d.ts.map +1 -1
  118. package/script/src/resources/auth.js +47 -4
  119. package/script/src/resources/eggs.d.ts +261 -22
  120. package/script/src/resources/eggs.d.ts.map +1 -1
  121. package/script/src/resources/eggs.js +267 -26
  122. package/script/src/resources/features.d.ts +35 -0
  123. package/script/src/resources/features.d.ts.map +1 -0
  124. package/script/src/resources/features.js +25 -0
  125. package/script/src/resources/hosts.d.ts +143 -18
  126. package/script/src/resources/hosts.d.ts.map +1 -1
  127. package/script/src/resources/hosts.js +146 -10
  128. package/script/src/resources/logs.d.ts +39 -0
  129. package/script/src/resources/logs.d.ts.map +1 -0
  130. package/script/src/resources/logs.js +42 -0
  131. package/script/src/resources/nodes.d.ts +92 -17
  132. package/script/src/resources/nodes.d.ts.map +1 -1
  133. package/script/src/resources/nodes.js +109 -16
  134. package/script/src/resources/permissions.d.ts +45 -0
  135. package/script/src/resources/permissions.d.ts.map +1 -0
  136. package/script/src/resources/permissions.js +31 -0
  137. package/script/src/resources/request-logs.d.ts +91 -0
  138. package/script/src/resources/request-logs.d.ts.map +1 -0
  139. package/script/src/resources/request-logs.js +75 -0
  140. package/script/src/resources/roles.d.ts +128 -0
  141. package/script/src/resources/roles.d.ts.map +1 -0
  142. package/script/src/resources/roles.js +148 -0
  143. package/script/src/resources/server-groups.d.ts +141 -7
  144. package/script/src/resources/server-groups.d.ts.map +1 -1
  145. package/script/src/resources/server-groups.js +158 -8
  146. package/script/src/resources/servers/activity.d.ts +50 -8
  147. package/script/src/resources/servers/activity.d.ts.map +1 -1
  148. package/script/src/resources/servers/activity.js +54 -12
  149. package/script/src/resources/servers/allocations.d.ts +3 -3
  150. package/script/src/resources/servers/allocations.d.ts.map +1 -1
  151. package/script/src/resources/servers/allocations.js +7 -7
  152. package/script/src/resources/servers/backups.d.ts +46 -0
  153. package/script/src/resources/servers/backups.d.ts.map +1 -0
  154. package/script/src/resources/servers/backups.js +47 -0
  155. package/script/src/resources/servers/connection.d.ts +27 -7
  156. package/script/src/resources/servers/connection.d.ts.map +1 -1
  157. package/script/src/resources/servers/connection.js +28 -7
  158. package/script/src/resources/servers/features.d.ts +81 -0
  159. package/script/src/resources/servers/features.d.ts.map +1 -0
  160. package/script/src/resources/servers/features.js +64 -0
  161. package/script/src/resources/servers/files.d.ts +41 -53
  162. package/script/src/resources/servers/files.d.ts.map +1 -1
  163. package/script/src/resources/servers/files.js +74 -116
  164. package/script/src/resources/servers/index.d.ts +46 -27
  165. package/script/src/resources/servers/index.d.ts.map +1 -1
  166. package/script/src/resources/servers/index.js +26 -12
  167. package/script/src/resources/servers/jobs.d.ts +88 -0
  168. package/script/src/resources/servers/jobs.d.ts.map +1 -0
  169. package/script/src/resources/servers/jobs.js +120 -0
  170. package/script/src/resources/servers/node-client.d.ts +33 -0
  171. package/script/src/resources/servers/node-client.d.ts.map +1 -0
  172. package/script/src/resources/servers/node-client.js +65 -0
  173. package/script/src/resources/servers/profiles.d.ts +45 -1
  174. package/script/src/resources/servers/profiles.d.ts.map +1 -1
  175. package/script/src/resources/servers/profiles.js +55 -2
  176. package/script/src/resources/servers/server.d.ts +10 -25
  177. package/script/src/resources/servers/server.d.ts.map +1 -1
  178. package/script/src/resources/servers/server.js +18 -34
  179. package/script/src/resources/servers/sftp.d.ts +12 -19
  180. package/script/src/resources/servers/sftp.d.ts.map +1 -1
  181. package/script/src/resources/servers/sftp.js +10 -14
  182. package/script/src/resources/servers/sub-users.d.ts +99 -0
  183. package/script/src/resources/servers/sub-users.d.ts.map +1 -0
  184. package/script/src/resources/servers/sub-users.js +99 -0
  185. package/script/src/resources/servers/types.d.ts +27 -25
  186. package/script/src/resources/servers/types.d.ts.map +1 -1
  187. package/script/src/resources/systems.d.ts +124 -0
  188. package/script/src/resources/systems.d.ts.map +1 -0
  189. package/script/src/resources/systems.js +145 -0
  190. package/script/src/resources/users.d.ts +330 -0
  191. package/script/src/resources/users.d.ts.map +1 -0
  192. package/script/src/resources/users.js +287 -0
  193. package/script/src/types.d.ts +18 -1
  194. package/script/src/types.d.ts.map +1 -1
  195. package/script/src/types.js +12 -0
  196. package/esm/src/resources/members.d.ts +0 -138
  197. package/esm/src/resources/members.d.ts.map +0 -1
  198. package/esm/src/resources/members.js +0 -122
  199. package/script/src/resources/members.d.ts +0 -138
  200. package/script/src/resources/members.d.ts.map +0 -1
  201. package/script/src/resources/members.js +0 -127
@@ -0,0 +1,142 @@
1
+ import { ResourceNamespace } from '../namespace.js';
2
+ import { ReactiveResource } from '../reactive.js';
3
+ import { toNanoID } from '../types.js';
4
+ import { grantsToBody, parseGrant, } from './permissions.js';
5
+ /**
6
+ * A named bundle of permissions that can be assigned to users.
7
+ *
8
+ * A role carries no permissions inline; fetch them via {@link RolesNamespace.permissions}.
9
+ * Its assignment scope and order live on the user-role link.
10
+ *
11
+ * Retrieved via {@link RolesNamespace.get} or {@link RolesNamespace.list}.
12
+ */
13
+ export class Role extends ReactiveResource {
14
+ /** The role's unique NanoID. */
15
+ id;
16
+ /** Display title, e.g. `"Support"`. */
17
+ title;
18
+ /** Optional description. */
19
+ description;
20
+ /** Color used in the UI for grouping, or `null`. */
21
+ color;
22
+ /** Internal notes. Requires `permissions.roles.notes.read`. */
23
+ notes;
24
+ /** When this role was created. */
25
+ createdAt;
26
+ /** When this role was last updated. */
27
+ updatedAt;
28
+ /** @internal */
29
+ constructor(data) {
30
+ super();
31
+ this.id = toNanoID(data.id);
32
+ this.applyData(data);
33
+ }
34
+ /** Apply raw API data to this role instance, updating all mutable fields. */
35
+ applyData(data) {
36
+ this.title = data.title;
37
+ this.description = data.description;
38
+ this.color = data.color;
39
+ this.notes = data.notes;
40
+ this.createdAt = new Date(data.created_at);
41
+ this.updatedAt = new Date(data.updated_at);
42
+ this.notify();
43
+ }
44
+ }
45
+ /**
46
+ * Manages the permission grants attached to a specific role.
47
+ *
48
+ * Access via `api.roles.permissions(roleId)`.
49
+ */
50
+ export class RolePermissionsManager {
51
+ roleId;
52
+ http;
53
+ /** @internal */
54
+ constructor(roleId, http) {
55
+ this.roleId = roleId;
56
+ this.http = http;
57
+ }
58
+ /** List the role's direct permission grants. */
59
+ async list() {
60
+ const data = await this.http.get(`/roles/${this.roleId}/permissions`);
61
+ return data.map(parseGrant);
62
+ }
63
+ /**
64
+ * Grant one or more permissions to the role.
65
+ *
66
+ * Re-granting an existing `(permission, scope)` updates it. You cannot grant a
67
+ * permission you do not hold yourself at the target scope.
68
+ */
69
+ async grant(grants) {
70
+ await this.http.post(`/roles/${this.roleId}/permissions`, grantsToBody(grants));
71
+ }
72
+ /**
73
+ * Revoke a permission from the role.
74
+ *
75
+ * @param permission The permission name to revoke.
76
+ * @param scope The namespaced scope (`"<type>:<id>"`) to revoke at, or omit for the global grant.
77
+ */
78
+ async revoke(permission, scope) {
79
+ const params = scope ? { scope } : undefined;
80
+ await this.http.delete(`/roles/${this.roleId}/permissions/${encodeURIComponent(permission)}`, { params });
81
+ }
82
+ }
83
+ /**
84
+ * Namespace for role management.
85
+ *
86
+ * Access via `api.roles`.
87
+ *
88
+ * @example
89
+ * ```ts ignore
90
+ * const roles = await api.roles.list();
91
+ * const role = await api.roles.create({ title: 'Support', color: 'blue' });
92
+ * await api.roles.permissions(role.id).grant({ permission: 'server.console.read' });
93
+ * ```
94
+ */
95
+ export class RolesNamespace extends ResourceNamespace {
96
+ /** @internal */
97
+ constructor(http) {
98
+ super(http);
99
+ }
100
+ /**
101
+ * Fetch a paginated list of roles.
102
+ *
103
+ * @param opts Pagination and search options.
104
+ */
105
+ async list(opts = {}) {
106
+ const result = await this.http.list('/roles', opts);
107
+ const roles = result.data.map((d) => new Role(d));
108
+ this.setCache(roles);
109
+ return { ...result, data: roles };
110
+ }
111
+ /** Fetch a single role by ID. */
112
+ async get(id) {
113
+ const data = await this.http.get(`/roles/${id}`);
114
+ return new Role(data);
115
+ }
116
+ /** Create a new role. */
117
+ async create(payload) {
118
+ const data = await this.http.post('/roles', payload);
119
+ const role = new Role(data);
120
+ this.addToCache(role);
121
+ this.emit('created', role);
122
+ return role;
123
+ }
124
+ /** Update a role's title, description, color, or notes. */
125
+ async update(id, payload) {
126
+ const data = await this.http.patch(`/roles/${id}`, payload);
127
+ const role = new Role(data);
128
+ this.upsertCache(role);
129
+ this.emit('updated', role);
130
+ return role;
131
+ }
132
+ /** Delete a role. Fails if the role is still assigned to any actor. */
133
+ async delete(id) {
134
+ await this.http.delete(`/roles/${id}`);
135
+ this.removeFromCache(id);
136
+ this.emit('deleted', id);
137
+ }
138
+ /** Manage the permission grants attached to a role. */
139
+ permissions(roleId) {
140
+ return new RolePermissionsManager(roleId, this.http);
141
+ }
142
+ }
@@ -1,9 +1,13 @@
1
1
  import type { HttpClient } from '../http.js';
2
2
  import { ResourceNamespace } from '../namespace.js';
3
3
  import { ReactiveResource } from '../reactive.js';
4
+ import type { IncludeOptions, ResourceWith } from '../types.js';
4
5
  import { type ISODate, type NanoID, type Paginated } from '../types.js';
5
6
  import type { NodeData } from './nodes.js';
6
7
  import { Node } from './nodes.js';
8
+ import type { UserData } from './users.js';
9
+ import { User } from './users.js';
10
+ import { type ActivityFeedOptions, type ActivityLog } from './servers/activity.js';
7
11
  /** Resource limit values for a server group. @internal */
8
12
  export interface ServerGroupLimitsData {
9
13
  cpu_percent?: number | null;
@@ -14,6 +18,10 @@ export interface ServerGroupLimitsData {
14
18
  database?: number | null;
15
19
  allocation?: number | null;
16
20
  }
21
+ /**
22
+ * A suspended group's reason. `null` when the group is active.
23
+ */
24
+ export type SuspensionState = 'transferring' | 'restricted' | 'expired' | 'overdue' | 'maintenance';
17
25
  /** Raw API shape for a server group. @internal */
18
26
  export interface ServerGroupData {
19
27
  id: string;
@@ -21,13 +29,18 @@ export interface ServerGroupData {
21
29
  node_id: string;
22
30
  /** @see NodeData */
23
31
  node?: NodeData;
32
+ /** Namespaced owner reference, always present. */
33
+ owner_id: string;
34
+ owner?: UserData;
24
35
  build?: {
25
36
  cpu_threads?: number | null;
26
37
  io_weight?: number | null;
27
38
  } | null;
28
39
  limits?: ServerGroupLimitsData | null;
40
+ suspension_state: SuspensionState | null;
29
41
  created_at: ISODate;
30
42
  updated_at: ISODate;
43
+ deleted_at: ISODate | null;
31
44
  }
32
45
  /**
33
46
  * Resource allocation limits for a server group.
@@ -61,19 +74,29 @@ export declare class ServerGroup extends ReactiveResource {
61
74
  readonly id: NanoID;
62
75
  /** The ID of the node this group is deployed on. Always present. */
63
76
  readonly nodeId: NanoID;
64
- /** The full node object. */
77
+ /** The full node object. Requires `?include=node`. */
65
78
  node: Node | undefined;
79
+ /** The owner's bare NanoID (parsed from the namespaced `owner_id`). Always present. */
80
+ readonly ownerId: NanoID;
81
+ /** The owner's issuer type, e.g. `'user'` or `'system'`. */
82
+ readonly ownerType: string;
83
+ /** The owner. Requires `?include=owner`. */
84
+ owner: User | undefined;
66
85
  /** Build settings inherited by all servers in this group. */
67
86
  build: {
68
87
  cpuThreads: number | null | undefined;
69
88
  ioWeight: number | null | undefined;
70
89
  } | undefined;
71
- /** Resource limits that apply to this group as a whole. */
90
+ /** Resource limits that apply to this group as a whole. Each field requires its own read permission. */
72
91
  limits: ServerGroupLimits | undefined;
92
+ /** The suspension reason, or `null` when the group is active. */
93
+ suspensionState: SuspensionState | null;
73
94
  /** When this server group was created. */
74
95
  createdAt: Date;
75
96
  /** When this server group was last updated. */
76
97
  updatedAt: Date;
98
+ /** When this group was soft-deleted, or `null` if active. */
99
+ deletedAt: Date | null;
77
100
  /** @internal */
78
101
  constructor(data: ServerGroupData);
79
102
  }
@@ -105,10 +128,92 @@ export interface CreateServerGroupPayload {
105
128
  allocation?: number;
106
129
  };
107
130
  }
131
+ /** Valid include keys for server group endpoints. */
132
+ export type ServerGroupInclude = 'node' | 'owner';
133
+ /** Maps each {@link ServerGroupInclude} key to the field(s) it guarantees on the {@link ServerGroup} instance. */
134
+ interface ServerGroupIncludeMap {
135
+ node: {
136
+ node: Node;
137
+ };
138
+ owner: {
139
+ owner: User;
140
+ };
141
+ }
142
+ /** A {@link ServerGroup} with specific include fields guaranteed to be populated. */
143
+ export type ServerGroupWith<I extends readonly ServerGroupInclude[] = []> = ResourceWith<ServerGroup, ServerGroupIncludeMap, I>;
144
+ /** Fields accepted when updating a server group. All optional. */
145
+ export interface UpdateServerGroupPayload {
146
+ /** Reassign the owner (issuer ref `"user:<id>"` or a bare user id). */
147
+ ownerId?: string;
148
+ /** Resource limit changes (partial). */
149
+ limits?: {
150
+ ramMb?: number;
151
+ swapMb?: number;
152
+ storageMb?: number;
153
+ weightIo?: number;
154
+ cpuPercent?: number;
155
+ cpuThreads?: string;
156
+ backup?: number;
157
+ database?: number;
158
+ allocation?: number;
159
+ };
160
+ /** New expiry, or `null` to clear it. */
161
+ expiresAt?: Date | null;
162
+ }
163
+ /** An external identifier linking a server group to a billing/provider record. */
164
+ export interface GroupIdentifier {
165
+ id: NanoID;
166
+ /** The provider key, e.g. `"whmcs"`. */
167
+ provider: string;
168
+ /** The provider's external id for this group. */
169
+ externalId: string;
170
+ /** When the identifier was last used, or `null`. */
171
+ lastUsedAt: Date | null;
172
+ createdAt: Date;
173
+ updatedAt: Date;
174
+ }
175
+ /** The billing provider backing a server group. */
176
+ export type BillingProvider = 'whmcs';
177
+ /** A server group's billing status. */
178
+ export type BillingStatus = 'active' | 'suspended' | 'pending' | 'cancelled' | 'terminated';
179
+ /** A server group's billing cycle. */
180
+ export type BillingCycle = 'free' | 'onetime' | 'monthly' | 'quarterly' | 'semiannually' | 'annually' | 'biennially' | 'triennially';
181
+ /** Provider-neutral billing information for a server group. */
182
+ export interface BillingInfo {
183
+ provider: BillingProvider;
184
+ status: BillingStatus | null;
185
+ /** The recurring amount, as a decimal string. */
186
+ recurringAmount: string | null;
187
+ currency: string | null;
188
+ billingCycle: BillingCycle | null;
189
+ /** Next due date, as `"YYYY-MM-DD"`. */
190
+ nextDueDate: string | null;
191
+ }
192
+ /**
193
+ * Manages a server group's external identifiers.
194
+ *
195
+ * Access via `api.serverGroups.identifiers(groupId)`.
196
+ */
197
+ export declare class GroupIdentifiersManager {
198
+ private readonly groupId;
199
+ private readonly http;
200
+ /** @internal */
201
+ constructor(groupId: NanoID, http: HttpClient);
202
+ /** List the group's identifiers. */
203
+ list(): Promise<GroupIdentifier[]>;
204
+ /** Link an external id for a provider to this group. */
205
+ link(provider: string, externalId: string): Promise<void>;
206
+ /** Remove a provider link from this group. */
207
+ unlink(provider: string): Promise<void>;
208
+ }
108
209
  /** Typed events emitted by {@link ServerGroupsNamespace}. */
109
210
  export interface ServerGroupEvents {
110
211
  /** Fired after a server group is created. */
111
212
  created: ServerGroup;
213
+ /** Fired after a server group is updated. */
214
+ updated: ServerGroup;
215
+ /** Fired after a server group is deleted. */
216
+ deleted: NanoID;
112
217
  }
113
218
  /**
114
219
  * Namespace for server group management.
@@ -128,23 +233,52 @@ export declare class ServerGroupsNamespace extends ResourceNamespace<ServerGroup
128
233
  /**
129
234
  * Fetch a paginated list of server groups.
130
235
  *
131
- * @param opts Pagination and search options.
236
+ * @param opts Pagination, search, and include options.
132
237
  */
133
- list(opts?: {
238
+ list<const I extends readonly ServerGroupInclude[] = []>(opts?: {
134
239
  page?: number;
135
240
  perPage?: number;
136
- }): Promise<Paginated<ServerGroup>>;
241
+ } & IncludeOptions<ServerGroupInclude, I>): Promise<Paginated<ServerGroupWith<I>>>;
137
242
  /**
138
243
  * Fetch a single server group by ID.
139
244
  *
140
- * @param id The server group's NanoID.
245
+ * @param id The server group's NanoID.
246
+ * @param opts Include options.
141
247
  */
142
- get(id: NanoID): Promise<ServerGroup>;
248
+ get<const I extends readonly ServerGroupInclude[] = []>(id: NanoID, opts?: IncludeOptions<ServerGroupInclude, I>): Promise<ServerGroupWith<I>>;
143
249
  /**
144
250
  * Create a new server group.
145
251
  *
146
252
  * @param payload Server group creation parameters.
147
253
  */
148
254
  create(payload: CreateServerGroupPayload): Promise<ServerGroup>;
255
+ /** Update a server group's owner, limits, or expiry. */
256
+ update(id: NanoID, payload: UpdateServerGroupPayload): Promise<ServerGroup>;
257
+ /** Soft-delete a server group. Fails if it still has servers. */
258
+ delete(id: NanoID): Promise<void>;
259
+ /** Find a server group by one of its external identifiers. */
260
+ byIdentifier(provider: string, externalId: string): Promise<ServerGroup>;
261
+ /** Suspend a server group. Defaults to the `restricted` state. */
262
+ suspend(id: NanoID, state?: SuspensionState): Promise<ServerGroup>;
263
+ /** Lift a server group's suspension. */
264
+ unsuspend(id: NanoID): Promise<ServerGroup>;
265
+ /**
266
+ * Fetch a server group's billing information.
267
+ *
268
+ * @throws {@link ApiError} with `isNotFound === true` if the group has no billing info.
269
+ */
270
+ billing(id: NanoID): Promise<BillingInfo>;
271
+ /**
272
+ * Fetch a server group's activity feed.
273
+ *
274
+ * @param id The server group's NanoID.
275
+ * @param opts Pagination, filters, and an optional `scope` (`group` or `server`).
276
+ */
277
+ activities(id: NanoID, opts?: ActivityFeedOptions & {
278
+ scope?: 'group' | 'server';
279
+ }): Promise<Paginated<ActivityLog>>;
280
+ /** Manage a server group's external identifiers. */
281
+ identifiers(groupId: NanoID): GroupIdentifiersManager;
149
282
  }
283
+ export {};
150
284
  //# sourceMappingURL=server-groups.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-groups.d.ts","sourceRoot":"","sources":["../../../src/src/resources/server-groups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-groups.d.ts","sourceRoot":"","sources":["../../../src/src/resources/server-groups.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { ResourceNamespace } from '../namespace.js';
2
2
  import { ReactiveResource } from '../reactive.js';
3
- import { toNanoID } from '../types.js';
3
+ import { joinIncludes, parseIssuerRef, toNanoID } from '../types.js';
4
4
  import { Node } from './nodes.js';
5
+ import { User } from './users.js';
6
+ import { listActivities } from './servers/activity.js';
5
7
  /**
6
8
  * A server group that ties one or more servers to a specific node with shared resource limits.
7
9
  *
@@ -12,22 +14,36 @@ export class ServerGroup extends ReactiveResource {
12
14
  id;
13
15
  /** The ID of the node this group is deployed on. Always present. */
14
16
  nodeId;
15
- /** The full node object. */
17
+ /** The full node object. Requires `?include=node`. */
16
18
  node;
19
+ /** The owner's bare NanoID (parsed from the namespaced `owner_id`). Always present. */
20
+ ownerId;
21
+ /** The owner's issuer type, e.g. `'user'` or `'system'`. */
22
+ ownerType;
23
+ /** The owner. Requires `?include=owner`. */
24
+ owner;
17
25
  /** Build settings inherited by all servers in this group. */
18
26
  build;
19
- /** Resource limits that apply to this group as a whole. */
27
+ /** Resource limits that apply to this group as a whole. Each field requires its own read permission. */
20
28
  limits;
29
+ /** The suspension reason, or `null` when the group is active. */
30
+ suspensionState;
21
31
  /** When this server group was created. */
22
32
  createdAt;
23
33
  /** When this server group was last updated. */
24
34
  updatedAt;
35
+ /** When this group was soft-deleted, or `null` if active. */
36
+ deletedAt;
25
37
  /** @internal */
26
38
  constructor(data) {
27
39
  super();
28
40
  this.id = toNanoID(data.id);
29
41
  this.nodeId = toNanoID(data.node_id);
30
42
  this.node = data.node ? new Node(data.node) : undefined;
43
+ const owner = parseIssuerRef(data.owner_id);
44
+ this.ownerId = owner.id;
45
+ this.ownerType = owner.type;
46
+ this.owner = data.owner ? new User(data.owner) : undefined;
31
47
  this.build = data.build ? { cpuThreads: data.build.cpu_threads, ioWeight: data.build.io_weight } : undefined;
32
48
  this.limits = data.limits
33
49
  ? {
@@ -40,8 +56,49 @@ export class ServerGroup extends ReactiveResource {
40
56
  allocation: data.limits.allocation,
41
57
  }
42
58
  : undefined;
59
+ this.suspensionState = data.suspension_state ?? null;
43
60
  this.createdAt = new Date(data.created_at);
44
61
  this.updatedAt = new Date(data.updated_at);
62
+ this.deletedAt = data.deleted_at ? new Date(data.deleted_at) : null;
63
+ }
64
+ }
65
+ function makeGroupIdentifier(data) {
66
+ return {
67
+ id: toNanoID(data.id),
68
+ provider: data.provider,
69
+ externalId: data.external_id,
70
+ lastUsedAt: data.last_used_at ? new Date(data.last_used_at) : null,
71
+ createdAt: new Date(data.created_at),
72
+ updatedAt: new Date(data.updated_at),
73
+ };
74
+ }
75
+ /**
76
+ * Manages a server group's external identifiers.
77
+ *
78
+ * Access via `api.serverGroups.identifiers(groupId)`.
79
+ */
80
+ export class GroupIdentifiersManager {
81
+ groupId;
82
+ http;
83
+ /** @internal */
84
+ constructor(groupId, http) {
85
+ this.groupId = groupId;
86
+ this.http = http;
87
+ }
88
+ /** List the group's identifiers. */
89
+ async list() {
90
+ const data = await this.http.get(`/servers/groups/${this.groupId}/identifiers`);
91
+ return data.map(makeGroupIdentifier);
92
+ }
93
+ /** Link an external id for a provider to this group. */
94
+ async link(provider, externalId) {
95
+ await this.http.post(`/servers/groups/${this.groupId}/identifiers/${encodeURIComponent(provider)}`, {
96
+ external_id: externalId,
97
+ });
98
+ }
99
+ /** Remove a provider link from this group. */
100
+ async unlink(provider) {
101
+ await this.http.delete(`/servers/groups/${this.groupId}/identifiers/${encodeURIComponent(provider)}`);
45
102
  }
46
103
  }
47
104
  /**
@@ -64,10 +121,14 @@ export class ServerGroupsNamespace extends ResourceNamespace {
64
121
  /**
65
122
  * Fetch a paginated list of server groups.
66
123
  *
67
- * @param opts Pagination and search options.
124
+ * @param opts Pagination, search, and include options.
68
125
  */
69
126
  async list(opts = {}) {
70
- const result = await this.http.list('/servers/groups', opts);
127
+ const extra = {};
128
+ const include = joinIncludes(opts);
129
+ if (include)
130
+ extra['include'] = include;
131
+ const result = await this.http.list('/servers/groups', opts, extra);
71
132
  const groups = result.data.map((d) => new ServerGroup(d));
72
133
  this.setCache(groups);
73
134
  return { ...result, data: groups };
@@ -75,10 +136,15 @@ export class ServerGroupsNamespace extends ResourceNamespace {
75
136
  /**
76
137
  * Fetch a single server group by ID.
77
138
  *
78
- * @param id The server group's NanoID.
139
+ * @param id The server group's NanoID.
140
+ * @param opts Include options.
79
141
  */
80
- async get(id) {
81
- const data = await this.http.get(`/servers/groups/${id}`);
142
+ async get(id, opts = {}) {
143
+ const params = {};
144
+ const include = joinIncludes(opts);
145
+ if (include)
146
+ params['include'] = include;
147
+ const data = await this.http.get(`/servers/groups/${id}`, { params });
82
148
  return new ServerGroup(data);
83
149
  }
84
150
  /**
@@ -108,4 +174,87 @@ export class ServerGroupsNamespace extends ResourceNamespace {
108
174
  this.emit('created', group);
109
175
  return group;
110
176
  }
177
+ /** Update a server group's owner, limits, or expiry. */
178
+ async update(id, payload) {
179
+ const body = {};
180
+ if (payload.ownerId !== undefined)
181
+ body['owner_id'] = payload.ownerId;
182
+ if (payload.expiresAt !== undefined) {
183
+ body['expires_at'] = payload.expiresAt === null ? null : payload.expiresAt.toISOString();
184
+ }
185
+ if (payload.limits) {
186
+ body['limits'] = {
187
+ ram_mb: payload.limits.ramMb,
188
+ swap_mb: payload.limits.swapMb,
189
+ storage_mb: payload.limits.storageMb,
190
+ weight_io: payload.limits.weightIo,
191
+ cpu_percent: payload.limits.cpuPercent,
192
+ cpu_threads: payload.limits.cpuThreads,
193
+ backup: payload.limits.backup,
194
+ database: payload.limits.database,
195
+ allocation: payload.limits.allocation,
196
+ };
197
+ }
198
+ const data = await this.http.patch(`/servers/groups/${id}`, body);
199
+ const group = new ServerGroup(data);
200
+ this.upsertCache(group);
201
+ this.emit('updated', group);
202
+ return group;
203
+ }
204
+ /** Soft-delete a server group. Fails if it still has servers. */
205
+ async delete(id) {
206
+ await this.http.delete(`/servers/groups/${id}`);
207
+ this.removeFromCache(id);
208
+ this.emit('deleted', id);
209
+ }
210
+ /** Find a server group by one of its external identifiers. */
211
+ async byIdentifier(provider, externalId) {
212
+ const data = await this.http.get(`/servers/groups/by-identifier/${encodeURIComponent(provider)}/${encodeURIComponent(externalId)}`);
213
+ return new ServerGroup(data);
214
+ }
215
+ /** Suspend a server group. Defaults to the `restricted` state. */
216
+ async suspend(id, state = 'restricted') {
217
+ const data = await this.http.post(`/servers/groups/${id}/suspend`, { state });
218
+ const group = new ServerGroup(data);
219
+ this.upsertCache(group);
220
+ this.emit('updated', group);
221
+ return group;
222
+ }
223
+ /** Lift a server group's suspension. */
224
+ async unsuspend(id) {
225
+ const data = await this.http.post(`/servers/groups/${id}/unsuspend`);
226
+ const group = new ServerGroup(data);
227
+ this.upsertCache(group);
228
+ this.emit('updated', group);
229
+ return group;
230
+ }
231
+ /**
232
+ * Fetch a server group's billing information.
233
+ *
234
+ * @throws {@link ApiError} with `isNotFound === true` if the group has no billing info.
235
+ */
236
+ async billing(id) {
237
+ const data = await this.http.get(`/servers/groups/${id}/billing`);
238
+ return {
239
+ provider: data.provider,
240
+ status: data.status,
241
+ recurringAmount: data.recurring_amount,
242
+ currency: data.currency,
243
+ billingCycle: data.billing_cycle,
244
+ nextDueDate: data.next_due_date,
245
+ };
246
+ }
247
+ /**
248
+ * Fetch a server group's activity feed.
249
+ *
250
+ * @param id The server group's NanoID.
251
+ * @param opts Pagination, filters, and an optional `scope` (`group` or `server`).
252
+ */
253
+ activities(id, opts = {}) {
254
+ return listActivities(this.http, `/servers/groups/${id}/activities`, opts, opts.scope ? { scope: opts.scope } : {});
255
+ }
256
+ /** Manage a server group's external identifiers. */
257
+ identifiers(groupId) {
258
+ return new GroupIdentifiersManager(groupId, this.http);
259
+ }
111
260
  }