@sylphx/management 0.1.0 → 0.2.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 (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 +141 -0
  5. package/dist/admin.d.ts.map +1 -0
  6. package/dist/admin.js +96 -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 +28 -0
  107. package/dist/http.d.ts.map +1 -0
  108. package/dist/http.js +71 -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,15 @@
1
+ /**
2
+ * Ephemeral compute sandboxes (ADR-052 container_executions).
3
+ *
4
+ * POST /projects/:id/sandboxes — create (waits for pod ready)
5
+ * GET /projects/:id/sandboxes — list active sandboxes for a project
6
+ * GET /sandboxes/:id — get details
7
+ * DELETE /sandboxes/:id — terminate
8
+ */
9
+ import type { Client } from './client.js';
10
+ import type { Sandbox, SandboxCreateResult, SandboxSummary } from './types.js';
11
+ export declare const create: (client: Client, projectId: string, body: Record<string, unknown>) => Promise<SandboxCreateResult>;
12
+ export declare const list: (client: Client, projectId: string) => Promise<SandboxSummary[]>;
13
+ export declare const get: (client: Client, sandboxId: string) => Promise<Sandbox>;
14
+ export declare const terminate: (client: Client, sandboxId: string) => Promise<void>;
15
+ //# sourceMappingURL=sandboxes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxes.d.ts","sourceRoot":"","sources":["../src/sandboxes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE9E,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,OAAO,CAAC,mBAAmB,CAC4D,CAAA;AAE1F,eAAO,MAAM,IAAI,GAAU,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,cAAc,EAAE,CAOtF,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,CACD,CAAA;AAEtE,eAAO,MAAM,SAAS,GAAU,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAE/E,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Ephemeral compute sandboxes (ADR-052 container_executions).
3
+ *
4
+ * POST /projects/:id/sandboxes — create (waits for pod ready)
5
+ * GET /projects/:id/sandboxes — list active sandboxes for a project
6
+ * GET /sandboxes/:id — get details
7
+ * DELETE /sandboxes/:id — terminate
8
+ */
9
+ import { request } from './http.js';
10
+ export const create = (client, projectId, body) => request(client, 'POST', `/projects/${encodeURIComponent(projectId)}/sandboxes`, { body });
11
+ export const list = async (client, projectId) => {
12
+ const res = await request(client, 'GET', `/projects/${encodeURIComponent(projectId)}/sandboxes`);
13
+ return Array.isArray(res) ? res : (res.sandboxes ?? []);
14
+ };
15
+ export const get = (client, sandboxId) => request(client, 'GET', `/sandboxes/${encodeURIComponent(sandboxId)}`);
16
+ export const terminate = async (client, sandboxId) => {
17
+ await request(client, 'DELETE', `/sandboxes/${encodeURIComponent(sandboxId)}`);
18
+ };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Indexed search — analytics, corpus stats, and document listing.
3
+ *
4
+ * GET /search/projects/:projectId/analytics — top queries, CTR, latency
5
+ * GET /search/projects/:projectId/stats — corpus size + namespace breakdown
6
+ * GET /search/projects/:projectId/documents — paginated document list
7
+ *
8
+ * Console-facing only — the SDK-level search *write* endpoints (index /
9
+ * query / click) remain internal. Consumers index documents through the
10
+ * runtime SDK; this namespace is for operator-grade introspection.
11
+ */
12
+ import type { Client } from './client.js';
13
+ export interface TopQuery {
14
+ readonly query: string;
15
+ readonly count: number;
16
+ }
17
+ export interface SearchAnalytics {
18
+ readonly totalQueries: number;
19
+ readonly avgLatencyMs: number;
20
+ readonly clickThroughRate: number;
21
+ readonly topQueries: readonly TopQuery[];
22
+ }
23
+ export interface AnalyticsOptions {
24
+ readonly namespace?: string;
25
+ readonly dateFrom?: string;
26
+ readonly dateTo?: string;
27
+ }
28
+ export declare const analytics: (client: Client, projectId: string, options?: AnalyticsOptions) => Promise<SearchAnalytics>;
29
+ export interface NamespaceStats {
30
+ readonly namespace: string;
31
+ readonly count: number;
32
+ }
33
+ export interface SearchStats {
34
+ readonly totalDocuments: number;
35
+ readonly documentsWithEmbedding: number;
36
+ readonly byNamespace: readonly NamespaceStats[];
37
+ }
38
+ export declare const stats: (client: Client, projectId: string, namespace?: string) => Promise<SearchStats>;
39
+ export interface SearchDocument {
40
+ readonly id: string;
41
+ readonly namespace: string;
42
+ readonly externalId: string | null;
43
+ readonly title: string | null;
44
+ readonly contentPreview: string;
45
+ readonly url: string | null;
46
+ readonly category: string | null;
47
+ readonly type: string | null;
48
+ readonly tags: readonly string[] | null;
49
+ readonly hasEmbedding: boolean;
50
+ readonly impressions: number;
51
+ readonly clicks: number;
52
+ readonly createdAt: string;
53
+ readonly updatedAt: string;
54
+ }
55
+ export interface ListDocumentsResult {
56
+ readonly documents: readonly SearchDocument[];
57
+ readonly total: number;
58
+ readonly hasMore: boolean;
59
+ }
60
+ export interface ListDocumentsOptions {
61
+ readonly namespace?: string;
62
+ readonly limit?: number;
63
+ readonly offset?: number;
64
+ }
65
+ export declare const listDocuments: (client: Client, projectId: string, options?: ListDocumentsOptions) => Promise<ListDocumentsResult>;
66
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,eAAO,MAAM,SAAS,GACrB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,gBAAgB,KACxB,OAAO,CAAC,eAAe,CAOvB,CAAA;AAEH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAA;CAC/C;AAED,eAAO,MAAM,KAAK,GACjB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,YAAY,MAAM,KAChB,OAAO,CAAC,WAAW,CAGnB,CAAA;AAEH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,eAAO,MAAM,aAAa,GACzB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,oBAAoB,KAC5B,OAAO,CAAC,mBAAmB,CAO3B,CAAA"}
package/dist/search.js ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Indexed search — analytics, corpus stats, and document listing.
3
+ *
4
+ * GET /search/projects/:projectId/analytics — top queries, CTR, latency
5
+ * GET /search/projects/:projectId/stats — corpus size + namespace breakdown
6
+ * GET /search/projects/:projectId/documents — paginated document list
7
+ *
8
+ * Console-facing only — the SDK-level search *write* endpoints (index /
9
+ * query / click) remain internal. Consumers index documents through the
10
+ * runtime SDK; this namespace is for operator-grade introspection.
11
+ */
12
+ import { request } from './http.js';
13
+ export const analytics = (client, projectId, options) => request(client, 'GET', `/search/projects/${encodeURIComponent(projectId)}/analytics`, {
14
+ query: {
15
+ namespace: options?.namespace,
16
+ dateFrom: options?.dateFrom,
17
+ dateTo: options?.dateTo,
18
+ },
19
+ });
20
+ export const stats = (client, projectId, namespace) => request(client, 'GET', `/search/projects/${encodeURIComponent(projectId)}/stats`, {
21
+ query: { namespace },
22
+ });
23
+ export const listDocuments = (client, projectId, options) => request(client, 'GET', `/search/projects/${encodeURIComponent(projectId)}/documents`, {
24
+ query: {
25
+ namespace: options?.namespace,
26
+ limit: options?.limit !== undefined ? String(options.limit) : undefined,
27
+ offset: options?.offset !== undefined ? String(options.offset) : undefined,
28
+ },
29
+ });
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Encrypted secrets vault — AES-256-GCM at rest, env-scoped, versioned.
3
+ *
4
+ * GET /secrets — list (project + optional env)
5
+ * GET /secrets/detail?id=&reveal — get one (reveal opt-in only)
6
+ * POST /secrets — create
7
+ * PATCH /secrets — update (new value → new version)
8
+ * DELETE /secrets — delete
9
+ * POST /secrets/rollback — restore a past version
10
+ * GET /secrets/stats — per-env counts
11
+ *
12
+ * Secrets are distinct from `envVars`: envVars are plain K/V for runtime
13
+ * injection; secrets are a first-class vault with version history, audit
14
+ * trail, and on-demand decryption. Prefer secrets when the value must
15
+ * never leak into build logs or reach the filesystem.
16
+ *
17
+ * The `reveal` flag on `get()` MUST be passed explicitly — without it
18
+ * the API returns a masked string. Callers opting in accept full
19
+ * responsibility for shielding the plaintext.
20
+ *
21
+ * Wire shape sourced from `@sylphx/contract` (ADR-084).
22
+ */
23
+ import type { CreateSecretInput, CreateSecretResult, RollbackSecretResult, SecretDetail, SecretListItem, UpdateSecretInput, UpdateSecretResult } from '@sylphx/contract';
24
+ import type { Client } from './client.js';
25
+ export type { CreateSecretInput as CreateInput, CreateSecretResult as CreateResult, EnvironmentRef, RollbackSecretResult as RollbackResult, SecretDetail, SecretListItem, SecretVersion, UpdateSecretInput as UpdateInput, UpdateSecretResult as UpdateResult, } from '@sylphx/contract';
26
+ export interface ListOptions {
27
+ readonly environmentId?: string;
28
+ readonly includeInactive?: boolean;
29
+ }
30
+ export declare const list: (client: Client, projectId: string, options?: ListOptions) => Promise<{
31
+ secrets: readonly SecretListItem[];
32
+ }>;
33
+ export declare const get: (client: Client, id: string, options?: {
34
+ reveal?: boolean;
35
+ }) => Promise<SecretDetail>;
36
+ export declare const create: (client: Client, input: CreateSecretInput) => Promise<CreateSecretResult>;
37
+ export declare const update: (client: Client, input: UpdateSecretInput) => Promise<UpdateSecretResult>;
38
+ declare const _delete: (client: Client, id: string) => Promise<{
39
+ success: boolean;
40
+ }>;
41
+ export { _delete as delete };
42
+ export declare const rollback: (client: Client, id: string, version: string) => Promise<RollbackSecretResult>;
43
+ export interface EnvironmentStats {
44
+ readonly environmentId: string | null;
45
+ readonly count: number;
46
+ }
47
+ export declare const stats: (client: Client, projectId: string) => Promise<{
48
+ stats: readonly EnvironmentStats[];
49
+ }>;
50
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAKzC,YAAY,EACX,iBAAiB,IAAI,WAAW,EAChC,kBAAkB,IAAI,YAAY,EAClC,cAAc,EACd,oBAAoB,IAAI,cAAc,EACtC,YAAY,EACZ,cAAc,EACd,aAAa,EACb,iBAAiB,IAAI,WAAW,EAChC,kBAAkB,IAAI,YAAY,GAClC,MAAM,kBAAkB,CAAA;AAEzB,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAClC;AAED,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,UAAU,WAAW,KACnB,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAShD,CAAA;AAED,eAAO,MAAM,GAAG,GACf,QAAQ,MAAM,EACd,IAAI,MAAM,EACV,UAAU;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5B,OAAO,CAAC,YAAY,CAKtB,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,iBAAiB,KAAG,OAAO,CAAC,kBAAkB,CAG3F,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,iBAAiB,KAAG,OAAO,CAAC,kBAAkB,CAG3F,CAAA;AAED,QAAA,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAGzE,CAAA;AACD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA;AAE5B,eAAO,MAAM,QAAQ,GACpB,QAAQ,MAAM,EACd,IAAI,MAAM,EACV,SAAS,MAAM,KACb,OAAO,CAAC,oBAAoB,CAG9B,CAAA;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,KAAK,GACjB,QAAQ,MAAM,EACd,WAAW,MAAM,KACf,OAAO,CAAC;IAAE,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,CAGhD,CAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Encrypted secrets vault — AES-256-GCM at rest, env-scoped, versioned.
3
+ *
4
+ * GET /secrets — list (project + optional env)
5
+ * GET /secrets/detail?id=&reveal — get one (reveal opt-in only)
6
+ * POST /secrets — create
7
+ * PATCH /secrets — update (new value → new version)
8
+ * DELETE /secrets — delete
9
+ * POST /secrets/rollback — restore a past version
10
+ * GET /secrets/stats — per-env counts
11
+ *
12
+ * Secrets are distinct from `envVars`: envVars are plain K/V for runtime
13
+ * injection; secrets are a first-class vault with version history, audit
14
+ * trail, and on-demand decryption. Prefer secrets when the value must
15
+ * never leak into build logs or reach the filesystem.
16
+ *
17
+ * The `reveal` flag on `get()` MUST be passed explicitly — without it
18
+ * the API returns a masked string. Callers opting in accept full
19
+ * responsibility for shielding the plaintext.
20
+ *
21
+ * Wire shape sourced from `@sylphx/contract` (ADR-084).
22
+ */
23
+ import { secretsEndpoints } from '@sylphx/contract';
24
+ import { request } from './http.js';
25
+ export const list = (client, projectId, options) => {
26
+ const { method, path } = secretsEndpoints.list;
27
+ return request(client, method, path, {
28
+ query: {
29
+ projectId,
30
+ environmentId: options?.environmentId,
31
+ includeInactive: options?.includeInactive ? 'true' : undefined,
32
+ },
33
+ });
34
+ };
35
+ export const get = (client, id, options) => {
36
+ const { method, path } = secretsEndpoints.get;
37
+ return request(client, method, path, {
38
+ query: { id, reveal: options?.reveal ? 'true' : undefined },
39
+ });
40
+ };
41
+ export const create = (client, input) => {
42
+ const { method, path } = secretsEndpoints.create;
43
+ return request(client, method, path, { body: input });
44
+ };
45
+ export const update = (client, input) => {
46
+ const { method, path } = secretsEndpoints.update;
47
+ return request(client, method, path, { body: input });
48
+ };
49
+ const _delete = (client, id) => {
50
+ const { method, path } = secretsEndpoints.delete;
51
+ return request(client, method, path, { body: { id } });
52
+ };
53
+ export { _delete as delete };
54
+ export const rollback = (client, id, version) => {
55
+ const { method, path } = secretsEndpoints.rollback;
56
+ return request(client, method, path, { body: { id, version } });
57
+ };
58
+ export const stats = (client, projectId) => {
59
+ const { method, path } = secretsEndpoints.stats;
60
+ return request(client, method, path, { query: { projectId } });
61
+ };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Security Console — user-facing security settings (Management plane).
3
+ *
4
+ * Mirrors `apps/api/src/server/platform/routes/security/*`. Paths come
5
+ * from `@sylphx/contract` (`securityEndpoints`, mount `/security/*`).
6
+ *
7
+ * This is the SDK surface the CLI / Console UI use to drive the
8
+ * authenticated user's own security settings — distinct from
9
+ * `@sylphx/sdk.auth` (BaaS plane, end-user sign-in/sign-up) and from
10
+ * `authSettings.ts` (Management plane, project-level OAuth/SAML config).
11
+ *
12
+ * Initial scope (ADR-089 closure for P0-1 — email change). Other
13
+ * sub-namespaces (2FA, OAuth, password, passkeys, sessions, score,
14
+ * alerts) follow the same pattern as endpoints stabilise.
15
+ */
16
+ import type { Client } from './client.js';
17
+ export interface EmailChangeRequestInput {
18
+ readonly newEmail: string;
19
+ }
20
+ export interface EmailChangeRequestResult {
21
+ readonly success: boolean;
22
+ readonly message: string;
23
+ readonly expiresAt: string;
24
+ }
25
+ /**
26
+ * Request a change of the authenticated user's email address.
27
+ *
28
+ * The Platform issues a 32-byte verification token, persists a pending
29
+ * `email_change_requests` row, and emails the verification link to the
30
+ * **new** address. The current address is left untouched until the user
31
+ * confirms via {@link confirmEmailChange}. Audit-emitted as
32
+ * `email_change.create` with the new address masked.
33
+ *
34
+ * Errors:
35
+ * - 409 — `newEmail` is already in use by another account
36
+ * - 404 — current user not found (should not happen for a valid session)
37
+ */
38
+ export declare const requestEmailChange: (client: Client, body: EmailChangeRequestInput) => Promise<EmailChangeRequestResult>;
39
+ export interface EmailChangeConfirmInput {
40
+ readonly token: string;
41
+ }
42
+ export interface EmailChangeConfirmResult {
43
+ readonly success: boolean;
44
+ readonly newEmail: string;
45
+ }
46
+ /**
47
+ * Confirm a pending email change using the token delivered via email.
48
+ *
49
+ * On success the `users.email` column is updated, the pending request is
50
+ * deleted, a security alert is recorded, and a notification is sent to
51
+ * the **previous** address. Audit-emitted as `user.update` with
52
+ * `metadata.action = 'email_changed'`.
53
+ *
54
+ * Errors:
55
+ * - 422 — invalid or expired token (the row is cleaned up on expiry)
56
+ */
57
+ export declare const confirmEmailChange: (client: Client, body: EmailChangeConfirmInput) => Promise<EmailChangeConfirmResult>;
58
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAKzC,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,GAC9B,QAAQ,MAAM,EACd,MAAM,uBAAuB,KAC3B,OAAO,CAAC,wBAAwB,CAGlC,CAAA;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAC9B,QAAQ,MAAM,EACd,MAAM,uBAAuB,KAC3B,OAAO,CAAC,wBAAwB,CAGlC,CAAA"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Security Console — user-facing security settings (Management plane).
3
+ *
4
+ * Mirrors `apps/api/src/server/platform/routes/security/*`. Paths come
5
+ * from `@sylphx/contract` (`securityEndpoints`, mount `/security/*`).
6
+ *
7
+ * This is the SDK surface the CLI / Console UI use to drive the
8
+ * authenticated user's own security settings — distinct from
9
+ * `@sylphx/sdk.auth` (BaaS plane, end-user sign-in/sign-up) and from
10
+ * `authSettings.ts` (Management plane, project-level OAuth/SAML config).
11
+ *
12
+ * Initial scope (ADR-089 closure for P0-1 — email change). Other
13
+ * sub-namespaces (2FA, OAuth, password, passkeys, sessions, score,
14
+ * alerts) follow the same pattern as endpoints stabilise.
15
+ */
16
+ import { securityEndpoints } from '@sylphx/contract';
17
+ import { request } from './http.js';
18
+ /**
19
+ * Request a change of the authenticated user's email address.
20
+ *
21
+ * The Platform issues a 32-byte verification token, persists a pending
22
+ * `email_change_requests` row, and emails the verification link to the
23
+ * **new** address. The current address is left untouched until the user
24
+ * confirms via {@link confirmEmailChange}. Audit-emitted as
25
+ * `email_change.create` with the new address masked.
26
+ *
27
+ * Errors:
28
+ * - 409 — `newEmail` is already in use by another account
29
+ * - 404 — current user not found (should not happen for a valid session)
30
+ */
31
+ export const requestEmailChange = (client, body) => {
32
+ const { method, path } = securityEndpoints.email.requestChange;
33
+ return request(client, method, path, { body });
34
+ };
35
+ /**
36
+ * Confirm a pending email change using the token delivered via email.
37
+ *
38
+ * On success the `users.email` column is updated, the pending request is
39
+ * deleted, a security alert is recorded, and a notification is sent to
40
+ * the **previous** address. Audit-emitted as `user.update` with
41
+ * `metadata.action = 'email_changed'`.
42
+ *
43
+ * Errors:
44
+ * - 422 — invalid or expired token (the row is cleaned up on expiry)
45
+ */
46
+ export const confirmEmailChange = (client, body) => {
47
+ const { method, path } = securityEndpoints.email.confirmChange;
48
+ return request(client, method, path, { body });
49
+ };
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Service-token requests — user-submitted requests for org-scoped service
3
+ * tokens that require admin approval before a token is minted. Paired
4
+ * with `serviceTokens.ts` (which owns the final credential).
5
+ *
6
+ * POST /orgs/:orgId/service-token-requests — submit
7
+ * GET /orgs/:orgId/service-token-requests — list
8
+ * GET /orgs/:orgId/service-token-requests/:id — get
9
+ * POST /orgs/:orgId/service-token-requests/:id/approve — admin approve
10
+ * POST /orgs/:orgId/service-token-requests/:id/deny — admin deny
11
+ * POST /orgs/:orgId/service-token-requests/:id/cancel — requester cancel
12
+ * POST /orgs/:orgId/service-token-requests/:id/mint — mint after approve
13
+ */
14
+ import type { Client } from './client.js';
15
+ export type ServiceTokenRequestStatus = 'pending' | 'approved' | 'denied' | 'cancelled' | 'minted' | 'expired';
16
+ export interface ServiceTokenRequestView {
17
+ readonly id: string;
18
+ readonly orgId: string;
19
+ readonly requestedBy: string;
20
+ readonly name: string;
21
+ readonly scopes: readonly string[];
22
+ readonly projectId: string | null;
23
+ readonly environmentId: string | null;
24
+ readonly reason: string | null;
25
+ readonly status: ServiceTokenRequestStatus;
26
+ readonly createdAt: string;
27
+ readonly decidedAt: string | null;
28
+ readonly decidedBy: string | null;
29
+ readonly mintedAt: string | null;
30
+ readonly tokenId: string | null;
31
+ }
32
+ export interface SubmitInput {
33
+ readonly name: string;
34
+ readonly scopes: readonly string[];
35
+ readonly projectId?: string | null;
36
+ readonly environmentId?: string | null;
37
+ readonly reason?: string;
38
+ readonly expiresInDays?: number | null;
39
+ }
40
+ export declare const submit: (client: Client, orgId: string, body: SubmitInput) => Promise<{
41
+ request: ServiceTokenRequestView;
42
+ }>;
43
+ export declare const list: (client: Client, orgId: string, query?: {
44
+ readonly status?: ServiceTokenRequestStatus;
45
+ }) => Promise<{
46
+ requests: readonly ServiceTokenRequestView[];
47
+ }>;
48
+ export declare const get: (client: Client, orgId: string, id: string) => Promise<{
49
+ request: ServiceTokenRequestView;
50
+ }>;
51
+ export declare const approve: (client: Client, orgId: string, id: string, body?: {
52
+ readonly note?: string;
53
+ }) => Promise<{
54
+ request: ServiceTokenRequestView;
55
+ }>;
56
+ export declare const deny: (client: Client, orgId: string, id: string, body?: {
57
+ readonly reason?: string;
58
+ }) => Promise<{
59
+ request: ServiceTokenRequestView;
60
+ }>;
61
+ export declare const cancel: (client: Client, orgId: string, id: string) => Promise<{
62
+ request: ServiceTokenRequestView;
63
+ }>;
64
+ export interface MintResult {
65
+ /** Raw bearer token — shown ONCE; the server stores a hash. */
66
+ readonly token: string;
67
+ readonly tokenId: string;
68
+ readonly request: ServiceTokenRequestView;
69
+ }
70
+ export declare const mint: (client: Client, orgId: string, id: string) => Promise<MintResult>;
71
+ //# sourceMappingURL=serviceTokenRequests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceTokenRequests.d.ts","sourceRoot":"","sources":["../src/serviceTokenRequests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Service-token requests — user-submitted requests for org-scoped service
3
+ * tokens that require admin approval before a token is minted. Paired
4
+ * with `serviceTokens.ts` (which owns the final credential).
5
+ *
6
+ * POST /orgs/:orgId/service-token-requests — submit
7
+ * GET /orgs/:orgId/service-token-requests — list
8
+ * GET /orgs/:orgId/service-token-requests/:id — get
9
+ * POST /orgs/:orgId/service-token-requests/:id/approve — admin approve
10
+ * POST /orgs/:orgId/service-token-requests/:id/deny — admin deny
11
+ * POST /orgs/:orgId/service-token-requests/:id/cancel — requester cancel
12
+ * POST /orgs/:orgId/service-token-requests/:id/mint — mint after approve
13
+ */
14
+ import { serviceTokenRequestsEndpoints } from '@sylphx/contract';
15
+ import { interpolatePath, request } from './http.js';
16
+ export const submit = (client, orgId, body) => {
17
+ const { method, path } = serviceTokenRequestsEndpoints.submit;
18
+ return request(client, method, interpolatePath(path, { orgId }), { body });
19
+ };
20
+ export const list = (client, orgId, query) => {
21
+ const { method, path } = serviceTokenRequestsEndpoints.list;
22
+ return request(client, method, interpolatePath(path, { orgId }), query ? { query } : {});
23
+ };
24
+ export const get = (client, orgId, id) => {
25
+ const { method, path } = serviceTokenRequestsEndpoints.get;
26
+ return request(client, method, interpolatePath(path, { orgId, id }));
27
+ };
28
+ export const approve = (client, orgId, id, body = {}) => {
29
+ const { method, path } = serviceTokenRequestsEndpoints.approve;
30
+ return request(client, method, interpolatePath(path, { orgId, id }), { body });
31
+ };
32
+ export const deny = (client, orgId, id, body = {}) => {
33
+ const { method, path } = serviceTokenRequestsEndpoints.deny;
34
+ return request(client, method, interpolatePath(path, { orgId, id }), { body });
35
+ };
36
+ export const cancel = (client, orgId, id) => {
37
+ const { method, path } = serviceTokenRequestsEndpoints.cancel;
38
+ return request(client, method, interpolatePath(path, { orgId, id }));
39
+ };
40
+ export const mint = (client, orgId, id) => {
41
+ const { method, path } = serviceTokenRequestsEndpoints.mint;
42
+ return request(client, method, interpolatePath(path, { orgId, id }));
43
+ };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Service tokens (ADR-059 §3) — org-scoped bearer tokens for CI / agent
3
+ * workloads. Each token has a name, a scope set, optional project/env
4
+ * binding, and optional IP allowlist.
5
+ *
6
+ * GET /orgs/:orgId/service-tokens?includeRevoked=
7
+ * POST /orgs/:orgId/service-tokens — returns raw token once
8
+ * GET /orgs/:orgId/service-tokens/:id — metadata only
9
+ * DELETE /orgs/:orgId/service-tokens/:id — revoke
10
+ * POST /orgs/:orgId/service-tokens/:id/rotate — issue new + revoke old
11
+ *
12
+ * The raw token value is returned ONLY at create() and rotate() time —
13
+ * the API stores a SHA-256 hash at rest (ADR-055 Rule A).
14
+ */
15
+ import type { Client } from './client.js';
16
+ export interface ServiceTokenView {
17
+ readonly id: string;
18
+ readonly orgId: string;
19
+ readonly name: string;
20
+ readonly tokenPrefix: string | null;
21
+ readonly projectId: string | null;
22
+ readonly environmentId: string | null;
23
+ readonly scopes: readonly string[] | null;
24
+ readonly ipAllowlist: readonly string[] | null;
25
+ readonly createdBy: string | null;
26
+ readonly createdAt: string;
27
+ readonly expiresAt: string | null;
28
+ readonly lastUsedAt: string | null;
29
+ readonly revokedAt: string | null;
30
+ readonly revokedBy: string | null;
31
+ readonly useCount: number;
32
+ }
33
+ export interface ListOptions {
34
+ readonly includeRevoked?: boolean;
35
+ }
36
+ export declare const list: (client: Client, orgId: string, options?: ListOptions) => Promise<{
37
+ tokens: readonly ServiceTokenView[];
38
+ }>;
39
+ export interface CreateInput {
40
+ readonly name: string;
41
+ readonly scopes: readonly string[];
42
+ readonly projectId?: string | null;
43
+ readonly environmentId?: string | null;
44
+ readonly expiresInDays?: number | null;
45
+ readonly ipAllowlist?: readonly string[] | null;
46
+ }
47
+ export interface CreateResult {
48
+ /** Raw bearer token — shown ONCE; the server only keeps a hash. */
49
+ readonly token: string;
50
+ readonly view: ServiceTokenView;
51
+ }
52
+ export declare const create: (client: Client, orgId: string, input: CreateInput) => Promise<CreateResult>;
53
+ export declare const get: (client: Client, orgId: string, tokenId: string) => Promise<{
54
+ view: ServiceTokenView;
55
+ }>;
56
+ export declare const revoke: (client: Client, orgId: string, tokenId: string) => Promise<{
57
+ view: ServiceTokenView;
58
+ }>;
59
+ export interface RotateResult {
60
+ readonly token: string;
61
+ readonly oldView: ServiceTokenView;
62
+ readonly newView: ServiceTokenView;
63
+ }
64
+ export declare const rotate: (client: Client, orgId: string, tokenId: string) => Promise<RotateResult>;
65
+ //# sourceMappingURL=serviceTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceTokens.d.ts","sourceRoot":"","sources":["../src/serviceTokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IACzC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,UAAU,WAAW,KACnB,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,CAG/C,CAAA;AAEH,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAC/B;AAED,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,WAAW,KAAG,OAAO,CAAC,YAAY,CACD,CAAA;AAE9F,eAAO,MAAM,GAAG,GACf,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,SAAS,MAAM,KACb,OAAO,CAAC;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAKnC,CAAA;AAEF,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,SAAS,MAAM,KACb,OAAO,CAAC;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAKnC,CAAA;AAEF,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;CAClC;AAED,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,YAAY,CAK1F,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Service tokens (ADR-059 §3) — org-scoped bearer tokens for CI / agent
3
+ * workloads. Each token has a name, a scope set, optional project/env
4
+ * binding, and optional IP allowlist.
5
+ *
6
+ * GET /orgs/:orgId/service-tokens?includeRevoked=
7
+ * POST /orgs/:orgId/service-tokens — returns raw token once
8
+ * GET /orgs/:orgId/service-tokens/:id — metadata only
9
+ * DELETE /orgs/:orgId/service-tokens/:id — revoke
10
+ * POST /orgs/:orgId/service-tokens/:id/rotate — issue new + revoke old
11
+ *
12
+ * The raw token value is returned ONLY at create() and rotate() time —
13
+ * the API stores a SHA-256 hash at rest (ADR-055 Rule A).
14
+ */
15
+ import { request } from './http.js';
16
+ export const list = (client, orgId, options) => request(client, 'GET', `/orgs/${encodeURIComponent(orgId)}/service-tokens`, {
17
+ query: { includeRevoked: options?.includeRevoked ? 'true' : undefined },
18
+ });
19
+ export const create = (client, orgId, input) => request(client, 'POST', `/orgs/${encodeURIComponent(orgId)}/service-tokens`, { body: input });
20
+ export const get = (client, orgId, tokenId) => request(client, 'GET', `/orgs/${encodeURIComponent(orgId)}/service-tokens/${encodeURIComponent(tokenId)}`);
21
+ export const revoke = (client, orgId, tokenId) => request(client, 'DELETE', `/orgs/${encodeURIComponent(orgId)}/service-tokens/${encodeURIComponent(tokenId)}`);
22
+ export const rotate = (client, orgId, tokenId) => request(client, 'POST', `/orgs/${encodeURIComponent(orgId)}/service-tokens/${encodeURIComponent(tokenId)}/rotate`);
@@ -0,0 +1,10 @@
1
+ /** Per-project services — list / get / deploy / delete. */
2
+ import type { Client } from './client.js';
3
+ import type { DeployResult, Service } from './types.js';
4
+ export declare const list: (client: Client, projectId: string) => Promise<Service[]>;
5
+ export declare const get: (client: Client, projectId: string, name: string) => Promise<Service>;
6
+ /** Deploy a specific service — resolves envType → environmentId first. */
7
+ export declare const deploy: (client: Client, projectId: string, name: string, envType: string) => Promise<DeployResult>;
8
+ declare const _delete: (client: Client, projectId: string, name: string) => Promise<void>;
9
+ export { _delete as delete };
10
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,IAAI,GAAU,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,EAAE,CAO/E,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAKnF,CAAA;AAEF,0EAA0E;AAC1E,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,MAAM,MAAM,EACZ,SAAS,MAAM,KACb,OAAO,CAAC,YAAY,CAQtB,CAAA;AAED,QAAA,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAK7E,CAAA;AACF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,15 @@
1
+ /** Per-project services — list / get / deploy / delete. */
2
+ import { resolveId as resolveEnvId } from './environments.js';
3
+ import { request } from './http.js';
4
+ export const list = async (client, projectId) => {
5
+ const res = await request(client, 'GET', `/projects/${encodeURIComponent(projectId)}/services`);
6
+ return Array.isArray(res) ? res : (res.data ?? []);
7
+ };
8
+ export const get = (client, projectId, name) => request(client, 'GET', `/projects/${encodeURIComponent(projectId)}/services/${encodeURIComponent(name)}`);
9
+ /** Deploy a specific service — resolves envType → environmentId first. */
10
+ export const deploy = async (client, projectId, name, envType) => {
11
+ const environmentId = await resolveEnvId(client, projectId, envType);
12
+ return request(client, 'POST', `/projects/${encodeURIComponent(projectId)}/services/${encodeURIComponent(name)}/deploy`, { body: environmentId ? { environmentId } : {} });
13
+ };
14
+ const _delete = (client, projectId, name) => request(client, 'DELETE', `/projects/${encodeURIComponent(projectId)}/services/${encodeURIComponent(name)}`);
15
+ export { _delete as delete };