@sylphx/management 0.1.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 (62) hide show
  1. package/README.md +138 -0
  2. package/dist/client.d.ts +41 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +91 -0
  5. package/dist/errors.d.ts +9 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +12 -0
  8. package/dist/index.d.ts +21 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +20 -0
  11. package/dist/request.d.ts +5 -0
  12. package/dist/request.d.ts.map +1 -0
  13. package/dist/request.js +1 -0
  14. package/dist/resources/config.d.ts +30 -0
  15. package/dist/resources/config.d.ts.map +1 -0
  16. package/dist/resources/config.js +62 -0
  17. package/dist/resources/databases.d.ts +26 -0
  18. package/dist/resources/databases.d.ts.map +1 -0
  19. package/dist/resources/databases.js +29 -0
  20. package/dist/resources/deployments.d.ts +24 -0
  21. package/dist/resources/deployments.d.ts.map +1 -0
  22. package/dist/resources/deployments.js +30 -0
  23. package/dist/resources/domains.d.ts +30 -0
  24. package/dist/resources/domains.d.ts.map +1 -0
  25. package/dist/resources/domains.js +46 -0
  26. package/dist/resources/env-vars.d.ts +19 -0
  27. package/dist/resources/env-vars.d.ts.map +1 -0
  28. package/dist/resources/env-vars.js +30 -0
  29. package/dist/resources/environments.d.ts +16 -0
  30. package/dist/resources/environments.d.ts.map +1 -0
  31. package/dist/resources/environments.js +24 -0
  32. package/dist/resources/logs.d.ts +13 -0
  33. package/dist/resources/logs.d.ts.map +1 -0
  34. package/dist/resources/logs.js +20 -0
  35. package/dist/resources/org.d.ts +15 -0
  36. package/dist/resources/org.d.ts.map +1 -0
  37. package/dist/resources/org.js +25 -0
  38. package/dist/resources/projects.d.ts +19 -0
  39. package/dist/resources/projects.d.ts.map +1 -0
  40. package/dist/resources/projects.js +19 -0
  41. package/dist/resources/resources.d.ts +26 -0
  42. package/dist/resources/resources.d.ts.map +1 -0
  43. package/dist/resources/resources.js +32 -0
  44. package/dist/resources/services.d.ts +21 -0
  45. package/dist/resources/services.d.ts.map +1 -0
  46. package/dist/resources/services.js +30 -0
  47. package/dist/resources/storage.d.ts +21 -0
  48. package/dist/resources/storage.d.ts.map +1 -0
  49. package/dist/resources/storage.js +25 -0
  50. package/dist/resources/tasks.d.ts +42 -0
  51. package/dist/resources/tasks.d.ts.map +1 -0
  52. package/dist/resources/tasks.js +49 -0
  53. package/dist/resources/user.d.ts +9 -0
  54. package/dist/resources/user.d.ts.map +1 -0
  55. package/dist/resources/user.js +10 -0
  56. package/dist/resources/volumes.d.ts +20 -0
  57. package/dist/resources/volumes.d.ts.map +1 -0
  58. package/dist/resources/volumes.js +19 -0
  59. package/dist/types.d.ts +269 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +4 -0
  62. package/package.json +32 -0
