@sylphx/management 0.1.0 → 0.2.1

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 (259) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/LICENSE +21 -0
  3. package/README.md +157 -101
  4. package/dist/admin.d.ts +168 -0
  5. package/dist/admin.d.ts.map +1 -0
  6. package/dist/admin.js +123 -0
  7. package/dist/adminBootstrap.d.ts +46 -0
  8. package/dist/adminBootstrap.d.ts.map +1 -0
  9. package/dist/adminBootstrap.js +33 -0
  10. package/dist/adminBuilds.d.ts +72 -0
  11. package/dist/adminBuilds.d.ts.map +1 -0
  12. package/dist/adminBuilds.js +29 -0
  13. package/dist/adminEnvServices.d.ts +41 -0
  14. package/dist/adminEnvServices.d.ts.map +1 -0
  15. package/dist/adminEnvServices.js +22 -0
  16. package/dist/adminRateLimits.d.ts +61 -0
  17. package/dist/adminRateLimits.d.ts.map +1 -0
  18. package/dist/adminRateLimits.js +44 -0
  19. package/dist/adminReconcile.d.ts +45 -0
  20. package/dist/adminReconcile.d.ts.map +1 -0
  21. package/dist/adminReconcile.js +20 -0
  22. package/dist/adminResources.d.ts +97 -0
  23. package/dist/adminResources.d.ts.map +1 -0
  24. package/dist/adminResources.js +40 -0
  25. package/dist/adminSecrets.d.ts +60 -0
  26. package/dist/adminSecrets.d.ts.map +1 -0
  27. package/dist/adminSecrets.js +43 -0
  28. package/dist/adminTenants.d.ts +41 -0
  29. package/dist/adminTenants.d.ts.map +1 -0
  30. package/dist/adminTenants.js +29 -0
  31. package/dist/ai.d.ts +148 -0
  32. package/dist/ai.d.ts.map +1 -0
  33. package/dist/ai.js +29 -0
  34. package/dist/analytics.d.ts +49 -0
  35. package/dist/analytics.d.ts.map +1 -0
  36. package/dist/analytics.js +23 -0
  37. package/dist/auth.d.ts +39 -0
  38. package/dist/auth.d.ts.map +1 -0
  39. package/dist/auth.js +27 -0
  40. package/dist/authSettings.d.ts +71 -0
  41. package/dist/authSettings.d.ts.map +1 -0
  42. package/dist/authSettings.js +39 -0
  43. package/dist/backups.d.ts +66 -0
  44. package/dist/backups.d.ts.map +1 -0
  45. package/dist/backups.js +32 -0
  46. package/dist/billing.d.ts +105 -0
  47. package/dist/billing.d.ts.map +1 -0
  48. package/dist/billing.js +42 -0
  49. package/dist/billingSettings.d.ts +78 -0
  50. package/dist/billingSettings.d.ts.map +1 -0
  51. package/dist/billingSettings.js +54 -0
  52. package/dist/branchDatabases.d.ts +53 -0
  53. package/dist/branchDatabases.d.ts.map +1 -0
  54. package/dist/branchDatabases.js +38 -0
  55. package/dist/certs.d.ts +63 -0
  56. package/dist/certs.d.ts.map +1 -0
  57. package/dist/certs.js +28 -0
  58. package/dist/ciSettings.d.ts +77 -0
  59. package/dist/ciSettings.d.ts.map +1 -0
  60. package/dist/ciSettings.js +41 -0
  61. package/dist/client.d.ts +36 -38
  62. package/dist/client.d.ts.map +1 -1
  63. package/dist/client.js +32 -90
  64. package/dist/consent.d.ts +111 -0
  65. package/dist/consent.d.ts.map +1 -0
  66. package/dist/consent.js +35 -0
  67. package/dist/databases.d.ts +17 -0
  68. package/dist/databases.d.ts.map +1 -0
  69. package/dist/databases.js +32 -0
  70. package/dist/deployments.d.ts +22 -0
  71. package/dist/deployments.d.ts.map +1 -0
  72. package/dist/deployments.js +39 -0
  73. package/dist/domains.d.ts +26 -0
  74. package/dist/domains.d.ts.map +1 -0
  75. package/dist/domains.js +39 -0
  76. package/dist/edgeDeployments.d.ts +43 -0
  77. package/dist/edgeDeployments.d.ts.map +1 -0
  78. package/dist/edgeDeployments.js +32 -0
  79. package/dist/email.d.ts +45 -0
  80. package/dist/email.d.ts.map +1 -0
  81. package/dist/email.js +21 -0
  82. package/dist/engagement.d.ts +100 -0
  83. package/dist/engagement.d.ts.map +1 -0
  84. package/dist/engagement.js +28 -0
  85. package/dist/envVars.d.ts +17 -0
  86. package/dist/envVars.d.ts.map +1 -0
  87. package/dist/envVars.js +34 -0
  88. package/dist/environments.d.ts +41 -0
  89. package/dist/environments.d.ts.map +1 -0
  90. package/dist/environments.js +54 -0
  91. package/dist/errors.d.ts +8 -3
  92. package/dist/errors.d.ts.map +1 -1
  93. package/dist/errors.js +8 -2
  94. package/dist/experiments.d.ts +80 -0
  95. package/dist/experiments.d.ts.map +1 -0
  96. package/dist/experiments.js +23 -0
  97. package/dist/flags.d.ts +85 -0
  98. package/dist/flags.d.ts.map +1 -0
  99. package/dist/flags.js +25 -0
  100. package/dist/functions.d.ts +39 -0
  101. package/dist/functions.d.ts.map +1 -0
  102. package/dist/functions.js +40 -0
  103. package/dist/github.d.ts +33 -0
  104. package/dist/github.d.ts.map +1 -0
  105. package/dist/github.js +22 -0
  106. package/dist/http.d.ts +49 -0
  107. package/dist/http.d.ts.map +1 -0
  108. package/dist/http.js +97 -0
  109. package/dist/index.d.ts +85 -20
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +86 -20
  112. package/dist/kv.d.ts +66 -0
  113. package/dist/kv.d.ts.map +1 -0
  114. package/dist/kv.js +36 -0
  115. package/dist/logs.d.ts +14 -0
  116. package/dist/logs.d.ts.map +1 -0
  117. package/dist/logs.js +17 -0
  118. package/dist/management.d.ts +55 -0
  119. package/dist/management.d.ts.map +1 -0
  120. package/dist/management.js +31 -0
  121. package/dist/monitoring.d.ts +65 -0
  122. package/dist/monitoring.d.ts.map +1 -0
  123. package/dist/monitoring.js +29 -0
  124. package/dist/newsletter.d.ts +279 -0
  125. package/dist/newsletter.d.ts.map +1 -0
  126. package/dist/newsletter.js +98 -0
  127. package/dist/notifications.d.ts +30 -0
  128. package/dist/notifications.d.ts.map +1 -0
  129. package/dist/notifications.js +19 -0
  130. package/dist/oidc.d.ts +46 -0
  131. package/dist/oidc.d.ts.map +1 -0
  132. package/dist/oidc.js +25 -0
  133. package/dist/organizations.d.ts +24 -0
  134. package/dist/organizations.d.ts.map +1 -0
  135. package/dist/organizations.js +42 -0
  136. package/dist/plans.d.ts +66 -0
  137. package/dist/plans.d.ts.map +1 -0
  138. package/dist/plans.js +42 -0
  139. package/dist/privacy.d.ts +138 -0
  140. package/dist/privacy.d.ts.map +1 -0
  141. package/dist/privacy.js +41 -0
  142. package/dist/projects.d.ts +14 -0
  143. package/dist/projects.d.ts.map +1 -0
  144. package/dist/projects.js +22 -0
  145. package/dist/realtime.d.ts +33 -0
  146. package/dist/realtime.d.ts.map +1 -0
  147. package/dist/realtime.js +19 -0
  148. package/dist/referrals.d.ts +100 -0
  149. package/dist/referrals.d.ts.map +1 -0
  150. package/dist/referrals.js +33 -0
  151. package/dist/refresh.d.ts +44 -0
  152. package/dist/refresh.d.ts.map +1 -0
  153. package/dist/refresh.js +33 -0
  154. package/dist/remoteConfig.d.ts +15 -0
  155. package/dist/remoteConfig.d.ts.map +1 -0
  156. package/dist/remoteConfig.js +35 -0
  157. package/dist/resourceBindings.d.ts +19 -0
  158. package/dist/resourceBindings.d.ts.map +1 -0
  159. package/dist/resourceBindings.js +24 -0
  160. package/dist/runners.d.ts +60 -0
  161. package/dist/runners.d.ts.map +1 -0
  162. package/dist/runners.js +17 -0
  163. package/dist/saml.d.ts +44 -0
  164. package/dist/saml.d.ts.map +1 -0
  165. package/dist/saml.js +77 -0
  166. package/dist/sandboxes.d.ts +15 -0
  167. package/dist/sandboxes.d.ts.map +1 -0
  168. package/dist/sandboxes.js +18 -0
  169. package/dist/search.d.ts +66 -0
  170. package/dist/search.d.ts.map +1 -0
  171. package/dist/search.js +29 -0
  172. package/dist/secrets.d.ts +50 -0
  173. package/dist/secrets.d.ts.map +1 -0
  174. package/dist/secrets.js +61 -0
  175. package/dist/security.d.ts +58 -0
  176. package/dist/security.d.ts.map +1 -0
  177. package/dist/security.js +49 -0
  178. package/dist/serviceTokenRequests.d.ts +71 -0
  179. package/dist/serviceTokenRequests.d.ts.map +1 -0
  180. package/dist/serviceTokenRequests.js +43 -0
  181. package/dist/serviceTokens.d.ts +65 -0
  182. package/dist/serviceTokens.d.ts.map +1 -0
  183. package/dist/serviceTokens.js +22 -0
  184. package/dist/services.d.ts +10 -0
  185. package/dist/services.d.ts.map +1 -0
  186. package/dist/services.js +15 -0
  187. package/dist/sessionReplay.d.ts +116 -0
  188. package/dist/sessionReplay.d.ts.map +1 -0
  189. package/dist/sessionReplay.js +29 -0
  190. package/dist/storage.d.ts +12 -0
  191. package/dist/storage.d.ts.map +1 -0
  192. package/dist/storage.js +10 -0
  193. package/dist/tasks.d.ts +29 -0
  194. package/dist/tasks.d.ts.map +1 -0
  195. package/dist/tasks.js +29 -0
  196. package/dist/types.d.ts +59 -155
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/types.js +17 -3
  199. package/dist/user.d.ts +99 -0
  200. package/dist/user.d.ts.map +1 -0
  201. package/dist/user.js +58 -0
  202. package/dist/users.d.ts +9 -0
  203. package/dist/users.d.ts.map +1 -0
  204. package/dist/users.js +11 -0
  205. package/dist/volumes.d.ts +16 -0
  206. package/dist/volumes.d.ts.map +1 -0
  207. package/dist/volumes.js +9 -0
  208. package/dist/webhooks.d.ts +77 -0
  209. package/dist/webhooks.d.ts.map +1 -0
  210. package/dist/webhooks.js +27 -0
  211. package/package.json +194 -5
  212. package/dist/request.d.ts +0 -5
  213. package/dist/request.d.ts.map +0 -1
  214. package/dist/request.js +0 -1
  215. package/dist/resources/config.d.ts +0 -30
  216. package/dist/resources/config.d.ts.map +0 -1
  217. package/dist/resources/config.js +0 -62
  218. package/dist/resources/databases.d.ts +0 -26
  219. package/dist/resources/databases.d.ts.map +0 -1
  220. package/dist/resources/databases.js +0 -29
  221. package/dist/resources/deployments.d.ts +0 -24
  222. package/dist/resources/deployments.d.ts.map +0 -1
  223. package/dist/resources/deployments.js +0 -30
  224. package/dist/resources/domains.d.ts +0 -30
  225. package/dist/resources/domains.d.ts.map +0 -1
  226. package/dist/resources/domains.js +0 -46
  227. package/dist/resources/env-vars.d.ts +0 -19
  228. package/dist/resources/env-vars.d.ts.map +0 -1
  229. package/dist/resources/env-vars.js +0 -30
  230. package/dist/resources/environments.d.ts +0 -16
  231. package/dist/resources/environments.d.ts.map +0 -1
  232. package/dist/resources/environments.js +0 -24
  233. package/dist/resources/logs.d.ts +0 -13
  234. package/dist/resources/logs.d.ts.map +0 -1
  235. package/dist/resources/logs.js +0 -20
  236. package/dist/resources/org.d.ts +0 -15
  237. package/dist/resources/org.d.ts.map +0 -1
  238. package/dist/resources/org.js +0 -25
  239. package/dist/resources/projects.d.ts +0 -19
  240. package/dist/resources/projects.d.ts.map +0 -1
  241. package/dist/resources/projects.js +0 -19
  242. package/dist/resources/resources.d.ts +0 -26
  243. package/dist/resources/resources.d.ts.map +0 -1
  244. package/dist/resources/resources.js +0 -32
  245. package/dist/resources/services.d.ts +0 -21
  246. package/dist/resources/services.d.ts.map +0 -1
  247. package/dist/resources/services.js +0 -30
  248. package/dist/resources/storage.d.ts +0 -21
  249. package/dist/resources/storage.d.ts.map +0 -1
  250. package/dist/resources/storage.js +0 -25
  251. package/dist/resources/tasks.d.ts +0 -42
  252. package/dist/resources/tasks.d.ts.map +0 -1
  253. package/dist/resources/tasks.js +0 -49
  254. package/dist/resources/user.d.ts +0 -9
  255. package/dist/resources/user.d.ts.map +0 -1
  256. package/dist/resources/user.js +0 -10
  257. package/dist/resources/volumes.d.ts +0 -20
  258. package/dist/resources/volumes.d.ts.map +0 -1
  259. package/dist/resources/volumes.js +0 -19
