@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
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Domains — apex domain registration + hostnames + DKIM email.
3
+ *
4
+ * Wire shape sourced from `@sylphx/contract` (ADR-084) for the migrated
5
+ * operations (list/create/addHostname/removeHostname). The email +
6
+ * hostname-check operations still use hand-written paths until a future
7
+ * contract wave covers them.
8
+ */
9
+ import type { AddHostnameInput, DomainEmailBinding, DomainHostname, Domain as DomainResult } from '@sylphx/contract';
10
+ import type { Client } from './client.js';
11
+ export declare const list: (client: Client, projectId: string, envType?: string) => Promise<DomainResult[]>;
12
+ export declare const create: (client: Client, projectId: string, apexDomain: string, envType?: string) => Promise<DomainResult>;
13
+ export interface AddHostnameOpts extends Omit<AddHostnameInput, 'hostname'> {
14
+ readonly envType?: string;
15
+ }
16
+ export declare const addHostname: (client: Client, projectId: string, domainId: string, hostname: string, opts?: AddHostnameOpts) => Promise<DomainHostname>;
17
+ export declare const removeHostname: (client: Client, projectId: string, domainId: string, hostnameId: string) => Promise<void>;
18
+ export declare const checkHostname: (client: Client, projectId: string, domainId: string, hostnameId: string) => Promise<DomainHostname>;
19
+ export interface EnableEmailOpts {
20
+ readonly defaultFromEmail?: string;
21
+ readonly defaultFromName?: string;
22
+ }
23
+ export declare const enableEmail: (client: Client, projectId: string, domainId: string, opts?: EnableEmailOpts) => Promise<DomainEmailBinding>;
24
+ export declare const checkEmail: (client: Client, projectId: string, domainId: string) => Promise<DomainEmailBinding>;
25
+ export declare const disableEmail: (client: Client, projectId: string, domainId: string) => Promise<void>;
26
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../src/domains.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACX,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,MAAM,IAAI,YAAY,EACtB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,gBAAsB,KACpB,OAAO,CAAC,YAAY,EAAE,CAKxB,CAAA;AAED,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,gBAAsB,KACpB,OAAO,CAAC,YAAY,CAKtB,CAAA;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,WAAW,GACvB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,OAAO,eAAe,KACpB,OAAO,CAAC,cAAc,CAOxB,CAAA;AAED,eAAO,MAAM,cAAc,GAC1B,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,YAAY,MAAM,KAChB,OAAO,CAAC,IAAI,CAGd,CAAA;AAID,eAAO,MAAM,aAAa,GACzB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,YAAY,MAAM,KAChB,OAAO,CAAC,cAAc,CAKvB,CAAA;AAEF,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,eAAO,MAAM,WAAW,GACvB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,OAAO,eAAe,KACpB,OAAO,CAAC,kBAAkB,CAM3B,CAAA;AAEF,eAAO,MAAM,UAAU,GACtB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,MAAM,KACd,OAAO,CAAC,kBAAkB,CAK3B,CAAA;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAK7F,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Domains — apex domain registration + hostnames + DKIM email.
3
+ *
4
+ * Wire shape sourced from `@sylphx/contract` (ADR-084) for the migrated
5
+ * operations (list/create/addHostname/removeHostname). The email +
6
+ * hostname-check operations still use hand-written paths until a future
7
+ * contract wave covers them.
8
+ */
9
+ import { domainsEndpoints } from '@sylphx/contract';
10
+ import { interpolatePath, request } from './http.js';
11
+ export const list = (client, projectId, envType = 'production') => {
12
+ const { method, path } = domainsEndpoints.list;
13
+ return request(client, method, interpolatePath(path, { projectId }), {
14
+ query: { envType },
15
+ });
16
+ };
17
+ export const create = (client, projectId, apexDomain, envType = 'production') => {
18
+ const { method, path } = domainsEndpoints.create;
19
+ return request(client, method, interpolatePath(path, { projectId }), {
20
+ body: { apexDomain, envType },
21
+ });
22
+ };
23
+ export const addHostname = (client, projectId, domainId, hostname, opts) => {
24
+ const { method, path } = domainsEndpoints.addHostname;
25
+ const { envType = 'production', ...body } = opts ?? {};
26
+ return request(client, method, interpolatePath(path, { projectId, domainId }), {
27
+ query: { envType },
28
+ body: { hostname, ...body },
29
+ });
30
+ };
31
+ export const removeHostname = (client, projectId, domainId, hostnameId) => {
32
+ const { method, path } = domainsEndpoints.removeHostname;
33
+ return request(client, method, interpolatePath(path, { projectId, domainId, hostnameId }));
34
+ };
35
+ // ---- Not yet in @sylphx/contract (future wave) ---------------------------
36
+ export const checkHostname = (client, projectId, domainId, hostnameId) => request(client, 'POST', `/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domainId)}/hostnames/${encodeURIComponent(hostnameId)}/check`);
37
+ export const enableEmail = (client, projectId, domainId, opts) => request(client, 'POST', `/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domainId)}/email`, { body: opts ?? {} });
38
+ export const checkEmail = (client, projectId, domainId) => request(client, 'POST', `/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domainId)}/email/check`);
39
+ export const disableEmail = (client, projectId, domainId) => request(client, 'DELETE', `/projects/${encodeURIComponent(projectId)}/domains/${encodeURIComponent(domainId)}/email`);
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Edge deployments — per-project edge runtime deployment history.
3
+ *
4
+ * POST /projects/:id/edge-deployments — trigger edge build
5
+ * GET /projects/:id/edge-deployments — list history
6
+ * GET /projects/:id/edge-deployments/:deploymentId — detail
7
+ * DELETE /projects/:id/edge-deployments/:deploymentId — cancel or tombstone
8
+ *
9
+ * Mirrors `apps/api/src/server/platform/routes/edge-deployments.ts`.
10
+ */
11
+ import type { Client } from './client.js';
12
+ export interface EdgeDeployment {
13
+ readonly id: string;
14
+ readonly projectId: string;
15
+ readonly status: 'queued' | 'building' | 'ready' | 'error' | 'cancelled';
16
+ readonly commitSha: string | null;
17
+ readonly triggeredBy: string | null;
18
+ readonly createdAt: string;
19
+ readonly completedAt: string | null;
20
+ readonly url: string | null;
21
+ }
22
+ export interface CreateEdgeDeploymentInput {
23
+ readonly commitSha?: string;
24
+ readonly branch?: string;
25
+ readonly source?: 'git' | 'manual';
26
+ }
27
+ export declare const create: (client: Client, projectId: string, body?: CreateEdgeDeploymentInput) => Promise<{
28
+ deployment: EdgeDeployment;
29
+ }>;
30
+ export declare const list: (client: Client, projectId: string) => Promise<{
31
+ deployments: readonly EdgeDeployment[];
32
+ }>;
33
+ export declare const get: (client: Client, projectId: string, deploymentId: string) => Promise<{
34
+ deployment: EdgeDeployment;
35
+ }>;
36
+ /**
37
+ * Cancel (or tombstone) an in-flight edge deployment. Terminal deployments
38
+ * return 409.
39
+ */
40
+ export declare const cancel: (client: Client, projectId: string, deploymentId: string) => Promise<{
41
+ success: boolean;
42
+ }>;
43
+ //# sourceMappingURL=edgeDeployments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edgeDeployments.d.ts","sourceRoot":"","sources":["../src/edgeDeployments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAA;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;CAClC;AAED,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAM,yBAA8B,KAClC,OAAO,CAAC;IAAE,UAAU,EAAE,cAAc,CAAA;CAAE,CAGxC,CAAA;AAED,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,WAAW,MAAM,KACf,OAAO,CAAC;IAAE,WAAW,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAGpD,CAAA;AAED,eAAO,MAAM,GAAG,GACf,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,cAAc,MAAM,KAClB,OAAO,CAAC;IAAE,UAAU,EAAE,cAAc,CAAA;CAAE,CAGxC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,cAAc,MAAM,KAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAG9B,CAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Edge deployments — per-project edge runtime deployment history.
3
+ *
4
+ * POST /projects/:id/edge-deployments — trigger edge build
5
+ * GET /projects/:id/edge-deployments — list history
6
+ * GET /projects/:id/edge-deployments/:deploymentId — detail
7
+ * DELETE /projects/:id/edge-deployments/:deploymentId — cancel or tombstone
8
+ *
9
+ * Mirrors `apps/api/src/server/platform/routes/edge-deployments.ts`.
10
+ */
11
+ import { edgeDeploymentsEndpoints } from '@sylphx/contract';
12
+ import { interpolatePath, request } from './http.js';
13
+ export const create = (client, projectId, body = {}) => {
14
+ const { method, path } = edgeDeploymentsEndpoints.create;
15
+ return request(client, method, interpolatePath(path, { id: projectId }), { body });
16
+ };
17
+ export const list = (client, projectId) => {
18
+ const { method, path } = edgeDeploymentsEndpoints.list;
19
+ return request(client, method, interpolatePath(path, { id: projectId }));
20
+ };
21
+ export const get = (client, projectId, deploymentId) => {
22
+ const { method, path } = edgeDeploymentsEndpoints.get;
23
+ return request(client, method, interpolatePath(path, { id: projectId, deploymentId }));
24
+ };
25
+ /**
26
+ * Cancel (or tombstone) an in-flight edge deployment. Terminal deployments
27
+ * return 409.
28
+ */
29
+ export const cancel = (client, projectId, deploymentId) => {
30
+ const { method, path } = edgeDeploymentsEndpoints.delete;
31
+ return request(client, method, interpolatePath(path, { id: projectId, deploymentId }));
32
+ };
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Transactional email — admin surface (logs + settings).
3
+ *
4
+ * GET /email/projects/:id/logs?limit=&status=
5
+ * GET /email/projects/:id/email-settings
6
+ * PATCH /email/projects/:id/email-settings
7
+ *
8
+ * The runtime `send` verb lives in `@sylphx/sdk` per ADR-083 (BaaS data
9
+ * plane). Only admin-facing observation / configuration remains here.
10
+ */
11
+ import type { Client } from './client.js';
12
+ export interface EmailLogEntry {
13
+ readonly id: string;
14
+ readonly to: string;
15
+ readonly from: string | null;
16
+ readonly subject: string;
17
+ readonly status: string;
18
+ readonly createdAt: string;
19
+ }
20
+ export interface ListLogsOptions {
21
+ readonly limit?: number;
22
+ readonly status?: string;
23
+ }
24
+ export declare const listLogs: (client: Client, projectId: string, options?: ListLogsOptions) => Promise<{
25
+ logs: readonly EmailLogEntry[];
26
+ }>;
27
+ export interface EmailSettings {
28
+ readonly defaultFromEmail: string | null;
29
+ readonly defaultFromName: string | null;
30
+ readonly webhookUrl: string | null;
31
+ readonly trackOpens: boolean | null;
32
+ readonly trackClicks: boolean | null;
33
+ }
34
+ export declare const getSettings: (client: Client, projectId: string) => Promise<EmailSettings>;
35
+ export interface UpdateSettingsInput {
36
+ readonly fromEmail?: string;
37
+ readonly fromName?: string;
38
+ readonly webhookUrl?: string;
39
+ readonly trackOpens?: boolean;
40
+ readonly trackClicks?: boolean;
41
+ }
42
+ export declare const updateSettings: (client: Client, projectId: string, input: UpdateSettingsInput) => Promise<{
43
+ success: boolean;
44
+ }>;
45
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../src/email.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,eAAO,MAAM,QAAQ,GACpB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,eAAe,KACvB,OAAO,CAAC;IAAE,IAAI,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,CAM1C,CAAA;AAEH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,aAAa,CACK,CAAA;AAE1F,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,eAAO,MAAM,cAAc,GAC1B,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,mBAAmB,KACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAG5B,CAAA"}
package/dist/email.js ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Transactional email — admin surface (logs + settings).
3
+ *
4
+ * GET /email/projects/:id/logs?limit=&status=
5
+ * GET /email/projects/:id/email-settings
6
+ * PATCH /email/projects/:id/email-settings
7
+ *
8
+ * The runtime `send` verb lives in `@sylphx/sdk` per ADR-083 (BaaS data
9
+ * plane). Only admin-facing observation / configuration remains here.
10
+ */
11
+ import { request } from './http.js';
12
+ export const listLogs = (client, projectId, options) => request(client, 'GET', `/email/projects/${encodeURIComponent(projectId)}/logs`, {
13
+ query: {
14
+ limit: options?.limit !== undefined ? String(options.limit) : undefined,
15
+ status: options?.status,
16
+ },
17
+ });
18
+ export const getSettings = (client, projectId) => request(client, 'GET', `/email/projects/${encodeURIComponent(projectId)}/email-settings`);
19
+ export const updateSettings = (client, projectId, input) => request(client, 'PATCH', `/email/projects/${encodeURIComponent(projectId)}/email-settings`, {
20
+ body: input,
21
+ });
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Engagement — streaks, leaderboards, achievements (code-first + Console overrides).
3
+ *
4
+ * GET /engagement/config — base (from code) + resolved + overrides
5
+ * PATCH /engagement/streaks/override — override a single streak
6
+ * PATCH /engagement/leaderboards/override — override a single leaderboard
7
+ * PATCH /engagement/achievements/override — override a single achievement
8
+ * POST /engagement/overrides/clear — clear all / by type / by entity
9
+ * GET /engagement/stats — counts + active users
10
+ *
11
+ * Entity definitions live in application code and are synced to the
12
+ * platform on SDK init (`lastSyncedAt`); Console overrides let operators
13
+ * tune an entity without redeploying. Clearing an override restores the
14
+ * code-defined default.
15
+ */
16
+ import type { Client } from './client.js';
17
+ export type EntityType = 'streak' | 'leaderboard' | 'achievement' | 'all';
18
+ export type SortDirection = 'asc' | 'desc';
19
+ export interface BaseConfig {
20
+ readonly streaks: readonly Readonly<Record<string, unknown>>[];
21
+ readonly leaderboards: readonly Readonly<Record<string, unknown>>[];
22
+ readonly achievements: readonly Readonly<Record<string, unknown>>[];
23
+ readonly achievementCategories: readonly Readonly<Record<string, unknown>>[];
24
+ }
25
+ export interface ResolvedConfig {
26
+ readonly streaks: readonly Readonly<Record<string, unknown>>[];
27
+ readonly leaderboards: readonly Readonly<Record<string, unknown>>[];
28
+ readonly achievements: readonly Readonly<Record<string, unknown>>[];
29
+ }
30
+ export interface GetConfigResult {
31
+ readonly exists: boolean;
32
+ readonly base: BaseConfig;
33
+ readonly resolved: ResolvedConfig;
34
+ readonly overrides: Readonly<Record<string, unknown>> | null;
35
+ readonly lastSyncedAt: string | null;
36
+ }
37
+ export declare const getConfig: (client: Client, projectId: string) => Promise<GetConfigResult>;
38
+ export interface StreakOverride {
39
+ readonly name?: string;
40
+ readonly description?: string;
41
+ readonly gracePeriodHours?: number;
42
+ readonly maxValue?: number;
43
+ readonly resetOnMiss?: boolean;
44
+ readonly enabled?: boolean;
45
+ }
46
+ export interface LeaderboardOverride {
47
+ readonly name?: string;
48
+ readonly description?: string;
49
+ readonly maxEntries?: number;
50
+ readonly sortDirection?: SortDirection;
51
+ readonly enabled?: boolean;
52
+ }
53
+ export interface AchievementOverride {
54
+ readonly name?: string;
55
+ readonly description?: string;
56
+ readonly unlockedDescription?: string;
57
+ readonly points?: number;
58
+ readonly tier?: 'bronze' | 'silver' | 'gold' | 'platinum' | 'diamond';
59
+ readonly secret?: boolean;
60
+ readonly enabled?: boolean;
61
+ }
62
+ export declare const updateStreakOverride: (client: Client, projectId: string, streakId: string, override: StreakOverride) => Promise<{
63
+ success: boolean;
64
+ }>;
65
+ export declare const updateLeaderboardOverride: (client: Client, projectId: string, leaderboardId: string, override: LeaderboardOverride) => Promise<{
66
+ success: boolean;
67
+ }>;
68
+ export declare const updateAchievementOverride: (client: Client, projectId: string, achievementId: string, override: AchievementOverride) => Promise<{
69
+ success: boolean;
70
+ }>;
71
+ export interface ClearOverridesInput {
72
+ readonly projectId: string;
73
+ readonly entityType?: EntityType;
74
+ readonly entityId?: string;
75
+ }
76
+ export declare const clearOverrides: (client: Client, input: ClearOverridesInput) => Promise<{
77
+ success: boolean;
78
+ }>;
79
+ export interface EngagementStats {
80
+ readonly config: {
81
+ readonly exists: boolean;
82
+ readonly lastSyncedAt: string | null;
83
+ readonly streakCount: number;
84
+ readonly leaderboardCount: number;
85
+ readonly achievementCount: number;
86
+ };
87
+ readonly streaks: {
88
+ readonly totalUsers: number;
89
+ readonly activeStreaks: number;
90
+ };
91
+ readonly leaderboards: {
92
+ readonly totalParticipants: number;
93
+ };
94
+ readonly achievements: {
95
+ readonly totalProgress: number;
96
+ readonly totalUnlocked: number;
97
+ };
98
+ }
99
+ export declare const stats: (client: Client, projectId: string) => Promise<EngagementStats>;
100
+ //# sourceMappingURL=engagement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engagement.d.ts","sourceRoot":"","sources":["../src/engagement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Engagement — streaks, leaderboards, achievements (code-first + Console overrides).
3
+ *
4
+ * GET /engagement/config — base (from code) + resolved + overrides
5
+ * PATCH /engagement/streaks/override — override a single streak
6
+ * PATCH /engagement/leaderboards/override — override a single leaderboard
7
+ * PATCH /engagement/achievements/override — override a single achievement
8
+ * POST /engagement/overrides/clear — clear all / by type / by entity
9
+ * GET /engagement/stats — counts + active users
10
+ *
11
+ * Entity definitions live in application code and are synced to the
12
+ * platform on SDK init (`lastSyncedAt`); Console overrides let operators
13
+ * tune an entity without redeploying. Clearing an override restores the
14
+ * code-defined default.
15
+ */
16
+ import { request } from './http.js';
17
+ export const getConfig = (client, projectId) => request(client, 'GET', '/engagement/config', { query: { projectId } });
18
+ export const updateStreakOverride = (client, projectId, streakId, override) => request(client, 'PATCH', '/engagement/streaks/override', {
19
+ body: { projectId, streakId, override },
20
+ });
21
+ export const updateLeaderboardOverride = (client, projectId, leaderboardId, override) => request(client, 'PATCH', '/engagement/leaderboards/override', {
22
+ body: { projectId, leaderboardId, override },
23
+ });
24
+ export const updateAchievementOverride = (client, projectId, achievementId, override) => request(client, 'PATCH', '/engagement/achievements/override', {
25
+ body: { projectId, achievementId, override },
26
+ });
27
+ export const clearOverrides = (client, input) => request(client, 'POST', '/engagement/overrides/clear', { body: input });
28
+ export const stats = (client, projectId) => request(client, 'GET', '/engagement/stats', { query: { projectId } });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Environment variables — list / set / setMany / delete.
3
+ *
4
+ * Wire shape sourced from `@sylphx/contract` (ADR-084).
5
+ */
6
+ import type { EnvVar } from '@sylphx/contract';
7
+ import type { Client } from './client.js';
8
+ export declare const list: (client: Client, projectId: string, envType: string) => Promise<EnvVar[]>;
9
+ export declare const set: (client: Client, projectId: string, key: string, value: string, envType: string, secret?: boolean) => Promise<void>;
10
+ export declare const setMany: (client: Client, projectId: string, vars: ReadonlyArray<{
11
+ key: string;
12
+ value: string;
13
+ secret?: boolean;
14
+ }>, envType: string) => Promise<void>;
15
+ declare const _delete: (client: Client, projectId: string, key: string, envType: string) => Promise<void>;
16
+ export { _delete as delete };
17
+ //# sourceMappingURL=envVars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envVars.d.ts","sourceRoot":"","sources":["../src/envVars.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,SAAS,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CASlB,CAAA;AAED,eAAO,MAAM,GAAG,GACf,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,SAAS,MAAM,EACf,SAAS,OAAO,KACd,OAAO,CAAC,IAAI,CAQd,CAAA;AAED,eAAO,MAAM,OAAO,GACnB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EACrE,SAAS,MAAM,KACb,OAAO,CAAC,IAAI,CAKd,CAAA;AAED,QAAA,MAAM,OAAO,GACZ,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,KAAK,MAAM,EACX,SAAS,MAAM,KACb,OAAO,CAAC,IAAI,CAKd,CAAA;AACD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Environment variables — list / set / setMany / delete.
3
+ *
4
+ * Wire shape sourced from `@sylphx/contract` (ADR-084).
5
+ */
6
+ import { envVarsEndpoints } from '@sylphx/contract';
7
+ import { interpolatePath, request } from './http.js';
8
+ export const list = async (client, projectId, envType) => {
9
+ const { method, path } = envVarsEndpoints.list;
10
+ const res = await request(client, method, interpolatePath(path, { id: projectId }), { query: { envType } });
11
+ return Array.isArray(res) ? res : (res.data ?? []);
12
+ };
13
+ export const set = (client, projectId, key, value, envType, secret) => {
14
+ const { method, path } = envVarsEndpoints.set;
15
+ return request(client, method, interpolatePath(path, { id: projectId }), {
16
+ body: {
17
+ envType,
18
+ vars: [{ key, value, secret: secret ?? false }],
19
+ },
20
+ });
21
+ };
22
+ export const setMany = (client, projectId, vars, envType) => {
23
+ const { method, path } = envVarsEndpoints.set;
24
+ return request(client, method, interpolatePath(path, { id: projectId }), {
25
+ body: { envType, vars },
26
+ });
27
+ };
28
+ const _delete = (client, projectId, key, envType) => {
29
+ const { method, path } = envVarsEndpoints.delete;
30
+ return request(client, method, interpolatePath(path, { id: projectId, key }), {
31
+ query: { envType },
32
+ });
33
+ };
34
+ export { _delete as delete };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Environments — CRUD + promote + envType → envId resolution (ADR-080).
3
+ *
4
+ * Wire shape sourced from `@sylphx/contract` (ADR-084).
5
+ */
6
+ import type { CreateEnvironmentInput, CreateEnvironmentResult, Environment, PromoteResult, UpdateEnvironmentInput } from '@sylphx/contract';
7
+ import type { Client } from './client.js';
8
+ export declare const list: (client: Client, projectId: string) => Promise<Environment[]>;
9
+ /**
10
+ * Resolve an environment name ("production" / "alice-demo") → envId for the
11
+ * given project. Matches on `name` first, then `envType` (legacy enum).
12
+ * Returns null if not found.
13
+ */
14
+ export declare const resolveId: (client: Client, projectId: string, envType: string) => Promise<string | null>;
15
+ export declare const promote: (client: Client, projectId: string, targetEnvId: string, sourceEnvId: string) => Promise<PromoteResult>;
16
+ export type CreateInput = CreateEnvironmentInput;
17
+ export type CreateResult = CreateEnvironmentResult;
18
+ export declare const create: (client: Client, projectId: string, input: CreateInput) => Promise<CreateResult>;
19
+ export type UpdateInput = UpdateEnvironmentInput;
20
+ export declare const update: (client: Client, envId: string, input: UpdateInput) => Promise<{
21
+ id: string;
22
+ name: string;
23
+ }>;
24
+ declare const _delete: (client: Client, envId: string) => Promise<{
25
+ success: boolean;
26
+ lifecycle?: string;
27
+ }>;
28
+ export { _delete as delete };
29
+ /**
30
+ * Clone an existing environment (env vars, secrets, service list,
31
+ * resource bindings, feature flag overrides) into a brand-new env.
32
+ * Phase 4b Matrix-2 gap closure — replaces ad-hoc "duplicate then tweak"
33
+ * UX flows.
34
+ */
35
+ export declare const clone: (client: Client, sourceEnvId: string, body: {
36
+ readonly name: string;
37
+ readonly envType?: string;
38
+ readonly includeSecrets?: boolean;
39
+ readonly includeDatabase?: boolean;
40
+ }) => Promise<CreateResult>;
41
+ //# sourceMappingURL=environments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../src/environments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,eAAO,MAAM,IAAI,GAAU,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,WAAW,EAAE,CAQnF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GACrB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,SAAS,MAAM,KACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAOvB,CAAA;AAED,eAAO,MAAM,OAAO,GACnB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,aAAa,MAAM,KACjB,OAAO,CAAC,aAAa,CAKvB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,sBAAsB,CAAA;AAChD,MAAM,MAAM,YAAY,GAAG,uBAAuB,CAAA;AAElD,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,WAAW,KAChB,OAAO,CAAC,YAAY,CAKtB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,sBAAsB,CAAA;AAEhD,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,OAAO,WAAW,KAChB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAGtC,CAAA;AAED,QAAA,MAAM,OAAO,GACZ,QAAQ,MAAM,EACd,OAAO,MAAM,KACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAGlD,CAAA;AACD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GACjB,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,MAAM;IACL,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAClC,KACC,OAAO,CAAC,YAAY,CACqE,CAAA"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Environments — CRUD + promote + envType → envId resolution (ADR-080).
3
+ *
4
+ * Wire shape sourced from `@sylphx/contract` (ADR-084).
5
+ */
6
+ import { environmentsEndpoints } from '@sylphx/contract';
7
+ import { interpolatePath, request } from './http.js';
8
+ export const list = async (client, projectId) => {
9
+ const { method, path } = environmentsEndpoints.list;
10
+ const res = await request(client, method, interpolatePath(path, { id: projectId }));
11
+ return Array.isArray(res) ? res : (res.data ?? []);
12
+ };
13
+ /**
14
+ * Resolve an environment name ("production" / "alice-demo") → envId for the
15
+ * given project. Matches on `name` first, then `envType` (legacy enum).
16
+ * Returns null if not found.
17
+ */
18
+ export const resolveId = async (client, projectId, envType) => {
19
+ const envs = await list(client, projectId);
20
+ const needle = envType.toLowerCase();
21
+ const byName = envs.find((e) => (e.name ?? '').toLowerCase() === needle);
22
+ if (byName)
23
+ return byName.id;
24
+ const byType = envs.find((e) => (e.envType ?? '').toLowerCase() === needle);
25
+ return byType?.id ?? null;
26
+ };
27
+ export const promote = (client, projectId, targetEnvId, sourceEnvId) => {
28
+ const { method, path } = environmentsEndpoints.promote;
29
+ return request(client, method, interpolatePath(path, { id: projectId, envId: targetEnvId }), {
30
+ body: { sourceEnvId },
31
+ });
32
+ };
33
+ export const create = (client, projectId, input) => {
34
+ const { method, path } = environmentsEndpoints.createStandalone;
35
+ return request(client, method, path, {
36
+ body: { projectId, envType: input.envType ?? 'staging', ...input },
37
+ });
38
+ };
39
+ export const update = (client, envId, input) => {
40
+ const { method, path } = environmentsEndpoints.update;
41
+ return request(client, method, interpolatePath(path, { envId }), { body: input });
42
+ };
43
+ const _delete = (client, envId) => {
44
+ const { method, path } = environmentsEndpoints.delete;
45
+ return request(client, method, interpolatePath(path, { envId }));
46
+ };
47
+ export { _delete as delete };
48
+ /**
49
+ * Clone an existing environment (env vars, secrets, service list,
50
+ * resource bindings, feature flag overrides) into a brand-new env.
51
+ * Phase 4b Matrix-2 gap closure — replaces ad-hoc "duplicate then tweak"
52
+ * UX flows.
53
+ */
54
+ export const clone = (client, sourceEnvId, body) => request(client, 'POST', `/environments/${encodeURIComponent(sourceEnvId)}/clone`, { body });
package/dist/errors.d.ts CHANGED
@@ -1,9 +1,14 @@
1
+ /**
2
+ * The one error type the SDK throws. Carries the HTTP status, a
3
+ * best-effort-parsed body (JSON when parseable, raw text otherwise), and
4
+ * a message. Consumers discriminate on `status` or match on `body` shape.
5
+ *
6
+ * ADR-077 Rule C — no back-compat — means the deprecated `ManagementApiError`
7
+ * alias is gone; code uses `ApiError` exclusively.
8
+ */
1
9
  export declare class ApiError extends Error {
2
10
  readonly status: number;
3
11
  readonly body?: unknown | undefined;
4
12
  constructor(status: number, message: string, body?: unknown | undefined);
5
13
  }