package/README.md ADDED
@@ -0,0 +1,138 @@
1
+ # @sylphx/management
2
+
3
+ Programmatic access to the [Sylphx Platform](https://sylphx.com) Management API.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ bun add @sylphx/management
9
+ # or
10
+ npm install @sylphx/management
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ```typescript
16
+ import { SylphxManagement } from '@sylphx/management'
17
+
18
+ const mgmt = new SylphxManagement({
19
+ token: process.env.SYLPHX_TOKEN!,
20
+ // baseUrl: 'https://api.sylphx.com' (default)
21
+ })
22
+
23
+ // List projects
24
+ const projects = await mgmt.projects.list()
25
+
26
+ // Trigger a deployment
27
+ await mgmt.deployments.trigger('my-project-id', 'production')
28
+
29
+ // List env vars
30
+ const vars = await mgmt.envVars.list('my-project-id', 'production')
31
+ ```
32
+
33
+ ## API
34
+
35
+ All methods are namespaced under the `SylphxManagement` instance:
36
+
37
+ ### `mgmt.user`
38
+ - `whoami()` — Get current user and orgs
39
+
40
+ ### `mgmt.projects`
41
+ - `list()` — List all projects
42
+ - `create(data)` — Create a new project
43
+ - `delete(id)` — Delete a project
44
+
45
+ ### `mgmt.deployments`
46
+ - `status(projectId)` — Get deployment status
47
+ - `trigger(projectId, envType)` — Trigger a deploy
48
+ - `history(projectId, envType)` — Get deployment history
49
+ - `rollback(projectId, body)` — Rollback to a previous deploy
50
+
51
+ ### `mgmt.environments`
52
+ - `list(projectId)` — List environments
53
+ - `resolveId(projectId, envType)` — Resolve envType → envId
54
+ - `promote(projectId, targetEnvId, sourceEnvId)` — Promote an environment
55
+
56
+ ### `mgmt.envVars`
57
+ - `list(projectId, envType)` — List env vars
58
+ - `set(projectId, key, value, envType, secret?)` — Set a single env var
59
+ - `setMany(projectId, vars, envType)` — Batch-set env vars
60
+ - `delete(projectId, key, envType)` — Delete an env var
61
+
62
+ ### `mgmt.domains`
63
+ - `list(projectId, envType?)` — List apex domains
64
+ - `create(projectId, apexDomain, envType?)` — Register a domain
65
+ - `addHostname(projectId, domainId, hostname, opts?)` — Add a hostname
66
+ - `removeHostname(projectId, domainId, hostnameId)` — Remove a hostname
67
+ - `checkHostname(projectId, domainId, hostnameId)` — Check DNS for hostname
68
+ - `enableEmail(projectId, domainId, opts?)` — Enable email sending
69
+ - `checkEmail(projectId, domainId)` — Check email DNS propagation
70
+ - `disableEmail(projectId, domainId)` — Disable email sending
71
+
72
+ ### `mgmt.databases`
73
+ - `list()` — List all databases
74
+ - `create(data)` — Provision a database
75
+ - `get(id)` — Get database details
76
+ - `delete(id)` — Delete a database
77
+ - `branch(id, data)` — Branch a database
78
+
79
+ ### `mgmt.services`
80
+ - `list(projectId)` — List services
81
+ - `get(projectId, name)` — Get a service
82
+ - `deploy(projectId, name, envType)` — Deploy a service
83
+ - `delete(projectId, name)` — Delete a service
84
+
85
+ ### `mgmt.volumes`
86
+ - `list(projectId)` — List volumes
87
+ - `create(projectId, data)` — Create a volume
88
+ - `delete(projectId, volId)` — Delete a volume
89
+
90
+ ### `mgmt.storage`
91
+ - `list(projectId, envType?)` — List storage resources
92
+ - `create(projectId, data)` — Provision storage
93
+ - `delete(projectId, storageId)` — Delete storage
94
+
95
+ ### `mgmt.config`
96
+ - `list(projectId, envType?)` — List config keys
97
+ - `get(projectId, key, envType?)` — Get a config key
98
+ - `set(projectId, key, value, envType?)` — Set a config key
99
+ - `delete(projectId, key, envType?)` — Delete a config key
100
+
101
+ ### `mgmt.tasks`
102
+ - `list(projectId, envType?)` — List task definitions
103
+ - `create(projectId, data)` — Create/update a task
104
+ - `get(projectId, taskId)` — Get a task
105
+ - `update(projectId, taskId, data)` — Update a task
106
+ - `delete(projectId, taskId)` — Delete a task
107
+
108
+ ### `mgmt.resources`
109
+ - `listBindings(resourceId)` — List resource bindings
110
+ - `bind(resourceId, data)` — Bind a resource to a project env
111
+ - `unbind(resourceId, bindingId)` — Unbind a resource
112
+
113
+ ### `mgmt.org`
114
+ - `current()` — Get current org
115
+ - `listMembers(orgId)` — List org members
116
+ - `inviteMember(orgId, email, role)` — Invite a member
117
+ - `removeMember(orgId, userId)` — Remove a member
118
+
119
+ ### `mgmt.logs`
120
+ - `stream(projectId, envType)` — Get `{ url, token }` for SSE log streaming
121
+
122
+ ## Error Handling
123
+
124
+ ```typescript
125
+ import { ManagementApiError } from '@sylphx/management'
126
+
127
+ try {
128
+ await mgmt.projects.delete('non-existent')
129
+ } catch (err) {
130
+ if (err instanceof ManagementApiError) {
131
+ console.error(`API Error ${err.status}: ${err.message}`)
132
+ }
133
+ }
134
+ ```
135
+
136
+ ## License
137
+
138
+ MIT
@@ -0,0 +1,41 @@
1
+ import { ConfigResource } from './resources/config.js';
2
+ import { DatabasesResource } from './resources/databases.js';
3
+ import { DeploymentsResource } from './resources/deployments.js';
4
+ import { DomainsResource } from './resources/domains.js';
5
+ import { EnvVarsResource } from './resources/env-vars.js';
6
+ import { EnvironmentsResource } from './resources/environments.js';
7
+ import { LogsResource } from './resources/logs.js';
8
+ import { OrgResource } from './resources/org.js';
9
+ import { ProjectsResource } from './resources/projects.js';
10
+ import { ResourceBindingsResource } from './resources/resources.js';
11
+ import { ServicesResource } from './resources/services.js';
12
+ import { StoragesResource } from './resources/storage.js';
13
+ import { TasksResource } from './resources/tasks.js';
14
+ import { UserResource } from './resources/user.js';
15
+ import { VolumesResource } from './resources/volumes.js';
16
+ export interface SylphxManagementOptions {
17
+ token: string;
18
+ /** Base URL for the API. Default: 'https://api.sylphx.com' */
19
+ baseUrl?: string;
20
+ /** User-Agent header value. Default: '@sylphx/management/1.0.0' */
21
+ userAgent?: string;
22
+ }
23
+ export declare class SylphxManagement {
24
+ readonly user: UserResource;
25
+ readonly projects: ProjectsResource;
26
+ readonly deployments: DeploymentsResource;
27
+ readonly environments: EnvironmentsResource;
28
+ readonly envVars: EnvVarsResource;
29
+ readonly domains: DomainsResource;
30
+ readonly databases: DatabasesResource;
31
+ readonly services: ServicesResource;
32
+ readonly volumes: VolumesResource;
33
+ readonly storage: StoragesResource;
34
+ readonly config: ConfigResource;
35
+ readonly tasks: TasksResource;
36
+ readonly resources: ResourceBindingsResource;
37
+ readonly org: OrgResource;
38
+ readonly logs: LogsResource;
39
+ constructor(options: SylphxManagementOptions);
40
+ }
41
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,gBAAgB;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAA;IACzC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAA;IAC5C,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;gBAEf,OAAO,EAAE,uBAAuB;CAwE5C"}
package/dist/client.js ADDED
@@ -0,0 +1,91 @@
1
+ import { ApiError } from './errors.js';
2
+ import { ConfigResource } from './resources/config.js';
3
+ import { DatabasesResource } from './resources/databases.js';
4
+ import { DeploymentsResource } from './resources/deployments.js';
5
+ import { DomainsResource } from './resources/domains.js';
6
+ import { EnvVarsResource } from './resources/env-vars.js';
7
+ import { EnvironmentsResource } from './resources/environments.js';
8
+ import { LogsResource } from './resources/logs.js';
9
+ import { OrgResource } from './resources/org.js';
10
+ import { ProjectsResource } from './resources/projects.js';
11
+ import { ResourceBindingsResource } from './resources/resources.js';
12
+ import { ServicesResource } from './resources/services.js';
13
+ import { StoragesResource } from './resources/storage.js';
14
+ import { TasksResource } from './resources/tasks.js';
15
+ import { UserResource } from './resources/user.js';
16
+ import { VolumesResource } from './resources/volumes.js';
17
+ export class SylphxManagement {
18
+ user;
19
+ projects;
20
+ deployments;
21
+ environments;
22
+ envVars;
23
+ domains;
24
+ databases;
25
+ services;
26
+ volumes;
27
+ storage;
28
+ config;
29
+ tasks;
30
+ resources;
31
+ org;
32
+ logs;
33
+ constructor(options) {
34
+ const baseUrl = options.baseUrl ?? 'https://api.sylphx.com';
35
+ const userAgent = options.userAgent ?? '@sylphx/management/1.0.0';
36
+ const apiBase = `${baseUrl}/v1`;
37
+ const request = async (method, path, opts) => {
38
+ let url = `${apiBase}${path}`;
39
+ if (opts?.query) {
40
+ const params = new URLSearchParams(opts.query);
41
+ url += `?${params.toString()}`;
42
+ }
43
+ const headers = {
44
+ Authorization: `Bearer ${options.token}`,
45
+ 'Content-Type': 'application/json',
46
+ 'User-Agent': userAgent,
47
+ };
48
+ const res = await fetch(url, {
49
+ method,
50
+ headers,
51
+ body: opts?.body ? JSON.stringify(opts.body) : undefined,
52
+ });
53
+ if (!res.ok) {
54
+ let body;
55
+ const text = await res.text();
56
+ try {
57
+ body = JSON.parse(text);
58
+ }
59
+ catch {
60
+ body = text;
61
+ }
62
+ const message = typeof body === 'object' && body !== null && 'message' in body
63
+ ? String(body['message'])
64
+ : `HTTP ${res.status}`;
65
+ throw new ApiError(res.status, message, body);
66
+ }
67
+ if (res.status === 204) {
68
+ return undefined;
69
+ }
70
+ return res.json();
71
+ };
72
+ // Build resource instances — environments first since others depend on it
73
+ this.environments = new EnvironmentsResource(request);
74
+ this.user = new UserResource(request);
75
+ this.projects = new ProjectsResource(request);
76
+ this.deployments = new DeploymentsResource(request);
77
+ this.envVars = new EnvVarsResource(request);
78
+ this.domains = new DomainsResource(request);
79
+ this.databases = new DatabasesResource(request);
80
+ this.volumes = new VolumesResource(request);
81
+ this.storage = new StoragesResource(request);
82
+ this.org = new OrgResource(request);
83
+ // Resources that depend on environments for envType → envId resolution
84
+ this.services = new ServicesResource(request, this.environments);
85
+ this.config = new ConfigResource(request, this.environments);
86
+ this.tasks = new TasksResource(request, this.environments);
87
+ this.resources = new ResourceBindingsResource(request, this.environments);
88
+ // Logs resource gets baseUrl + token directly (SSE URL generation)
89
+ this.logs = new LogsResource(baseUrl, options.token);
90
+ }
91
+ }
@@ -0,0 +1,9 @@
1
+ export declare class ApiError extends Error {
2
+ readonly status: number;
3
+ readonly body?: unknown | undefined;
4
+ constructor(status: number, message: string, body?: unknown | undefined);
5
+ }
6
+ /** @deprecated Use ApiError */
7
+ export declare const ManagementApiError: typeof ApiError;
8
+ export type ManagementApiError = ApiError;
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aAEjB,MAAM,EAAE,MAAM;aAEd,IAAI,CAAC,EAAE,OAAO;gBAFd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,OAAO,YAAA;CAK/B;AAED,+BAA+B;AAC/B,eAAO,MAAM,kBAAkB,iBAAW,CAAA;AAC1C,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAA"}
package/dist/errors.js ADDED
@@ -0,0 +1,12 @@
1
+ export class ApiError extends Error {
2
+ status;
3
+ body;
4
+ constructor(status, message, body) {
5
+ super(message);
6
+ this.status = status;
7
+ this.body = body;
8
+ this.name = 'ApiError';
9
+ }
10
+ }
11
+ /** @deprecated Use ApiError */
12
+ export const ManagementApiError = ApiError;
@@ -0,0 +1,21 @@
1
+ export type { SylphxManagementOptions } from './client.js';
2
+ export { SylphxManagement } from './client.js';
3
+ export { ApiError, ManagementApiError } from './errors.js';
4
+ export type { RequestFn } from './request.js';
5
+ export { ConfigResource } from './resources/config.js';
6
+ export { DatabasesResource } from './resources/databases.js';
7
+ export { DeploymentsResource } from './resources/deployments.js';
8
+ export { DomainsResource } from './resources/domains.js';
9
+ export { EnvVarsResource } from './resources/env-vars.js';
10
+ export { EnvironmentsResource } from './resources/environments.js';
11
+ export { LogsResource } from './resources/logs.js';
12
+ export { OrgResource } from './resources/org.js';
13
+ export { ProjectsResource } from './resources/projects.js';
14
+ export { ResourceBindingsResource } from './resources/resources.js';
15
+ export { ServicesResource } from './resources/services.js';
16
+ export { StoragesResource } from './resources/storage.js';
17
+ export { TasksResource } from './resources/tasks.js';
18
+ export { UserResource } from './resources/user.js';
19
+ export { VolumesResource } from './resources/volumes.js';
20
+ export type { App, ConfigEntry, Database, DeploymentStatus, DeploymentStatusEnv, DeployResult, DnsRecord, Domain, DomainEmailBinding, DomainHostname, DomainResult, Environment, EnvVar, HostnameInstruction, LogEntry, LogStream, Org, OrgMember, Project, PromoteResult, ResourceBinding, Service, StorageResource, Task, Volume, WhoAmI, } from './types.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAG1D,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,YAAY,EACX,GAAG,EACH,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,MAAM,EACN,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,EACH,SAAS,EACT,OAAO,EACP,aAAa,EACb,eAAe,EACf,OAAO,EACP,eAAe,EACf,IAAI,EACJ,MAAM,EACN,MAAM,GACN,MAAM,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ // Main client
2
+ export { SylphxManagement } from './client.js';
3
+ // Error class
4
+ export { ApiError, ManagementApiError } from './errors.js';
5
+ // Resource classes (for extensibility / type augmentation)
6
+ export { ConfigResource } from './resources/config.js';
7
+ export { DatabasesResource } from './resources/databases.js';
8
+ export { DeploymentsResource } from './resources/deployments.js';
9
+ export { DomainsResource } from './resources/domains.js';
10
+ export { EnvVarsResource } from './resources/env-vars.js';
11
+ export { EnvironmentsResource } from './resources/environments.js';
12
+ export { LogsResource } from './resources/logs.js';
13
+ export { OrgResource } from './resources/org.js';
14
+ export { ProjectsResource } from './resources/projects.js';
15
+ export { ResourceBindingsResource } from './resources/resources.js';
16
+ export { ServicesResource } from './resources/services.js';
17
+ export { StoragesResource } from './resources/storage.js';
18
+ export { TasksResource } from './resources/tasks.js';
19
+ export { UserResource } from './resources/user.js';
20
+ export { VolumesResource } from './resources/volumes.js';
@@ -0,0 +1,5 @@
1
+ export type RequestFn = <T>(method: string, path: string, options?: {
2
+ body?: unknown;
3
+ query?: Record<string, string>;
4
+ }) => Promise<T>;
5
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACT,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B,KACG,OAAO,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { RequestFn } from '../request.js';
2
+ import type { ConfigEntry } from '../types.js';
3
+ import type { EnvironmentsResource } from './environments.js';
4
+ export declare class ConfigResource {
5
+ private readonly request;
6
+ private readonly environments;
7
+ constructor(request: RequestFn, environments: EnvironmentsResource);
8
+ /**
9
+ * List all config keys for a project.
10
+ * Backend uses ?env=<envId> (not ?envType). Resolves envType → envId automatically.
11
+ */
12
+ list(projectId: string, envType?: string): Promise<ConfigEntry[]>;
13
+ /**
14
+ * Get a single config key.
15
+ * Backend uses ?env=<envId> (not ?envType). Resolves envType → envId automatically.
16
+ */
17
+ get(projectId: string, key: string, envType?: string): Promise<ConfigEntry>;
18
+ /**
19
+ * Set a config key.
20
+ * Backend expects { key, value, environmentId } (not envType).
21
+ * Resolves envType → environmentId automatically when envType is provided.
22
+ */
23
+ set(projectId: string, key: string, value: string, envType?: string): Promise<ConfigEntry>;
24
+ /**
25
+ * Delete a config key.
26
+ * Backend uses ?env=<envId> (not ?envType). Resolves envType → envId automatically.
27
+ */
28
+ delete(projectId: string, key: string, envType?: string): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/resources/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,qBAAa,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,oBAAoB;IAGpD;;;OAGG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAcvE;;;OAGG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAajF;;;;OAIG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAUhG;;;OAGG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAY7E"}
@@ -0,0 +1,62 @@
1
+ export class ConfigResource {
2
+ request;
3
+ environments;
4
+ constructor(request, environments) {
5
+ this.request = request;
6
+ this.environments = environments;
7
+ }
8
+ /**
9
+ * List all config keys for a project.
10
+ * Backend uses ?env=<envId> (not ?envType). Resolves envType → envId automatically.
11
+ */
12
+ async list(projectId, envType) {
13
+ const query = {};
14
+ if (envType) {
15
+ const envId = await this.environments.resolveId(projectId, envType);
16
+ if (envId)
17
+ query['env'] = envId;
18
+ }
19
+ const res = await this.request('GET', `/projects/${encodeURIComponent(projectId)}/config`, { query });
20
+ return Array.isArray(res) ? res : (res.data ?? []);
21
+ }
22
+ /**
23
+ * Get a single config key.
24
+ * Backend uses ?env=<envId> (not ?envType). Resolves envType → envId automatically.
25
+ */
26
+ async get(projectId, key, envType) {
27
+ const query = {};
28
+ if (envType) {
29
+ const envId = await this.environments.resolveId(projectId, envType);
30
+ if (envId)
31
+ query['env'] = envId;
32
+ }
33
+ return this.request('GET', `/projects/${encodeURIComponent(projectId)}/config/${encodeURIComponent(key)}`, { query });
34
+ }
35
+ /**
36
+ * Set a config key.
37
+ * Backend expects { key, value, environmentId } (not envType).
38
+ * Resolves envType → environmentId automatically when envType is provided.
39
+ */
40
+ async set(projectId, key, value, envType) {
41
+ let environmentId = null;
42
+ if (envType) {
43
+ environmentId = await this.environments.resolveId(projectId, envType);
44
+ }
45
+ return this.request('POST', `/projects/${encodeURIComponent(projectId)}/config`, {
46
+ body: { key, value, environmentId },
47
+ });
48
+ }
49
+ /**
50
+ * Delete a config key.
51
+ * Backend uses ?env=<envId> (not ?envType). Resolves envType → envId automatically.
52
+ */
53
+ async delete(projectId, key, envType) {
54
+ const query = {};
55
+ if (envType) {
56
+ const envId = await this.environments.resolveId(projectId, envType);
57
+ if (envId)
58
+ query['env'] = envId;
59
+ }
60
+ return this.request('DELETE', `/projects/${encodeURIComponent(projectId)}/config/${encodeURIComponent(key)}`, { query });
61
+ }
62
+ }
@@ -0,0 +1,26 @@
1
+ import type { RequestFn } from '../request.js';
2
+ import type { Database } from '../types.js';
3
+ export declare class DatabasesResource {
4
+ private readonly request;
5
+ constructor(request: RequestFn);
6
+ /** List all databases (via unified Resources API) */
7
+ list(): Promise<Database[]>;
8
+ /** Provision a new database (via unified Resources API) */
9
+ create(data: {
10
+ name: string;
11
+ env: string;
12
+ tier: string;
13
+ storageGb: number;
14
+ }): Promise<Database>;
15
+ /** Get database details (via unified Resources API) */
16
+ get(id: string): Promise<Database>;
17
+ /** Delete a database (via unified Resources API) */
18
+ delete(id: string): Promise<void>;
19
+ /** Branch a database for staging/preview (via unified Resources API) */
20
+ branch(id: string, data: {
21
+ name: string;
22
+ env: string;
23
+ fast?: boolean;
24
+ }): Promise<Database>;
25
+ }
26
+ //# sourceMappingURL=databases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../src/resources/databases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,qBAAa,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,SAAS;IAE/C,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IASjC,2DAA2D;IACrD,MAAM,CAAC,IAAI,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIrB,uDAAuD;IACjD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIxC,oDAAoD;IAC9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,wEAAwE;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAKhG"}
@@ -0,0 +1,29 @@
1
+ export class DatabasesResource {
2
+ request;
3
+ constructor(request) {
4
+ this.request = request;
5
+ }
6
+ /** List all databases (via unified Resources API) */
7
+ async list() {
8
+ const res = await this.request('GET', '/resources', { query: { kind: 'database' } });
9
+ return Array.isArray(res) ? res : (res.data ?? []);
10
+ }
11
+ /** Provision a new database (via unified Resources API) */
12
+ async create(data) {
13
+ return this.request('POST', '/resources', { body: { ...data, kind: 'database' } });
14
+ }
15
+ /** Get database details (via unified Resources API) */
16
+ async get(id) {
17
+ return this.request('GET', `/resources/${encodeURIComponent(id)}`);
18
+ }
19
+ /** Delete a database (via unified Resources API) */
20
+ async delete(id) {
21
+ return this.request('DELETE', `/resources/${encodeURIComponent(id)}`);
22
+ }
23
+ /** Branch a database for staging/preview (via unified Resources API) */
24
+ async branch(id, data) {
25
+ return this.request('POST', `/resources/${encodeURIComponent(id)}/branch`, {
26
+ body: data,
27
+ });
28
+ }
29
+ }
@@ -0,0 +1,24 @@
1
+ import type { RequestFn } from '../request.js';
2
+ import type { DeploymentStatus, DeployResult } from '../types.js';
3
+ export declare class DeploymentsResource {
4
+ private readonly request;
5
+ constructor(request: RequestFn);
6
+ /** Get deployment status for a project */
7
+ status(projectId: string): Promise<DeploymentStatus>;
8
+ /** Trigger a deploy for a project environment */
9
+ trigger(projectId: string, envType: string): Promise<DeployResult>;
10
+ /** Get deployment history for a project environment */
11
+ history(projectId: string, envType: string): Promise<DeployResult[]>;
12
+ /**
13
+ * Rollback to a previous deployment.
14
+ * Accepts envId (rollback env to previous deploy), deploymentRecordId, or buildRecordId.
15
+ * One of these is required.
16
+ */
17
+ rollback(projectId: string, body: {
18
+ envId?: string;
19
+ deploymentRecordId?: string;
20
+ buildRecordId?: string;
21
+ serviceId?: string;
22
+ }): Promise<DeployResult>;
23
+ }
24
+ //# sourceMappingURL=deployments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/resources/deployments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEjE,qBAAa,mBAAmB;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,SAAS;IAE/C,0CAA0C;IACpC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI1D,iDAAiD;IAC3C,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAMxE,uDAAuD;IACjD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM1E;;;;OAIG;IACG,QAAQ,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,kBAAkB,CAAC,EAAE,MAAM,CAAA;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,SAAS,CAAC,EAAE,MAAM,CAAA;KAClB,GACC,OAAO,CAAC,YAAY,CAAC;CAGxB"}
@@ -0,0 +1,30 @@
1
+ export class DeploymentsResource {
2
+ request;
3
+ constructor(request) {
4
+ this.request = request;
5
+ }
6
+ /** Get deployment status for a project */
7
+ async status(projectId) {
8
+ return this.request('GET', `/projects/${projectId}/status`);
9
+ }
10
+ /** Trigger a deploy for a project environment */
11
+ async trigger(projectId, envType) {
12
+ return this.request('POST', `/projects/${projectId}/deploy`, {
13
+ body: { envType },
14
+ });
15
+ }
16
+ /** Get deployment history for a project environment */
17
+ async history(projectId, envType) {
18
+ return this.request('GET', `/projects/${projectId}/deployments`, {
19
+ query: { envType },
20
+ });
21
+ }
22
+ /**
23
+ * Rollback to a previous deployment.
24
+ * Accepts envId (rollback env to previous deploy), deploymentRecordId, or buildRecordId.
25
+ * One of these is required.
26
+ */
27
+ async rollback(projectId, body) {
28
+ return this.request('POST', `/projects/${projectId}/rollback`, { body });
29
+ }
30
+ }
@@ -0,0 +1,30 @@
1
+ import type { RequestFn } from '../request.js';
2
+ import type { DomainEmailBinding, DomainHostname, DomainResult } from '../types.js';
3
+ export declare class DomainsResource {
4
+ private readonly request;
5
+ constructor(request: RequestFn);
6
+ /** List all apex domains for a project environment */
7
+ list(projectId: string, envType?: string): Promise<DomainResult[]>;
8
+ /** Register an apex domain for a project (full domain object with DNS records) */
9
+ create(projectId: string, apexDomain: string, envType?: string): Promise<DomainResult>;
10
+ /** Add a hostname binding to an existing domain */
11
+ addHostname(projectId: string, domainId: string, hostname: string, opts?: {
12
+ isPrimary?: boolean;
13
+ redirectTo?: string;
14
+ envType?: string;
15
+ }): Promise<DomainHostname>;
16
+ /** Remove a hostname binding */
17
+ removeHostname(projectId: string, domainId: string, hostnameId: string): Promise<void>;
18
+ /** Trigger DNS check for a hostname */
19
+ checkHostname(projectId: string, domainId: string, hostnameId: string): Promise<DomainHostname>;
20
+ /** Enable email sending for a domain (generates DKIM keypair) */
21
+ enableEmail(projectId: string, domainId: string, opts?: {
22
+ defaultFromEmail?: string;
23
+ defaultFromName?: string;
24
+ }): Promise<DomainEmailBinding>;
25
+ /** Check DKIM DNS propagation and load into Stalwart */
26
+ checkEmail(projectId: string, domainId: string): Promise<DomainEmailBinding>;
27
+ /** Disable email sending for a domain */
28
+ disableEmail(projectId: string, domainId: string): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/resources/domains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEnF,qBAAa,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,SAAS;IAE/C,sDAAsD;IAChD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,SAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM9E,kFAAkF;IAC5E,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,SAAe,GACpB,OAAO,CAAC,YAAY,CAAC;IAMxB,mDAAmD;IAC7C,WAAW,CAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnE,OAAO,CAAC,cAAc,CAAC;IAY1B,gCAAgC;IAC1B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5F,uCAAuC;IACjC,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC;IAO1B,iEAAiE;IAC3D,WAAW,CAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5D,OAAO,CAAC,kBAAkB,CAAC;IAQ9B,wDAAwD;IAClD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOlF,yCAAyC;IACnC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtE"}