@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
@@ -1,5 +1,6 @@
1
1
  import { ReactiveResource } from '../../reactive.js';
2
2
  import { toNanoID } from '../../types.js';
3
+ import { Egg } from '../eggs.js';
3
4
  /**
4
5
  * A named configuration profile for a server.
5
6
  *
@@ -19,6 +20,18 @@ export class ServerProfile extends ReactiveResource {
19
20
  description;
20
21
  /** Internal notes for this profile. */
21
22
  notes;
23
+ /** The egg this profile runs. Requires `server.egg.read`. */
24
+ eggId;
25
+ /** Populated with `include=egg`. */
26
+ egg;
27
+ /** The egg image (Docker image) id this profile uses. */
28
+ eggImageId;
29
+ /** A custom Docker image overriding the egg's default. */
30
+ eggImageOverride;
31
+ /** Whether the egg install scripts are skipped for this profile. */
32
+ skipInstallScripts;
33
+ /** Startup command and variables. Populated with `include=startup`. */
34
+ startup;
22
35
  /** The folder name used to store this profile's files on disk. */
23
36
  folder;
24
37
  /** `true` if this is the currently active profile for the server. */
@@ -47,6 +60,20 @@ export class ServerProfile extends ReactiveResource {
47
60
  this.name = data.name;
48
61
  this.description = data.description ?? null;
49
62
  this.notes = data.notes;
63
+ this.eggId = data.egg_id ? toNanoID(data.egg_id) : undefined;
64
+ this.eggImageId = data.egg_image_id ? toNanoID(data.egg_image_id) : undefined;
65
+ this.eggImageOverride = data.egg_image_override;
66
+ this.skipInstallScripts = data.skip_install_scripts;
67
+ if (data.egg)
68
+ this.egg = new Egg(data.egg);
69
+ if (data.startup !== undefined) {
70
+ this.startup = data.startup
71
+ ? {
72
+ command: data.startup.command,
73
+ variables: Object.fromEntries(Object.entries(data.startup.variables).map(([key, v]) => [key, { key, ...v }])),
74
+ }
75
+ : undefined;
76
+ }
50
77
  this.folder = data.folder;
51
78
  this.isActive = data.is_active;
52
79
  this.updatedAt = new Date(data.updated_at);
@@ -131,12 +158,38 @@ export class ServerProfilesManager {
131
158
  return this.makeProfile(data);
132
159
  }
133
160
  /**
134
- * Create a new profile for this server.
161
+ * Create a new profile for this server. A profile binds an egg and image.
135
162
  *
136
163
  * @param payload Profile creation parameters.
137
164
  */
138
165
  async create(payload) {
139
- const data = await this.http.post(`/servers/${this.serverId}/profiles`, payload);
166
+ const data = await this.http.post(`/servers/${this.serverId}/profiles`, {
167
+ name: payload.name,
168
+ description: payload.description,
169
+ notes: payload.notes,
170
+ egg_id: payload.eggId,
171
+ egg_image_id: payload.eggImageId,
172
+ egg_image_override: payload.eggImageOverride,
173
+ startup_command_override: payload.startupCommandOverride,
174
+ skip_install_scripts: payload.skipInstallScripts,
175
+ });
176
+ return this.makeProfile(data);
177
+ }
178
+ /**
179
+ * Change a profile's egg, reselecting a valid image and re-basing its variables.
180
+ *
181
+ * @param profileId The profile's NanoID.
182
+ * @param eggId The egg to switch to.
183
+ * @param opts `keep: true` carries over all compatible variable overrides;
184
+ * an array keeps only the named variables.
185
+ */
186
+ async changeEgg(profileId, eggId, opts = {}) {
187
+ const params = {};
188
+ if (opts.keep === true)
189
+ params['keep'] = 'true';
190
+ else if (Array.isArray(opts.keep))
191
+ params['keep'] = opts.keep.join(',');
192
+ const data = await this.http.put(`/servers/${this.serverId}/profiles/${profileId}/egg`, JSON.stringify({ egg_id: eggId }), 'application/json', { params });
140
193
  return this.makeProfile(data);
141
194
  }
142
195
  /**
@@ -1,25 +1,18 @@
1
1
  import type { HttpClient } from '../../http.js';
2
2
  import { ReactiveResource } from '../../reactive.js';
3
3
  import type { NanoID, PowerAction, PowerState, ServerRestrictedState } from '../../types.js';
4
- import { Egg } from '../eggs.js';
5
4
  import { ServerGroup } from '../server-groups.js';
6
5
  import { ServerActivityManager } from './activity.js';
7
6
  import { ServerAllocationsManager } from './allocations.js';
7
+ import { ServerBackupsManager } from './backups.js';
8
8
  import { ServerConnection } from './connection.js';
9
+ import { ServerFeaturesManager } from './features.js';
9
10
  import { ServerFilesManager } from './files.js';
11
+ import { ServerJobsManager } from './jobs.js';
10
12
  import { ServerProfilesManager } from './profiles.js';
11
13
  import { ServerSftpManager } from './sftp.js';
14
+ import { ServerUserManager } from './sub-users.js';
12
15
  import type { ServerAllocationsData, ServerData, UpdateServerPayload } from './types.js';
13
- /** An egg environment variable configured for a server. */
14
- export interface StartupVariable {
15
- key: string;
16
- name: string;
17
- description: string;
18
- value: string;
19
- default: string;
20
- /** Laravel validation rules, e.g. `"required|numeric|min:1"`. */
21
- rules: string;
22
- }
23
16
  /** Real-time power state and utilization. Populated via `include=status`. */
24
17
  export interface ServerStatus {
25
18
  state: PowerState;
@@ -52,17 +45,12 @@ export interface ServerBuild {
52
45
  backup: number | null | undefined;
53
46
  } | null | undefined;
54
47
  }
55
- /** Startup command and egg variables. Populated via `include=startup`. */
56
- export interface ServerStartup {
57
- command: string;
58
- variables: Record<string, StartupVariable>;
59
- }
60
48
  /**
61
49
  * A MeowPanel game server.
62
50
  *
63
51
  * @example
64
52
  * ```ts ignore
65
- * const server = await api.servers.get(id, { include: ['status', 'startup'] });
53
+ * const server = await api.servers.get(id, { include: ['status'] });
66
54
  * server.status; // ServerStatus (guaranteed by include)
67
55
  *
68
56
  * await server.sendPower('start');
@@ -85,19 +73,12 @@ export declare class Server extends ReactiveResource {
85
73
  /** When non-null, overrides the node's reported power state for display. */
86
74
  restrictedState: ServerRestrictedState;
87
75
  readonly groupId: NanoID;
88
- readonly eggId: NanoID;
89
- eggImageId: NanoID | undefined;
90
76
  /** Populated with `include=group`. */
91
77
  group: ServerGroup | undefined;
92
- /** Populated with `include=egg`. */
93
- egg: Egg | undefined;
94
- eggImageOverride: string | null | undefined;
95
78
  /** Populated with `include=status`. Use {@link getStatus} to fetch on demand. */
96
79
  status: ServerStatus | undefined;
97
80
  /** Populated with `include=build`. */
98
81
  build: ServerBuild | undefined;
99
- /** Populated with `include=startup`. */
100
- startup: ServerStartup | undefined;
101
82
  /** Populated with `include=allocations`. */
102
83
  allocationPorts: ServerAllocationsData | undefined;
103
84
  createdAt: Date;
@@ -107,11 +88,15 @@ export declare class Server extends ReactiveResource {
107
88
  readonly profiles: ServerProfilesManager;
108
89
  readonly activity: ServerActivityManager;
109
90
  readonly files: ServerFilesManager;
91
+ readonly backups: ServerBackupsManager;
92
+ readonly jobs: ServerJobsManager;
93
+ readonly subUsers: ServerUserManager;
94
+ readonly features: ServerFeaturesManager;
110
95
  /** @internal */
111
96
  constructor(data: ServerData, http: HttpClient, resolveNodeUrl: () => Promise<string>, onMutated: () => void);
112
97
  /** Apply raw API data, updating all mutable fields. */
113
98
  applyData(data: ServerData): void;
114
- /** Update this server's details, startup config, or primary allocation. */
99
+ /** Update this server's details or primary allocation. */
115
100
  update(payload: UpdateServerPayload): Promise<void>;
116
101
  /** Fetch current power state and utilization from the node. */
117
102
  getStatus(): Promise<ServerStatus>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/server.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,23 @@
1
1
  import { ReactiveResource } from '../../reactive.js';
2
2
  import { toNanoID } from '../../types.js';
3
- import { Egg } from '../eggs.js';
4
3
  import { ServerGroup } from '../server-groups.js';
5
4
  import { ServerActivityManager } from './activity.js';
6
5
  import { ServerAllocationsManager } from './allocations.js';
6
+ import { ServerBackupsManager } from './backups.js';
7
7
  import { ServerConnection } from './connection.js';
8
+ import { ServerFeaturesManager } from './features.js';
8
9
  import { ServerFilesManager } from './files.js';
10
+ import { ServerJobsManager } from './jobs.js';
11
+ import { NodeClient } from './node-client.js';
9
12
  import { ServerProfilesManager } from './profiles.js';
10
13
  import { ServerSftpManager } from './sftp.js';
14
+ import { ServerUserManager } from './sub-users.js';
11
15
  /**
12
16
  * A MeowPanel game server.
13
17
  *
14
18
  * @example
15
19
  * ```ts ignore
16
- * const server = await api.servers.get(id, { include: ['status', 'startup'] });
20
+ * const server = await api.servers.get(id, { include: ['status'] });
17
21
  * server.status; // ServerStatus (guaranteed by include)
18
22
  *
19
23
  * await server.sendPower('start');
@@ -36,19 +40,12 @@ export class Server extends ReactiveResource {
36
40
  /** When non-null, overrides the node's reported power state for display. */
37
41
  restrictedState;
38
42
  groupId;
39
- eggId;
40
- eggImageId;
41
43
  /** Populated with `include=group`. */
42
44
  group;
43
- /** Populated with `include=egg`. */
44
- egg;
45
- eggImageOverride;
46
45
  /** Populated with `include=status`. Use {@link getStatus} to fetch on demand. */
47
46
  status;
48
47
  /** Populated with `include=build`. */
49
48
  build;
50
- /** Populated with `include=startup`. */
51
- startup;
52
49
  /** Populated with `include=allocations`. */
53
50
  allocationPorts;
54
51
  createdAt;
@@ -58,6 +55,10 @@ export class Server extends ReactiveResource {
58
55
  profiles;
59
56
  activity;
60
57
  files;
58
+ backups;
59
+ jobs;
60
+ subUsers;
61
+ features;
61
62
  /** @internal */
62
63
  constructor(data, http, resolveNodeUrl, onMutated) {
63
64
  super();
@@ -66,12 +67,16 @@ export class Server extends ReactiveResource {
66
67
  this.onMutated = onMutated;
67
68
  this.id = toNanoID(data.id);
68
69
  this.groupId = toNanoID(data.group_id);
69
- this.eggId = toNanoID(data.egg_id);
70
70
  this.allocations = new ServerAllocationsManager(this.id, http);
71
71
  this.sftp = new ServerSftpManager(this.id, http);
72
72
  this.profiles = new ServerProfilesManager(this.id, http);
73
73
  this.activity = new ServerActivityManager(this.id, http);
74
- this.files = new ServerFilesManager(this.id, http.getToken(), resolveNodeUrl);
74
+ this.subUsers = new ServerUserManager(`/servers/${this.id}`, http);
75
+ this.features = new ServerFeaturesManager(this.id, http);
76
+ const node = new NodeClient(this.id, http.getToken(), resolveNodeUrl);
77
+ this.files = new ServerFilesManager(node);
78
+ this.backups = new ServerBackupsManager(node);
79
+ this.jobs = new ServerJobsManager(node);
75
80
  this.applyData(data);
76
81
  }
77
82
  /** Apply raw API data, updating all mutable fields. */
@@ -80,30 +85,15 @@ export class Server extends ReactiveResource {
80
85
  this.description = data.description;
81
86
  this.notes = data.notes;
82
87
  this.restrictedState = data.restricted_state;
83
- this.eggImageId = data.egg_image_id ? toNanoID(data.egg_image_id) : undefined;
84
- this.eggImageOverride = data.egg_image_override;
85
88
  // Include-gated fields: only overwrite if present in response
86
89
  if (data.group)
87
90
  this.group = new ServerGroup(data.group);
88
- if (data.egg)
89
- this.egg = new Egg(data.egg);
90
91
  if (data.status !== undefined) {
91
92
  this.status = data.status ? parseStatus(data.status) : undefined;
92
93
  }
93
94
  if (data.build !== undefined) {
94
95
  this.build = data.build ? parseBuild(data.build) : undefined;
95
96
  }
96
- if (data.startup !== undefined) {
97
- this.startup = data.startup
98
- ? {
99
- command: data.startup.command,
100
- variables: Object.fromEntries(Object.entries(data.startup.variables).map(([k, v]) => [
101
- k,
102
- { key: k, ...v, default: v.default },
103
- ])),
104
- }
105
- : undefined;
106
- }
107
97
  if (data.allocations !== undefined) {
108
98
  this.allocationPorts = data.allocations ?? undefined;
109
99
  }
@@ -111,7 +101,7 @@ export class Server extends ReactiveResource {
111
101
  this.updatedAt = new Date(data.updated_at);
112
102
  this.notify();
113
103
  }
114
- /** Update this server's details, startup config, or primary allocation. */
104
+ /** Update this server's details or primary allocation. */
115
105
  async update(payload) {
116
106
  const body = {};
117
107
  if (payload.name !== undefined)
@@ -124,12 +114,6 @@ export class Server extends ReactiveResource {
124
114
  if (payload.allocationPrimary) {
125
115
  body['allocation_primary'] = payload.allocationPrimary;
126
116
  }
127
- if (payload.startup) {
128
- body['startup'] = {
129
- command: payload.startup.command,
130
- variables: payload.startup.variables,
131
- };
132
- }
133
117
  const data = await this.http.patch(`/servers/${this.id}`, body);
134
118
  this.applyData(data);
135
119
  this.onMutated();
@@ -175,7 +159,7 @@ function parseStatus(data) {
175
159
  cpuAbsolute: data.utilization.cpu_absolute,
176
160
  networkRxBytes: data.utilization.network.rx_bytes,
177
161
  networkTxBytes: data.utilization.network.tx_bytes,
178
- uptimeMs: data.utilization.uptime_ms,
162
+ uptimeMs: data.utilization.uptime,
179
163
  diskBytes: data.utilization.disk_bytes,
180
164
  }
181
165
  : null,
@@ -1,7 +1,7 @@
1
1
  import type { HttpClient } from '../../http.js';
2
2
  import { ReactiveResource } from '../../reactive.js';
3
3
  import type { IncludeOptions, ListOptions, NanoID, Paginated, ResourceWith, SftpPermission } from '../../types.js';
4
- import { Member } from '../members.js';
4
+ import { User } from '../users.js';
5
5
  import type { SftpUserData } from './types.js';
6
6
  /**
7
7
  * Connection details for the SFTP server on a node.
@@ -19,8 +19,8 @@ export interface SftpConnection {
19
19
  *
20
20
  * Retrieved via {@link ServerSftpManager.list} or {@link ServerSftpManager.create}.
21
21
  *
22
- * > **Note:** The `password` field is automatically included in the creation response.
23
- * > On subsequent fetches it requires `include=password` to be populated.
22
+ * The plaintext password is returned only when the user is created or its password
23
+ * is reset. It is never retrievable afterward.
24
24
  */
25
25
  export declare class SftpUser extends ReactiveResource {
26
26
  /** The SFTP user's unique NanoID. */
@@ -29,11 +29,7 @@ export declare class SftpUser extends ReactiveResource {
29
29
  name: string;
30
30
  /** The SFTP login username (typically prefixed with the server ID). */
31
31
  username: string;
32
- /**
33
- * The plaintext password.
34
- *
35
- * Automatically included on creation. Requires `include=password` on subsequent fetches.
36
- */
32
+ /** The plaintext password. Present only in the creation response. */
37
33
  password: string | undefined;
38
34
  /**
39
35
  * A map of path glob patterns to the set of permissions granted for that path.
@@ -44,8 +40,8 @@ export declare class SftpUser extends ReactiveResource {
44
40
  paths: Record<string, SftpPermission[]>;
45
41
  /** NanoID of the member who owns this SFTP user. */
46
42
  ownerId: NanoID;
47
- /** The owner member. */
48
- owner: Member | null | undefined;
43
+ /** The owner. */
44
+ owner: User | null | undefined;
49
45
  /** When this SFTP user last logged in, or `null` if never. */
50
46
  lastLoginAt: Date | null;
51
47
  /** When this SFTP user was created. */
@@ -56,14 +52,11 @@ export declare class SftpUser extends ReactiveResource {
56
52
  constructor(data: SftpUserData);
57
53
  }
58
54
  /** Valid include keys for SFTP user endpoints. */
59
- export type SftpUserInclude = 'password' | 'owner';
55
+ export type SftpUserInclude = 'owner';
60
56
  /** Maps each {@link SftpUserInclude} key to the field(s) it guarantees on the {@link SftpUser} instance. */
61
57
  interface SftpUserIncludeMap {
62
- password: {
63
- password: string;
64
- };
65
58
  owner: {
66
- owner: Member;
59
+ owner: User;
67
60
  };
68
61
  }
69
62
  /** A {@link SftpUser} with specific include fields guaranteed to be populated. */
@@ -88,8 +81,8 @@ export interface SftpDetails {
88
81
  * console.log(`Connect to: ${details.connection.url}`);
89
82
  *
90
83
  * const user = await server.sftp.create('deploy', {
91
- * '/': ['sftp.content.list', 'sftp.content.read'],
92
- * '/logs': ['sftp.content.list', 'sftp.content.read', 'sftp.content.delete'],
84
+ * '/': ['server.file.list', 'server.file.read'],
85
+ * '/logs': ['server.file.list', 'server.file.read', 'server.file.delete'],
93
86
  * });
94
87
  * console.log(user.password); // Save this!
95
88
  * ```
@@ -119,8 +112,8 @@ export declare class ServerSftpManager {
119
112
  /**
120
113
  * Create a new SFTP user for this server.
121
114
  *
122
- * The returned {@link SftpUser} includes the `password` field automatically.
123
- * On subsequent fetches, request it explicitly with `include=password`.
115
+ * The returned {@link SftpUser} carries the one-time `password`. It is never
116
+ * retrievable afterward, so store it now.
124
117
  *
125
118
  * @param name Display name for the SFTP user.
126
119
  * @param paths A map of path glob patterns to an array of {@link SftpPermission} scopes.
@@ -1 +1 @@
1
- {"version":3,"file":"sftp.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/sftp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sftp.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/sftp.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import { ReactiveResource } from '../../reactive.js';
2
2
  import { joinIncludes, toNanoID } from '../../types.js';
3
- import { Member } from '../members.js';
3
+ import { User } from '../users.js';
4
4
  /**
5
5
  * An SFTP user credential scoped to a specific server with path-level permissions.
6
6
  *
7
7
  * Retrieved via {@link ServerSftpManager.list} or {@link ServerSftpManager.create}.
8
8
  *
9
- * > **Note:** The `password` field is automatically included in the creation response.
10
- * > On subsequent fetches it requires `include=password` to be populated.
9
+ * The plaintext password is returned only when the user is created or its password
10
+ * is reset. It is never retrievable afterward.
11
11
  */
12
12
  export class SftpUser extends ReactiveResource {
13
13
  /** The SFTP user's unique NanoID. */
@@ -16,11 +16,7 @@ export class SftpUser extends ReactiveResource {
16
16
  name;
17
17
  /** The SFTP login username (typically prefixed with the server ID). */
18
18
  username;
19
- /**
20
- * The plaintext password.
21
- *
22
- * Automatically included on creation. Requires `include=password` on subsequent fetches.
23
- */
19
+ /** The plaintext password. Present only in the creation response. */
24
20
  password;
25
21
  /**
26
22
  * A map of path glob patterns to the set of permissions granted for that path.
@@ -31,7 +27,7 @@ export class SftpUser extends ReactiveResource {
31
27
  paths;
32
28
  /** NanoID of the member who owns this SFTP user. */
33
29
  ownerId;
34
- /** The owner member. */
30
+ /** The owner. */
35
31
  owner;
36
32
  /** When this SFTP user last logged in, or `null` if never. */
37
33
  lastLoginAt;
@@ -48,7 +44,7 @@ export class SftpUser extends ReactiveResource {
48
44
  this.password = data.password;
49
45
  this.paths = data.paths;
50
46
  this.ownerId = toNanoID(data.owner_id);
51
- this.owner = data.owner ? new Member(data.owner) : data.owner;
47
+ this.owner = data.owner ? new User(data.owner) : data.owner;
52
48
  this.lastLoginAt = data.last_login_at ? new Date(data.last_login_at) : null;
53
49
  this.createdAt = new Date(data.created_at);
54
50
  this.updatedAt = new Date(data.updated_at);
@@ -65,8 +61,8 @@ export class SftpUser extends ReactiveResource {
65
61
  * console.log(`Connect to: ${details.connection.url}`);
66
62
  *
67
63
  * const user = await server.sftp.create('deploy', {
68
- * '/': ['sftp.content.list', 'sftp.content.read'],
69
- * '/logs': ['sftp.content.list', 'sftp.content.read', 'sftp.content.delete'],
64
+ * '/': ['server.file.list', 'server.file.read'],
65
+ * '/logs': ['server.file.list', 'server.file.read', 'server.file.delete'],
70
66
  * });
71
67
  * console.log(user.password); // Save this!
72
68
  * ```
@@ -119,8 +115,8 @@ export class ServerSftpManager {
119
115
  /**
120
116
  * Create a new SFTP user for this server.
121
117
  *
122
- * The returned {@link SftpUser} includes the `password` field automatically.
123
- * On subsequent fetches, request it explicitly with `include=password`.
118
+ * The returned {@link SftpUser} carries the one-time `password`. It is never
119
+ * retrievable afterward, so store it now.
124
120
  *
125
121
  * @param name Display name for the SFTP user.
126
122
  * @param paths A map of path glob patterns to an array of {@link SftpPermission} scopes.
@@ -0,0 +1,99 @@
1
+ import type { HttpClient } from '../../http.js';
2
+ import type { ISODate, NanoID } from '../../types.js';
3
+ import { User, type UserData } from '../users.js';
4
+ /**
5
+ * How a sub-user is attached to the resource.
6
+ *
7
+ * - `owner`: the resource owner (implicit, read-only, no grants).
8
+ * - `direct`: granted at this resource's own scope.
9
+ * - `inherited`: granted at the parent group's scope.
10
+ */
11
+ export type ServerUserKind = 'owner' | 'direct' | 'inherited';
12
+ /** Raw API shape for a sub-user's scoped grant. @internal */
13
+ interface ServerUserGrantData {
14
+ name: string;
15
+ granted_at: ISODate;
16
+ expires_at: ISODate | null;
17
+ }
18
+ /** Raw API shape for a sub-user entry. @internal */
19
+ export interface ServerUserData {
20
+ user: UserData;
21
+ permissions: ServerUserGrantData[];
22
+ kind: ServerUserKind;
23
+ }
24
+ /** A permission granted to a sub-user at the resource scope. */
25
+ export interface ServerUserGrant {
26
+ /** The permission name, e.g. `"server.file.read"`. */
27
+ name: string;
28
+ /** When the grant was created. */
29
+ grantedAt: Date;
30
+ /** When the grant expires, or `null` if it never expires. */
31
+ expiresAt: Date | null;
32
+ }
33
+ /**
34
+ * A user granted access to a server (or server group), with their scoped grants.
35
+ *
36
+ * Retrieved via {@link ServerUserManager.list} or {@link ServerUserManager.get}.
37
+ */
38
+ export declare class ServerUser {
39
+ /** The underlying user. */
40
+ readonly user: User;
41
+ /** The permissions granted to this user at the resource scope. */
42
+ readonly permissions: ServerUserGrant[];
43
+ /** How this user is attached. See {@link ServerUserKind}. */
44
+ readonly kind: ServerUserKind;
45
+ /** @internal */
46
+ constructor(data: ServerUserData);
47
+ }
48
+ /** Parameters for adding a sub-user, by existing user id or by email (which may invite a new user). */
49
+ export type AddServerUserInput = {
50
+ userId: NanoID;
51
+ permissions: string[];
52
+ expiresAt?: Date | null;
53
+ } | {
54
+ email: string;
55
+ permissions: string[];
56
+ expiresAt?: Date | null;
57
+ };
58
+ /**
59
+ * Manages the sub-users of a server or server group.
60
+ *
61
+ * Access via `server.subUsers`.
62
+ *
63
+ * @example
64
+ * ```ts ignore
65
+ * await server.subUsers.add({ email: 'teammate@example.com', permissions: ['server.console.read'] });
66
+ * const subUsers = await server.subUsers.list();
67
+ * ```
68
+ */
69
+ export declare class ServerUserManager {
70
+ private readonly basePath;
71
+ private readonly http;
72
+ /** @internal */
73
+ constructor(basePath: string, http: HttpClient);
74
+ /** List the resource's sub-users. */
75
+ list(): Promise<ServerUser[]>;
76
+ /** Fetch a single sub-user by user ID. */
77
+ get(userId: NanoID): Promise<ServerUser>;
78
+ /**
79
+ * Add a sub-user, or add permissions to an existing one.
80
+ *
81
+ * Identify the user by `userId`, or by `email` (an unknown email invites a new user,
82
+ * which requires `user.manage` and a configured email transport). Existing grants are kept.
83
+ */
84
+ add(input: AddServerUserInput): Promise<ServerUser>;
85
+ /**
86
+ * Replace a sub-user's permission set. Grants not listed are revoked.
87
+ *
88
+ * @param userId The sub-user's NanoID.
89
+ * @param payload The exact permission set to grant, and an optional expiry.
90
+ */
91
+ update(userId: NanoID, payload: {
92
+ permissions: string[];
93
+ expiresAt?: Date | null;
94
+ }): Promise<ServerUser>;
95
+ /** Remove a sub-user, revoking all their grants at the resource scope. */
96
+ remove(userId: NanoID): Promise<void>;
97
+ }
98
+ export {};
99
+ //# sourceMappingURL=sub-users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-users.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/sub-users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D,6DAA6D;AAC7D,UAAU,mBAAmB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,IAAI,EAAE,cAAc,CAAC;CACrB;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC/B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,6DAA6D;IAC7D,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACtB,2BAA2B;IAC3B,SAAgB,IAAI,EAAE,IAAI,CAAC;IAC3B,kEAAkE;IAClE,SAAgB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/C,6DAA6D;IAC7D,SAAgB,IAAI,EAAE,cAAc,CAAC;IAErC,gBAAgB;gBACG,IAAI,EAAE,cAAc;CASvC;AAED,uGAAuG;AACvG,MAAM,MAAM,kBAAkB,GAC3B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,GAClE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAOrE;;;;;;;;;;GAUG;AACH,qBAAa,iBAAiB;IAG5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHtB,gBAAgB;gBAEE,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU;IAGlC,qCAAqC;IACxB,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAK1C,0CAA0C;IAC7B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKrD;;;;;OAKG;IACU,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAWhE;;;;;OAKG;IACU,MAAM,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,GACzD,OAAO,CAAC,UAAU,CAAC;IAQtB,0EAA0E;IAC7D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}