package/CHANGELOG.md ADDED
@@ -0,0 +1,88 @@
1
+ # @sylphx/management
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`c4471cf`](https://github.com/SylphxAI/platform/commit/c4471cf729a2a60865d0df5bbf04b87f55d57858) Thanks [@shtse8](https://github.com/shtse8)! - Pure-FP `createClient` + free-function rewrite (ADR-077). Adds 39 capability namespaces — billing, certs, email, monitoring, notifications, backups, kv, flags, webhooks, secrets, realtime, serviceTokens, runners, experiments, analytics, oidc, and ten user-facing namespaces. Tenant provisioning migrated to service-token auth (the legacy `/admin/bootstrap` route is retired); platform admin bootstrap now follows the Appwrite pattern with the `X-Sylphx-Project-Id` header. New audit-source filter and webhook signature-algorithm versioning. Wave 1 domains consume `@sylphx/contract` directly; schemas widened to production reality (Wave 2b). Sends `Content-Type` only when a body is present; always sets `Accept`.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [[`c4471cf`](https://github.com/SylphxAI/platform/commit/c4471cf729a2a60865d0df5bbf04b87f55d57858)]:
12
+ - @sylphx/contract@0.2.0
13
+
14
+ ## 0.2.0-beta.0 — 2026-04-24
15
+
16
+ ADR-089 Phase 2 / 3 / 4a / 4b — **100% PaaS endpoint coverage**. The
17
+ `check-paas-sdk-coverage.ts` guard flipped from advisory to strict; the
18
+ Management SDK now covers every public `apps/api/src/server/platform/routes/`
19
+ namespace (35/35 non-excluded, 6 internal-only exclusions with written
20
+ rationale).
21
+
22
+ ### New namespaces (14)
23
+
24
+ - `admin` — operator org / user / credit / audit administration
25
+ - `auth` (alias of `authSettings`) — OAuth providers + project auth policy + stats
26
+ - `authSettings` — same surface, ergonomic name
27
+ - `billingSettings` — business info, spending caps, invoice prefs
28
+ - `branchDatabases` — per-branch Neon/CNPG database bindings (ADR-070)
29
+ - `ciSettings` — org + repo CI configuration (runners, secrets, policy)
30
+ - `edgeDeployments` — Vercel-edge / Workers-style function releases
31
+ - `github` — GitHub App installation + repo discovery
32
+ - `kv` — KV admin (operator dashboard; distinct from BaaS `kv` in `@sylphx/sdk`)
33
+ - `management` — self-hosted runtime database backups / PITR restore (ADR-070)
34
+ - `plans` — subscription plan catalog + plan changes
35
+ - `refresh` — refresh-token rotation + sign-out (ADR-059 §1.1)
36
+ - `serviceTokenRequests` — ADR-059 §3 approval workflow for service tokens
37
+ - `user` — authenticated-user self-service (profile, sessions, MFA, connected identities)
38
+
39
+ ### New methods on existing namespaces
40
+
41
+ - `backups.restorePointInTime`, `backups.restoreInPlace`
42
+ - `certs.autoProvision`, `certs.getAutoProvisionStatus`
43
+ - `deployments.cancel` (in-flight build cancellation)
44
+ - `environments.clone` (deep-copy env vars + secrets + bindings)
45
+
46
+ ### Coverage guard
47
+
48
+ - `scripts/check-paas-sdk-coverage.ts`: strict mode enabled (non-zero
49
+ exit on any non-excluded gap). Namespace matching normalises kebab ↔
50
+ camelCase so `service-tokens` (route) matches `serviceTokens.ts` (SDK).
51
+ Six internal-only namespaces are excluded with one-line rationales:
52
+ `misc`, `internal`, `cron`, `image-opt`, `break-glass`, `challenge`.
53
+
54
+ ### Migration notes
55
+
56
+ - No breaking changes. Existing imports continue to work.
57
+ - Bumped to `0.2.0-beta.0` to signal a meaningful surface expansion;
58
+ the package remains in the 0.x beta line (shape not frozen).
59
+
60
+ ## Unreleased (wrongly labelled 1.0.0; reverted 2026-04-23 — still in beta)
61
+
62
+ ### Changes
63
+
64
+ - **Beta API surface.** Per [ADR-077](https://github.com/SylphxAI/platform/blob/main/docs/adr/ADR-077-trio-completeness.md), the Promise-based pure-functional interface is the target public contract. No classes, no `this`, no hidden state — `createClient` returns a frozen value, and every capability is a free function that takes `client` as its first argument. Shape is NOT yet frozen; still iterating in 0.x.
65
+ - **46 capability namespaces** (in-flight; count may change before stable) covering the full Management plane: `projects`, `deployments`, `environments`, `envVars`, `domains`, `databases`, `services`, `volumes`, `storage`, `secrets`, `tasks`, `resourceBindings`, `organizations`, `users`, `sandboxes`, `functions`, `logs`, `email` (admin), `notifications` (admin/inbox), `monitoring`, `analytics`, `flags`, `experiments`, `remoteConfig`, `ai`, `webhooks`, `runners`, `backups`, `billing`, `certs`, `consent`, `engagement`, `newsletter`, `oidc`, `privacy`, `realtime`, `referrals`, `saml`, `search`, `serviceTokens`, `sessionReplay`.
66
+ - **Contract-first types** ([ADR-084](https://github.com/SylphxAI/platform/blob/main/docs/adr/ADR-084-effect-schema-contract.md)). Wire types and endpoint metadata (method + path) are imported from [`@sylphx/contract`](https://www.npmjs.com/package/@sylphx/contract) — the Effect Schema SSOT. Hand-written type shims were removed; the contract package is the only place wire shape is defined.
67
+ - **Bearer-token auth.** `createClient({ token })` accepts both user session tokens (`slx_...`) and service tokens (`sk_...`). The same SDK works for CLI / CI / backend integrations on the Management plane (`api.sylphx.com/v1`).
68
+ - **Tree-shakable subpath exports.** Every namespace is also reachable as `@sylphx/management/projects`, `@sylphx/management/deployments`, etc. `sideEffects: false` for bundler-friendly dead-code elimination.
69
+ - **ESM-only.** `"type": "module"`, Node ≥ 20, uses the built-in `fetch`. No classes, no polyfills, no peer framework required.
70
+
71
+ ### Plane discipline (ADR-083)
72
+
73
+ This SDK is **Management-plane-only**. Runtime BaaS verbs (`kv.get`, `email.send`, `notifications.send`, `flags.evaluate`, `auth.*`, realtime, storage uploads, search, analytics.track) live in [`@sylphx/sdk`](https://www.npmjs.com/package/@sylphx/sdk) with its Firebase-pattern peer-dep entry points (`@sylphx/sdk`, `/react`, `/server`, `/nextjs`, `/web-analytics`). Mixing planes (wrong hostname + wrong auth scheme) returns `401 plane_mismatch`.
74
+
75
+ ---
76
+
77
+ ## 0.1.0
78
+
79
+ ### Minor Changes
80
+
81
+ - Initial public release of `@sylphx/management` as a standalone SDK.
82
+ - Resource-namespaced Management API client.
83
+ - `@sylphx/cli` now dogfoods this package.
84
+
85
+ ## Pre-release history
86
+
87
+ Earlier changeset entries referenced pre-release work on internal versions;
88
+ the unreleased entry above captures the current 0.x beta direction.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sylphx
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,6 +1,37 @@
1
1
  # @sylphx/management
2
2
 
3
- Programmatic access to the [Sylphx Platform](https://sylphx.com) Management API.
3
+ [![npm version](https://img.shields.io/npm/v/@sylphx/management.svg)](https://www.npmjs.com/package/@sylphx/management)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)
5
+
6
+ Pure-FP Promise client for the [Sylphx Platform](https://sylphx.com)
7
+ Management API — **46 capability namespaces, contract-first types, zero
8
+ classes**.
9
+
10
+ The SDK is a thin, stateless transport over `api.sylphx.com/v1`. No classes,
11
+ no mutable state, no business logic — consumers create an immutable `Client`
12
+ and pass it to free functions grouped by capability namespace. Every
13
+ request / response type is imported from
14
+ [`@sylphx/contract`](https://www.npmjs.com/package/@sylphx/contract) — the
15
+ Effect Schema single source of truth (ADR-084).
16
+
17
+ > **Scope: Management plane only** (ADR-083). This SDK covers platform-owner
18
+ > operations (project / deployment / environment / secret / domain / audit
19
+ > / billing / SAML / OIDC / webhooks / privacy / analytics admin, …) on
20
+ > `api.sylphx.com/v1` with Bearer tokens (`slx_...` user / `sk_...`
21
+ > service). For app-runtime data-plane operations (auth, KV, transactional
22
+ > email, push, realtime, `flags.evaluate`, search, analytics.track, AI,
23
+ > storage uploads, end-user session replay) use
24
+ > [`@sylphx/sdk`](https://www.npmjs.com/package/@sylphx/sdk) — one package,
25
+ > Firebase-pattern with `./`, `./react`, `./server`, `./nextjs`,
26
+ > `./web-analytics` peer-dep-gated entry points. Mixing planes (wrong
27
+ > hostname + wrong auth scheme) returns `401 plane_mismatch`.
28
+
29
+ ## Requirements
30
+
31
+ - Node.js `>= 20` (uses built-in `fetch`) — or Bun `>= 1.3`
32
+ - A Sylphx API token:
33
+ - **User session token** (`slx_...`) — sign in at `sylphx.com` and run `sylphx auth token`
34
+ - **Service token** (`sk_...`) — for CI / server-side automation, created under project → Tokens
4
35
 
5
36
  ## Installation
6
37
 
@@ -8,131 +39,156 @@ Programmatic access to the [Sylphx Platform](https://sylphx.com) Management API.
8
39
  bun add @sylphx/management
9
40
  # or
10
41
  npm install @sylphx/management
42
+ # or
43
+ pnpm add @sylphx/management
11
44
  ```
12
45
 
13
46
  ## Quick Start
14
47
 
15
48
  ```typescript
16
- import { SylphxManagement } from '@sylphx/management'
49
+ import { createClient, projects, deployments, envVars } from '@sylphx/management'
17
50
 
18
- const mgmt = new SylphxManagement({
51
+ const client = createClient({
19
52
  token: process.env.SYLPHX_TOKEN!,
20
- // baseUrl: 'https://api.sylphx.com' (default)
53
+ // baseUrl defaults to 'https://api.sylphx.com'
21
54
  })
22
55
 
23
- // List projects
24
- const projects = await mgmt.projects.list()
56
+ // List projects (ids are TypeIDs — `proj_xxx`)
57
+ const list = await projects.list(client)
25
58
 
26
59
  // Trigger a deployment
27
- await mgmt.deployments.trigger('my-project-id', 'production')
60
+ await deployments.trigger(client, 'proj_abc', 'production')
28
61
 
29
- // List env vars
30
- const vars = await mgmt.envVars.list('my-project-id', 'production')
62
+ // List env vars for a project + environment
63
+ const vars = await envVars.list(client, 'proj_abc', 'production')
31
64
  ```
32
65
 
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
66
+ ### Tree-shakable subpath imports
67
+
68
+ Bundlers that support subpath exports can import a single capability
69
+ namespace for better tree-shaking:
70
+
71
+ ```typescript
72
+ import { createClient } from '@sylphx/management'
73
+ import * as projects from '@sylphx/management/projects'
74
+
75
+ const client = createClient({ token: process.env.SYLPHX_TOKEN! })
76
+ await projects.list(client)
77
+ ```
78
+
79
+ ## Capabilities
80
+
81
+ 46 namespaces. Every module exports free functions that take `client` as
82
+ the first argument. Key namespaces:
83
+
84
+ | Namespace | Representative functions |
85
+ | -------------------- | ------------------------------------------------------------------------------------------ |
86
+ | `users` | `whoami` |
87
+ | `projects` | `list`, `create`, `delete` |
88
+ | `deployments` | `status`, `trigger`, `history`, `rollback` |
89
+ | `environments` | `list`, `resolveId`, `create`, `update`, `delete`, `promote` |
90
+ | `envVars` | `list`, `set`, `setMany`, `delete` |
91
+ | `domains` | `list`, `create`, `addHostname`, `removeHostname`, `checkHostname`, `enableEmail`, `checkEmail`, `disableEmail` |
92
+ | `databases` | `list`, `create`, `get`, `delete`, `branch` |
93
+ | `services` | `list`, `get`, `deploy`, `delete` |
94
+ | `volumes` | `list`, `create`, `delete` |
95
+ | `storage` | `list`, `create`, `delete` |
96
+ | `secrets` | `list`, `get`, `create`, `update`, `rollback`, `delete` |
97
+ | `remoteConfig` | `list`, `get`, `set`, `delete` |
98
+ | `tasks` | `list`, `create`, `get`, `update`, `delete` |
99
+ | `resourceBindings` | `list`, `create`, `delete` |
100
+ | `organizations` | `current`, `listMembers`, `inviteMember`, `removeMember` |
101
+ | `sandboxes` | `create`, `list`, `get`, `terminate` |
102
+ | `functions` | `list`, `get`, `deploy`, `delete`, `invoke`, `logs` |
103
+ | `logs` | `stream` (returns `{ url, token }` for SSE) |
104
+ | `email` | `listLogs`, `getSettings`, `updateSettings` (admin only — `send` lives in `@sylphx/sdk`) |
105
+ | `notifications` | `listInbox` (admin only — `send` lives in `@sylphx/sdk`) |
106
+ | `billing` | account / plan / invoice endpoints |
107
+ | `saml`, `oidc` | SSO configuration admin |
108
+ | `webhooks` | outbound webhook endpoint CRUD |
109
+ | `analytics` | admin queries (runtime `analytics.track` lives in `@sylphx/sdk`) |
110
+ | `flags` | flag admin CRUD (runtime `flags.evaluate` lives in `@sylphx/sdk`) |
111
+ | `experiments` | A/B test admin CRUD |
112
+ | `ai` | model / completion admin |
113
+ | `backups` | managed-data backup + restore |
114
+ | `certs` | TLS cert inspection |
115
+ | `consent`, `privacy` | GDPR / CCPA admin |
116
+ | `engagement`, `newsletter`, `referrals` | marketing admin |
117
+ | `runners` | self-hosted runner admin |
118
+ | `sessionReplay` | session-replay admin (runtime capture lives in `@sylphx/sdk/web-analytics`) |
119
+ | `monitoring` | metric / alert admin |
120
+ | `realtime` | channel admin (runtime pub/sub lives in `@sylphx/sdk`) |
121
+ | `search` | index admin (runtime queries live in `@sylphx/sdk`) |
122
+ | `serviceTokens` | service-token issuance + revocation |
123
+
124
+ Full, IDE-autocompleted surface is available on the re-exported
125
+ namespaces from the root `@sylphx/management` entry point.
126
+
127
+ > **Plane discipline (ADR-083).** Runtime BaaS verbs — `kv.*`, `email.send`,
128
+ > `notifications.send`, MFA `challenge.*`, `flags.evaluate`,
129
+ > `analytics.track` — are **not** part of `@sylphx/management`. Deployed
130
+ > applications (both server-side and browser-side) use
131
+ > [`@sylphx/sdk`](https://www.npmjs.com/package/@sylphx/sdk) with its
132
+ > peer-dep-gated entry points (`@sylphx/sdk`, `@sylphx/sdk/react`,
133
+ > `@sylphx/sdk/server`, `@sylphx/sdk/nextjs`,
134
+ > `@sylphx/sdk/web-analytics`).
121
135
 
122
136
  ## Error Handling
123
137
 
138
+ Every non-2xx response throws a single error type. Consumers discriminate on
139
+ `status` or match on `body` shape.
140
+
124
141
  ```typescript
125
- import { ManagementApiError } from '@sylphx/management'
142
+ import { ApiError } from '@sylphx/management'
143
+ import * as projects from '@sylphx/management/projects'
126
144
 
127
145
  try {
128
- await mgmt.projects.delete('non-existent')
146
+ await projects.delete(client, 'non-existent')
129
147
  } catch (err) {
130
- if (err instanceof ManagementApiError) {
148
+ if (err instanceof ApiError) {
131
149
  console.error(`API Error ${err.status}: ${err.message}`)
132
150
  }
133
151
  }
134
152
  ```
135
153
 
154
+ ## Architecture
155
+
156
+ - **Contract-first** (ADR-084). Every type in this SDK — `Project`,
157
+ `Deployment`, `EnvVar`, request / response envelopes — is imported from
158
+ [`@sylphx/contract`](https://www.npmjs.com/package/@sylphx/contract). Hand-written type
159
+ shims are a bug. Adding a new capability starts with a contract entry,
160
+ not this package.
161
+ - **Promise-first, Effect-free public surface.** The server uses Effect-TS
162
+ internally (ADR-058), but no Effect types leak through the published
163
+ `.d.ts` — consumers see plain `Promise<T>`.
164
+ - **Immutable value type `Client`.** Cheap to construct, safe to share
165
+ across parallel calls. No hidden globals, no singletons.
166
+ - **ESM-only, tree-shakable.** `"type": "module"`, `sideEffects: false`,
167
+ per-namespace subpath exports.
168
+ - See [ADR-077](https://github.com/SylphxAI/platform/blob/main/docs/adr/ADR-077-trio-completeness.md)
169
+ for the design rationale,
170
+ [ADR-083](https://github.com/SylphxAI/platform/blob/main/docs/adr/ADR-083-two-plane-sdk-architecture.md)
171
+ for the two-plane split,
172
+ [ADR-084](https://github.com/SylphxAI/platform/blob/main/docs/adr/ADR-084-effect-schema-contract.md)
173
+ for the contract SSOT.
174
+
175
+ ## Agent integration
176
+
177
+ The `sylphx` CLI (built on top of this SDK) is the first-class agent surface
178
+ for Claude Code / Cursor / ChatGPT Apps. Sylphx does not ship a standalone
179
+ stdio MCP binary; if you want a bespoke MCP for your own workflows, compose
180
+ one directly on top of `@sylphx/management` — every method is a pure
181
+ `Promise<T>` and fully typed from `@sylphx/contract`.
182
+
183
+ ## Related packages
184
+
185
+ - [`@sylphx/contract`](https://www.npmjs.com/package/@sylphx/contract) —
186
+ Effect Schema SSOT this SDK derives its types from (peer).
187
+ - [`@sylphx/sdk`](https://www.npmjs.com/package/@sylphx/sdk) — runtime
188
+ BaaS SDK for deployed apps (different plane).
189
+ - [`@sylphx/cli`](https://www.npmjs.com/package/@sylphx/cli) — interactive
190
+ CLI built on this SDK.
191
+
136
192
  ## License
137
193
 
138
- MIT
194
+ MIT — see [LICENSE](./LICENSE).
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Platform-admin (superuser) surface — quotas, audit logs, invitations,
3
+ * JWT key rotation, plan governance. Consumed by the internal Console
4
+ * "Admin" sections; ordinary operators do not call these.
5
+ *
6
+ * Mirrors `apps/api/src/server/platform/routes/admin/**`. Paths are
7
+ * sourced from `@sylphx/contract` admin-* endpoint modules.
8
+ */
9
+ import type { Client } from './client.js';
10
+ export interface ProjectQuota {
11
+ readonly resource: string;
12
+ readonly limit: number;
13
+ readonly usage: number;
14
+ readonly windowSeconds: number;
15
+ }
16
+ export declare const getProjectQuotas: (client: Client, projectId: string) => Promise<{
17
+ quotas: readonly ProjectQuota[];
18
+ }>;
19
+ export declare const getQuotaStats: (client: Client, projectId: string) => Promise<Record<string, number>>;
20
+ export declare const getQuotaAlerts: (client: Client, projectId: string) => Promise<{
21
+ alerts: readonly {
22
+ readonly id: string;
23
+ readonly resource: string;
24
+ readonly firedAt: string;
25
+ }[];
26
+ }>;
27
+ export declare const updateProjectQuotas: (client: Client, projectId: string, body: {
28
+ readonly quotas: readonly {
29
+ readonly resource: string;
30
+ readonly limit: number;
31
+ }[];
32
+ }) => Promise<{
33
+ quotas: readonly ProjectQuota[];
34
+ }>;
35
+ export declare const acknowledgeQuotaAlert: (client: Client, alertId: string) => Promise<{
36
+ success: boolean;
37
+ }>;
38
+ export interface AuditLogEntry {
39
+ readonly id: string;
40
+ readonly actor: string;
41
+ readonly action: string;
42
+ readonly target: string;
43
+ readonly at: string;
44
+ readonly metadata: Record<string, unknown>;
45
+ }
46
+ export declare const getAuditLogs: (client: Client, query?: {
47
+ readonly from?: string;
48
+ readonly to?: string;
49
+ readonly actor?: string;
50
+ }) => Promise<{
51
+ logs: readonly AuditLogEntry[];
52
+ }>;
53
+ export declare const getAuditActivity: (client: Client) => Promise<{
54
+ entries: readonly AuditLogEntry[];
55
+ }>;
56
+ export interface Invitation {
57
+ readonly id: string;
58
+ readonly email: string;
59
+ readonly role: string;
60
+ readonly orgId: string | null;
61
+ readonly invitedBy: string;
62
+ readonly createdAt: string;
63
+ readonly expiresAt: string;
64
+ readonly acceptedAt: string | null;
65
+ }
66
+ export declare const listInvitations: (client: Client) => Promise<{
67
+ invitations: readonly Invitation[];
68
+ }>;
69
+ export declare const createInvitation: (client: Client, body: {
70
+ readonly email: string;
71
+ readonly role: string;
72
+ readonly orgId?: string;
73
+ }) => Promise<{
74
+ invitation: Invitation;
75
+ }>;
76
+ export declare const revokeInvitation: (client: Client, id: string) => Promise<{
77
+ success: boolean;
78
+ }>;
79
+ export declare const resendInvitation: (client: Client, id: string) => Promise<{
80
+ invitation: Invitation;
81
+ }>;
82
+ export interface JwtKey {
83
+ readonly id: string;
84
+ readonly alg: string;
85
+ readonly status: 'active' | 'retired';
86
+ readonly createdAt: string;
87
+ readonly retiredAt: string | null;
88
+ }
89
+ export declare const listJwtKeys: (client: Client) => Promise<{
90
+ keys: readonly JwtKey[];
91
+ }>;
92
+ export declare const rotateJwtKeys: (client: Client) => Promise<{
93
+ newKey: JwtKey;
94
+ }>;
95
+ export declare const retireJwtKey: (client: Client, keyId: string) => Promise<{
96
+ key: JwtKey;
97
+ }>;
98
+ /**
99
+ * Trigger a project migration between regions. Phase 4b Matrix-2 gap.
100
+ * Underlying endpoint on the platform API is
101
+ * `POST /operator/projects/:id/migrate` — the SDK wraps it directly rather
102
+ * than going through `adminProjectsEndpoints` because migration is its
103
+ * own operational concern (drain → cut-over → warm-up).
104
+ */
105
+ export declare const migrateProject: (client: Client, projectId: string, body: {
106
+ readonly targetRegion: string;
107
+ readonly strategy?: "drain-cutover" | "live-replication";
108
+ readonly dryRun?: boolean;
109
+ }) => Promise<{
110
+ jobId: string;
111
+ startedAt: string;
112
+ }>;
113
+ /**
114
+ * Regenerate an environment's deploy / API key. Already exposed on
115
+ * `adminProjectsEndpoints.regenerateKey`; surfaced here under the `admin`
116
+ * namespace so Console wiring is one-stop.
117
+ */
118
+ export declare const regenerateEnvironmentKey: (client: Client, environmentId: string) => Promise<{
119
+ key: string;
120
+ keyId: string;
121
+ }>;
122
+ export interface AdminUserView {
123
+ readonly id: string;
124
+ readonly email: string;
125
+ readonly role: string;
126
+ readonly createdAt: string;
127
+ readonly lastSeenAt: string | null;
128
+ readonly suspended: boolean;
129
+ }
130
+ export declare const listUsers: (client: Client) => Promise<{
131
+ users: readonly AdminUserView[];
132
+ }>;
133
+ export declare const getUser: (client: Client, userId: string) => Promise<{
134
+ user: AdminUserView;
135
+ }>;
136
+ export declare const updateUserRole: (client: Client, userId: string, body: {
137
+ readonly role: string;
138
+ }) => Promise<{
139
+ user: AdminUserView;
140
+ }>;
141
+ /**
142
+ * L-15 (2026-05-02): manually verify a user's email. Super-admin only on the
143
+ * platform tenant. The Management API endpoint exists at
144
+ * `POST /admin/users/users/:userId/verify-email`; the SDK helper was the
145
+ * missing piece blocking operators from validating the new-user E2E flow
146
+ * without (a) a real email inbox or (b) a forbidden direct DB UPDATE.
147
+ */
148
+ export declare const verifyUserEmail: (client: Client, userId: string) => Promise<{
149
+ readonly id: string;
150
+ readonly email: string;
151
+ }>;
152
+ /**
153
+ * L-15 (2026-05-02): soft-delete a platform user. Super-admin only;
154
+ * cannot delete oneself. Existing sessions are revoked first.
155
+ */
156
+ export declare const deleteUser: (client: Client, userId: string) => Promise<{
157
+ readonly id: string;
158
+ readonly email: string;
159
+ }>;
160
+ /**
161
+ * L-15 (2026-05-02): revoke ALL sessions for a user (force re-login).
162
+ * Super-admin only.
163
+ */
164
+ export declare const revokeUserSessions: (client: Client, userId: string) => Promise<{
165
+ readonly userId: string;
166
+ readonly revokedCount: number;
167
+ }>;
168
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}