6
- /** @deprecated Use ApiError */
7
- export declare const ManagementApiError: typeof ApiError;
8
- export type ManagementApiError = ApiError;
9
14
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,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"}
package/dist/errors.js CHANGED
@@ -1,3 +1,11 @@
1
+ /**
2
+ * The one error type the SDK throws. Carries the HTTP status, a
3
+ * best-effort-parsed body (JSON when parseable, raw text otherwise), and
4
+ * a message. Consumers discriminate on `status` or match on `body` shape.
5
+ *
6
+ * ADR-077 Rule C — no back-compat — means the deprecated `ManagementApiError`
7
+ * alias is gone; code uses `ApiError` exclusively.
8
+ */
1
9
  export class ApiError extends Error {
2
10
  status;
3
11
  body;
@@ -8,5 +16,3 @@ export class ApiError extends Error {
8
16
  this.name = 'ApiError';
9
17
  }
10
18
  }
11
- /** @deprecated Use ApiError */
12
- export const ManagementApiError = ApiError;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * A/B experiments — variants, traffic split, lifecycle, Bayesian results.
3
+ *
4
+ * GET /experiments?projectId=&status=
5
+ * POST /experiments
6
+ * POST /experiments/projects/:p/experiments/:id/start
7
+ * POST /experiments/projects/:p/experiments/:id/pause
8
+ * POST /experiments/projects/:p/experiments/:id/conclude
9
+ * GET /experiments/projects/:p/experiments/:id/results
10
+ *
11
+ * The results endpoint returns a winner only when statistical confidence
12
+ * clears the server-configured threshold (default P(best) ≥ 0.95).
13
+ */
14
+ import type { Client } from './client.js';
15
+ export interface ExperimentVariant {
16
+ readonly key: string;
17
+ readonly name: string;
18
+ readonly weight: number;
19
+ readonly isControl?: boolean;
20
+ }
21
+ export interface ExperimentView {
22
+ readonly id: string;
23
+ readonly projectId: string;
24
+ readonly environmentId: string | null;
25
+ readonly key: string;
26
+ readonly name: string;
27
+ readonly description: string | null;
28
+ readonly status: string;
29
+ readonly variants: readonly ExperimentVariant[];
30
+ readonly primaryMetric?: unknown;
31
+ readonly winningVariant: string | null;
32
+ readonly startedAt: string | null;
33
+ readonly pausedAt: string | null;
34
+ readonly concludedAt: string | null;
35
+ readonly createdAt: string;
36
+ }
37
+ export interface ListOptions {
38
+ readonly status?: string;
39
+ }
40
+ export declare const list: (client: Client, projectId: string, options?: ListOptions) => Promise<{
41
+ experiments: readonly ExperimentView[];
42
+ }>;
43
+ export interface CreateInput {
44
+ readonly projectId: string;
45
+ readonly key: string;
46
+ readonly name: string;
47
+ readonly variants: readonly ExperimentVariant[];
48
+ readonly description?: string;
49
+ readonly environmentId?: string | null;
50
+ }
51
+ export declare const create: (client: Client, input: CreateInput) => Promise<ExperimentView>;
52
+ export type LifecycleAction = 'start' | 'pause' | 'conclude';
53
+ export declare const start: (client: Client, projectId: string, experimentId: string) => Promise<{
54
+ success: boolean;
55
+ }>;
56
+ export declare const pause: (client: Client, projectId: string, experimentId: string) => Promise<{
57
+ success: boolean;
58
+ }>;
59
+ export declare const conclude: (client: Client, projectId: string, experimentId: string) => Promise<{
60
+ success: boolean;
61
+ }>;
62
+ export interface ResultRow {
63
+ readonly variant: string;
64
+ readonly exposures: number;
65
+ readonly conversions: number;
66
+ readonly conversionRate?: number;
67
+ readonly confidenceInterval?: {
68
+ readonly low: number;
69
+ readonly high: number;
70
+ };
71
+ readonly probabilityToBeBest?: number;
72
+ }
73
+ export interface ResultsView {
74
+ readonly experimentId: string;
75
+ readonly status: string;
76
+ readonly winningVariant: string | null;
77
+ readonly variants: readonly ResultRow[];
78
+ }
79
+ export declare const results: (client: Client, projectId: string, experimentId: string) => Promise<ResultsView>;
80
+ //# sourceMappingURL=experiments.d.ts.map